@urun-sh/core 0.2.13 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ESLF63FX.mjs → chunk-DK75BVOK.mjs} +2 -2
- package/dist/{chunk-SHMKV7WG.mjs → chunk-RV6OTRCZ.mjs} +5 -5
- package/dist/index.browser.d.mts +18 -3
- package/dist/index.browser.d.ts +18 -3
- package/dist/index.browser.js +2 -2
- package/dist/index.browser.mjs +1 -1
- package/dist/index.d.mts +18 -3
- package/dist/index.d.ts +18 -3
- package/dist/index.js +5 -5
- package/dist/index.mjs +1 -1
- package/dist/internal.browser.d.mts +1 -1
- package/dist/internal.browser.d.ts +1 -1
- package/dist/internal.browser.js +2 -2
- package/dist/internal.browser.mjs +1 -1
- package/dist/internal.d.mts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +5 -5
- package/dist/internal.mjs +1 -1
- package/dist/{stream-data-GIyoXg7t.d.mts → stream-data-b249LZR2.d.mts} +1 -1
- package/dist/{stream-data-GIyoXg7t.d.ts → stream-data-b249LZR2.d.ts} +1 -1
- package/package.json +1 -1
package/dist/index.browser.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var ta=Object.create;var er=Object.defineProperty;var ra=Object.getOwnPropertyDescriptor;var sa=Object.getOwnPropertyNames;var na=Object.getPrototypeOf,ia=Object.prototype.hasOwnProperty;var k=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},oa=(s,e)=>{for(var t in e)er(s,t,{get:e[t],enumerable:!0})},gn=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of sa(e))!ia.call(s,n)&&n!==t&&er(s,n,{get:()=>e[n],enumerable:!(r=ra(e,n))||r.enumerable});return s};var Zr=(s,e,t)=>(t=s!=null?ta(na(s)):{},gn(e||!s||!s.__esModule?er(t,"default",{value:s,enumerable:!0}):t,s)),aa=s=>gn(er({},"__esModule",{value:!0}),s);var Dn=k((fu,In)=>{"use strict";var Je=1e3,Xe=Je*60,Ze=Xe*60,Ae=Ze*24,xa=Ae*7,Ia=Ae*365.25;In.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return Da(s);if(t==="number"&&isFinite(s))return e.long?La(s):Ma(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function Da(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*Ia;case"weeks":case"week":case"w":return t*xa;case"days":case"day":case"d":return t*Ae;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ze;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*Je;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Ma(s){var e=Math.abs(s);return e>=Ae?Math.round(s/Ae)+"d":e>=Ze?Math.round(s/Ze)+"h":e>=Xe?Math.round(s/Xe)+"m":e>=Je?Math.round(s/Je)+"s":s+"ms"}function La(s){var e=Math.abs(s);return e>=Ae?ar(s,e,Ae,"day"):e>=Ze?ar(s,e,Ze,"hour"):e>=Xe?ar(s,e,Xe,"minute"):e>=Je?ar(s,e,Je,"second"):s+" ms"}function ar(s,e,t,r){var n=e>=t*1.5;return Math.round(s/t)+" "+r+(n?"s":"")}});var Ln=k((gu,Mn)=>{"use strict";function Aa(s){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=n,t.enabled=a,t.humanize=Dn(),t.destroy=d,Object.keys(s).forEach(p=>{t[p]=s[p]}),t.names=[],t.skips=[],t.formatters={};function e(p){let u=0;for(let l=0;l<p.length;l++)u=(u<<5)-u+p.charCodeAt(l),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(p){let u,l=null,f,h;function m(...g){if(!m.enabled)return;let _=m,w=Number(new Date),P=w-(u||w);_.diff=P,_.prev=u,_.curr=w,u=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let I=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(D,ee)=>{if(D==="%%")return"%";I++;let Re=t.formatters[ee];if(typeof Re=="function"){let te=g[I];D=Re.call(_,te),g.splice(I,1),I--}return D}),t.formatArgs.call(_,g),(_.log||t.log).apply(_,g)}return m.namespace=p,m.useColors=t.useColors(),m.color=t.selectColor(p),m.extend=r,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>l!==null?l:(f!==t.namespaces&&(f=t.namespaces,h=t.enabled(p)),h),set:g=>{l=g}}),typeof t.init=="function"&&t.init(m),m}function r(p,u){let l=t(this.namespace+(typeof u>"u"?":":u)+p);return l.log=this.log,l}function n(p){t.save(p),t.namespaces=p,t.names=[],t.skips=[];let u=(typeof p=="string"?p:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let l of u)l[0]==="-"?t.skips.push(l.slice(1)):t.names.push(l)}function i(p,u){let l=0,f=0,h=-1,m=0;for(;l<p.length;)if(f<u.length&&(u[f]===p[l]||u[f]==="*"))u[f]==="*"?(h=f,m=l,f++):(l++,f++);else if(h!==-1)f=h+1,m++,l=m;else return!1;for(;f<u.length&&u[f]==="*";)f++;return f===u.length}function o(){let p=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),p}function a(p){for(let u of t.skips)if(i(p,u))return!1;for(let u of t.names)if(i(p,u))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}Mn.exports=Aa});var Dt=k((V,cr)=>{"use strict";V.formatArgs=Na;V.save=ja;V.load=Fa;V.useColors=Oa;V.storage=qa();V.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`."))}})();V.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 Oa(){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 Na(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+cr.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(r=t))}),s.splice(r,0,e)}V.log=console.debug||console.log||(()=>{});function ja(s){try{s?V.storage.setItem("debug",s):V.storage.removeItem("debug")}catch{}}function Fa(){let s;try{s=V.storage.getItem("debug")||V.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function qa(){try{return localStorage}catch{}}cr.exports=Ln()(V);var{formatters:Ua}=cr.exports;Ua.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var On=k(An=>{"use strict";Object.defineProperty(An,"__esModule",{value:!0})});var $=k(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.Logger=void 0;var et=Dt(),tt="media-client",ss=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,et.default)(`${tt}:${e}`),this._warn=(0,et.default)(`${tt}:WARN:${e}`),this._error=(0,et.default)(`${tt}:ERROR:${e}`)):(this._debug=(0,et.default)(tt),this._warn=(0,et.default)(`${tt}:WARN`),this._error=(0,et.default)(`${tt}: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}};dr.Logger=ss});var Hn=k((wu,ns)=>{"use strict";var rt=typeof Reflect=="object"?Reflect:null,Nn=rt&&typeof rt.apply=="function"?rt.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},pr;rt&&typeof rt.ownKeys=="function"?pr=rt.ownKeys:Object.getOwnPropertySymbols?pr=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pr=function(e){return Object.getOwnPropertyNames(e)};function $a(s){console&&console.warn&&console.warn(s)}var Fn=Number.isNaN||function(e){return e!==e};function M(){M.init.call(this)}ns.exports=M;ns.exports.once=Va;M.EventEmitter=M;M.prototype._events=void 0;M.prototype._eventsCount=0;M.prototype._maxListeners=void 0;var jn=10;function ur(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(M,"defaultMaxListeners",{enumerable:!0,get:function(){return jn},set:function(s){if(typeof s!="number"||s<0||Fn(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");jn=s}});M.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};M.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Fn(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 qn(s){return s._maxListeners===void 0?M.defaultMaxListeners:s._maxListeners}M.prototype.getMaxListeners=function(){return qn(this)};M.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Nn(c,this,t);else for(var d=c.length,p=Wn(c,d),r=0;r<d;++r)Nn(p[r],this,t);return!0};function Un(s,e,t,r){var n,i,o;if(ur(t),i=s._events,i===void 0?(i=s._events=Object.create(null),s._eventsCount=0):(i.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),i=s._events),o=i[e]),o===void 0)o=i[e]=t,++s._eventsCount;else if(typeof o=="function"?o=i[e]=r?[t,o]:[o,t]:r?o.unshift(t):o.push(t),n=qn(s),n>0&&o.length>n&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=s,a.type=e,a.count=o.length,$a(a)}return s}M.prototype.addListener=function(e,t){return Un(this,e,t,!1)};M.prototype.on=M.prototype.addListener;M.prototype.prependListener=function(e,t){return Un(this,e,t,!0)};function za(){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 $n(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},n=za.bind(r);return n.listener=t,r.wrapFn=n,n}M.prototype.once=function(e,t){return ur(t),this.on(e,$n(this,e,t)),this};M.prototype.prependOnceListener=function(e,t){return ur(t),this.prependListener(e,$n(this,e,t)),this};M.prototype.removeListener=function(e,t){var r,n,i,o,a;if(ur(t),n=this._events,n===void 0)return this;if(r=n[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;i===0?r.shift():Ba(r,i),r.length===1&&(n[e]=r[0]),n.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};M.prototype.off=M.prototype.removeListener;M.prototype.removeAllListeners=function(e){var t,r,n;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var i=Object.keys(r),o;for(n=0;n<i.length;++n)o=i[n],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function zn(s,e,t){var r=s._events;if(r===void 0)return[];var n=r[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Wa(n):Wn(n,n.length)}M.prototype.listeners=function(e){return zn(this,e,!0)};M.prototype.rawListeners=function(e){return zn(this,e,!1)};M.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Bn.call(s,e)};M.prototype.listenerCount=Bn;function Bn(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}M.prototype.eventNames=function(){return this._eventsCount>0?pr(this._events):[]};function Wn(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Ba(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function Wa(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Va(s,e){return new Promise(function(t,r){function n(o){s.removeListener(e,i),r(o)}function i(){typeof s.removeListener=="function"&&s.removeListener("error",n),t([].slice.call(arguments))}Vn(s,e,i,{once:!0}),e!=="error"&&Ha(s,n,{once:!0})})}function Ha(s,e,t){typeof s.on=="function"&&Vn(s,"error",e,t)}function Vn(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function n(i){r.once&&s.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var H=k(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.EnhancedEventEmitter=void 0;var Ga=Hn(),Ka=$(),Ya=new Ka.Logger("EnhancedEventEmitter"),is=class extends Ga.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){Ya.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)}};lr.EnhancedEventEmitter=is});var Q=k(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.InvalidStateError=st.UnsupportedError=void 0;var os=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};st.UnsupportedError=os;var as=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};st.InvalidStateError=as});var Oe=k(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.clone=Qa;Mt.generateRandomNumber=Ja;Mt.deepFreeze=Gn;function Qa(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Ja(){return Math.round(Math.random()*1e7)}function Gn(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&Gn(r)}return Object.freeze(s)}});var Kn=k(hr=>{"use strict";Object.defineProperty(hr,"__esModule",{value:!0});hr.Logger=void 0;var nt=Dt(),it="h264-profile-level-id",cs=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,nt.default)(`${it}:${e}`),this._warn=(0,nt.default)(`${it}:WARN:${e}`),this._error=(0,nt.default)(`${it}:ERROR:${e}`)):(this._debug=(0,nt.default)(it),this._warn=(0,nt.default)(`${it}:WARN`),this._error=(0,nt.default)(`${it}: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}};hr.Logger=cs});var ei=k(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.ProfileLevelId=j.Level=j.Profile=void 0;j.parseProfileLevelId=Xn;j.profileLevelIdToString=Zn;j.profileToString=tc;j.levelToString=rc;j.parseSdpProfileLevelId=Ne;j.isSameProfile=sc;j.isSameProfileAndLevel=nc;j.generateProfileLevelIdStringForAnswer=ic;j.supportedLevel=oc;var Xa=Kn(),ie=new Xa.Logger,L;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(L||(j.Profile=L={}));var v;(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"})(v||(j.Level=v={}));var ot=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};j.ProfileLevelId=ot;var Za=new ot(L.ConstrainedBaseline,v.L3_1),se=class{mask;masked_value;constructor(e){this.mask=~Qn("x",e),this.masked_value=Qn("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},ne=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},ec=[new ne(66,new se("x1xx0000"),L.ConstrainedBaseline),new ne(77,new se("1xxx0000"),L.ConstrainedBaseline),new ne(88,new se("11xx0000"),L.ConstrainedBaseline),new ne(66,new se("x0xx0000"),L.Baseline),new ne(88,new se("10xx0000"),L.Baseline),new ne(77,new se("0x0x0000"),L.Main),new ne(100,new se("00000000"),L.High),new ne(100,new se("00001100"),L.ConstrainedHigh),new ne(244,new se("00000000"),L.PredictiveHigh444)],Yn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:v.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:v.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:v.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:v.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:v.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:v.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:v.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:v.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:v.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:v.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:v.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:v.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:v.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:v.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:v.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:v.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:v.L5_2}];function Xn(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,n=t>>8&255,i=t>>16&255,o;switch(r){case v.L1_1:{o=(n&16)!==0?v.L1_b:v.L1_1;break}case v.L1:case v.L1_2:case v.L1_3:case v.L2:case v.L2_1:case v.L2_2:case v.L3:case v.L3_1:case v.L3_2:case v.L4:case v.L4_1:case v.L4_2:case v.L5:case v.L5_1:case v.L5_2:{o=r;break}default:{ie.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let a of ec)if(i===a.profile_idc&&a.profile_iop.isMatch(n))return ie.debug(`parseProfileLevelId() | result [str:${s}, profile:${a.profile}, level:${o}]`),new ot(a.profile,o);ie.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${i}, profile_iop:${n}]`)}function Zn(s){if(s.level==v.L1_b)switch(s.profile){case L.ConstrainedBaseline:return"42f00b";case L.Baseline:return"42100b";case L.Main:return"4d100b";default:{ie.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case L.ConstrainedBaseline:{e="42e0";break}case L.Baseline:{e="4200";break}case L.Main:{e="4d00";break}case L.ConstrainedHigh:{e="640c";break}case L.High:{e="6400";break}case L.PredictiveHigh444:{e="f400";break}default:{ie.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function tc(s){switch(s){case L.ConstrainedBaseline:return"ConstrainedBaseline";case L.Baseline:return"Baseline";case L.Main:return"Main";case L.ConstrainedHigh:return"ConstrainedHigh";case L.High:return"High";case L.PredictiveHigh444:return"PredictiveHigh444";default:{ie.warn(`profileToString() | unrecognized profile ${s}`);return}}}function rc(s){switch(s){case v.L1_b:return"1b";case v.L1:return"1";case v.L1_1:return"1.1";case v.L1_2:return"1.2";case v.L1_3:return"1.3";case v.L2:return"2";case v.L2_1:return"2.1";case v.L2_2:return"2.2";case v.L3:return"3";case v.L3_1:return"3.1";case v.L3_2:return"3.2";case v.L4:return"4";case v.L4_1:return"4.1";case v.L4_2:return"4.2";case v.L5:return"5";case v.L5_1:return"5.1";case v.L5_2:return"5.2";default:{ie.warn(`levelToString() | unrecognized level ${s}`);return}}}function Ne(s={}){let e=s["profile-level-id"];return e?Xn(e):Za}function sc(s={},e={}){let t=Ne(s),r=Ne(e);return!!(t&&r&&t.profile===r.profile)}function nc(s={},e={}){let t=Ne(s),r=Ne(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function ic(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){ie.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ne(s),r=Ne(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let n=Jn(s)&&Jn(e),i=t.level,o=r.level,a=cc(i,o),c=n?i:a;return ie.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Zn(new ot(t.profile,c))}function oc(s,e){for(let r=Yn.length-1;r>=0;--r){let n=Yn[r];if(n.max_macroblock_frame_size*256<=s&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return ie.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${n.level}]`),n.level}ie.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function Qn(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 ac(s,e){return s===v.L1_b?e!==v.L1&&e!==v.L1_b:e===v.L1_b?s!==v.L1:s<e}function cc(s,e){return ac(s,e)?s:e}function Jn(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var pe=k(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=hc;z.validateAndNormalizeRtpParameters=ps;z.validateAndNormalizeSctpStreamParameters=mc;z.validateSctpCapabilities=fc;z.getExtendedRtpCapabilities=gc;z.getRecvRtpCapabilities=_c;z.getSendRtpCapabilities=vc;z.getSendingRtpParameters=wc;z.getSendingRemoteRtpParameters=yc;z.reduceCodecs=bc;z.generateProbatorRtpParameters=Sc;z.canSend=Rc;z.canReceive=Cc;var ti=ei(),dc=Oe(),pc="probator",uc=1234,lc=127;function hc(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)Tc(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)kc(e)}function ps(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)Ec(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)Pc(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)xc(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),Ic(s.rtcp)}function mc(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 fc(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");Dc(s.numStreams)}function gc(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let n of s.codecs??[]){if(at(n))continue;let i=(e.codecs??[]).find(a=>ds(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:ri(n,i)};r.codecs.push(o)}else for(let n of e.codecs??[]){if(at(n))continue;let i=(s.codecs??[]).find(a=>ds(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:ri(i,n)};r.codecs.push(o)}for(let n of r.codecs){let i=s.codecs.find(a=>at(a)&&a.parameters?.apt===n.localPayloadType),o=e.codecs.find(a=>at(a)&&a.parameters?.apt===n.remotePayloadType);i&&o&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=o.preferredPayloadType)}for(let n of e.headerExtensions){let i=s.headerExtensions.find(a=>Mc(a,n));if(!i)continue;let o={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{o.direction="sendrecv";break}case"recvonly":{o.direction="sendonly";break}case"sendonly":{o.direction="recvonly";break}case"inactive":{o.direction="inactive";break}}r.headerExtensions.push(o)}return r}function _c(s){return ni({direction:"recvonly",extendedRtpCapabilities:s})}function vc(s){return ni({direction:"sendonly",extendedRtpCapabilities:s})}function wc(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function yc(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function bc(s,e){let t=[];if(!e)t.push(s[0]),at(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(ds(s[r],e,{strict:!0})){t.push(s[r]),at(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Sc(s){s=dc.clone(s),ps(s);let e={mid:pc,codecs:[],headerExtensions:[],encodings:[{ssrc:uc}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=lc,e.headerExtensions=s.headerExtensions,e}function Rc(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function Cc(s,e){if(ps(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Tc(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let n=s.parameters[r];if(n===void 0&&(s.parameters[r]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${n}]`);if(r==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)si(r)}function si(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 kc(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 Ec(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let n of Object.keys(s.parameters)){let i=s.parameters[n];if(i===void 0&&(s.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let n of s.rtcpFeedback)si(n)}function Pc(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 xc(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 Ic(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 Dc(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 ni({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let n={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),!r.remoteRtxPayloadType)continue;let i={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let n={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(n)}return t}function at(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function ds(s,e,{strict:t=!1,modify:r=!1}={}){let n=s.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let o=s.parameters["packetization-mode"]??0,a=e.parameters["packetization-mode"]??0;if(o!==a||!ti.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=ti.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 o=s.parameters["profile-id"]??0,a=e.parameters["profile-id"]??0;if(o!==a)return!1}break}}return!0}function Mc(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function ri(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===r.type&&(i.parameter===r.parameter||!i.parameter&&!r.parameter));n&&t.push(n)}return t}});var ii=k(mr=>{"use strict";Object.defineProperty(mr,"__esModule",{value:!0});mr.Logger=void 0;var ct=Dt(),dt="awaitqueue",us=class{_debug;_warn;_error;constructor(e){e?(this._debug=ct(`${dt}:${e}`),this._warn=ct(`${dt}:WARN:${e}`),this._error=ct(`${dt}:ERROR:${e}`)):(this._debug=ct(dt),this._warn=ct(`${dt}:WARN`),this._error=ct(`${dt}: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}};mr.Logger=us});var ms=k(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.AwaitQueueRemovedTaskError=pt.AwaitQueueStoppedError=void 0;var ls=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};pt.AwaitQueueStoppedError=ls;var hs=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};pt.AwaitQueueRemovedTaskError=hs});var oi=k(fr=>{"use strict";Object.defineProperty(fr,"__esModule",{value:!0});fr.AwaitQueue=void 0;var Lc=ii(),fs=ms(),_e=new Lc.Logger("AwaitQueue"),gs=class{pendingTasks=new Map;nextTaskId=0;constructor(){_e.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,_e.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let a of this.pendingTasks.values())a.name===t&&a.reject(new fs.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let o={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:a=>{if(o.completed)return;o.completed=!0,this.pendingTasks.delete(o.id),_e.debug(`resolving task [name:${o.name}]`),n(a);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(a,{canExecuteNextTask:c})=>{if(!o.completed&&(o.completed=!0,this.pendingTasks.delete(o.id),_e.debug(`rejecting task [name:${o.name}]: %s`,String(a)),i(a),c)){let[d]=this.pendingTasks.values();d&&!d.executedAt&&this.execute(d)}}};this.pendingTasks.set(o.id,o),this.pendingTasks.size===1&&this.execute(o)})}stop(){_e.debug("stop()");for(let e of this.pendingTasks.values())_e.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new fs.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){_e.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){_e.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new fs.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(_e.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})}}};fr.AwaitQueue=gs});var ci=k(ke=>{"use strict";Object.defineProperty(ke,"__esModule",{value:!0});ke.AwaitQueueRemovedTaskError=ke.AwaitQueueStoppedError=ke.AwaitQueue=void 0;var Ac=oi();Object.defineProperty(ke,"AwaitQueue",{enumerable:!0,get:function(){return Ac.AwaitQueue}});var ai=ms();Object.defineProperty(ke,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return ai.AwaitQueueStoppedError}});Object.defineProperty(ke,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return ai.AwaitQueueRemovedTaskError}})});var pi=k(gr=>{"use strict";Object.defineProperty(gr,"__esModule",{value:!0});gr.Producer=void 0;var Oc=$(),di=H(),ut=Q(),ue=new Oc.Logger("Producer"),_s=class extends di.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new di.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:o,disableTrackOnPause:a,zeroRtpOnPause:c,appData:d}){super(),ue.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=a?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=a,this._zeroRtpOnPause=c,this._appData=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||(ue.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ue.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new ut.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ue.debug("pause()"),this._closed){ue.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(ue.debug("resume()"),this._closed){ue.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(ue.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new ut.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new ut.InvalidStateError("track ended");if(e===this._track){ue.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 ut.InvalidStateError("closed");if(this._kind!=="video")throw new ut.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 ut.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ue.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{}}};gr.Producer=_s});var li=k(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.Consumer=void 0;var Nc=$(),ui=H(),jc=Q(),le=new Nc.Logger("Consumer"),vs=class extends ui.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new ui.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:o,appData:a}){super(),le.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=o,this._paused=!i.enabled,this._appData=a??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(le.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(le.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new jc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(le.debug("pause()"),this._closed){le.error("pause() | Consumer closed");return}if(this._paused){le.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(le.debug("resume()"),this._closed){le.error("resume() | Consumer closed");return}if(!this._paused){le.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){le.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{}}};_r.Consumer=vs});var mi=k(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.DataProducer=void 0;var Fc=$(),hi=H(),qc=Q(),ve=new Fc.Logger("DataProducer"),ws=class extends hi.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new hi.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),ve.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ve.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ve.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(ve.debug("send()"),this._closed)throw new qc.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ve.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"?ve.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ve.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ve.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||ve.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};vr.DataProducer=ws});var gi=k(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.DataConsumer=void 0;var Uc=$(),fi=H(),je=new Uc.Logger("DataConsumer"),ys=class extends fi.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new fi.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),je.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(je.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(je.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(je.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"?je.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):je.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(je.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)})}};wr.DataConsumer=ys});var vi=k(yr=>{"use strict";Object.defineProperty(yr,"__esModule",{value:!0});yr.Transport=void 0;var $c=ci(),zc=$(),_i=H(),N=Q(),bs=Oe(),Lt=pe(),Bc=pi(),Wc=li(),Vc=mi(),Hc=gi(),O=new zc.Logger("Transport"),Ss=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Rs=class extends _i.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 $c.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new _i.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:u,getSendExtendedRtpCapabilities:l,recvRtpCapabilities:f,canProduceByKind:h}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=l,this._recvRtpCapabilities=f,this._canProduceByKind=h,this._maxSctpMessageSize=o?.maxMessageSize;let m=bs.clone(d)??{};delete m.iceServers,delete m.iceTransportPolicy,delete m.bundlePolicy,delete m.rtcpMuxPolicy,this._handler=u.factory({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:m,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 N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(O.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,stopTracks:a=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:d=!1,onRtpSender:p,appData:u={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(u&&typeof u!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let l;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?l=void 0:r&&(l=r.map(g=>{let _={active:!0};return g.active===!1&&(_.active=!1),typeof g.dtx=="boolean"&&(_.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(_.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(_.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(_.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(_.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(_.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(_.priority=g.priority),typeof g.networkPriority=="string"&&(_.networkPriority=g.networkPriority),_}));let{localId:f,rtpParameters:h,rtpSender:m}=await this._handler.send({track:e,streamId:t,encodings:l,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:p});try{Lt.validateAndNormalizeRtpParameters(h);let{id:g}=await new Promise((w,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:h,appData:u},w,P)}),_=new Bc.Producer({id:g,localId:f,rtpSender:m,track:e,rtpParameters:h,stopTracks:a,disableTrackOnPause:c,zeroRtpOnPause:d,appData:u});return this._producers.set(_.id,_),this.handleProducer(_),this._observer.safeEmit("newproducer",_),_}catch(g){throw this._handler.stopSending(f).catch(()=>{}),g}},"transport.produce()").catch(l=>{if(a)try{e.stop()}catch{}throw l})}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,onRtpReceiver:o,appData:a={}}){if(O.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object");let c=bs.clone(n);if(!Lt.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let p=new Ss({id:e,producerId:t,kind:r,rtpParameters:c,streamId:i,onRtpReceiver:o,appData:a});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:n="",protocol:i="",appData:o={}}={}){if(O.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:a,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}});Lt.validateAndNormalizeSctpStreamParameters(c);let{id:d}=await new Promise((u,l)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:o},u,l)}),p=new Vc.DataProducer({id:d,dataChannel:a,sctpStreamParameters:c,appData:o});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:n="",protocol:i="",appData:o={}}){if(O.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let a=bs.clone(r);return Lt.validateAndNormalizeSctpStreamParameters(a),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:a,label:n,protocol:i}),d=new Hc.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:a,appData:o});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 n of e){let{id:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:d}=n.consumerOptions;r.push({trackId:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:d})}try{let n=await this._handler.receive(r);for(let i=0;i<n.length;++i){let o=e[i],a=n[i],{id:c,producerId:d,kind:p,rtpParameters:u,appData:l}=o.consumerOptions,{localId:f,rtpReceiver:h,track:m}=a,g=new Wc.Consumer({id:c,localId:f,producerId:d,rtpReceiver:h,track:m,rtpParameters:u,appData:l});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&p==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),o.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=Lt.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),O.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){O.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){O.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){O.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){O.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){O.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){O.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){O.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(O.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{O.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(O.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>O.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(n)}),e.on("@setmaxspatiallayer",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(n)}),e.on("@setrtpencodingparameters",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(n)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};yr.Transport=Rs});var br=k((Ou,yi)=>{"use strict";var wi=yi.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(wi).forEach(function(s){var e=wi[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Ri=k(we=>{"use strict";var lt=function(s){return String(Number(s))===s?Number(s):s},Gc=function(s,e,t,r){if(r&&!t)e[r]=lt(s[1]);else for(var n=0;n<t.length;n+=1)s[n+1]!=null&&(e[t[n]]=lt(s[n+1]))},Kc=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var n=s.push?{}:r?e[s.name]:e;Gc(t.match(s.reg),n,s.names,s.name),s.push&&e[s.push].push(n)},bi=br(),Yc=RegExp.prototype.test.bind(/^([a-z])=(.*)/);we.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Yc).forEach(function(n){var i=n[0],o=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var a=0;a<(bi[i]||[]).length;a+=1){var c=bi[i][a];if(c.reg.test(o))return Kc(c,r,o)}}),e.media=t,e};var Si=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=lt(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};we.parseParams=function(s){return s.split(/;\s?/).reduce(Si,{})};we.parseFmtpConfig=we.parseParams;we.parsePayloads=function(s){return s.toString().split(" ").map(Number)};we.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(lt),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};we.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Si,{})})};we.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,n=!1;return t[0]!=="~"?r=lt(t):(r=lt(t.substring(1,t.length)),n=!0),{scid:r,paused:n}})})}});var Ti=k((ju,Ci)=>{"use strict";var Cs=br(),Qc=/%[sdv%]/g,Jc=function(s){var e=1,t=arguments,r=t.length;return s.replace(Qc,function(n){if(e>=r)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},At=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[s+"="+r];if(e.names)for(var i=0;i<e.names.length;i+=1){var o=e.names[i];e.name?n.push(t[e.name][o]):n.push(t[e.names[i]])}else n.push(t[e.name]);return Jc.apply(null,n)},Xc=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Zc=["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(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||Xc,r=e.innerOrder||Zc,n=[];return t.forEach(function(i){Cs[i].forEach(function(o){o.name in s&&s[o.name]!=null?n.push(At(i,o,s)):o.push in s&&s[o.push]!=null&&s[o.push].forEach(function(a){n.push(At(i,o,a))})})}),s.media.forEach(function(i){n.push(At("m",Cs.m[0],i)),r.forEach(function(o){Cs[o].forEach(function(a){a.name in i&&i[a.name]!=null?n.push(At(o,a,i)):a.push in i&&i[a.push]!=null&&i[a.push].forEach(function(c){n.push(At(o,a,c))})})})}),n.join(`\r
|
|
1
|
+
"use strict";var sa=Object.create;var rr=Object.defineProperty;var na=Object.getOwnPropertyDescriptor;var ia=Object.getOwnPropertyNames;var oa=Object.getPrototypeOf,aa=Object.prototype.hasOwnProperty;var k=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ca=(s,e)=>{for(var t in e)rr(s,t,{get:e[t],enumerable:!0})},vn=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ia(e))!aa.call(s,n)&&n!==t&&rr(s,n,{get:()=>e[n],enumerable:!(r=na(e,n))||r.enumerable});return s};var ts=(s,e,t)=>(t=s!=null?sa(oa(s)):{},vn(e||!s||!s.__esModule?rr(t,"default",{value:s,enumerable:!0}):t,s)),da=s=>vn(rr({},"__esModule",{value:!0}),s);var Ln=k((_u,Mn)=>{"use strict";var Ze=1e3,et=Ze*60,tt=et*60,Ae=tt*24,Da=Ae*7,Ma=Ae*365.25;Mn.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return La(s);if(t==="number"&&isFinite(s))return e.long?Oa(s):Aa(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function La(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*Ma;case"weeks":case"week":case"w":return t*Da;case"days":case"day":case"d":return t*Ae;case"hours":case"hour":case"hrs":case"hr":case"h":return t*tt;case"minutes":case"minute":case"mins":case"min":case"m":return t*et;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ze;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Aa(s){var e=Math.abs(s);return e>=Ae?Math.round(s/Ae)+"d":e>=tt?Math.round(s/tt)+"h":e>=et?Math.round(s/et)+"m":e>=Ze?Math.round(s/Ze)+"s":s+"ms"}function Oa(s){var e=Math.abs(s);return e>=Ae?dr(s,e,Ae,"day"):e>=tt?dr(s,e,tt,"hour"):e>=et?dr(s,e,et,"minute"):e>=Ze?dr(s,e,Ze,"second"):s+" ms"}function dr(s,e,t,r){var n=e>=t*1.5;return Math.round(s/t)+" "+r+(n?"s":"")}});var On=k((vu,An)=>{"use strict";function Na(s){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=n,t.enabled=a,t.humanize=Ln(),t.destroy=p,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let l=0;l<d.length;l++)u=(u<<5)-u+d.charCodeAt(l),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,l=null,f,h;function m(...g){if(!m.enabled)return;let _=m,w=Number(new Date),P=w-(u||w);_.diff=P,_.prev=u,_.curr=w,u=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let I=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(D,ee)=>{if(D==="%%")return"%";I++;let Re=t.formatters[ee];if(typeof Re=="function"){let te=g[I];D=Re.call(_,te),g.splice(I,1),I--}return D}),t.formatArgs.call(_,g),(_.log||t.log).apply(_,g)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=r,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>l!==null?l:(f!==t.namespaces&&(f=t.namespaces,h=t.enabled(d)),h),set:g=>{l=g}}),typeof t.init=="function"&&t.init(m),m}function r(d,u){let l=t(this.namespace+(typeof u>"u"?":":u)+d);return l.log=this.log,l}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let l of u)l[0]==="-"?t.skips.push(l.slice(1)):t.names.push(l)}function i(d,u){let l=0,f=0,h=-1,m=0;for(;l<d.length;)if(f<u.length&&(u[f]===d[l]||u[f]==="*"))u[f]==="*"?(h=f,m=l,f++):(l++,f++);else if(h!==-1)f=h+1,m++,l=m;else return!1;for(;f<u.length&&u[f]==="*";)f++;return f===u.length}function o(){let d=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),d}function a(d){for(let u of t.skips)if(i(d,u))return!1;for(let u of t.names)if(i(d,u))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function 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}An.exports=Na});var Lt=k((V,pr)=>{"use strict";V.formatArgs=Fa;V.save=qa;V.load=Ua;V.useColors=ja;V.storage=$a();V.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`."))}})();V.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 ja(){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 Fa(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+pr.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(r=t))}),s.splice(r,0,e)}V.log=console.debug||console.log||(()=>{});function qa(s){try{s?V.storage.setItem("debug",s):V.storage.removeItem("debug")}catch{}}function Ua(){let s;try{s=V.storage.getItem("debug")||V.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function $a(){try{return localStorage}catch{}}pr.exports=On()(V);var{formatters:za}=pr.exports;za.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var jn=k(Nn=>{"use strict";Object.defineProperty(Nn,"__esModule",{value:!0})});var $=k(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});ur.Logger=void 0;var rt=Lt(),st="media-client",is=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,rt.default)(`${st}:${e}`),this._warn=(0,rt.default)(`${st}:WARN:${e}`),this._error=(0,rt.default)(`${st}:ERROR:${e}`)):(this._debug=(0,rt.default)(st),this._warn=(0,rt.default)(`${st}:WARN`),this._error=(0,rt.default)(`${st}: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}};ur.Logger=is});var Kn=k((bu,os)=>{"use strict";var nt=typeof Reflect=="object"?Reflect:null,Fn=nt&&typeof nt.apply=="function"?nt.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},lr;nt&&typeof nt.ownKeys=="function"?lr=nt.ownKeys:Object.getOwnPropertySymbols?lr=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:lr=function(e){return Object.getOwnPropertyNames(e)};function Ba(s){console&&console.warn&&console.warn(s)}var Un=Number.isNaN||function(e){return e!==e};function M(){M.init.call(this)}os.exports=M;os.exports.once=Ga;M.EventEmitter=M;M.prototype._events=void 0;M.prototype._eventsCount=0;M.prototype._maxListeners=void 0;var qn=10;function hr(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(M,"defaultMaxListeners",{enumerable:!0,get:function(){return qn},set:function(s){if(typeof s!="number"||s<0||Un(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");qn=s}});M.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};M.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Un(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 $n(s){return s._maxListeners===void 0?M.defaultMaxListeners:s._maxListeners}M.prototype.getMaxListeners=function(){return $n(this)};M.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Fn(c,this,t);else for(var p=c.length,d=Hn(c,p),r=0;r<p;++r)Fn(d[r],this,t);return!0};function zn(s,e,t,r){var n,i,o;if(hr(t),i=s._events,i===void 0?(i=s._events=Object.create(null),s._eventsCount=0):(i.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),i=s._events),o=i[e]),o===void 0)o=i[e]=t,++s._eventsCount;else if(typeof o=="function"?o=i[e]=r?[t,o]:[o,t]:r?o.unshift(t):o.push(t),n=$n(s),n>0&&o.length>n&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=s,a.type=e,a.count=o.length,Ba(a)}return s}M.prototype.addListener=function(e,t){return zn(this,e,t,!1)};M.prototype.on=M.prototype.addListener;M.prototype.prependListener=function(e,t){return zn(this,e,t,!0)};function Wa(){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 Bn(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},n=Wa.bind(r);return n.listener=t,r.wrapFn=n,n}M.prototype.once=function(e,t){return hr(t),this.on(e,Bn(this,e,t)),this};M.prototype.prependOnceListener=function(e,t){return hr(t),this.prependListener(e,Bn(this,e,t)),this};M.prototype.removeListener=function(e,t){var r,n,i,o,a;if(hr(t),n=this._events,n===void 0)return this;if(r=n[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;i===0?r.shift():Va(r,i),r.length===1&&(n[e]=r[0]),n.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};M.prototype.off=M.prototype.removeListener;M.prototype.removeAllListeners=function(e){var t,r,n;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var i=Object.keys(r),o;for(n=0;n<i.length;++n)o=i[n],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Wn(s,e,t){var r=s._events;if(r===void 0)return[];var n=r[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Ha(n):Hn(n,n.length)}M.prototype.listeners=function(e){return Wn(this,e,!0)};M.prototype.rawListeners=function(e){return Wn(this,e,!1)};M.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Vn.call(s,e)};M.prototype.listenerCount=Vn;function Vn(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}M.prototype.eventNames=function(){return this._eventsCount>0?lr(this._events):[]};function Hn(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Va(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function Ha(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Ga(s,e){return new Promise(function(t,r){function n(o){s.removeListener(e,i),r(o)}function i(){typeof s.removeListener=="function"&&s.removeListener("error",n),t([].slice.call(arguments))}Gn(s,e,i,{once:!0}),e!=="error"&&Ka(s,n,{once:!0})})}function Ka(s,e,t){typeof s.on=="function"&&Gn(s,"error",e,t)}function Gn(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function n(i){r.once&&s.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var H=k(mr=>{"use strict";Object.defineProperty(mr,"__esModule",{value:!0});mr.EnhancedEventEmitter=void 0;var Ya=Kn(),Qa=$(),Ja=new Qa.Logger("EnhancedEventEmitter"),as=class extends Ya.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){Ja.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)}};mr.EnhancedEventEmitter=as});var Q=k(it=>{"use strict";Object.defineProperty(it,"__esModule",{value:!0});it.InvalidStateError=it.UnsupportedError=void 0;var cs=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};it.UnsupportedError=cs;var ds=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};it.InvalidStateError=ds});var Oe=k(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.clone=Xa;At.generateRandomNumber=Za;At.deepFreeze=Yn;function Xa(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Za(){return Math.round(Math.random()*1e7)}function Yn(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&Yn(r)}return Object.freeze(s)}});var Qn=k(fr=>{"use strict";Object.defineProperty(fr,"__esModule",{value:!0});fr.Logger=void 0;var ot=Lt(),at="h264-profile-level-id",ps=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,ot.default)(`${at}:${e}`),this._warn=(0,ot.default)(`${at}:WARN:${e}`),this._error=(0,ot.default)(`${at}:ERROR:${e}`)):(this._debug=(0,ot.default)(at),this._warn=(0,ot.default)(`${at}:WARN`),this._error=(0,ot.default)(`${at}: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}};fr.Logger=ps});var ri=k(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.ProfileLevelId=j.Level=j.Profile=void 0;j.parseProfileLevelId=ei;j.profileLevelIdToString=ti;j.profileToString=sc;j.levelToString=nc;j.parseSdpProfileLevelId=Ne;j.isSameProfile=ic;j.isSameProfileAndLevel=oc;j.generateProfileLevelIdStringForAnswer=ac;j.supportedLevel=cc;var ec=Qn(),ie=new ec.Logger,L;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(L||(j.Profile=L={}));var v;(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"})(v||(j.Level=v={}));var ct=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};j.ProfileLevelId=ct;var tc=new ct(L.ConstrainedBaseline,v.L3_1),se=class{mask;masked_value;constructor(e){this.mask=~Xn("x",e),this.masked_value=Xn("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},ne=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},rc=[new ne(66,new se("x1xx0000"),L.ConstrainedBaseline),new ne(77,new se("1xxx0000"),L.ConstrainedBaseline),new ne(88,new se("11xx0000"),L.ConstrainedBaseline),new ne(66,new se("x0xx0000"),L.Baseline),new ne(88,new se("10xx0000"),L.Baseline),new ne(77,new se("0x0x0000"),L.Main),new ne(100,new se("00000000"),L.High),new ne(100,new se("00001100"),L.ConstrainedHigh),new ne(244,new se("00000000"),L.PredictiveHigh444)],Jn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:v.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:v.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:v.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:v.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:v.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:v.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:v.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:v.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:v.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:v.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:v.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:v.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:v.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:v.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:v.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:v.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:v.L5_2}];function ei(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,n=t>>8&255,i=t>>16&255,o;switch(r){case v.L1_1:{o=(n&16)!==0?v.L1_b:v.L1_1;break}case v.L1:case v.L1_2:case v.L1_3:case v.L2:case v.L2_1:case v.L2_2:case v.L3:case v.L3_1:case v.L3_2:case v.L4:case v.L4_1:case v.L4_2:case v.L5:case v.L5_1:case v.L5_2:{o=r;break}default:{ie.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let a of rc)if(i===a.profile_idc&&a.profile_iop.isMatch(n))return ie.debug(`parseProfileLevelId() | result [str:${s}, profile:${a.profile}, level:${o}]`),new ct(a.profile,o);ie.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${i}, profile_iop:${n}]`)}function ti(s){if(s.level==v.L1_b)switch(s.profile){case L.ConstrainedBaseline:return"42f00b";case L.Baseline:return"42100b";case L.Main:return"4d100b";default:{ie.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case L.ConstrainedBaseline:{e="42e0";break}case L.Baseline:{e="4200";break}case L.Main:{e="4d00";break}case L.ConstrainedHigh:{e="640c";break}case L.High:{e="6400";break}case L.PredictiveHigh444:{e="f400";break}default:{ie.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function sc(s){switch(s){case L.ConstrainedBaseline:return"ConstrainedBaseline";case L.Baseline:return"Baseline";case L.Main:return"Main";case L.ConstrainedHigh:return"ConstrainedHigh";case L.High:return"High";case L.PredictiveHigh444:return"PredictiveHigh444";default:{ie.warn(`profileToString() | unrecognized profile ${s}`);return}}}function nc(s){switch(s){case v.L1_b:return"1b";case v.L1:return"1";case v.L1_1:return"1.1";case v.L1_2:return"1.2";case v.L1_3:return"1.3";case v.L2:return"2";case v.L2_1:return"2.1";case v.L2_2:return"2.2";case v.L3:return"3";case v.L3_1:return"3.1";case v.L3_2:return"3.2";case v.L4:return"4";case v.L4_1:return"4.1";case v.L4_2:return"4.2";case v.L5:return"5";case v.L5_1:return"5.1";case v.L5_2:return"5.2";default:{ie.warn(`levelToString() | unrecognized level ${s}`);return}}}function Ne(s={}){let e=s["profile-level-id"];return e?ei(e):tc}function ic(s={},e={}){let t=Ne(s),r=Ne(e);return!!(t&&r&&t.profile===r.profile)}function oc(s={},e={}){let t=Ne(s),r=Ne(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function ac(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){ie.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ne(s),r=Ne(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let n=Zn(s)&&Zn(e),i=t.level,o=r.level,a=pc(i,o),c=n?i:a;return ie.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),ti(new ct(t.profile,c))}function cc(s,e){for(let r=Jn.length-1;r>=0;--r){let n=Jn[r];if(n.max_macroblock_frame_size*256<=s&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return ie.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${n.level}]`),n.level}ie.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function Xn(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 dc(s,e){return s===v.L1_b?e!==v.L1&&e!==v.L1_b:e===v.L1_b?s!==v.L1:s<e}function pc(s,e){return dc(s,e)?s:e}function Zn(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var pe=k(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=fc;z.validateAndNormalizeRtpParameters=ls;z.validateAndNormalizeSctpStreamParameters=gc;z.validateSctpCapabilities=_c;z.getExtendedRtpCapabilities=vc;z.getRecvRtpCapabilities=wc;z.getSendRtpCapabilities=yc;z.getSendingRtpParameters=bc;z.getSendingRemoteRtpParameters=Sc;z.reduceCodecs=Rc;z.generateProbatorRtpParameters=Tc;z.canSend=Cc;z.canReceive=kc;var si=ri(),uc=Oe(),lc="probator",hc=1234,mc=127;function fc(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)Ec(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)Pc(e)}function ls(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)xc(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)Ic(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)Dc(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),Mc(s.rtcp)}function gc(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 _c(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");Lc(s.numStreams)}function vc(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let n of s.codecs??[]){if(dt(n))continue;let i=(e.codecs??[]).find(a=>us(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:ni(n,i)};r.codecs.push(o)}else for(let n of e.codecs??[]){if(dt(n))continue;let i=(s.codecs??[]).find(a=>us(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:ni(i,n)};r.codecs.push(o)}for(let n of r.codecs){let i=s.codecs.find(a=>dt(a)&&a.parameters?.apt===n.localPayloadType),o=e.codecs.find(a=>dt(a)&&a.parameters?.apt===n.remotePayloadType);i&&o&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=o.preferredPayloadType)}for(let n of e.headerExtensions){let i=s.headerExtensions.find(a=>Ac(a,n));if(!i)continue;let o={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{o.direction="sendrecv";break}case"recvonly":{o.direction="sendonly";break}case"sendonly":{o.direction="recvonly";break}case"inactive":{o.direction="inactive";break}}r.headerExtensions.push(o)}return r}function wc(s){return oi({direction:"recvonly",extendedRtpCapabilities:s})}function yc(s){return oi({direction:"sendonly",extendedRtpCapabilities:s})}function bc(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function Sc(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function Rc(s,e){let t=[];if(!e)t.push(s[0]),dt(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(us(s[r],e,{strict:!0})){t.push(s[r]),dt(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Tc(s){s=uc.clone(s),ls(s);let e={mid:lc,codecs:[],headerExtensions:[],encodings:[{ssrc:hc}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=mc,e.headerExtensions=s.headerExtensions,e}function Cc(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function kc(s,e){if(ls(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Ec(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let n=s.parameters[r];if(n===void 0&&(s.parameters[r]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${n}]`);if(r==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)ii(r)}function ii(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 Pc(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 xc(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let n of Object.keys(s.parameters)){let i=s.parameters[n];if(i===void 0&&(s.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let n of s.rtcpFeedback)ii(n)}function Ic(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 Dc(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 Mc(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 Lc(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 oi({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let n={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),!r.remoteRtxPayloadType)continue;let i={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let n={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(n)}return t}function dt(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function us(s,e,{strict:t=!1,modify:r=!1}={}){let n=s.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let o=s.parameters["packetization-mode"]??0,a=e.parameters["packetization-mode"]??0;if(o!==a||!si.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=si.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 o=s.parameters["profile-id"]??0,a=e.parameters["profile-id"]??0;if(o!==a)return!1}break}}return!0}function Ac(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function ni(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===r.type&&(i.parameter===r.parameter||!i.parameter&&!r.parameter));n&&t.push(n)}return t}});var ai=k(gr=>{"use strict";Object.defineProperty(gr,"__esModule",{value:!0});gr.Logger=void 0;var pt=Lt(),ut="awaitqueue",hs=class{_debug;_warn;_error;constructor(e){e?(this._debug=pt(`${ut}:${e}`),this._warn=pt(`${ut}:WARN:${e}`),this._error=pt(`${ut}:ERROR:${e}`)):(this._debug=pt(ut),this._warn=pt(`${ut}:WARN`),this._error=pt(`${ut}: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}};gr.Logger=hs});var gs=k(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.AwaitQueueRemovedTaskError=lt.AwaitQueueStoppedError=void 0;var ms=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};lt.AwaitQueueStoppedError=ms;var fs=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};lt.AwaitQueueRemovedTaskError=fs});var ci=k(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.AwaitQueue=void 0;var Oc=ai(),_s=gs(),_e=new Oc.Logger("AwaitQueue"),vs=class{pendingTasks=new Map;nextTaskId=0;constructor(){_e.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,_e.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let a of this.pendingTasks.values())a.name===t&&a.reject(new _s.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let o={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:a=>{if(o.completed)return;o.completed=!0,this.pendingTasks.delete(o.id),_e.debug(`resolving task [name:${o.name}]`),n(a);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(a,{canExecuteNextTask:c})=>{if(!o.completed&&(o.completed=!0,this.pendingTasks.delete(o.id),_e.debug(`rejecting task [name:${o.name}]: %s`,String(a)),i(a),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(o.id,o),this.pendingTasks.size===1&&this.execute(o)})}stop(){_e.debug("stop()");for(let e of this.pendingTasks.values())_e.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new _s.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){_e.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){_e.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new _s.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(_e.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})}}};_r.AwaitQueue=vs});var pi=k(ke=>{"use strict";Object.defineProperty(ke,"__esModule",{value:!0});ke.AwaitQueueRemovedTaskError=ke.AwaitQueueStoppedError=ke.AwaitQueue=void 0;var Nc=ci();Object.defineProperty(ke,"AwaitQueue",{enumerable:!0,get:function(){return Nc.AwaitQueue}});var di=gs();Object.defineProperty(ke,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return di.AwaitQueueStoppedError}});Object.defineProperty(ke,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return di.AwaitQueueRemovedTaskError}})});var li=k(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.Producer=void 0;var jc=$(),ui=H(),ht=Q(),ue=new jc.Logger("Producer"),ws=class extends ui.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new ui.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:o,disableTrackOnPause:a,zeroRtpOnPause:c,appData:p}){super(),ue.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=a?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=a,this._zeroRtpOnPause=c,this._appData=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||(ue.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ue.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new ht.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ue.debug("pause()"),this._closed){ue.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(ue.debug("resume()"),this._closed){ue.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(ue.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new ht.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new ht.InvalidStateError("track ended");if(e===this._track){ue.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 ht.InvalidStateError("closed");if(this._kind!=="video")throw new ht.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 ht.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ue.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{}}};vr.Producer=ws});var mi=k(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.Consumer=void 0;var Fc=$(),hi=H(),qc=Q(),le=new Fc.Logger("Consumer"),ys=class extends hi.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new hi.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:o,appData:a}){super(),le.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=o,this._paused=!i.enabled,this._appData=a??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(le.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(le.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new qc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(le.debug("pause()"),this._closed){le.error("pause() | Consumer closed");return}if(this._paused){le.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(le.debug("resume()"),this._closed){le.error("resume() | Consumer closed");return}if(!this._paused){le.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){le.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{}}};wr.Consumer=ys});var gi=k(yr=>{"use strict";Object.defineProperty(yr,"__esModule",{value:!0});yr.DataProducer=void 0;var Uc=$(),fi=H(),$c=Q(),ve=new Uc.Logger("DataProducer"),bs=class extends fi.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new fi.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),ve.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ve.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ve.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(ve.debug("send()"),this._closed)throw new $c.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ve.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"?ve.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ve.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ve.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||ve.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};yr.DataProducer=bs});var vi=k(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.DataConsumer=void 0;var zc=$(),_i=H(),je=new zc.Logger("DataConsumer"),Ss=class extends _i.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new _i.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),je.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(je.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(je.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(je.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"?je.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):je.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(je.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)})}};br.DataConsumer=Ss});var yi=k(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.Transport=void 0;var Bc=pi(),Wc=$(),wi=H(),N=Q(),Rs=Oe(),Ot=pe(),Vc=li(),Hc=mi(),Gc=gi(),Kc=vi(),O=new Wc.Logger("Transport"),Ts=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Cs=class extends wi.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 Bc.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new wi.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:u,getSendExtendedRtpCapabilities:l,recvRtpCapabilities:f,canProduceByKind:h}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=l,this._recvRtpCapabilities=f,this._canProduceByKind=h,this._maxSctpMessageSize=o?.maxMessageSize;let m=Rs.clone(p)??{};delete m.iceServers,delete m.iceTransportPolicy,delete m.bundlePolicy,delete m.rtcpMuxPolicy,this._handler=u.factory({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:m,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){O.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(O.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,stopTracks:a=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:u={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(u&&typeof u!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let l;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?l=void 0:r&&(l=r.map(g=>{let _={active:!0};return g.active===!1&&(_.active=!1),typeof g.dtx=="boolean"&&(_.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(_.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(_.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(_.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(_.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(_.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(_.priority=g.priority),typeof g.networkPriority=="string"&&(_.networkPriority=g.networkPriority),_}));let{localId:f,rtpParameters:h,rtpSender:m}=await this._handler.send({track:e,streamId:t,encodings:l,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:d});try{Ot.validateAndNormalizeRtpParameters(h);let{id:g}=await new Promise((w,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:h,appData:u},w,P)}),_=new Vc.Producer({id:g,localId:f,rtpSender:m,track:e,rtpParameters:h,stopTracks:a,disableTrackOnPause:c,zeroRtpOnPause:p,appData:u});return this._producers.set(_.id,_),this.handleProducer(_),this._observer.safeEmit("newproducer",_),_}catch(g){throw this._handler.stopSending(f).catch(()=>{}),g}},"transport.produce()").catch(l=>{if(a)try{e.stop()}catch{}throw l})}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,onRtpReceiver:o,appData:a={}}){if(O.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object");let c=Rs.clone(n);if(!Ot.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new Ts({id:e,producerId:t,kind:r,rtpParameters:c,streamId:i,onRtpReceiver:o,appData:a});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:n="",protocol:i="",appData:o={}}={}){if(O.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:a,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}});Ot.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((u,l)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:o},u,l)}),d=new Gc.DataProducer({id:p,dataChannel:a,sctpStreamParameters:c,appData:o});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:n="",protocol:i="",appData:o={}}){if(O.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let a=Rs.clone(r);return Ot.validateAndNormalizeSctpStreamParameters(a),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:a,label:n,protocol:i}),p=new Kc.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:a,appData:o});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 n of e){let{id:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:p}=n.consumerOptions;r.push({trackId:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:p})}try{let n=await this._handler.receive(r);for(let i=0;i<n.length;++i){let o=e[i],a=n[i],{id:c,producerId:p,kind:d,rtpParameters:u,appData:l}=o.consumerOptions,{localId:f,rtpReceiver:h,track:m}=a,g=new Hc.Consumer({id:c,localId:f,producerId:p,rtpReceiver:h,track:m,rtpParameters:u,appData:l});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),o.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=Ot.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),O.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){O.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){O.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){O.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){O.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){O.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){O.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){O.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(O.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{O.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(O.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>O.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(n)}),e.on("@setmaxspatiallayer",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(n)}),e.on("@setrtpencodingparameters",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(n)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};Sr.Transport=Cs});var Rr=k((ju,Si)=>{"use strict";var bi=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(bi).forEach(function(s){var e=bi[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Ci=k(we=>{"use strict";var mt=function(s){return String(Number(s))===s?Number(s):s},Yc=function(s,e,t,r){if(r&&!t)e[r]=mt(s[1]);else for(var n=0;n<t.length;n+=1)s[n+1]!=null&&(e[t[n]]=mt(s[n+1]))},Qc=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var n=s.push?{}:r?e[s.name]:e;Yc(t.match(s.reg),n,s.names,s.name),s.push&&e[s.push].push(n)},Ri=Rr(),Jc=RegExp.prototype.test.bind(/^([a-z])=(.*)/);we.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Jc).forEach(function(n){var i=n[0],o=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var a=0;a<(Ri[i]||[]).length;a+=1){var c=Ri[i][a];if(c.reg.test(o))return Qc(c,r,o)}}),e.media=t,e};var Ti=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=mt(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};we.parseParams=function(s){return s.split(/;\s?/).reduce(Ti,{})};we.parseFmtpConfig=we.parseParams;we.parsePayloads=function(s){return s.toString().split(" ").map(Number)};we.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(mt),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};we.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Ti,{})})};we.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,n=!1;return t[0]!=="~"?r=mt(t):(r=mt(t.substring(1,t.length)),n=!0),{scid:r,paused:n}})})}});var Ei=k((qu,ki)=>{"use strict";var ks=Rr(),Xc=/%[sdv%]/g,Zc=function(s){var e=1,t=arguments,r=t.length;return s.replace(Xc,function(n){if(e>=r)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},Nt=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[s+"="+r];if(e.names)for(var i=0;i<e.names.length;i+=1){var o=e.names[i];e.name?n.push(t[e.name][o]):n.push(t[e.names[i]])}else n.push(t[e.name]);return Zc.apply(null,n)},ed=["v","o","s","i","u","e","p","c","b","t","r","z","a"],td=["i","c","b","a"];ki.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||ed,r=e.innerOrder||td,n=[];return t.forEach(function(i){ks[i].forEach(function(o){o.name in s&&s[o.name]!=null?n.push(Nt(i,o,s)):o.push in s&&s[o.push]!=null&&s[o.push].forEach(function(a){n.push(Nt(i,o,a))})})}),s.media.forEach(function(i){n.push(Nt("m",ks.m[0],i)),r.forEach(function(o){ks[o].forEach(function(a){a.name in i&&i[a.name]!=null?n.push(Nt(o,a,i)):a.push in i&&i[a.push]!=null&&i[a.push].forEach(function(c){n.push(Nt(o,a,c))})})})}),n.join(`\r
|
|
2
2
|
`)+`\r
|
|
3
|
-
`}});var ye=k(he=>{"use strict";var Fe=Ri(),ed=Ti(),td=br();he.grammar=td;he.write=ed;he.parse=Fe.parse;he.parseParams=Fe.parseParams;he.parseFmtpConfig=Fe.parseFmtpConfig;he.parsePayloads=Fe.parsePayloads;he.parseRemoteCandidates=Fe.parseRemoteCandidates;he.parseImageAttributes=Fe.parseImageAttributes;he.parseSimulcastStreamList=Fe.parseSimulcastStreamList});var qe=k(Ts=>{"use strict";Object.defineProperty(Ts,"__esModule",{value:!0});Ts.parse=sd;var rd=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function sd(s){let e=rd.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Pi=k(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.OfferMediaSection=Ee.AnswerMediaSection=Ee.MediaSection=void 0;var nd=ye(),ki=Oe(),Ot=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Ee.MediaSection=Ot;var ks=class extends Ot{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,offerMediaObject:o,offerRtpParameters:a,answerRtpParameters:c,codecOptions:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),o.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let p of c.codecs){let u={payload:p.payloadType,codec:Ei(p),rate:p.clockRate};p.channels>1&&(u.encoding=p.channels),this._mediaObject.rtp.push(u);let l=ki.clone(p.parameters)??{},f=ki.clone(p.rtcpFeedback)??[];if(d){let{opusStereo:m,opusFec:g,opusDtx:_,opusMaxPlaybackRate:w,opusMaxAverageBitrate:P,opusPtime:I,opusNack:E,videoGoogleStartBitrate:D,videoGoogleMaxBitrate:ee,videoGoogleMinBitrate:Re}=d,te=a.codecs.find(ae=>ae.payloadType===p.payloadType);switch(p.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{m!==void 0&&(te.parameters["sprop-stereo"]=m?1:0,l.stereo=m?1:0),g!==void 0&&(te.parameters.useinbandfec=g?1:0,l.useinbandfec=g?1:0),_!==void 0&&(te.parameters.usedtx=_?1:0,l.usedtx=_?1:0),w!==void 0&&(l.maxplaybackrate=w),P!==void 0&&(l.maxaveragebitrate=P),I!==void 0&&(te.parameters.ptime=I,l.ptime=I),E||(te.rtcpFeedback=te.rtcpFeedback.filter(ae=>ae.type!=="nack"||ae.parameter),f=f.filter(ae=>ae.type!=="nack"||ae.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{D!==void 0&&(l["x-google-start-bitrate"]=D),ee!==void 0&&(l["x-google-max-bitrate"]=ee),Re!==void 0&&(l["x-google-min-bitrate"]=Re);break}}}let h={payload:p.payloadType,config:""};for(let m of Object.keys(l))h.config&&(h.config+=";"),h.config+=`${m}=${l[m]}`;h.config&&this._mediaObject.fmtp.push(h);for(let m of f)this._mediaObject.rtcpFb.push({payload:p.payloadType,type:m.type,subtype:m.parameter})}this._mediaObject.payloads=c.codecs.map(p=>p.payloadType).join(" "),this._mediaObject.ext=[];for(let p of c.headerExtensions)(o.ext??[]).some(l=>l.uri===p.uri)&&this._mediaObject.ext.push({uri:p.uri,value:p.id});if(o.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[];for(let p of o.rids??[])p.direction==="send"&&this._mediaObject.rids.push({id:p.id,direction:"recv"})}else if(o.simulcast_03){this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let p of o.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 o.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):o.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let r=this._mediaObject.simulcast.list1,n=nd.parseSimulcastStreamList(r);for(let i of n)for(let o of i)o.paused=!t[o.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(o=>`${o.paused?"~":""}${o.scid}`).join(",")).join(";")}};Ee.AnswerMediaSection=ks;var Es=class extends Ot{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,mid:o,kind:a,offerRtpParameters:c,streamId:d,trackId:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o),this._mediaObject.type=a,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",a){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:d,appdata:p}];for(let h of c.codecs){let m={payload:h.payloadType,codec:Ei(h),rate:h.clockRate};h.channels>1&&(m.encoding=h.channels),this._mediaObject.rtp.push(m);let g={payload:h.payloadType,config:""};for(let _ of Object.keys(h.parameters??{}))g.config&&(g.config+=";"),g.config+=`${_}=${h.parameters[_]}`;g.config&&this._mediaObject.fmtp.push(g);for(let _ of h.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:h.payloadType,type:_.type,subtype:_.parameter})}this._mediaObject.payloads=c.codecs.map(h=>h.payloadType).join(" "),this._mediaObject.ext=[];for(let h of c.headerExtensions)this._mediaObject.ext.push({uri:h.uri,value:h.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let u=c.encodings[0],l=u.ssrc,f=u.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],l&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:l,attribute:"cname",value:c.rtcp.cname}),f&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:f,attribute:"cname",value:c.rtcp.cname}),l&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${l} ${f}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Ee.OfferMediaSection=Es;function Ei(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var ht=k(Cr=>{"use strict";Object.defineProperty(Cr,"__esModule",{value:!0});Cr.RemoteSdp=void 0;var id=ye(),od=$(),Sr=Pi(),ad=xs(),cd=["av1","h264"],Rr=new od.Logger("RemoteSdp"),Ps=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${ad.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 o=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[o-1].algorithm,hash:r.fingerprints[o-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){Rr.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){Rr.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){Rr.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}){let o=new Sr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}),a=o.getObject();a.rtp.find(d=>cd.includes(d.codec.toLowerCase()))||(a.ext=a.ext?.filter(d=>d.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this.replaceMediaSection(o):this.addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let o=new Sr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}),a=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);a?this.replaceMediaSection(o,a.mid):this.addMediaSection(o)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(Rr.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 Sr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this.addMediaSection(t)}receiveSctpAssociation(){let e=new Sr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application"});this.addMediaSection(e)}getSdp(){return this._sdpObject.origin.sessionVersion++,id.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};Cr.RemoteSdp=Ps});var mt=k(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.extractRtpCapabilities=dd;Ue.extractDtlsParameters=pd;Ue.getCname=ud;Ue.applyCodecParameters=ld;Ue.addHeaderExtension=hd;var xi=ye();function dd({sdpObject:s}){let e=new Map,t=new Map;for(let n of s.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let o of n.rtp){let a={kind:i,mimeType:`${i}/${o.codec}`,preferredPayloadType:o.payload,clockRate:o.rate,channels:o.encoding,parameters:{},rtcpFeedback:[]};e.set(a.preferredPayloadType,a)}for(let o of n.fmtp??[]){let a=xi.parseParams(o.config),c=e.get(o.payload);c&&(a?.hasOwnProperty("profile-level-id")&&(a["profile-level-id"]=String(a["profile-level-id"])),c.parameters=a)}for(let o of n.rtcpFb??[]){let a={type:o.type,parameter:o.subtype};if(a.parameter||delete a.parameter,o.payload!=="*"){let c=e.get(Number(o.payload));if(!c)continue;c.rtcpFeedback.push(a)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(a)}for(let o of n.ext??[]){if(o["encrypt-uri"])continue;let a={kind:i,uri:o.uri,preferredId:o.value};t.set(a.preferredId,a)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function pd({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let i=(s.media??[]).find(o=>o.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let 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 ud({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function ld({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(a=>a.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(a=>a.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let o=xi.parseParams(i.config);if(r==="audio/opus"){let a=t.parameters?.["sprop-stereo"];a!==void 0&&(o.stereo=Number(a)?1:0)}i.config="";for(let a of Object.keys(o))i.config&&(i.config+=";"),i.config+=`${a}=${o[a]}`}}function hd({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var ft=k(Tr=>{"use strict";Object.defineProperty(Tr,"__esModule",{value:!0});Tr.getRtpEncodings=md;Tr.addLegacySimulcast=fd;function md({offerMediaObject:s,codecs:e}){let t=new Set;for(let i of s.ssrcs??[]){let o=i.id;o&&t.add(o)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let i of s.ssrcGroups??[]){if(i.semantics!=="FID")continue;let o=i.ssrcs.split(/\s+/),a=Number(o[0]),c=Number(o[1]);t.has(a)&&(t.delete(a),t.delete(c),r.set(a,c))}for(let i of t)r.set(i,void 0);let n=[];for(let[i,o]of r){let a={ssrc:i};o&&e.length>1&&(a.rtx={ssrc:o}),n.push(a)}return n}function fd({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(u=>u.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,n]=t.value.split(" "),i=Number(t.id),o;(s.ssrcGroups??[]).some(u=>{if(u.semantics!=="FID")return!1;let l=u.ssrcs.split(/\s+/);return Number(l[0])===i?(o=Number(l[1]),!0):!1});let a=(s.ssrcs??[]).find(u=>u.attribute==="cname");if(!a)throw new Error("a=ssrc line with cname information not found");let c=a.value,d=[],p=[];for(let u=0;u<e;++u)d.push(i+u),o&&p.push(o+u);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let u of d)s.ssrcs.push({id:u,attribute:"cname",value:c}),s.ssrcs.push({id:u,attribute:"msid",value:`${r} ${n}`});for(let u=0;u<p.length;++u){let l=d[u],f=p[u];s.ssrcs.push({id:f,attribute:"cname",value:c}),s.ssrcs.push({id:f,attribute:"msid",value:`${r} ${n}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${l} ${f}`})}}});var gt=k(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.addNackSupportForOpus=gd;Nt.addHeaderExtensionSupport=_d;Nt.getMsidStreamIdAndTrackId=vd;function gd(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 _d(s,e){let t,r=s.headerExtensions?.find(i=>i.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let i=new Set(s.headerExtensions.map(o=>o.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(n)}function vd(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 Li=k(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.Chrome111=void 0;var me=ye(),wd=H(),yd=$(),jt=pe(),bd=Q(),Sd=qe(),Rd=ht(),Ft=mt(),Ii=ft(),Is=gt(),C=new yd.Logger("Chrome111"),Di="Chrome111",Mi={OS:65535,MIS:65535},Ds=class s extends wd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Di,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=me.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:Mi})}}static getLocalRtpCapabilities(e,t=[]){let r=Ft.extractRtpCapabilities({sdpObject:e});jt.validateAndNormalizeRtpCapabilities(r),Is.addNackSupportForOpus(r);for(let n of t)Is.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new Rd.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Di}close(){if(C.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),C.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){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 I=1;for(let E of r){let D=E.scalabilityMode?(0,Sd.parse)(E.scalabilityMode).temporalLayers:3;D>I&&(I=D)}r.forEach((E,D)=>{E.rid=`r${D}`,E.scalabilityMode=`L1T${I}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(d.sender);let p=await this._pc.createOffer(),u=me.parse(p.sdp);u.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 f=s.getLocalRtpCapabilities(u,l),h=this._getSendExtendedRtpCapabilities(f),m=jt.getSendingRtpParameters(e.kind,h);m.codecs=jt.reduceCodecs(m.codecs,o);let g=jt.getSendingRemoteRtpParameters(e.kind,h);if(g.codecs=jt.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u}),i?.absCaptureTime){let I=u.media[c.idx];Ft.addHeaderExtension({offerMediaObject:I,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:me.write(u)}}C.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let _=d.mid;m.mid=_,u=me.parse(this._pc.localDescription.sdp);let w=u.media[c.idx];if(m.rtcp.cname=Ft.getCname({offerMediaObject:w}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=Ii.getRtpEncodings({offerMediaObject:w,codecs:m.codecs});else if(r.length===1){let I=Ii.getRtpEncodings({offerMediaObject:w,codecs:m.codecs});Object.assign(I[0],r[0]),m.encodings=I}else m.encodings=r;this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:m,answerRtpParameters:g,codecOptions:n});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(_,d),{localId:_,rtpParameters:m,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 n=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Mi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=me.parse(i.sdp),a=o.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:d,rtpParameters:p,streamId:u}=a;C.debug("receive() [trackId:%s, kind:%s]",c,d);let l=p.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Is.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:l,kind:d,offerRtpParameters:p,streamId:u??f??p.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:d}=a;if(d){let p=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===p);if(!u)throw new Error("transceiver not found");d(u.receiver)}}let i=await this._pc.createAnswer(),o=me.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:d}=a,p=r.get(c),u=o.media.find(l=>String(l.mid)===p);Ft.applyCodecParameters({offerRtpParameters:d,answerMediaObject:u})}i={type:"answer",sdp:me.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,d=r.get(c),p=this._pc.getTransceivers().find(u=>u.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 n of e){C.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,d={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=me.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:me.write(f)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=me.parse(this._pc.localDescription.sdp));let r=Ft.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new bd.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')}};kr.Chrome111=Ds});var Ni=k(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.Chrome74=void 0;var J=ye(),Cd=$(),Td=H(),qt=pe(),kd=Q(),Ed=qe(),Pd=ht(),Ut=mt(),Ms=ft(),Ls=gt(),S=new Cd.Logger("Chrome74"),Ai="Chrome74",Oi={OS:1024,MIS:1024},As=class s extends Td.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ai,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=J.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Oi})}}static getLocalRtpCapabilities(e,t=[]){let r=Ut.extractRtpCapabilities({sdpObject:e});qt.validateAndNormalizeRtpCapabilities(r),Ls.addNackSupportForOpus(r);for(let n of t)Ls.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new Pd.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ai}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,D)=>{E.rid=`r${D}`});let a=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),d=await this._pc.createOffer(),p=J.parse(d.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let l=s.getLocalRtpCapabilities(p,u),f=this._getSendExtendedRtpCapabilities(l),h=qt.getSendingRtpParameters(e.kind,f);h.codecs=qt.reduceCodecs(h.codecs,o);let m=qt.getSendingRemoteRtpParameters(e.kind,f);m.codecs=qt.reduceCodecs(m.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let g=!1,_=(0,Ed.parse)((r??[{}])[0].scalabilityMode),w;r?.length===1&&_.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,p=J.parse(d.sdp),w=p.media[a.idx],Ms.addLegacySimulcast({offerMediaObject:w,numStreams:_.spatialLayers}),d={type:"offer",sdp:J.write(p)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),i?.absCaptureTime&&(w=p.media[a.idx],Ut.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:m.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:J.write(p)}),await this._pc.setLocalDescription(d);let P=c.mid;if(h.mid=P,p=J.parse(this._pc.localDescription.sdp),w=p.media[a.idx],h.rtcp.cname=Ut.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Ms.getRtpEncodings({offerMediaObject:w,codecs:h.codecs});else if(r.length===1){let E=Ms.getRtpEncodings({offerMediaObject:w,codecs:h.codecs});Object.assign(E[0],r[0]),g&&(E=[E[0]]),h.encodings=E}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 E of h.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${_.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:a.reuseMid,offerRtpParameters:h,answerRtpParameters:m,codecOptions:n});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:h,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),S.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Oi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=J.parse(i.sdp),a=o.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:d,rtpParameters:p,streamId:u}=a;S.debug("receive() [trackId:%s, kind:%s]",c,d);let l=p.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Ls.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:l,kind:d,offerRtpParameters:p,streamId:u??f??p.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),o=J.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:d}=a,p=r.get(c),u=o.media.find(l=>String(l.mid)===p);Ut.applyCodecParameters({offerRtpParameters:d,answerMediaObject:u})}i={type:"answer",sdp:J.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,d=r.get(c),p=this._pc.getTransceivers().find(u=>u.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 n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,d={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=J.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:J.write(f)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=J.parse(this._pc.localDescription.sdp));let r=Ut.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new kd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Er.Chrome74=As});var $i=k(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.Firefox120=void 0;var be=ye(),xd=H(),Id=$(),ji=Q(),$t=pe(),Dd=qe(),Md=ht(),Pr=mt(),Fi=ft(),Ld=gt(),T=new Id.Logger("Firefox120"),qi="Firefox120",Ui={OS:16,MIS:2048},Os=class s extends xd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:qi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let i=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let o=await t.createOffer();try{r.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let a=be.parse(o.sdp);return s.getLocalRtpCapabilities(a)}catch(o){try{r.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,o}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Ui})}}static getLocalRtpCapabilities(e){let t=Pr.extractRtpCapabilities({sdpObject:e});return $t.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Md.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return qi}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new ji.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((w,P)=>{w.rid=`r${P}`});let a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(a.sender);let c=await this._pc.createOffer(),d=be.parse(c.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=s.getLocalRtpCapabilities(d),u=this._getSendExtendedRtpCapabilities(p),l=$t.getSendingRtpParameters(e.kind,u);l.codecs=$t.reduceCodecs(l.codecs,i);let f=$t.getSendingRemoteRtpParameters(e.kind,u);f.codecs=$t.reduceCodecs(f.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:d});let h=(0,Dd.parse)((r??[{}])[0].scalabilityMode);T.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let m=a.mid;l.mid=m,d=be.parse(this._pc.localDescription.sdp);let g=d.media[d.media.length-1];if(l.rtcp.cname=Pr.getCname({offerMediaObject:g}),l.msid=`${t??this._sendStream.id} ${e.id}`,!r)l.encodings=Fi.getRtpEncodings({offerMediaObject:g,codecs:l.codecs});else if(r.length===1){let w=Fi.getRtpEncodings({offerMediaObject:g,codecs:l.codecs});Object.assign(w[0],r[0]),l.encodings=w}else l.encodings=r;if(l.encodings.length>1&&(l.codecs[0].mimeType.toLowerCase()==="video/vp8"||l.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let w of l.encodings)w.scalabilityMode?w.scalabilityMode=`L1T${h.temporalLayers}`:w.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:l,answerRtpParameters:f,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(m,a),{localId:m,rtpParameters:l,rtpSender:a.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ui.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=be.parse(i.sdp),a=o.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:d,rtpParameters:p,streamId:u}=a;T.debug("receive() [trackId:%s, kind:%s]",c,d);let l=p.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Ld.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:l,kind:d,offerRtpParameters:p,streamId:u??f??p.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:d}=a;if(d){let p=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===p);if(!u)throw new Error("transceiver not found");d(u.receiver)}}let i=await this._pc.createAnswer(),o=be.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:d}=a,p=r.get(c),u=o.media.find(l=>String(l.mid)===p);Pr.applyCodecParameters({offerRtpParameters:d,answerMediaObject:u}),i={type:"answer",sdp:be.write(o)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,d=r.get(c),p=this._pc.getTransceivers().find(u=>u.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 n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,d={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=be.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f}),l={type:"answer",sdp:be.write(f)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=be.parse(this._pc.localDescription.sdp));let r=Pr.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new ji.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')}};xr.Firefox120=Os});var Vi=k(Ir=>{"use strict";Object.defineProperty(Ir,"__esModule",{value:!0});Ir.Safari12=void 0;var X=ye(),Ad=H(),Od=$(),zt=pe(),Nd=Q(),jd=qe(),Fd=ht(),Bt=mt(),zi=ft(),Ns=gt(),R=new Od.Logger("Safari12"),Bi="Safari12",Wi={OS:65535,MIS:65535},js=class s extends Ad.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Bi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=X.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Wi})}}static getLocalRtpCapabilities(e,t=[]){let r=Bt.extractRtpCapabilities({sdpObject:e});zt.validateAndNormalizeRtpCapabilities(r),Ns.addNackSupportForOpus(r);for(let n of t)Ns.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Fd.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",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):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Bi}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),R.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]});a&&a(d.sender);let p=await this._pc.createOffer(),u=X.parse(p.sdp);u.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 f=s.getLocalRtpCapabilities(u,l),h=this._getSendExtendedRtpCapabilities(f),m=zt.getSendingRtpParameters(e.kind,h);m.codecs=zt.reduceCodecs(m.codecs,o);let g=zt.getSendingRemoteRtpParameters(e.kind,h);g.codecs=zt.reduceCodecs(g.codecs,o);let _;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let w=(0,jd.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(R.debug("send() | enabling legacy simulcast"),u=X.parse(p.sdp),_=u.media[c.idx],zi.addLegacySimulcast({offerMediaObject:_,numStreams:r.length}),p={type:"offer",sdp:X.write(u)}),i?.absCaptureTime&&(_=u.media[c.idx],Bt.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:X.write(u)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let P=d.mid;if(m.mid=P,u=X.parse(this._pc.localDescription.sdp),_=u.media[c.idx],m.rtcp.cname=Bt.getCname({offerMediaObject:_}),m.msid=`${t??this._sendStream.id} ${e.id}`,m.encodings=zi.getRtpEncodings({offerMediaObject:_,codecs:m.codecs}),r)for(let E=0;E<m.encodings.length;++E)r[E]&&Object.assign(m.encodings[E],r[E]);if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of m.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${w.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,reuseMid:c.reuseMid,offerRtpParameters:m,answerRtpParameters:g,codecOptions:n});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(P,d),{localId:P,rtpParameters:m,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;R.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Wi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=X.parse(i.sdp),a=o.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:d,rtpParameters:p,streamId:u}=a;R.debug("receive() [trackId:%s, kind:%s]",c,d);let l=p.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Ns.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:l,kind:d,offerRtpParameters:p,streamId:u??f??p.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:d}=a;if(d){let p=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===p);if(!u)throw new Error("transceiver not found");d(u.receiver)}}let i=await this._pc.createAnswer(),o=X.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:d}=a,p=r.get(c),u=o.media.find(l=>String(l.mid)===p);Bt.applyCodecParameters({offerRtpParameters:d,answerMediaObject:u})}i={type:"answer",sdp:X.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,d=r.get(c),p=this._pc.getTransceivers().find(u=>u.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 n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,d={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=X.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:X.write(f)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=X.parse(this._pc.localDescription.sdp));let r=Bt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Nd.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')}};Ir.Safari12=js});var Ki=k(Dr=>{"use strict";Object.defineProperty(Dr,"__esModule",{value:!0});Dr.ReactNative106=void 0;var Z=ye(),qd=H(),Ud=$(),Wt=pe(),$d=Q(),zd=qe(),Bd=ht(),Vt=mt(),Fs=ft(),qs=gt(),b=new Ud.Logger("ReactNative106"),Hi="ReactNative106",Gi={OS:65535,MIS:65535},Us=class s extends qd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Hi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:Gi})}}static getLocalRtpCapabilities(e,t=[]){let r=Vt.extractRtpCapabilities({sdpObject:e});Wt.validateAndNormalizeRtpCapabilities(r),qs.addNackSupportForOpus(r);for(let n of t)qs.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new Bd.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Hi}close(){if(b.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender: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((D,ee)=>{D.rid=`r${ee}`});let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(d.sender);let p=await this._pc.createOffer(),u=Z.parse(p.sdp);u.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 f=s.getLocalRtpCapabilities(u,l),h=this._getSendExtendedRtpCapabilities(f),m=Wt.getSendingRtpParameters(e.kind,h);m.codecs=Wt.reduceCodecs(m.codecs,o);let g=Wt.getSendingRemoteRtpParameters(e.kind,h);g.codecs=Wt.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let _=!1,w=(0,zd.parse)((r??[{}])[0].scalabilityMode),P;r?.length===1&&w.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,u=Z.parse(p.sdp),P=u.media[c.idx],Fs.addLegacySimulcast({offerMediaObject:P,numStreams:w.spatialLayers}),p={type:"offer",sdp:Z.write(u)}),i?.absCaptureTime&&(P=u.media[c.idx],Vt.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(D=>D.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Z.write(u)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let I=d.mid??void 0;if(I||b.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),m.mid=I,u=Z.parse(this._pc.localDescription.sdp),P=u.media[c.idx],m.rtcp.cname=Vt.getCname({offerMediaObject:P}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=Fs.getRtpEncodings({offerMediaObject:P,codecs:m.codecs});else if(r.length===1){let D=Fs.getRtpEncodings({offerMediaObject:P,codecs:m.codecs});Object.assign(D[0],r[0]),_&&(D=[D[0]]),m.encodings=D}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 D of m.encodings)D.scalabilityMode?D.scalabilityMode=`L1T${w.temporalLayers}`:D.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:m,answerRtpParameters:g,codecOptions:n});let E={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",E),await this._pc.setRemoteDescription(E),I||(I=d.mid,m.mid=I),this._mapMidTransceiver.set(I,d),{localId:I,rtpParameters:m,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;b.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Gi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=Z.parse(i.sdp),a=o.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:d,rtpParameters:p,streamId:u}=a;b.debug("receive() [trackId:%s, kind:%s]",c,d);let l=p.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=qs.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:l,kind:d,offerRtpParameters:p,streamId:u??f??p.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:d}=a;if(d){let p=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===p);if(!u)throw new Error("transceiver not found");d(u.receiver)}}let i=await this._pc.createAnswer(),o=Z.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:d}=a,p=r.get(c),u=o.media.find(l=>String(l.mid)===p);Vt.applyCodecParameters({offerRtpParameters:d,answerMediaObject:u})}i={type:"answer",sdp:Z.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,d=r.get(c),p=this._pc.getTransceivers().find(u=>u.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 n of e){b.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){b.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){b.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,d={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};b.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=Z.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:Z.write(f)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Z.parse(this._pc.localDescription.sdp));let r=Vt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new $d.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Dr.ReactNative106=Us});var Xi=k(_t=>{"use strict";Object.defineProperty(_t,"__esModule",{value:!0});_t.Device=void 0;_t.detectDevice=Yi;_t.detectDeviceAsync=Qi;var Wd=$(),Vd=H(),Pe=Q(),Mr=Oe(),G=pe(),Hd=vi(),Gd=Li(),Kd=Ni(),Yd=$i(),Qd=Vi(),Jd=Ki(),y=new Wd.Logger("Device");function Yi(s,e){return y.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ji(s,e)}async function Qi(s,e){return y.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ji(s,e)}var $s=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Vd.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(y.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Qi(),!e))throw new Pe.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(y.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)y.debug("constructor() | handler given: %s",e);else if(e=Yi(),e)y.debug("constructor() | detected handler: %s",e);else throw new Pe.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Gd.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Kd.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Yd.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Qd.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Jd.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 Pe.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new Pe.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new Pe.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(y.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new Pe.InvalidStateError("already loaded");let r=Mr.clone(e);G.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,o=Mr.clone(await n({direction:"recvonly"}));y.debug("load() | got native receiving RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o);let a=Mr.clone(await n({direction:"sendonly"}));y.debug("load() | got native sending RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a),this._getSendExtendedRtpCapabilities=p=>Mr.clone(G.getExtendedRtpCapabilities(p,r,t));let c=G.getExtendedRtpCapabilities(o,r,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),y.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let d=G.getExtendedRtpCapabilities(a,r,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(d),y.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=G.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=G.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),G.validateSctpCapabilities(this._sctpCapabilities),y.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),y.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new Pe.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:d}){return y.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:d}){return y.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,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(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(o&&typeof o!="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 Pe.InvalidStateError("not loaded");let u=new Hd.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}};_t.Device=$s;function Ji(s,e){y.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=Xd(s,e);if(t){if(t>=111)return y.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return y.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";y.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=Zd(s);if(r){if(r>=120)return y.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";y.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=ep(s);if(n){if(n>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=tp(s);if(i){if(i>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Ht()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return y.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";y.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}y.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function Xd(s,e){if(y.debug("getChromiumMajorVersion()"),Lr(s,e)){y.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Ht()){y.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return y.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}y.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Zd(s){if(y.debug("getFirefoxMajorVersion()"),Lr(s)){y.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Ht()){y.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}y.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function ep(s){if(y.debug("getMacOSWebKitMajorVersion()"),Lr(s)){y.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Ht()){y.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){y.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}y.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function tp(s){if(y.debug("getIOSWebKitMajorVersion()"),!Lr(s)){y.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Ht()){y.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}y.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Lr(s,e){return y.debug("isIOS()"),e?.platform==="iOS"?(y.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(y.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(y.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(y.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(y.debug("isIOS() | this is not iOS => false"),!1)}function Ht(){return y.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(y.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(y.debug("isReactNative() | this is not React-Native => false"),!1)}});var eo=k(Zi=>{"use strict";var $e=256,Or=[],Ar;for(;$e--;)Or[$e]=($e+256).toString(16).substring(1);function rp(){var s=0,e,t="";if(!Ar||$e+16>256){for(Ar=Array(s=256);s--;)Ar[s]=256*Math.random()|0;s=$e=0}for(;s<16;s++)e=Ar[$e+s],s==6?t+=Or[e&15|64]:s==8?t+=Or[e&63|128]:t+=Or[e],s&1&&s>1&&s<11&&(t+="-");return $e++,t}Zi.v4=rp});var to=k(Nr=>{"use strict";Object.defineProperty(Nr,"__esModule",{value:!0});Nr.FakeEventTarget=void 0;var zs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Nr.FakeEventTarget=zs});var ro=k(jr=>{"use strict";Object.defineProperty(jr,"__esModule",{value:!0});jr.FakeEvent=void 0;var Bs=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};jr.FakeEvent=Bs});var so=k(Ws=>{"use strict";Object.defineProperty(Ws,"__esModule",{value:!0});Ws.clone=sp;function sp(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var io=k(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.FakeMediaStreamTrack=void 0;var no=eo(),np=to(),vt=ro(),Fr=so(),Vs=class s extends np.FakeEventTarget{#f;#u;#l;#e;#r;#t;#s;#h;#n;#m;#i;#o=null;#a=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:n,enabled:i,muted:o,readyState:a,capabilities:c,constraints:d,settings:p,data:u}){super(),this.#f=t??(0,no.v4)(),this.#u=e,this.#l=r??"",this.#s=n??"",this.#r=i??!0,this.#t=o??!1,this.#e=a??"live",this.#h=c??{},this.#n=d??{},this.#m=p??{},this.#i=u??{}}get id(){return this.#f}get kind(){return this.#u}get label(){return this.#l}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 vt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#o}set onmute(e){this.#o&&this.removeEventListener("mute",this.#o),this.#o=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#a}set onunmute(e){this.#a&&this.removeEventListener("unmute",this.#a),this.#a=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#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 vt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,no.v4)(),kind:this.#u,label:this.#l,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,Fr.clone)(this.#h),constraints:(0,Fr.clone)(this.#n),settings:(0,Fr.clone)(this.#m),data:t??(0,Fr.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#m}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new vt.FakeEvent("stopped")),this.dispatchEvent(new vt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new vt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new vt.FakeEvent("unmute")))}};qr.FakeMediaStreamTrack=Vs});var oo=k(Ur=>{"use strict";Object.defineProperty(Ur,"__esModule",{value:!0});Ur.FakeEventTarget=void 0;var Hs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Ur.FakeEventTarget=Hs});var po=k(zr=>{"use strict";Object.defineProperty(zr,"__esModule",{value:!0});zr.FakeHandler=void 0;var ip=io(),op=H(),ap=$(),wt=Oe(),Gs=pe(),co=Q(),cp=oo(),F=new ap.Logger("FakeHandler"),ao="FakeHandler",Ks=class s extends op.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${wt.generateRandomNumber()}`;_defaultSendStreamId=`${wt.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:ao,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(F.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(F.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Gs.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),F.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return ao}close(){F.debug("close()"),!this._closed&&(this._closed=!0,super.close())}setIceGatheringState(e){this.emit("@icegatheringstatechange",e)}setConnectionState(e){this.emit("@connectionstatechange",e)}async updateIceServers(e){this.assertNotClosed(),F.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),F.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i}){this.assertNotClosed(),F.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let o=s.getLocalRtpCapabilities(this._fakeParameters),a=this._getSendExtendedRtpCapabilities(o),c=Gs.getSendingRtpParameters(e.kind,a);c.codecs=Gs.reduceCodecs(c.codecs,i);let d=c.codecs.some(u=>/.+\/rtx$/i.test(u.mimeType));c.mid=`mid-${wt.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let u of r)u.ssrc=wt.generateRandomNumber(),d&&(u.rtx={ssrc:wt.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(F.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new Error("local track not found");this._tracks.delete(Number(e))}}async pauseSending(e){this.assertNotClosed()}async resumeSending(e){this.assertNotClosed()}async replaceTrack(e,t){this.assertNotClosed(),t?F.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):F.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),F.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),F.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),F.debug("sendDataChannel()");let t=new $r({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:n,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),F.debug("receive() [trackId:%s, kind:%s]",n,i);let o=this._nextLocalId++,a=new ip.FakeMediaStreamTrack({kind:i});this._tracks.set(o,a),t.push({localId:String(o),track:a})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)F.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),F.debug("receiveDataChannel()"),{dataChannel:new $r({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=wt.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:r},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new co.InvalidStateError("method called in a closed handler")}};zr.FakeHandler=Ks;var $r=class extends cp.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:n=null,label:i="",protocol:o=""}){super(),F.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${n}, label:${i}, protocol:${o}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=n,this._label=i,this._protocol=o}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,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 co.InvalidStateError("not open")}}});var uo=k(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.generateRouterRtpCapabilities=dp;oe.generateNativeRtpCapabilities=pp;oe.generateNativeSctpCapabilities=up;oe.generateLocalDtlsParameters=lp;oe.generateTransportRemoteParameters=hp;oe.generateProducerRemoteParameters=mp;oe.generateConsumerRemoteParameters=fp;oe.generateDataProducerRemoteParameters=gp;oe.generateDataConsumerRemoteParameters=_p;var B=Oe();function K(){return String(B.generateRandomNumber())}function dp(){return B.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function pp(){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 up(){return B.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function lp(){return B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})}function hp(){return{id:K(),iceParameters:B.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:B.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:B.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function mp(){return B.deepFreeze({id:K()})}function fp({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function gp(){return B.deepFreeze({id:K()})}function _p({id:s}={}){return{id:s??K(),dataProducerId:K(),sctpStreamParameters:B.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var xs=k(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.debug=A.testFakeParameters=A.FakeHandler=A.enhancedEvents=A.ortc=A.parseScalabilityMode=A.detectDeviceAsync=A.detectDevice=A.Device=A.version=A.types=void 0;var vp=Dt();A.debug=vp.default;A.types=On();A.version="3.20.0";var Ys=Xi();Object.defineProperty(A,"Device",{enumerable:!0,get:function(){return Ys.Device}});Object.defineProperty(A,"detectDevice",{enumerable:!0,get:function(){return Ys.detectDevice}});Object.defineProperty(A,"detectDeviceAsync",{enumerable:!0,get:function(){return Ys.detectDeviceAsync}});var wp=qe();Object.defineProperty(A,"parseScalabilityMode",{enumerable:!0,get:function(){return wp.parse}});A.ortc=pe();A.enhancedEvents=H();var yp=po();Object.defineProperty(A,"FakeHandler",{enumerable:!0,get:function(){return yp.FakeHandler}});A.testFakeParameters=uo()});var ho=k((ol,Qs)=>{"use strict";var bp=Object.prototype.hasOwnProperty,W="~";function Gt(){}Object.create&&(Gt.prototype=Object.create(null),new Gt().__proto__||(W=!1));function Sp(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function lo(s,e,t,r,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new Sp(t,r||s,n),o=W?W+e:e;return s._events[o]?s._events[o].fn?s._events[o]=[s._events[o],i]:s._events[o].push(i):(s._events[o]=i,s._eventsCount++),s}function Br(s,e){--s._eventsCount===0?s._events=new Gt:delete s._events[e]}function q(){this._events=new Gt,this._eventsCount=0}q.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)bp.call(t,r)&&e.push(W?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};q.prototype.listeners=function(e){var t=W?W+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,i=r.length,o=new Array(i);n<i;n++)o[n]=r[n].fn;return o};q.prototype.listenerCount=function(e){var t=W?W+e:e,r=this._events[t];return r?r.fn?1:r.length:0};q.prototype.emit=function(e,t,r,n,i,o){var a=W?W+e:e;if(!this._events[a])return!1;var c=this._events[a],d=arguments.length,p,u;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,n),!0;case 5:return c.fn.call(c.context,t,r,n,i),!0;case 6:return c.fn.call(c.context,t,r,n,i,o),!0}for(u=1,p=new Array(d-1);u<d;u++)p[u-1]=arguments[u];c.fn.apply(c.context,p)}else{var l=c.length,f;for(u=0;u<l;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),d){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,r);break;case 4:c[u].fn.call(c[u].context,t,r,n);break;default:if(!p)for(f=1,p=new Array(d-1);f<d;f++)p[f-1]=arguments[f];c[u].fn.apply(c[u].context,p)}}return!0};q.prototype.on=function(e,t,r){return lo(this,e,t,r,!1)};q.prototype.once=function(e,t,r){return lo(this,e,t,r,!0)};q.prototype.removeListener=function(e,t,r,n){var i=W?W+e:e;if(!this._events[i])return this;if(!t)return Br(this,i),this;var o=this._events[i];if(o.fn)o.fn===t&&(!n||o.once)&&(!r||o.context===r)&&Br(this,i);else{for(var a=0,c=[],d=o.length;a<d;a++)(o[a].fn!==t||n&&!o[a].once||r&&o[a].context!==r)&&c.push(o[a]);c.length?this._events[i]=c.length===1?c[0]:c:Br(this,i)}return this};q.prototype.removeAllListeners=function(e){var t;return e?(t=W?W+e:e,this._events[t]&&Br(this,t)):(this._events=new Gt,this._eventsCount=0),this};q.prototype.off=q.prototype.removeListener;q.prototype.addListener=q.prototype.on;q.prefixed=W;q.EventEmitter=q;typeof Qs<"u"&&(Qs.exports=q)});var su={};oa(su,{ACTIVITY_DOM_EVENTS:()=>Kr,ACTIVITY_FIELD:()=>nn,ACTIVITY_STAMP_MIN_INTERVAL_MS:()=>jo,App:()=>zo,CaptureController:()=>Xt,CaptureUnavailableError:()=>Jt,DEFAULT_DOC_SYNC_TIMEOUT_MS:()=>dn,DEFAULT_WHEN_LIVE_TIMEOUT_MS:()=>ts,FOREGROUND_COALESCE_MS:()=>Fo,INPUT_PRESENCE_DEFAULT_HZ:()=>Qo,INPUT_PRESENCE_FIELD:()=>ln,InvalidDurationError:()=>Me,PermanentLockedError:()=>It,PinRequiresActiveTempError:()=>xt,RecordingNotFoundError:()=>Et,RecordingsClient:()=>Le,RecordingsError:()=>Y,RecordingsUnauthorizedError:()=>Qe,RequestAbortError:()=>Ie,RequestCancelledError:()=>Ye,RequestDocSyncError:()=>Ge,RequestError:()=>re,RequestTimeoutError:()=>He,RetainNotTempError:()=>Pt,RuntimeArtifactNotFoundError:()=>Tt,RuntimeArtifactsClient:()=>Te,RuntimeArtifactsError:()=>U,RuntimeArtifactsUnauthorizedError:()=>Ct,Session:()=>Rt,SessionAllocationError:()=>de,SessionFailedError:()=>ce,StreamDirectionConflict:()=>Ke,createActivityTracker:()=>Yr,createInputPresencePublisher:()=>Jo,createRecordingsClient:()=>xn,createRuntimeArtifactsClient:()=>En,createStore:()=>Vo,describeSessionFailure:()=>es,describeSessionPhase:()=>vn,isDurationString:()=>or,isPendingRecording:()=>Go,isWakingPhase:()=>tr,mediaRecorderChunkSource:()=>Jr,normalizeRetention:()=>Pn,observePageLifecycle:()=>Qr,prewake:()=>Rn,sessionFailureFromMediaError:()=>_n,sharedCaptureController:()=>Yo,videoStream:()=>Ho,whenLive:()=>rr});module.exports=aa(su);var We=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let n=this._handlers.get(r.channel);if(n)for(let i of n)i(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},Ve=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(r,i));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[o,a]of this._handlers)i.set(o.startsWith(r)?n+o.slice(r.length):o,a);this._handlers=i,this._pendingSends=this._pendingSends.map(o=>({...o,channel:o.channel.startsWith(r)?n+o.channel.slice(r.length):o.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};var re=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},He=class extends re{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Ge=class extends re{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Ke=class extends Error{stream;owner;attempted;constructor(e,t,r){super(`[urun] stream "${e}" is already produced by the ${t}; this (${r}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=r,Object.setPrototypeOf(this,new.target.prototype)}},Ie=class extends re{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},Ye=class extends re{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function es(s,e){let t=e.error?.reason,r=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(s){case"create-failed":return{message:`[urun] session create failed${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""}${t?`: ${t}`:""}`,hint:e.error?.httpStatus===401||e.error?.httpStatus===403?"The backend rejected this client \u2014 sign in again or check the auth token / org access.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."};case"never-live":{let n=r!==void 0?` after ${r}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"ended":return{message:`[urun] session ended before going live${e.sessionId?` (id ${e.sessionId})`:""}`,hint:"The session was closed (server-side, or superseded by another connection). Start a new session."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs, then start a new session."};case"expired":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} ended \u2014 ${t??"it reached its maximum length"}`,hint:"The session reached its end. Start a new session to continue."}}}var ce=class extends Error{kind;status;hint;constructor(e,t,r){let{message:n,hint:i}=es(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,r?.cause!==void 0&&(this.cause=r.cause),Object.setPrototypeOf(this,new.target.prototype)}};function _n(s,e){if(s instanceof ce)return s;let t=s instanceof Error?s:new Error(String(s)),r={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ce("media-permission",r,{cause:s})}var de=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function tr(s){if(!s)return!1;let e=typeof s=="string"?s:s.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var ts=45e3;function rr(s,e={}){let{timeout:t=ts,signal:r}=e;return new Promise((n,i)=>{if(r?.aborted){i(r.reason instanceof Error?r.reason:new Error("whenLive aborted"));return}if(s.phase?.name==="live"){n();return}let o=s.phase?.name;if(o==="error"||o==="ended"||o==="expired"){let h=s.phase,m=s.status??{phase:h.name,transportState:"disconnected",sessionId:h.sessionId,requestId:h.requestId,queue:h.queue,error:h.error};i(new ce(o==="ended"?"ended":o==="expired"?"expired":h.error?.kind??"transport-failed",m));return}let a,c,d=!1,p=h=>{d||(d=!0,c!==void 0&&clearTimeout(c),r?.removeEventListener("abort",u),a?.(),h?i(h):n())},u=()=>{p(r?.reason instanceof Error?r.reason:new Error("whenLive aborted"))};r?.addEventListener("abort",u,{once:!0});let l=()=>{let h=s.phase;return s.status??{phase:h?.name??"idle",transportState:"disconnected",sessionId:h?.sessionId,requestId:h?.requestId,queue:h?.queue,error:h?.error}},f=h=>p(new ce(h,l()));t>0&&(c=setTimeout(()=>{let h=l();h.elapsedMs===void 0&&(h.elapsedMs=t),p(new ce("never-live",h))},t)),a=s.onPhase(h=>{h?.name==="live"?p():h?.name==="error"?f(h.error?.kind??"transport-failed"):h?.name==="ended"?f("ended"):h?.name==="expired"&&f("expired")}),d&&a()})}function vn(s){switch(s.name){case"idle":return"Initializing\u2026";case"unavailable":return s.runtime?.reason?`Runtime unavailable \u2014 ${s.runtime.reason}`:"Runtime unavailable";case"queued":return s.queue?`Waiting in queue (position ${s.queue.position} of ${s.queue.depth})\u2026`:s.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return s.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return s.error?.reason?`Session failed \u2014 ${s.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var ca="session-api.prod.cloud.urun.sh",da=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function fe(s){return s.trim().replace(/\/+$/,"")}function ir(s,e){let t=[],r=n=>{if(!n)return;let i=fe(n);i&&!t.includes(i)&&t.push(i)};r(s);for(let n of e??[])r(n);for(let n of Ra(s))r(n);return t}function wn(s){if(typeof s!="string"||s.length===0)return null;let e=new Date(s);return Number.isFinite(e.getTime())?e:null}var pa=120,ua=1e3,la=20,ha=5,ma=500,yn=1e4,fa=3;function ga(s){if(!s)return null;try{let e=new URL(s),t=e.pathname.replace(/\/api\/sessions\/create\/?$/,"");return fe(`${e.origin}${t}`)}catch{return null}}async function bn(s){let e=ir(s.baseUrl,s.fallbackUrls),t=null,r=e.length>1;for(let n of e)try{return await _a(n,s,{pollAttempts:pa,retryAfterLimitMs:r?ua:void 0})}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof De)throw t}throw t??new Error("[urun] session allocation failed")}async function _a(s,e,t){let r,n,i,o=s,a=0,c=new Set,d=Date.now()+t.pollAttempts*yn;for(let p=0;p<t.pollAttempts;p++){n=i??await nr(e),i=void 0;let u=Math.max(1,Math.min(la,Math.floor((d-Date.now())/1e3))),l=!!r,f=Date.now(),h=r?await fetch(`${o}/api/session-requests/${encodeURIComponent(r)}?wait_s=${u}`,{headers:sr(e,n),signal:Sa((u+ha)*1e3)}):await fetch(`${o}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...sr(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(va(e))});if(!r&&(h.status===307||h.status===308)){let w=ga(h.headers.get("location"));if(w&&w!==o&&a<fa){a+=1,o=w;continue}throw new de(`[urun] session create redirected from ${o} without a usable target`,{httpStatus:h.status})}let m=await rs(h);if(h.ok&&(m.status==="allocated"||!m.status&&!!m.session_id)&&!!m.session_id){let w=m.session_id;if(!m.ws_url)throw new De(`[urun] gateway allocated session ${w} without ws_url`);if(!Cn(m.ws_url))throw new De(`[urun] gateway allocated session ${w} with non-absolute ws_url`);return{baseUrl:o,sessionId:w,wsUrl:m.ws_url,endsAt:wn(m.ends_at),response:m}}if(h.status===202||m.status==="pending"||m.status==="queued"||m.queued){if(r=m.request_id||r,!r)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(wa(m,r))}catch{}let w=Date.now()-f<ma;l&&w&&await ba(ya(h,m,t.retryAfterLimitMs));continue}if((h.status===401||h.status===403)&&e.getAccessToken){let w=n??"";c.add(w);let P=await nr(e,{forceRefresh:!0,reason:"unauthorized"});if(P&&!c.has(P)){i=P,r=void 0;continue}}let _=m.error_message||m.error_code||`HTTP ${h.status}`;throw new de(`[urun] session allocation failed at ${o}: ${_}`,{httpStatus:h.status})}throw new de(`[urun] timed out waiting for session allocation at ${o}`)}function sr(s,e){let t={"X-Tenant-Id":s.orgId,"X-Auth-Provider":s.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function nr(s,e){return s.getAccessToken?await s.getAccessToken(e)??void 0:s.jwt}function va(s){return{app:s.app,function:s.functionName,gpus:1,idempotency_key:s.idempotencyKey}}async function Sn(s){let e=ir(s.baseUrl,s.fallbackUrls),t=null;for(let r of e)try{let n={baseUrl:r,app:"",functionName:"",orgId:s.orgId,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider,idempotencyKey:""},i=await nr(n),o=await fetch(`${fe(r)}/api/sessions/${encodeURIComponent(s.sessionId)}/viewer-connect`,{headers:sr(n,i)});if(!o.ok)throw new Error(`[urun] viewer-connect for ${s.sessionId} failed: HTTP ${o.status}`);let a=await rs(o);if(!a.ws_url||!Cn(a.ws_url))throw new De(`[urun] viewer-connect returned no usable ws_url for ${s.sessionId}`);return{baseUrl:fe(r),sessionId:s.sessionId,wsUrl:a.ws_url,endsAt:wn(a.ends_at),response:a}}catch(n){if(t=n instanceof Error?n:new Error(String(n)),t instanceof De)throw t}throw t??new Error("[urun] viewer-connect failed")}async function Rn(s){try{let e=fe(s.baseUrl),t=await nr(s),r=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...sr(s,t),"Content-Type":"application/json"},body:JSON.stringify({app:s.app,function:s.functionName})});if(r.status===404)return{status:"unknown-app"};if(!r.ok)return{status:"unavailable"};let n=await rs(r),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function rs(s){try{let e=await s.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function wa(s,e){let t={status:s.status==="queued"||s.queued?"queued":"pending",requestId:e};typeof s.queue_position=="number"&&typeof s.queue_depth=="number"&&(t.queue={position:s.queue_position,depth:s.queue_depth});let r=s.runtime_state;return(r==="unavailable"||r==="starting"||r==="busy")&&(t.runtime={state:r},typeof s.runtime_reason=="string"&&s.runtime_reason.length>0&&(t.runtime.reason=s.runtime_reason)),t}function ya(s,e,t){let r=Number(s.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??r),i=t??yn;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function ba(s){return new Promise(e=>setTimeout(e,s))}function Sa(s){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(s):void 0}var De=class extends Error{};function Cn(s){try{let e=new URL(s);return e.protocol==="ws:"||e.protocol==="wss:"}catch{return!1}}function Ra(s){try{return new URL(s).hostname!==ca?[]:da}catch{return[]}}var U=class extends Error{status;code;constructor(e,t,r=t>0?`http_${t}`:"runtime_artifacts_error",n){super(e),this.name="RuntimeArtifactsError",this.status=t,this.code=r,n!==void 0&&(this.cause=n),Object.setPrototypeOf(this,new.target.prototype)}},Ct=class extends U{constructor(e="[urun] runtime artifacts: unauthorized",t="unauthorized"){super(e,401,t),this.name="RuntimeArtifactsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},Tt=class extends U{constructor(e="[urun] runtime artifacts: not found",t="not_found"){super(e,404,t),this.name="RuntimeArtifactNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}};function kt(s){return{baseUrl:s.baseUrl,fallbackUrls:s.fallbackUrls,orgId:s.orgId,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider}}function En(s){return new Te(s)}var Te=class{_options;constructor(e){this._options=e}async list(e){let r=kn(await this._request(e,"")).artifacts;if(!Array.isArray(r))throw new U("[urun] runtime artifacts: response missing `artifacts`",0,"bad_response");return r.map(Tn)}async getDownloadUrl(e,t){let r=kn(await this._request(t,`/${encodeURIComponent(e)}/download`)),n=r.download_url;if(typeof n!="string"||!Ta(n))throw new U("[urun] runtime artifacts: response missing HTTPS download_url",0,"bad_response");return{artifact:Tn(r.artifact),downloadUrl:n}}async _request(e,t){let r=ir(this._options.baseUrl,this._options.fallbackUrls),n=null;for(let i of r)try{return await this._requestFromBase(i,e,t)}catch(o){if(n=o instanceof Error?o:new Error(String(o)),n instanceof U&&ka(n.status))throw n}throw n??new U("[urun] runtime artifacts request failed",0)}async _requestFromBase(e,t,r){let n=`${fe(e)}/api/sessions/${encodeURIComponent(t)}/artifacts${r}`,i=await this._resolveToken(),o=await fetch(n,{method:"GET",headers:this._headers(i)});if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await fetch(n,{method:"GET",headers:this._headers(i)}))}if(!o.ok){let{code:a,message:c}=await this._readError(o,e);throw Ea(o.status,a,c)}try{return await o.json()}catch(a){throw new U(`[urun] runtime artifacts: invalid JSON response from ${fe(e)}`,0,"bad_response",a)}}async _resolveToken(){return this._options.getAccessToken?await this._options.getAccessToken()??void 0:this._options.jwt}_headers(e){let t={Accept:"application/json","X-Tenant-Id":this._options.orgId,"X-Auth-Provider":this._options.authProvider||"default"};return e&&(t.Authorization=`Bearer ${e}`),t}async _readError(e,t){let r=fe(t);try{let i=(await e.json()).error;if(i&&typeof i=="object"){let{code:o,message:a}=i;return{code:typeof o=="string"&&o.length>0?o:`http_${e.status}`,message:typeof a=="string"&&a.length>0?`[urun] runtime artifacts request failed at ${r}: ${a}`:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}}catch{}return{code:`http_${e.status}`,message:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}};function Tn(s){if(!s||typeof s!="object")throw new U("[urun] runtime artifacts: malformed artifact",0,"malformed_artifact");let e=s,t=ge(e,"artifact_id")||ge(e,"id"),r=ge(e,"filename"),n=ge(e,"kind"),i=ge(e,"status")||"ready",o=Ca(e,"size_bytes"),a=ge(e,"sha256");if(!t||!r||!n||o==null||!a)throw new U("[urun] runtime artifacts: malformed artifact metadata",0,"malformed_artifact");return{artifactId:t,kind:n,filename:r,contentType:ge(e,"content_type")||"application/octet-stream",sizeBytes:o,sha256:a,status:i,createdAt:ge(e,"created_at"),expiresAt:ge(e,"expires_at")}}function ge(s,e){let t=s[e];return typeof t=="string"&&t.length>0?t:void 0}function Ca(s,e){let t=s[e];return typeof t=="number"&&Number.isFinite(t)&&Number.isInteger(t)&&t>=0?t:void 0}function Ta(s){try{return new URL(s).protocol==="https:"}catch{return!1}}function ka(s){return s===401||s===403}function Ea(s,e,t){return s===401?new Ct(t,e):s===404?new Tt(t,e):new U(t,s,e)}function kn(s){if(!s||typeof s!="object"||Array.isArray(s))throw new U("[urun] runtime artifacts: malformed response",0,"bad_response");return s}var Y=class extends Error{status;code;constructor(e,t){super(e),this.name="RecordingsError",this.status=t.status,this.code=t.code,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},Qe=class extends Y{constructor(e="[urun] recordings: unauthorized",t="unauthorized"){super(e,{status:401,code:t}),this.name="RecordingsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},Et=class extends Y{constructor(e="[urun] recordings: not found",t="not_found"){super(e,{status:404,code:t}),this.name="RecordingNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}},Pt=class extends Y{constructor(e="[urun] recordings: retain requires a temp recording",t="retain_not_temp"){super(e,{status:409,code:t}),this.name="RetainNotTempError",Object.setPrototypeOf(this,new.target.prototype)}},xt=class extends Y{constructor(e="[urun] recordings: pin requires an active temp recording",t="pin_requires_active_temp"){super(e,{status:409,code:t}),this.name="PinRequiresActiveTempError",Object.setPrototypeOf(this,new.target.prototype)}},It=class extends Y{constructor(e="[urun] recordings: recording is permanent and locked",t="permanent_locked"){super(e,{status:409,code:t}),this.name="PermanentLockedError",Object.setPrototypeOf(this,new.target.prototype)}},Me=class extends Y{constructor(e="[urun] recordings: invalid retention duration",t="bad_duration",r=400){super(e,{status:r,code:t}),this.name="InvalidDurationError",Object.setPrototypeOf(this,new.target.prototype)}};function or(s){return/^(\d+[smhdw])+$/.test(s)}function Pn(s){if(s==="pin")return{action:"pin"};if(or(s))return{action:"retain",duration:s};throw new Me(`[urun] recordings: "${s}" is not a duration or "pin"`)}function Pa(s,e,t){let r=t||e||`HTTP ${s}`;if(s===401)return new Qe(r,e??"unauthorized");if(s===404)return new Et(r,e??"not_found");if(s===400)return new Me(r,e??"bad_request",400);if(s===409)switch(e){case"retain_not_temp":return new Pt(r,e);case"pin_requires_active_temp":return new xt(r,e);case"permanent_locked":return new It(r,e)}return new Y(r,{status:s,code:e??`http_${s}`})}var Le=class{constructor(e){this._options=e;this._base=`${e.functionsUrl.replace(/\/+$/,"")}/recordings`}_options;_base;async list(e){let r=(await this._request("GET","",{params:e?{session_id:e}:void 0})).recordings;return Array.isArray(r)?r:[]}async get(e){return this._one(await this._request("GET",`/${encodeURIComponent(e)}`))}async retain(e,t){if(!or(t))throw new Me(`[urun] recordings: "${t}" is not a valid retention duration`);return this._one(await this._request("POST",`/${encodeURIComponent(e)}/retain`,{body:{duration:t}}))}async pin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/pin`))}async unpin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/unpin`))}async permanent(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/permanent`))}async delete(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/delete`))}_one(e){let t=e.recording;if(!t||typeof t!="object")throw new Y("[urun] recordings: response missing `recording`",{status:0,code:"bad_response"});return t}async _request(e,t,r={}){let n=this._buildUrl(t,r.params),i=await this._resolveToken(),o=await this._fetch(n,e,i,r.body);if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await this._fetch(n,e,i,r.body))}if(!o.ok){let{code:a,message:c}=await this._readError(o);throw Pa(o.status,a,c)}return this._readJson(o)}_buildUrl(e,t){let r=`${this._base}${e}`,n=Object.entries(t??{}).filter(([,i])=>i!=null&&i!=="").map(([i,o])=>`${encodeURIComponent(i)}=${encodeURIComponent(o)}`).join("&");return n&&(r+=`?${n}`),r}_fetch(e,t,r,n){let i={Authorization:`Bearer ${r}`,apikey:r,Accept:"application/json","X-Tenant-Id":this._options.orgId};this._options.authProvider&&(i["X-Auth-Provider"]=this._options.authProvider);let o={method:t,headers:i};return n!==void 0&&(i["Content-Type"]="application/json",o.body=JSON.stringify(n)),fetch(e,o)}async _resolveToken(){if(this._options.getAccessToken){let t=await this._options.getAccessToken();if(t)return t}let e=this._options.jwt??this._options.apiKey;if(!e)throw new Qe("[urun] recordings: no credential \u2014 provide one of apiKey, jwt, or getAccessToken");return e}async _readJson(e){try{return await e.json()}catch{return{}}}async _readError(e){try{let r=(await e.json()).error;if(r&&typeof r=="object"){let{code:n,message:i}=r;return{code:typeof n=="string"?n:void 0,message:typeof i=="string"?i:`HTTP ${e.status}`}}}catch{}return{message:`HTTP ${e.status}`}}};function xn(s){return new Le(s)}var Do=Zr(xs());var Js=Zr(ho(),1);function xe(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function mo(){return xe()?"Chrome111":void 0}function yt(){if(!xe())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 fo="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Rp(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 Wr(s=16){let e=Rp(s),t="";for(let r=0;r<s;r++)t+=fo[e[r]%fo.length];return t}function go(s){return`stream:${s}`}var _o="urun-stream-v1";var Xs=1,Se={BINARY:0,TEXT:1,JSON:2,END:3},vo=Symbol("urun:stream:end");function wo(s){if(s===vo)return Uint8Array.from([Xs,Se.END]);let e,t;s instanceof Uint8Array?(e=Se.BINARY,t=s):s instanceof ArrayBuffer?(e=Se.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=Se.TEXT,t=new TextEncoder().encode(s)):(e=Se.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=Xs,r[1]=e,r.set(t,2),r}function yo(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==Xs)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case Se.BINARY:return r.slice();case Se.TEXT:return new TextDecoder().decode(r);case Se.JSON:return JSON.parse(new TextDecoder().decode(r));case Se.END:return vo;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}function bo(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 So=[1e3,2e3,4e3,8e3,3e4],Ro=5,Cp=15e3,Co=15e3,To=15e3,Tp=2e3,kp=6e3,Ep=2,Pp=750,xp=3,ko=[1e3,2e3,4e3],Ip=15e3;var Dp={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function bt(s){return s==="error"||s==="ended"||s==="expired"}var Eo=3,Po=4e3,xo=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],St=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Js.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_endsAt=null;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_currentEpoch=0;_consumerId=null;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Mp()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=t=>t!==null&&!t.closed&&!t.paused;return e(this._audioProducer)||e(this._videoProducer)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}_pastDeadline(){return this._endsAt!==null&&Date.now()>=this._endsAt.getTime()}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._endsAt!==null&&(e.endsAt=this._endsAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}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=Ap(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!bt(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let o=n.error_reason??n.errorReason,a=typeof o=="string"&&o?o:"session failed";this._setPhase("error",{error:{reason:a,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,n=typeof r=="number"?r:Number(r);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,bt(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,o=()=>{if(i())throw new Error("TransportSession: connect cancelled")},a=async()=>{for(let u of this._connectUrls()){o();try{return await this._connectOnce(u,t,e),!0}catch(l){n=l instanceof Error?l:new Error(String(l)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let d=c?0:this._resolveConnection?Ep:1;for(let u=0;u<d;u++)if(u>0&&(await Io(Pp),o()),await a())return;if(this._resolveConnection)for(let u=0;u<xp;u++){this._setState("reconnecting"),await Io(ko[Math.min(u,ko.length-1)]),o();try{let l=await this._resolveConnection();o(),this.setAuth({jwt:l.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:l.url,sessionId:l.sessionId,iceServers:l.iceServers??this._options.iceServers}),l.endsAt!==void 0&&(this._endsAt=l.endsAt)}catch(l){if(i())throw new Error("TransportSession: connect cancelled");n=l instanceof Error?l:new Error(String(l));continue}if(await a())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let p=n??new Error("TransportSession: connect failed");throw r||this._emitError(p),p}disconnect(){this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._cleanupSocket(),this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}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 n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(n=>{n.send(wo(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(r);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${Co}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},Co);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of r)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let n=this._awaitSendTransport().then(i=>i.produceData({label:go(e),protocol:_o,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,n)=>{let i=()=>{d(),r(e)},o=u=>{p(new Error(`[urun] sendStreamData: DataChannel error before open: ${u.message}`))},a=()=>{d(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{p(new Error(`[urun] sendStreamData: DataChannel not open after ${To}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},To),d=()=>{clearTimeout(c),e.off("open",i),e.off("error",o),e.observer.off("close",a)},p=u=>{d();try{e.close()}catch{}n(u)};e.on("open",i),e.on("error",o),e.observer.on("close",a)})}_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){await this._publishTrack(e,t)}async _publishTrack(e,t){let r=e.kind==="video",n=r?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(r,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...r?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});r?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(r,e,t)}_rememberPublishIntent(e,t,r){let n={track:t,...r!==void 0?{name:r}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,n=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,n=(r?Dp[r]:void 0)??"provisioning",i=bt(n);if(this._liveReached&&!i||bt(this._phase.name))return;r!==void 0&&(this._lastServerStatus=r);let o=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,c=typeof o=="number"&&typeof a=="number";if(n==="expired"){let d=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:d,code:r,kind:"expired"}});return}if(n==="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":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:r,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:o,depth:a}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){xe()&&await yt();let t=mo(),r=new Do.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??xo});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;r.on("connect",({dtlsParameters:i},o,a)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:i}),o()}catch(c){a(c)}}),r.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0;return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i)}}}),this._recvTransport=r}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=Eo?!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>=Eo?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,o=n?this._recvTransport:i?this._sendTransport:null;o&&(Promise.resolve(o.restartIce({iceParameters:r})).catch(a=>{this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&this._emitError(new Error("media transport failed (ice restart timeout)"),"failed")},Po)}_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")},Po)}_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??xo});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:n},i,o)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(a){o(a)}}),t.on("produce",({kind:n,rtpParameters:i,appData:o},a,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let d=setTimeout(()=>{let u=this._pendingProduce;!u||u.timeoutId!==d||(this._pendingProduce=null,u.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:d,resolve:u=>{a({id:u})},reject:c};let p=o&&typeof o.name=="string"?o.name:void 0;try{this._send(p?{type:"produce",kind:n,name:p,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(u){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(u)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:o},a,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:d=>a({id:d}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:o})}catch(d){i&&this._pendingDataProduce.delete(i),c(d)}}),t.on("connectionstatechange",n=>{if(r===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(r){console.warn("[urun] republish: mic re-produce after reconnect failed",r)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(r){console.warn("[urun] republish: camera re-produce after reconnect failed",r)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,n),n.on("message",a=>{try{let c=typeof a=="string"?new TextEncoder().encode(a):new Uint8Array(a);this._dispatchStreamData(r,yo(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,o=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?o():n.on("open",o)}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 n=e.streamName??e.label;n&&this._tracksByName.set(n,r.track),this._liveReached||this._setPhase("live"),this._emitter.emit("track",r.track);let i=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._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[n,i]of this._tracksByName)i===r&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Tp:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?kp: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._isTerminalPhase()||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=0,r=null;for(let i of this._consumers.values()){let o=await Lp(i);t+=o.total,o.framesDecoded!==null&&(r=(r??0)+o.framesDecoded)}if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;let n=Date.now();if(t>this._lastInboundTotal){this._lastInboundTotal=t,this._lastInboundAdvanceAt=n,t>0&&(this._mediaEverFlowed=!0),this._checkDecodeLiveness(r,n);return}this._mediaEverFlowed&&(this._mediaDeathHandled||n-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._isTerminalPhase()||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isTerminalPhase()||this._connectStartedAt===void 0||this._cancelPendingDial)return;if(!this.isOpen){this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this._attemptReconnect(void 0,!0);return}let e=this._recvTransport?.connectionState;(e==="disconnected"||e==="failed")&&(this._recvIceRestartTimer||(this._recvIceRestartAttempts=0),this._tryRestartRecvIce()||this._renegotiate());let t=this._sendTransport?.connectionState;(t==="disconnected"||t==="failed")&&(this._sendIceRestartTimer||(this._sendIceRestartAttempts=0),this._trySendIceRestart())}_attemptReconnect(e,t=!1){if(this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer)return;if(this._reconnectAttempts>=Ro){this._setState("failed"),this._emitError(new Error(`Failed after ${Ro} attempts`));return}let r=t?0:So[Math.min(this._reconnectAttempts,So.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let n=/\/ws\/rtc\/[^/?#]+/.test(r),i=this._sessionId&&!n?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((n,i)=>{let o=!1,a=!1,c=null,d=new WebSocket(e);this._ws=d;let p=()=>this._ws!==d||t!==this._generation,u=f=>{a||(a=!0,c&&clearTimeout(c),this._cancelPendingDial===l&&(this._cancelPendingDial=null),i(f))},l=f=>{try{d.close()}catch{}u(f)};this._cancelPendingDial=l,c=setTimeout(()=>{try{d.close()}catch{}u(new Error("TransportSession: connect timed out"))},Cp),d.onopen=()=>{if(!a){if(p()){try{d.close()}catch{}u(new Error("TransportSession: connect superseded during dial"));return}o=!0,c&&clearTimeout(c),this._multiplexer=new We(d),d.send(JSON.stringify(this._startMessage(r))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),a=!0,this._cancelPendingDial===l&&(this._cancelPendingDial=null),n()}},d.onerror=()=>{o||u(new Error("WebSocket connection error"))},d.onclose=()=>{if(!o){u(new Error("WebSocket closed before connecting"));return}if(!p()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!bt(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(r)}},d.onmessage=f=>{if(!(this._ws!==d||t!==this._generation)&&typeof f.data=="string")try{this._handleMessage(JSON.parse(f.data))}catch(h){this._emitter.emit("error",h instanceof Error?h:new Error(String(h)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Ip))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),tr(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),this._endsAt!==null&&(r.endsAt=this._endsAt),t?.error&&(r.error=t.error),this._phase=r,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||bt(this._phase.name))return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function Io(s){return new Promise(e=>setTimeout(e,s))}function Mp(){return Wr()}async function Lp(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,n=i=>{if(!i||typeof i!="object")return;let o=i;if(o.type==="inbound-rtp"){let a=typeof o.bytesReceived=="number"?o.bytesReceived:0,c=typeof o.packetsReceived=="number"?o.packetsReceived:0;t+=a+c,typeof o.framesDecoded=="number"&&(r=(r??0)+o.framesDecoded)}};if(e instanceof Map)for(let i of e.values())n(i);else if(Array.isArray(e))for(let i of e)n(i);else e&&typeof e.forEach=="function"&&e.forEach(n);return{total:t,framesDecoded:r}}function Ap(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 Yt=Zr(require("yjs"));var Mo=require("y-websocket"),en=require("y-protocols/awareness"),Op=1;function Lo(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function Ao(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,n)=>{let i=`${s.sessionId}/${t}`,o=new Mo.WebsocketProvider(s.serverUrl,i,r,{awareness:n,params:{dsv:String(Op),...s.token?{token:s.token}:{}},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return o.awareness},get synced(){return o.synced},onSync(a){let c=d=>a(d);return o.on("sync",c),()=>o.off("sync",c)},ensureConnected(){o.wsconnected||o.connect()},destroy(){o.destroy()}}}}var Zs=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()}},Vr=class{_target=null;_bridges=[];connect=(e,t,r)=>{let n=new Zs(e,t,r);return this._target?n.attach(this._target):this._bridges.push(n),n};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)}};function Qt(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var Hr="$bytes";function Np(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function jp(s){if(!Qt(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===Hr&&typeof s[Hr]=="string"}function Fp(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function qp(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 Up(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 tn(s){if(Np(s))return{[Hr]:qp(Fp(s))};if(Array.isArray(s))return s.map(tn);if(Qt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=tn(r);return e}return s}function Kt(s){if(jp(s))return Up(s[Hr]);if(Array.isArray(s))return s.map(Kt);if(Qt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=Kt(r);return e}return s}var Oo=Symbol("urun:doc:path-absent");function $p(s,e){let t=e.split("."),r=s;for(let n of t){if(r===null||typeof r!="object"||!(n in r))return Oo;r=r[n]}return r}function zp(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function rn(s,e){for(let[t,r]of Object.entries(e))if(Qt(r)){let n=s.get(t);if(!(n instanceof Yt.Map)){let i=n;n=new Yt.Map,s.set(t,n),Qt(i)&&rn(n,i)}rn(n,r)}else{if(zp(s.get(t),r))continue;s.set(t,r)}}var Bp=Symbol("urun:doc:local"),Gr=class{_doc=new Yt.Doc;_root=this._doc.getMap("session");_awareness=new en.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=tn(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return Kt(r);let n=$p(r,e);return n===Oo?t:Kt(n)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new sn(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(()=>{rn(this._root,e)},Bp)}snapshot(){return this._root.toJSON()}notify(){let e=Kt(this.snapshot());for(let t of this._listeners)t(e)}},sn=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let n=r.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function No(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}var nn="activity",jo=15e3,Kr=["pointerdown","pointermove","keydown","wheel","touchstart"];function Yr(s){let e=s.now??Date.now,t=s.windowTarget!==void 0?s.windowTarget:typeof window<"u"?window:null,r=s.documentTarget!==void 0?s.documentTarget:typeof document<"u"?document:null,n=!1,i,o=()=>{if(n)return;let p=e();if(!(i!==void 0&&p-i<15e3)){i=p;try{s.awareness.setLocalStateField(nn,{at:p})}catch{}}},a=()=>o(),c=()=>{(!r||r.visibilityState===void 0||r.visibilityState==="visible")&&o()};if(t)for(let p of Kr)t.addEventListener(p,a,{passive:!0,capture:!0});r&&r.addEventListener("visibilitychange",c);let d=null;return s.isProducing&&(d=setInterval(()=>{if(!n)try{s.isProducing?.()&&o()}catch{}},15e3),d.unref?.()),o(),{touch:o,dispose(){if(!n){if(n=!0,t)for(let p of Kr)t.removeEventListener(p,a,{capture:!0});r&&r.removeEventListener("visibilitychange",c),d&&(clearInterval(d),d=null)}}}}var Fo=250;function Qr(s){if(typeof document>"u"||typeof window>"u"||typeof document.addEventListener!="function"||typeof window.addEventListener!="function")return()=>{};let e=0,t=()=>{if(document.visibilityState==="hidden")return;let r=Date.now();r-e<250||(e=r,s())};return document.addEventListener("visibilitychange",t),window.addEventListener("pageshow",t),window.addEventListener("focus",t),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("pageshow",t),window.removeEventListener("focus",t)}}var qo="video/mp4";function Jr(s,e={}){let t=e.timesliceMs??1e3,r=null,n=null,i=!1,o=(a,c,d)=>{let p=typeof MediaRecorder>"u"?void 0:MediaRecorder;if(!p)throw new Error("[urun] stream.chunks(): MediaRecorder is unavailable in this runtime. Pass { source } to chunks() to inject a byte-tap (e.g. a Node/werift consumer).");let u=e.mimeType??(typeof p.isTypeSupported=="function"&&p.isTypeSupported(qo)?qo:void 0),l=new MediaStream([a]),f=new p(l,u?{mimeType:u}:void 0);r=f;let h=Promise.resolve();f.ondataavailable=m=>{let g=m.data;i||!g||g.size===0||(h=h.then(async()=>{let _=new Uint8Array(await g.arrayBuffer());i||c(_)}))},f.onstop=()=>{h.then(()=>{i||d()})},f.onerror=()=>{h.then(()=>{i||d()})},f.start(t)};return{start(a,c){if(r||i)return;let d=s.track();if(d){o(d,a,c);return}n=s.onTrack(p=>{!p||r||i||(n?.(),n=null,o(p,a,c))})},stop(){if(i)return;i=!0,n?.(),n=null;let a=r;if(r=null,a&&a.state!=="inactive")try{a.stop()}catch{}}}}function Wp(s){let e=s;return typeof e[Symbol.asyncIterator]=="function"||(e[Symbol.asyncIterator]=function(){let t=s.getReader();return{next(){return t.read()},async return(){try{await t.cancel()}catch{}try{t.releaseLock()}catch{}return{value:void 0,done:!0}},[Symbol.asyncIterator](){return this}}}),e}function Uo(s,e){let t=null,r=!1,n=!1,i=new ReadableStream({pull(o){r||(r=!0,t=s(e),t.start(a=>{if(!n)try{o.enqueue(a)}catch{}},()=>{if(!n){n=!0;try{o.close()}catch{}}}))},cancel(){n=!0,t?.stop(),t=null}},new CountQueuingStrategy({highWaterMark:0}));return Wp(i)}var Vp=new Set;function cn(s){if(s.functionsUrl)return{functionsUrl:s.functionsUrl,orgId:s.orgId,apiKey:s.apiKey,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider}}var Hp="rpc",dn=3e4,Gp="rpc-resp";function Kp(s){return`${Gp}:${s}`}function on(){return Wr()}function Yp(s){if(s&&typeof s=="object"){let e=s.error;if(e&&typeof e=="object"){let{message:t,code:r}=e;return{message:typeof t=="string"?t:JSON.stringify(e),code:typeof r=="string"?r:void 0}}if(typeof e=="string")return{message:e}}return{message:typeof s=="string"?s:JSON.stringify(s)}}function Qp(s,e,t,r,n,i,o,a,c,d){let p=[],u=null,l=!1,f=null,h=!1,m,g,_=new Promise((x,Ce)=>{m=x,g=Ce});_.catch(()=>{});let w=o(),P=null,I=null,E=null,D=null,ee=!0,Re=()=>{E&&(clearTimeout(E),E=null),D&&(D(),D=null)},te=!1,ae=()=>{te||!h||(te=!0,s.set({rpc:{[e]:null}}))},Zt=()=>{ee=!1,Re(),P?.(),P=null,I?.(),I=null,a?.removeEventListener("abort",mn),w.dispose(),ae()},Xr=()=>{if(u){if(p.length>0){let x=u;u=null,x.resolve({value:p.shift(),done:!1})}else if(f!==null){let x=u;u=null,x.reject(f)}else if(l){let x=u;u=null,x.resolve({value:void 0,done:!0})}}},Xo=x=>{l||(p.push(x),Xr())},ze=x=>{l||(f=x,l=!0,g(x),Zt(),Xr())},hn=x=>{l||(l=!0,m(x),Zt(),Xr())},mn=()=>{let x=a?.reason;ze(x instanceof re?x:new Ie(e))},Zo=x=>{if(!(l||!x||typeof x!="object"))switch(ae(),x.t){case"delta":typeof x.delta=="string"&&Xo(x.delta);break;case"response":hn(x.body);break;case"error":{let{message:Ce,code:Be}=Yp(x.body);ze(new re(Ce,{requestId:e,code:x.code??Be}));break}}},ea=()=>{let x=w.messages()[Symbol.asyncIterator]();P=()=>{x.return?.(void 0)};let Ce=()=>{ee&&x.next().then(Be=>{if(ee){if(Be.done){l||hn(void 0);return}Zo(Be.value),Ce()}},Be=>{ee&&ze(Be)})};Ce()},fn=()=>{if(!h){if(h=!0,a){if(a.aborted){ze(new Ie(e));return}a.addEventListener("abort",mn,{once:!0})}I=c?.(x=>ze(x))??null,ea(),s.set({rpc:{[e]:{args:t,respond_on:r,consumer_id:n,stream:i}}}),d&&d>0&&!s.synced&&(E=setTimeout(()=>{E=null,!l&&!s.synced&&ze(new Ge(d,e))},d),D=s.onSynced(()=>Re()))}};return{deltas:{[Symbol.asyncIterator](){return{next(){if(fn(),p.length>0)return Promise.resolve({value:p.shift(),done:!1});if(f!==null){let x=f;return f=null,Promise.reject(x)}return l?Promise.resolve({value:void 0,done:!0}):new Promise((x,Ce)=>{u={resolve:x,reject:Ce}})},return(){return l||(l=!0,m(void 0),Zt()),Promise.resolve({value:void 0,done:!0})},throw(x){return l||(l=!0,g(x),Zt()),Promise.reject(x)}}}},body:_,start:fn}}function $o(s){if(s&&typeof s=="object"){let{epoch:e,by:t}=s,r={epoch:typeof e=="number"?e:0};return(t==="runtime"||t==="browser")&&(r.by=t),r}}function Jp(s,e){let r=s.get("streams")?.[e];if(!r||typeof r!="object")return null;let{kind:n,rt:i,br:o}=r,a={};(n==="audio"||n==="video"||n==="data")&&(a.kind=n);let c=$o(i);c&&(a.rt=c);let d=$o(o);return d&&(a.br=d),a}var an=class{constructor(e,t,r,n,i){this._name=e;this._transport=t;this._streamData=r;this._controlDoc=n;this._onActivity=i;this._track=this._transport.getTrackByName(this._name)??null,this._unsubscribeTransport=this._transport.on("track",()=>{let o=this._transport.getTrackByName(this._name)??null;o!==this._track&&this._setTrack(o)})}_name;_transport;_streamData;_controlDoc;_onActivity;_track=null;_handlers=new Map;_unsubscribeTransport=null;_subscribed=!1;_messageConsumers=new Set;_dataUnsub=null;_replay=[];_disposed=!1;messages(){this._ensureSubscribed();let e=this;return{[Symbol.asyncIterator](){let t=[...e._replay],r=null,n=!1,i={push(a){if(!n)if(r){let c=r;r=null,c({value:a,done:!1})}else t.push(a)},end(){if(n=!0,r){let a=r;r=null,a({value:void 0,done:!0})}}};e._messageConsumers.add(i);let o=()=>{n=!0,e._messageConsumers.delete(i)};return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):n?Promise.resolve({value:void 0,done:!0}):new Promise(a=>{r=a})},return(){return o(),Promise.resolve({value:void 0,done:!0})}}}}}_ensureSubscribed(){this._subscribed||this._disposed||(this._subscribed=!0,this._streamData&&(this._dataUnsub=this._streamData.onData(this._name,e=>this._deliver(e))))}_deliver(e){this._replay.push(e);for(let t of this._messageConsumers)t.push(e)}get track(){let e=this._transport.getTrackByName(this._name)??this._track;return e!==this._track&&this._setTrack(e),this._track}_claimBrowserProducer(e){if(!this._controlDoc)return;let t=this._controlDoc(),r=Jp(t,this._name),n=r?.br;if(n?.by==="runtime")throw new Ke(this._name,"runtime","browser");if(n)return;let i={br:{epoch:1}};r?.rt&&(i.rt=r.rt);let o=r?.kind??e;o&&(i.kind=o),t.set({streams:{[this._name]:i}})}async attach(e){this._onActivity?.(),this._claimBrowserProducer("audio"),await this._transport.addTrack(e,this._name)}async attachVideo(e){this._onActivity?.(),this._claimBrowserProducer("video"),await this._transport.addVideoTrack(e,this._name)}async emit(e,t={}){if(this._onActivity?.(),this._claimBrowserProducer("data"),!this._streamData)throw new Error("[urun] stream.emit requires the data-stream transport (no streamData wired)");await this._streamData.sendData(this._name,e,t)}async detach(){this._transport.removeTrack()}async detachVideo(){this._transport.stopVideo()}async seek(e){if(e!=="live"&&(!Number.isFinite(e)||e<0))throw new Error('[urun] stream.seek target must be "live" or a non-negative number of seconds');this._transport.seekStream(this._name,e)}chunks(e={}){let t=e.source??Jr;return Uo(t,{track:()=>this.track,onTrack:n=>this.on("track",n)})}onSeeked(e){return this._transport.on("seeked",(t,r)=>{t===this._name&&e(r)})}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e)}}dispose(){this._disposed=!0,this._unsubscribeTransport?.(),this._unsubscribeTransport=null,this._handlers.clear(),this._dataUnsub?.(),this._dataUnsub=null;for(let e of this._messageConsumers)e.end();this._messageConsumers.clear()}_setTrack(e){this._track=e,e&&e.addEventListener("ended",()=>{this._track===e&&this._setTrack(null)},{once:!0});let t=this._handlers.get("track");if(t)for(let r of t)r(e)}},Rt=class s{_sessionId;_multiplexer;_transport;_docs=new Map;_streams=new Map;_docConnector=new Vr;_streamData;_presence=null;_activity=null;_activeRequests=new Set;_recordingsAuth;_artifactsAuth;_recordingsAccessor=null;_artifactsAccessor=null;_recoveryHooks=new Set;_lifecycleUnsub=null;constructor(e,t,r,n,i){this._sessionId=e,this._multiplexer=t,this._transport=r,this._recordingsAuth=n,this._artifactsAuth=i,this._streamData=bo(r),this._wireControlDocIncarnation(),this._lifecycleUnsub=Qr(()=>this.recover()),this._activity=Yr({awareness:this.doc("control").awareness,isProducing:()=>this._transport.isProducingMedia===!0})}_wireControlDocIncarnation(){let e=this.doc("control");this._transport.applyControlDocState(e.get()),e.on("change",t=>{this._transport.applyControlDocState(t)})}static async attach(e,t){let r=await Sn({baseUrl:t.baseUrl,fallbackUrls:t.fallbackUrls,sessionId:e,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),n=t.getAccessToken?await t.getAccessToken()??void 0:t.jwt,i=new Ve,o=new St({url:r.wsUrl,orgId:t.orgId,jwt:n,authProvider:t.authProvider,sessionId:e,iceServers:r.response.ice_servers}),a=new s(e,i,o,cn(t),kt({...t,baseUrl:r.baseUrl}));return o.on("connected",()=>{o.multiplexer&&i.setTarget(o.multiplexer)}),o.setConnection({url:r.wsUrl,sessionId:e,iceServers:r.response.ice_servers}),o.setEndsAt(r.endsAt),xe()&&await yt(),a.setDocTransport({wsUrl:r.wsUrl,token:n}),await o.connect({role:"viewer"}),a}get id(){return this._sessionId}get phase(){return this._transport.phase}get endsAt(){return this._transport.endsAt}get status(){return this._transport.status}onPhase(e){return e(this._transport.phase),this._transport.on("phase",e)}whenLive(e){return rr(this,e)}get recordings(){if(this._recordingsAccessor)return this._recordingsAccessor;let e=this._recordingsAuth;if(!e)throw new Error("[urun] session.recordings requires `functionsUrl` to be configured on the App()/Session.attach() options (the eensx /functions/v1 base URL).");let t=new Le(e);return this._recordingsAccessor={list:r=>t.list(r??this._sessionId),get:r=>t.get(r),retain:(r,n)=>t.retain(r,n),pin:r=>t.pin(r),unpin:r=>t.unpin(r),permanent:r=>t.permanent(r),delete:r=>t.delete(r)},this._recordingsAccessor}get artifacts(){return this._artifactsAccessor?this._artifactsAccessor:(this._requireArtifactsAuth(),this._artifactsAccessor={list:e=>new Te(this._requireArtifactsAuth()).list(e??this._sessionId),getDownloadUrl:(e,t)=>new Te(this._requireArtifactsAuth()).getDownloadUrl(e,t??this._sessionId)},this._artifactsAccessor)}setArtifactsAuth(e){this._artifactsAuth=e}_requireArtifactsAuth(){let e=this._artifactsAuth;if(!e)throw new Error("[urun] session.artifacts requires a session-api `baseUrl` auth bag.");return e}setSessionId(e){if(e===this._sessionId)return;this._multiplexer.rewriteSessionChannels?.call(this._multiplexer,this._sessionId,e),this._sessionId=e;for(let r of this._docs.values())r.setSessionId(e)}stream(e){let t=this._streams.get(e);return t||(t=new an(e,this._transport,this._streamData,()=>this.doc("control"),()=>this._activity?.touch()),this._streams.set(e,t)),t}doc(e){let t=this._docs.get(e);return t||(t=new Gr(e,this._sessionId,Vp.has(e)?null:this._docConnector.connect),this._docs.set(e,t)),t}get presence(){return this._presence||(this._presence=No(this.doc("control").awareness)),this._presence}touch(){this._activity?.touch()}connectDocs(e){this._docConnector.setTarget(e)}setDocTransport(e){this.connectDocs(Ao({serverUrl:Lo(e.wsUrl),sessionId:this._sessionId,token:e.token,WebSocketPolyfill:e.webSocket}))}useStreamDataTransport(e){if(this._streams.size>0)throw new Error("[urun] useStreamDataTransport must be called before opening any stream");this._streamData=e}sendImage(e){return this.request({reference_image:{value:e}})}sendImageLegacyDesired(e){this.doc("control").set({desired:{reference_image:{value:e}}})}request(e,t={}){let r=on(),n=new AbortController;t.signal&&(t.signal.aborted?n.abort(t.signal.reason):t.signal.addEventListener("abort",()=>n.abort(t.signal.reason),{once:!0}));let i=null;if(typeof t.timeout=="number"&&t.timeout>=0){let a=t.timeout;i=setTimeout(()=>n.abort(new He(a,r)),a)}let o=this._consumeResponse(r,e,!1,n.signal);return o.start(),o.body.finally(()=>{i&&clearTimeout(i)})}_consumeResponse(e,t,r,n,i){this._activity?.touch();let o=this.doc(Hp),a=Kp(e);return Qp(o,e,t,a,this._streamData.consumerId,r,()=>this.stream(a),n,c=>(this._activeRequests.add(c),()=>this._activeRequests.delete(c)),i??dn)}requestStream(e,t={}){let r=on();return this._consumeResponse(r,e,!0,t.signal,t.docSyncTimeout).deltas}complete(e,t={}){let r=on(),n=this._consumeResponse(r,e,!1,t.signal,t.docSyncTimeout);return n.start(),n.body}recover(){this._transport.recover();for(let e of this._docs.values())e.ensureConnected();for(let e of Array.from(this._recoveryHooks))try{e()}catch(t){console.warn("[urun] session recovery hook failed:",t)}}onRecovery(e){return this._recoveryHooks.add(e),()=>this._recoveryHooks.delete(e)}disconnect(){this._lifecycleUnsub?.(),this._lifecycleUnsub=null,this._activity?.dispose(),this._activity=null,this._recoveryHooks.clear();let e=Array.from(this._activeRequests);this._activeRequests.clear();for(let t of e)try{t(new Ye)}catch{}for(let t of this._docs.values())t.dispose();this._docs.clear();for(let t of this._streams.values())t.dispose();this._streams.clear(),this._transport.disconnect()}};var Xp=new Set(["then","catch","finally","toJSON",Symbol.toPrimitive]);function zo(s,e){return new Proxy({},{get(t,r){if(!(Xp.has(r)||typeof r!="string"))return n=>{let i=n??{},o=()=>`s_${Date.now()}_${Math.random().toString(36).slice(2)}`,a=o(),c=new Ve,d=new St({url:"",orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider,sessionId:a}),p=new Rt(a,c,d,cn(e),kt(e)),u=async l=>{let f=await bn({baseUrl:e.baseUrl,fallbackUrls:e.fallbackUrls,app:s,functionName:r,orgId:e.orgId,jwt:e.jwt,getAccessToken:e.getAccessToken,authProvider:e.authProvider,idempotencyKey:l,onAdmission:m=>d.reportAdmission(m)}),h=e.getAccessToken?await e.getAccessToken()??void 0:e.jwt;return p.setSessionId(f.sessionId),p.setArtifactsAuth(kt({...e,baseUrl:f.baseUrl})),d.setEndsAt(f.endsAt),{url:f.wsUrl,sessionId:f.sessionId,jwt:h,iceServers:f.response.ice_servers,endsAt:f.endsAt}};return d.setConnectionResolver(()=>u(o())),d.on("connected",()=>{d.multiplexer&&c.setTarget(d.multiplexer)}),(async()=>{let l;try{l=await u(a)}catch(f){console.error(`[urun] Failed to create session for ${r}:`,f);let h=f instanceof Error?f:new Error(String(f)),m=f instanceof de?f.httpStatus:void 0;d.reportAllocationFailure(h,m);return}d.setAuth({jwt:l.jwt,authProvider:e.authProvider,orgId:e.orgId}),d.setConnection({url:l.url,sessionId:l.sessionId,iceServers:l.iceServers}),xe()&&await yt(),p.setDocTransport({wsUrl:l.url,token:l.jwt}),await d.connect({app:s,functionName:r,args:i})})().catch(l=>{console.error(`[urun] Failed to connect session for ${r}:`,l)}),p}}})}var Bo=3e4,Wo="stream:",pn=class{_ws;_multiplexer;_pendingRpc=new Map;_rpcId=0;constructor(e,t){this._ws=e,this._multiplexer=t,this._ws.addEventListener("message",r=>{let n;try{n=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}if(n.rpcId&&this._pendingRpc.has(n.rpcId)){let i=this._pendingRpc.get(n.rpcId);this._pendingRpc.delete(n.rpcId),clearTimeout(i.timer),n.error?i.reject(new Error(n.error)):i.resolve(n.result)}})}async get(e){return this._sendRpc("store.get",{key:e})}async has(e){return await this._sendRpc("store.has",{key:e})}on(e,t){let r=`${Wo}${e}`;return this._multiplexer.on(r,n=>{t(n)})}emit(e,t){let r=`${Wo}${e}`,n=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{data:t};this._multiplexer.emit(r,n)}_getInternals(){return{multiplexer:this._multiplexer,ws:this._ws}}_sendRpc(e,t){return new Promise((r,n)=>{if(!this._ws||this._ws.readyState!==WebSocket.OPEN){n(new Error("WebSocket not open"));return}let i=String(++this._rpcId),o=setTimeout(()=>{this._pendingRpc.has(i)&&(this._pendingRpc.delete(i),n(new Error(`RPC request "${e}" timed out after ${Bo}ms`)))},Bo);this._pendingRpc.set(i,{resolve:r,reject:n,timer:o}),this._ws.send(JSON.stringify({rpcId:i,type:e,...t}))})}};function Vo(s){let r=`${s.baseUrl.replace(/\/$/,"").replace(/^http/,"ws")}/store/${encodeURIComponent(s.orgId)}`,n=new WebSocket(r);(s.jwt||s.apiKey)&&n.addEventListener("open",()=>{n.send(JSON.stringify({type:"auth",orgId:s.orgId,jwt:s.jwt,authProvider:s.authProvider,apiKey:s.apiKey}))});let i=new We(n);return new pn(n,i)}var Zp='video/mp4; codecs="avc1.42E01E"';function Ho(s,e){let t=e?.codec??Zp,r=document.createElement("video");r.muted=!0,r.playsInline=!0;let n=new MediaSource,i=URL.createObjectURL(n);r.src=i,n.addEventListener("sourceopen",()=>{let l;try{l=n.addSourceBuffer(t)}catch(g){throw g instanceof DOMException&&g.name==="NotSupportedError"?new Error(`Codec not supported: "${t}". Ensure the codec string matches the fMP4 container format. Common values: video/mp4; codecs="avc1.42E01E" (H.264 Baseline), video/mp4; codecs="avc1.4D401F" (H.264 Main).`):g}let f=s.getReader();function h(){return l.updating?new Promise(g=>{l.addEventListener("updateend",()=>g(),{once:!0})}):Promise.resolve()}async function m(){try{for(;;){let{done:g,value:_}=await f.read();if(g){await h(),n.readyState==="open"&&n.endOfStream();return}await h();try{l.appendBuffer(_)}catch(w){if(w instanceof DOMException&&w.name==="QuotaExceededError"){let P=l.buffered;if(P.length>0){let I=P.start(P.length-1);l.remove(0,I),await h(),l.appendBuffer(_)}else throw w}else throw w}}}catch{if(n.readyState==="open")try{n.endOfStream("decode")}catch{}}}m()}),r.play().catch(()=>{});let o=r,a=o.captureStream??o.mozCaptureStream;if(!a)throw new Error("captureStream() is not supported in this browser. videoStream() requires HTMLMediaElement.captureStream() support.");let c=a.call(r),d=c.getTracks(),p=0,u=d.length;if(u===0)r.addEventListener("emptied",()=>{URL.revokeObjectURL(i)},{once:!0});else for(let l of d)l.addEventListener("ended",()=>{p++,p>=u&&URL.revokeObjectURL(i)});return c}function Go(s){return s.status.startsWith("pending_")}var Jt=class extends Error{constructor(){super("no getUserMedia in this environment \u2014 in headless/Node consumers, inject a media source via new CaptureController({ getUserMedia }) (e.g. a wrtc/werift capture)"),this.name="CaptureUnavailableError",Object.setPrototypeOf(this,new.target.prototype)}};function Ko(s){let e=[];return s.audio&&e.push("audio"),s.video&&e.push("video"),e.join("+")}function eu(s,e){return e==="audio"?s.getAudioTracks():s.getVideoTracks()}function tu(s,e){let t=s.getTracks();if(t.length===1&&t[0]===e)return s;try{return new MediaStream([e])}catch{return s}}function un(s,e){for(let t of[...s.lostListeners])try{t(e)}catch{}}var Xt=class{claims=new Map;injectedGetUserMedia;queue=Promise.resolve();constructor(e){this.injectedGetUserMedia=e?.getUserMedia}claim(e,t){return this.enqueue(async()=>{let r=this.claims.get(e);r&&(this.claims.delete(e),r.released=!0,r.track=null,r.stream=null,un(r,new Error(`${e} capture claim superseded by a newer claim`)));let n=this.createState(e,t);return this.claims.set(e,n),await this.converge(n),n.claim})}idle(){return this.queue.then(()=>{})}enqueue(e){let t=this.queue.then(e);return this.queue=t.then(()=>{},()=>{}),t}resolveGetUserMedia(){if(this.injectedGetUserMedia)return this.injectedGetUserMedia;let e=typeof navigator<"u"?navigator.mediaDevices:void 0;if(!e?.getUserMedia)throw new Jt;return t=>e.getUserMedia(t)}async converge(e){for(let o of this.claims.values())o.track&&(o.track.stop(),o.track=null,o.stream=null);if(this.claims.size===0)return;let t=this.resolveGetUserMedia(),r={audio:this.claims.get("audio")?.constraints??!1,video:this.claims.get("video")?.constraints??!1},n;try{n=await t(r)}catch(o){let a=`one-capture getUserMedia(${Ko(r)}) failed`,c=o instanceof Error?o.message:String(o);for(let d of[...this.claims.values()])if(this.claims.delete(d.kind),d.released=!0,d!==e){let p=new Error(`${a} \u2014 ${d.kind} capture lost: ${c||o}`);p.cause=o,un(d,p)}throw o}let i=[...this.claims.values()].sort((o,a)=>o===e?1:a===e?-1:0);for(let o of i){let a=eu(n,o.kind)[0]??null;if(o.released){a?.stop();continue}if(!a){this.claims.delete(o.kind),o.released=!0;let c=Object.assign(new Error(`one-capture getUserMedia(${Ko(r)}) returned no ${o.kind} track`),{name:"NotFoundError"});if(o===e)throw c;un(o,c);continue}if(o.track=a,o.stream=tu(n,a),o!==e)for(let c of[...o.trackListeners])try{c(a,o.stream)}catch{}}}createState(e,t){let r=this,n={kind:e,constraints:t,track:null,stream:null,released:!1,trackListeners:new Set,lostListeners:new Set,claim:{kind:e,get track(){return n.track},get stream(){return n.stream},update(i){return r.enqueue(async()=>{if(n.released)throw new Error(`${e} capture claim already released`);if(n.constraints=i,await r.converge(n),!n.track)throw new Error(`${e} capture update yielded no track`);return n.track})},release(){n.released||(n.released=!0,r.claims.get(e)===n&&r.claims.delete(e),n.track?.stop(),n.track=null,n.stream=null)},onTrack(i){return n.trackListeners.add(i),()=>n.trackListeners.delete(i)},onLost(i){return n.lostListeners.add(i),()=>n.lostListeners.delete(i)}}};return n}},ru=null;function Yo(){return ru??=new Xt}var ln="input",Qo=30;function Jo(s){let e=s.now??Date.now,t=s.field??ln,r=1e3/Math.max(s.hz??30,.001),n=new Set,i=0,o=0,a=0,c=0,d,p=null,u=!1,l=()=>{if(u)return;d=e(),c+=1;let h={keys:[...n],buttons:i,pointer:{x:o,y:a},seq:c,at:d};try{s.awareness.setLocalStateField(t,h)}catch{}},f=()=>{if(u)return;let h=e();if(d===void 0||h-d>=r){p&&(clearTimeout(p),p=null),l();return}if(p)return;let m=Math.max(r-(h-d),0);p=setTimeout(()=>{p=null,l()},m),p.unref?.()};return{keyDown(h){let m=String(h).toLowerCase();n.has(m)||(n.add(m),f())},keyUp(h){let m=String(h).toLowerCase();n.delete(m)&&f()},setButtons(h){let m=Number.isFinite(h)?Number(h):0;m!==i&&(i=m,f())},movePointer(h,m){let g=Number.isFinite(h)?Number(h):0,_=Number.isFinite(m)?Number(m):0;g===0&&_===0||(o+=g,a+=_,f())},heldKeys(){return[...n]},clear(){u||(n.clear(),i=0,p&&(clearTimeout(p),p=null),l())},dispose(){if(u)return;let h=n.size>0||i!==0;n.clear(),i=0,p&&(clearTimeout(p),p=null),h&&l(),u=!0}}}
|
|
3
|
+
`}});var ye=k(he=>{"use strict";var Fe=Ci(),rd=Ei(),sd=Rr();he.grammar=sd;he.write=rd;he.parse=Fe.parse;he.parseParams=Fe.parseParams;he.parseFmtpConfig=Fe.parseFmtpConfig;he.parsePayloads=Fe.parsePayloads;he.parseRemoteCandidates=Fe.parseRemoteCandidates;he.parseImageAttributes=Fe.parseImageAttributes;he.parseSimulcastStreamList=Fe.parseSimulcastStreamList});var qe=k(Es=>{"use strict";Object.defineProperty(Es,"__esModule",{value:!0});Es.parse=id;var nd=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function id(s){let e=nd.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Ii=k(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.OfferMediaSection=Ee.AnswerMediaSection=Ee.MediaSection=void 0;var od=ye(),Pi=Oe(),jt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Ee.MediaSection=jt;var Ps=class extends jt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,offerMediaObject:o,offerRtpParameters:a,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),o.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let u={payload:d.payloadType,codec:xi(d),rate:d.clockRate};d.channels>1&&(u.encoding=d.channels),this._mediaObject.rtp.push(u);let l=Pi.clone(d.parameters)??{},f=Pi.clone(d.rtcpFeedback)??[];if(p){let{opusStereo:m,opusFec:g,opusDtx:_,opusMaxPlaybackRate:w,opusMaxAverageBitrate:P,opusPtime:I,opusNack:E,videoGoogleStartBitrate:D,videoGoogleMaxBitrate:ee,videoGoogleMinBitrate:Re}=p,te=a.codecs.find(ae=>ae.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{m!==void 0&&(te.parameters["sprop-stereo"]=m?1:0,l.stereo=m?1:0),g!==void 0&&(te.parameters.useinbandfec=g?1:0,l.useinbandfec=g?1:0),_!==void 0&&(te.parameters.usedtx=_?1:0,l.usedtx=_?1:0),w!==void 0&&(l.maxplaybackrate=w),P!==void 0&&(l.maxaveragebitrate=P),I!==void 0&&(te.parameters.ptime=I,l.ptime=I),E||(te.rtcpFeedback=te.rtcpFeedback.filter(ae=>ae.type!=="nack"||ae.parameter),f=f.filter(ae=>ae.type!=="nack"||ae.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{D!==void 0&&(l["x-google-start-bitrate"]=D),ee!==void 0&&(l["x-google-max-bitrate"]=ee),Re!==void 0&&(l["x-google-min-bitrate"]=Re);break}}}let h={payload:d.payloadType,config:""};for(let m of Object.keys(l))h.config&&(h.config+=";"),h.config+=`${m}=${l[m]}`;h.config&&this._mediaObject.fmtp.push(h);for(let m of f)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:m.type,subtype:m.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(o.ext??[]).some(l=>l.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(o.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[];for(let d of o.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(o.simulcast_03){this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of o.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof o.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):o.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let r=this._mediaObject.simulcast.list1,n=od.parseSimulcastStreamList(r);for(let i of n)for(let o of i)o.paused=!t[o.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(o=>`${o.paused?"~":""}${o.scid}`).join(",")).join(";")}};Ee.AnswerMediaSection=Ps;var xs=class extends jt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,mid:o,kind:a,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o),this._mediaObject.type=a,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",a){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let h of c.codecs){let m={payload:h.payloadType,codec:xi(h),rate:h.clockRate};h.channels>1&&(m.encoding=h.channels),this._mediaObject.rtp.push(m);let g={payload:h.payloadType,config:""};for(let _ of Object.keys(h.parameters??{}))g.config&&(g.config+=";"),g.config+=`${_}=${h.parameters[_]}`;g.config&&this._mediaObject.fmtp.push(g);for(let _ of h.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:h.payloadType,type:_.type,subtype:_.parameter})}this._mediaObject.payloads=c.codecs.map(h=>h.payloadType).join(" "),this._mediaObject.ext=[];for(let h of c.headerExtensions)this._mediaObject.ext.push({uri:h.uri,value:h.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let u=c.encodings[0],l=u.ssrc,f=u.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],l&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:l,attribute:"cname",value:c.rtcp.cname}),f&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:f,attribute:"cname",value:c.rtcp.cname}),l&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${l} ${f}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Ee.OfferMediaSection=xs;function xi(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var ft=k(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.RemoteSdp=void 0;var ad=ye(),cd=$(),Tr=Ii(),dd=Ds(),pd=["av1","h264"],Cr=new cd.Logger("RemoteSdp"),Is=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${dd.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 o=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[o-1].algorithm,hash:r.fingerprints[o-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){Cr.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){Cr.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){Cr.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}){let o=new Tr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}),a=o.getObject();a.rtp.find(p=>pd.includes(p.codec.toLowerCase()))||(a.ext=a.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this.replaceMediaSection(o):this.addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let o=new Tr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}),a=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);a?this.replaceMediaSection(o,a.mid):this.addMediaSection(o)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(Cr.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 Tr.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 Tr.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++,ad.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};kr.RemoteSdp=Is});var gt=k(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.extractRtpCapabilities=ud;Ue.extractDtlsParameters=ld;Ue.getCname=hd;Ue.applyCodecParameters=md;Ue.addHeaderExtension=fd;var Di=ye();function ud({sdpObject:s}){let e=new Map,t=new Map;for(let n of s.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let o of n.rtp){let a={kind:i,mimeType:`${i}/${o.codec}`,preferredPayloadType:o.payload,clockRate:o.rate,channels:o.encoding,parameters:{},rtcpFeedback:[]};e.set(a.preferredPayloadType,a)}for(let o of n.fmtp??[]){let a=Di.parseParams(o.config),c=e.get(o.payload);c&&(a?.hasOwnProperty("profile-level-id")&&(a["profile-level-id"]=String(a["profile-level-id"])),c.parameters=a)}for(let o of n.rtcpFb??[]){let a={type:o.type,parameter:o.subtype};if(a.parameter||delete a.parameter,o.payload!=="*"){let c=e.get(Number(o.payload));if(!c)continue;c.rtcpFeedback.push(a)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(a)}for(let o of n.ext??[]){if(o["encrypt-uri"])continue;let a={kind:i,uri:o.uri,preferredId:o.value};t.set(a.preferredId,a)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function ld({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let i=(s.media??[]).find(o=>o.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let 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 hd({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function md({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(a=>a.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(a=>a.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let o=Di.parseParams(i.config);if(r==="audio/opus"){let a=t.parameters?.["sprop-stereo"];a!==void 0&&(o.stereo=Number(a)?1:0)}i.config="";for(let a of Object.keys(o))i.config&&(i.config+=";"),i.config+=`${a}=${o[a]}`}}function fd({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var _t=k(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.getRtpEncodings=gd;Er.addLegacySimulcast=_d;function gd({offerMediaObject:s,codecs:e}){let t=new Set;for(let i of s.ssrcs??[]){let o=i.id;o&&t.add(o)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let i of s.ssrcGroups??[]){if(i.semantics!=="FID")continue;let o=i.ssrcs.split(/\s+/),a=Number(o[0]),c=Number(o[1]);t.has(a)&&(t.delete(a),t.delete(c),r.set(a,c))}for(let i of t)r.set(i,void 0);let n=[];for(let[i,o]of r){let a={ssrc:i};o&&e.length>1&&(a.rtx={ssrc:o}),n.push(a)}return n}function _d({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(u=>u.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,n]=t.value.split(" "),i=Number(t.id),o;(s.ssrcGroups??[]).some(u=>{if(u.semantics!=="FID")return!1;let l=u.ssrcs.split(/\s+/);return Number(l[0])===i?(o=Number(l[1]),!0):!1});let a=(s.ssrcs??[]).find(u=>u.attribute==="cname");if(!a)throw new Error("a=ssrc line with cname information not found");let c=a.value,p=[],d=[];for(let u=0;u<e;++u)p.push(i+u),o&&d.push(o+u);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let u of p)s.ssrcs.push({id:u,attribute:"cname",value:c}),s.ssrcs.push({id:u,attribute:"msid",value:`${r} ${n}`});for(let u=0;u<d.length;++u){let l=p[u],f=d[u];s.ssrcs.push({id:f,attribute:"cname",value:c}),s.ssrcs.push({id:f,attribute:"msid",value:`${r} ${n}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${l} ${f}`})}}});var vt=k(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.addNackSupportForOpus=vd;Ft.addHeaderExtensionSupport=wd;Ft.getMsidStreamIdAndTrackId=yd;function vd(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 wd(s,e){let t,r=s.headerExtensions?.find(i=>i.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let i=new Set(s.headerExtensions.map(o=>o.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(n)}function yd(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 Oi=k(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.Chrome111=void 0;var me=ye(),bd=H(),Sd=$(),qt=pe(),Rd=Q(),Td=qe(),Cd=ft(),Ut=gt(),Mi=_t(),Ms=vt(),T=new Sd.Logger("Chrome111"),Li="Chrome111",Ai={OS:65535,MIS:65535},Ls=class s extends bd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Li,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=me.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Ai})}}static getLocalRtpCapabilities(e,t=[]){let r=Ut.extractRtpCapabilities({sdpObject:e});qt.validateAndNormalizeRtpCapabilities(r),Ms.addNackSupportForOpus(r);for(let n of t)Ms.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Cd.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Li}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){if(this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let I=1;for(let E of r){let D=E.scalabilityMode?(0,Td.parse)(E.scalabilityMode).temporalLayers:3;D>I&&(I=D)}r.forEach((E,D)=>{E.rid=`r${D}`,E.scalabilityMode=`L1T${I}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(p.sender);let d=await this._pc.createOffer(),u=me.parse(d.sdp);u.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 f=s.getLocalRtpCapabilities(u,l),h=this._getSendExtendedRtpCapabilities(f),m=qt.getSendingRtpParameters(e.kind,h);m.codecs=qt.reduceCodecs(m.codecs,o);let g=qt.getSendingRemoteRtpParameters(e.kind,h);if(g.codecs=qt.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u}),i?.absCaptureTime){let I=u.media[c.idx];Ut.addHeaderExtension({offerMediaObject:I,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:me.write(u)}}T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let _=p.mid;m.mid=_,u=me.parse(this._pc.localDescription.sdp);let w=u.media[c.idx];if(m.rtcp.cname=Ut.getCname({offerMediaObject:w}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=Mi.getRtpEncodings({offerMediaObject:w,codecs:m.codecs});else if(r.length===1){let I=Mi.getRtpEncodings({offerMediaObject:w,codecs:m.codecs});Object.assign(I[0],r[0]),m.encodings=I}else m.encodings=r;this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:m,answerRtpParameters:g,codecOptions:n});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(_,p),{localId:_,rtpParameters:m,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ai.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=me.parse(i.sdp),a=o.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:p,rtpParameters:d,streamId:u}=a;T.debug("receive() [trackId:%s, kind:%s]",c,p);let l=d.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Ms.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:l,kind:p,offerRtpParameters:d,streamId:u??f??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:p}=a;if(p){let d=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===d);if(!u)throw new Error("transceiver not found");p(u.receiver)}}let i=await this._pc.createAnswer(),o=me.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:p}=a,d=r.get(c),u=o.media.find(l=>String(l.mid)===d);Ut.applyCodecParameters({offerRtpParameters:p,answerMediaObject:u})}i={type:"answer",sdp:me.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,p=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=me.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:me.write(f)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=me.parse(this._pc.localDescription.sdp));let r=Ut.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Rd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Pr.Chrome111=Ls});var Fi=k(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.Chrome74=void 0;var J=ye(),kd=$(),Ed=H(),$t=pe(),Pd=Q(),xd=qe(),Id=ft(),zt=gt(),As=_t(),Os=vt(),S=new kd.Logger("Chrome74"),Ni="Chrome74",ji={OS:1024,MIS:1024},Ns=class s extends Ed.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ni,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=J.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:ji})}}static getLocalRtpCapabilities(e,t=[]){let r=zt.extractRtpCapabilities({sdpObject:e});$t.validateAndNormalizeRtpCapabilities(r),Os.addNackSupportForOpus(r);for(let n of t)Os.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new Id.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ni}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,D)=>{E.rid=`r${D}`});let a=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),p=await this._pc.createOffer(),d=J.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let l=s.getLocalRtpCapabilities(d,u),f=this._getSendExtendedRtpCapabilities(l),h=$t.getSendingRtpParameters(e.kind,f);h.codecs=$t.reduceCodecs(h.codecs,o);let m=$t.getSendingRemoteRtpParameters(e.kind,f);m.codecs=$t.reduceCodecs(m.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,_=(0,xd.parse)((r??[{}])[0].scalabilityMode),w;r?.length===1&&_.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=J.parse(p.sdp),w=d.media[a.idx],As.addLegacySimulcast({offerMediaObject:w,numStreams:_.spatialLayers}),p={type:"offer",sdp:J.write(d)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),i?.absCaptureTime&&(w=d.media[a.idx],zt.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:m.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:J.write(d)}),await this._pc.setLocalDescription(p);let P=c.mid;if(h.mid=P,d=J.parse(this._pc.localDescription.sdp),w=d.media[a.idx],h.rtcp.cname=zt.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=As.getRtpEncodings({offerMediaObject:w,codecs:h.codecs});else if(r.length===1){let E=As.getRtpEncodings({offerMediaObject:w,codecs:h.codecs});Object.assign(E[0],r[0]),g&&(E=[E[0]]),h.encodings=E}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 E of h.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${_.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:a.reuseMid,offerRtpParameters:h,answerRtpParameters:m,codecOptions:n});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:h,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),S.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ji.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=J.parse(i.sdp),a=o.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:p,rtpParameters:d,streamId:u}=a;S.debug("receive() [trackId:%s, kind:%s]",c,p);let l=d.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Os.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:l,kind:p,offerRtpParameters:d,streamId:u??f??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),o=J.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:p}=a,d=r.get(c),u=o.media.find(l=>String(l.mid)===d);zt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:u})}i={type:"answer",sdp:J.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,p=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=J.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:J.write(f)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=J.parse(this._pc.localDescription.sdp));let r=zt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Pd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};xr.Chrome74=Ns});var Bi=k(Dr=>{"use strict";Object.defineProperty(Dr,"__esModule",{value:!0});Dr.Firefox120=void 0;var be=ye(),Dd=H(),Md=$(),qi=Q(),Bt=pe(),Ld=qe(),Ad=ft(),Ir=gt(),Ui=_t(),Od=vt(),C=new Md.Logger("Firefox120"),$i="Firefox120",zi={OS:16,MIS:2048},js=class s extends Dd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_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})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let i=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let o=await t.createOffer();try{r.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let a=be.parse(o.sdp);return s.getLocalRtpCapabilities(a)}catch(o){try{r.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,o}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:zi})}}static getLocalRtpCapabilities(e){let t=Ir.extractRtpCapabilities({sdpObject:e});return Bt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new Ad.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return $i}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){throw this.assertNotClosed(),new qi.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((w,P)=>{w.rid=`r${P}`});let a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(a.sender);let c=await this._pc.createOffer(),p=be.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(p),u=this._getSendExtendedRtpCapabilities(d),l=Bt.getSendingRtpParameters(e.kind,u);l.codecs=Bt.reduceCodecs(l.codecs,i);let f=Bt.getSendingRemoteRtpParameters(e.kind,u);f.codecs=Bt.reduceCodecs(f.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let h=(0,Ld.parse)((r??[{}])[0].scalabilityMode);C.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let m=a.mid;l.mid=m,p=be.parse(this._pc.localDescription.sdp);let g=p.media[p.media.length-1];if(l.rtcp.cname=Ir.getCname({offerMediaObject:g}),l.msid=`${t??this._sendStream.id} ${e.id}`,!r)l.encodings=Ui.getRtpEncodings({offerMediaObject:g,codecs:l.codecs});else if(r.length===1){let w=Ui.getRtpEncodings({offerMediaObject:g,codecs:l.codecs});Object.assign(w[0],r[0]),l.encodings=w}else l.encodings=r;if(l.encodings.length>1&&(l.codecs[0].mimeType.toLowerCase()==="video/vp8"||l.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let w of l.encodings)w.scalabilityMode?w.scalabilityMode=`L1T${h.temporalLayers}`:w.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:l,answerRtpParameters:f,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(m,a),{localId:m,rtpParameters:l,rtpSender:a.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 transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);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 n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%zi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=be.parse(i.sdp),a=o.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:p,rtpParameters:d,streamId:u}=a;C.debug("receive() [trackId:%s, kind:%s]",c,p);let l=d.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Od.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:l,kind:p,offerRtpParameters:d,streamId:u??f??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:p}=a;if(p){let d=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===d);if(!u)throw new Error("transceiver not found");p(u.receiver)}}let i=await this._pc.createAnswer(),o=be.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:p}=a,d=r.get(c),u=o.media.find(l=>String(l.mid)===d);Ir.applyCodecParameters({offerRtpParameters:p,answerMediaObject:u}),i={type:"answer",sdp:be.write(o)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,p=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){C.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=be.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f}),l={type:"answer",sdp:be.write(f)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=be.parse(this._pc.localDescription.sdp));let r=Ir.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new qi.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Dr.Firefox120=js});var Gi=k(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.Safari12=void 0;var X=ye(),Nd=H(),jd=$(),Wt=pe(),Fd=Q(),qd=qe(),Ud=ft(),Vt=gt(),Wi=_t(),Fs=vt(),R=new jd.Logger("Safari12"),Vi="Safari12",Hi={OS:65535,MIS:65535},qs=class s extends Nd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Vi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=X.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Hi})}}static getLocalRtpCapabilities(e,t=[]){let r=Vt.extractRtpCapabilities({sdpObject:e});Wt.validateAndNormalizeRtpCapabilities(r),Fs.addNackSupportForOpus(r);for(let n of t)Fs.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Ud.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Vi}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});a&&a(p.sender);let d=await this._pc.createOffer(),u=X.parse(d.sdp);u.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 f=s.getLocalRtpCapabilities(u,l),h=this._getSendExtendedRtpCapabilities(f),m=Wt.getSendingRtpParameters(e.kind,h);m.codecs=Wt.reduceCodecs(m.codecs,o);let g=Wt.getSendingRemoteRtpParameters(e.kind,h);g.codecs=Wt.reduceCodecs(g.codecs,o);let _;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let w=(0,qd.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(R.debug("send() | enabling legacy simulcast"),u=X.parse(d.sdp),_=u.media[c.idx],Wi.addLegacySimulcast({offerMediaObject:_,numStreams:r.length}),d={type:"offer",sdp:X.write(u)}),i?.absCaptureTime&&(_=u.media[c.idx],Vt.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(u)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=p.mid;if(m.mid=P,u=X.parse(this._pc.localDescription.sdp),_=u.media[c.idx],m.rtcp.cname=Vt.getCname({offerMediaObject:_}),m.msid=`${t??this._sendStream.id} ${e.id}`,m.encodings=Wi.getRtpEncodings({offerMediaObject:_,codecs:m.codecs}),r)for(let E=0;E<m.encodings.length;++E)r[E]&&Object.assign(m.encodings[E],r[E]);if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of m.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${w.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,reuseMid:c.reuseMid,offerRtpParameters:m,answerRtpParameters:g,codecOptions:n});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(P,p),{localId:P,rtpParameters:m,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;R.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Hi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=X.parse(i.sdp),a=o.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:p,rtpParameters:d,streamId:u}=a;R.debug("receive() [trackId:%s, kind:%s]",c,p);let l=d.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=Fs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:l,kind:p,offerRtpParameters:d,streamId:u??f??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:p}=a;if(p){let d=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===d);if(!u)throw new Error("transceiver not found");p(u.receiver)}}let i=await this._pc.createAnswer(),o=X.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:p}=a,d=r.get(c),u=o.media.find(l=>String(l.mid)===d);Vt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:u})}i={type:"answer",sdp:X.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,p=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=X.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:X.write(f)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=X.parse(this._pc.localDescription.sdp));let r=Vt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Fd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Mr.Safari12=qs});var Qi=k(Lr=>{"use strict";Object.defineProperty(Lr,"__esModule",{value:!0});Lr.ReactNative106=void 0;var Z=ye(),$d=H(),zd=$(),Ht=pe(),Bd=Q(),Wd=qe(),Vd=ft(),Gt=gt(),Us=_t(),$s=vt(),b=new zd.Logger("ReactNative106"),Ki="ReactNative106",Yi={OS:65535,MIS:65535},zs=class s extends $d.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ki,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:Yi})}}static getLocalRtpCapabilities(e,t=[]){let r=Gt.extractRtpCapabilities({sdpObject:e});Ht.validateAndNormalizeRtpCapabilities(r),$s.addNackSupportForOpus(r);for(let n of t)$s.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new Vd.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ki}close(){if(b.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender: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((D,ee)=>{D.rid=`r${ee}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(p.sender);let d=await this._pc.createOffer(),u=Z.parse(d.sdp);u.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 f=s.getLocalRtpCapabilities(u,l),h=this._getSendExtendedRtpCapabilities(f),m=Ht.getSendingRtpParameters(e.kind,h);m.codecs=Ht.reduceCodecs(m.codecs,o);let g=Ht.getSendingRemoteRtpParameters(e.kind,h);g.codecs=Ht.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let _=!1,w=(0,Wd.parse)((r??[{}])[0].scalabilityMode),P;r?.length===1&&w.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,u=Z.parse(d.sdp),P=u.media[c.idx],Us.addLegacySimulcast({offerMediaObject:P,numStreams:w.spatialLayers}),d={type:"offer",sdp:Z.write(u)}),i?.absCaptureTime&&(P=u.media[c.idx],Gt.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(D=>D.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Z.write(u)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let I=p.mid??void 0;if(I||b.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),m.mid=I,u=Z.parse(this._pc.localDescription.sdp),P=u.media[c.idx],m.rtcp.cname=Gt.getCname({offerMediaObject:P}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=Us.getRtpEncodings({offerMediaObject:P,codecs:m.codecs});else if(r.length===1){let D=Us.getRtpEncodings({offerMediaObject:P,codecs:m.codecs});Object.assign(D[0],r[0]),_&&(D=[D[0]]),m.encodings=D}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 D of m.encodings)D.scalabilityMode?D.scalabilityMode=`L1T${w.temporalLayers}`:D.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:m,answerRtpParameters:g,codecOptions:n});let E={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",E),await this._pc.setRemoteDescription(E),I||(I=p.mid,m.mid=I),this._mapMidTransceiver.set(I,p),{localId:I,rtpParameters:m,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;b.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Yi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=Z.parse(i.sdp),a=o.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:p,rtpParameters:d,streamId:u}=a;b.debug("receive() [trackId:%s, kind:%s]",c,p);let l=d.mid??String(this._mapMidTransceiver.size);r.set(c,l);let{msidStreamId:f}=$s.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:l,kind:p,offerRtpParameters:d,streamId:u??f??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:p}=a;if(p){let d=r.get(c),u=this._pc.getTransceivers().find(l=>l.mid===d);if(!u)throw new Error("transceiver not found");p(u.receiver)}}let i=await this._pc.createAnswer(),o=Z.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:p}=a,d=r.get(c),u=o.media.find(l=>String(l.mid)===d);Gt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:u})}i={type:"answer",sdp:Z.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,p=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){b.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){b.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){b.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};b.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let l=await this._pc.createAnswer(),f=Z.parse(l.sdp),h=f.media.find(m=>m.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l={type:"answer",sdp:Z.write(f)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",l),await this._pc.setLocalDescription(l),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Z.parse(this._pc.localDescription.sdp));let r=Gt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Bd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Lr.ReactNative106=zs});var eo=k(wt=>{"use strict";Object.defineProperty(wt,"__esModule",{value:!0});wt.Device=void 0;wt.detectDevice=Ji;wt.detectDeviceAsync=Xi;var Hd=$(),Gd=H(),Pe=Q(),Ar=Oe(),G=pe(),Kd=yi(),Yd=Oi(),Qd=Fi(),Jd=Bi(),Xd=Gi(),Zd=Qi(),y=new Hd.Logger("Device");function Ji(s,e){return y.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Zi(s,e)}async function Xi(s,e){return y.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Zi(s,e)}var Bs=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Gd.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(y.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Xi(),!e))throw new Pe.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(y.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)y.debug("constructor() | handler given: %s",e);else if(e=Ji(),e)y.debug("constructor() | detected handler: %s",e);else throw new Pe.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Yd.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Qd.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Jd.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Xd.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Zd.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 Pe.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new Pe.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new Pe.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(y.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new Pe.InvalidStateError("already loaded");let r=Ar.clone(e);G.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,o=Ar.clone(await n({direction:"recvonly"}));y.debug("load() | got native receiving RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o);let a=Ar.clone(await n({direction:"sendonly"}));y.debug("load() | got native sending RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a),this._getSendExtendedRtpCapabilities=d=>Ar.clone(G.getExtendedRtpCapabilities(d,r,t));let c=G.getExtendedRtpCapabilities(o,r,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),y.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=G.getExtendedRtpCapabilities(a,r,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(p),y.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=G.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=G.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),G.validateSctpCapabilities(this._sctpCapabilities),y.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),y.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new Pe.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:p}){return y.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:p}){return y.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,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(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(o&&typeof o!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new Pe.InvalidStateError("not loaded");let u=new Kd.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}};wt.Device=Bs;function Zi(s,e){y.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=ep(s,e);if(t){if(t>=111)return y.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return y.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";y.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=tp(s);if(r){if(r>=120)return y.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";y.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=rp(s);if(n){if(n>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=sp(s);if(i){if(i>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Kt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return y.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";y.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}y.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function ep(s,e){if(y.debug("getChromiumMajorVersion()"),Or(s,e)){y.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Kt()){y.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return y.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}y.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function tp(s){if(y.debug("getFirefoxMajorVersion()"),Or(s)){y.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Kt()){y.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}y.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function rp(s){if(y.debug("getMacOSWebKitMajorVersion()"),Or(s)){y.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Kt()){y.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){y.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}y.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function sp(s){if(y.debug("getIOSWebKitMajorVersion()"),!Or(s)){y.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Kt()){y.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}y.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Or(s,e){return y.debug("isIOS()"),e?.platform==="iOS"?(y.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(y.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(y.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(y.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(y.debug("isIOS() | this is not iOS => false"),!1)}function Kt(){return y.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(y.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(y.debug("isReactNative() | this is not React-Native => false"),!1)}});var ro=k(to=>{"use strict";var $e=256,jr=[],Nr;for(;$e--;)jr[$e]=($e+256).toString(16).substring(1);function np(){var s=0,e,t="";if(!Nr||$e+16>256){for(Nr=Array(s=256);s--;)Nr[s]=256*Math.random()|0;s=$e=0}for(;s<16;s++)e=Nr[$e+s],s==6?t+=jr[e&15|64]:s==8?t+=jr[e&63|128]:t+=jr[e],s&1&&s>1&&s<11&&(t+="-");return $e++,t}to.v4=np});var so=k(Fr=>{"use strict";Object.defineProperty(Fr,"__esModule",{value:!0});Fr.FakeEventTarget=void 0;var Ws=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Fr.FakeEventTarget=Ws});var no=k(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.FakeEvent=void 0;var Vs=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){}};qr.FakeEvent=Vs});var io=k(Hs=>{"use strict";Object.defineProperty(Hs,"__esModule",{value:!0});Hs.clone=ip;function ip(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var ao=k($r=>{"use strict";Object.defineProperty($r,"__esModule",{value:!0});$r.FakeMediaStreamTrack=void 0;var oo=ro(),op=so(),yt=no(),Ur=io(),Gs=class s extends op.FakeEventTarget{#f;#u;#l;#e;#r;#t;#s;#h;#n;#m;#i;#o=null;#a=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:n,enabled:i,muted:o,readyState:a,capabilities:c,constraints:p,settings:d,data:u}){super(),this.#f=t??(0,oo.v4)(),this.#u=e,this.#l=r??"",this.#s=n??"",this.#r=i??!0,this.#t=o??!1,this.#e=a??"live",this.#h=c??{},this.#n=p??{},this.#m=d??{},this.#i=u??{}}get id(){return this.#f}get kind(){return this.#u}get label(){return this.#l}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 yt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#o}set onmute(e){this.#o&&this.removeEventListener("mute",this.#o),this.#o=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#a}set onunmute(e){this.#a&&this.removeEventListener("unmute",this.#a),this.#a=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#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 yt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,oo.v4)(),kind:this.#u,label:this.#l,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,Ur.clone)(this.#h),constraints:(0,Ur.clone)(this.#n),settings:(0,Ur.clone)(this.#m),data:t??(0,Ur.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#m}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new yt.FakeEvent("stopped")),this.dispatchEvent(new yt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new yt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new yt.FakeEvent("unmute")))}};$r.FakeMediaStreamTrack=Gs});var co=k(zr=>{"use strict";Object.defineProperty(zr,"__esModule",{value:!0});zr.FakeEventTarget=void 0;var Ks=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};zr.FakeEventTarget=Ks});var lo=k(Wr=>{"use strict";Object.defineProperty(Wr,"__esModule",{value:!0});Wr.FakeHandler=void 0;var ap=ao(),cp=H(),dp=$(),bt=Oe(),Ys=pe(),uo=Q(),pp=co(),F=new dp.Logger("FakeHandler"),po="FakeHandler",Qs=class s extends cp.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${bt.generateRandomNumber()}`;_defaultSendStreamId=`${bt.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:po,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(F.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(F.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Ys.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),F.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return po}close(){F.debug("close()"),!this._closed&&(this._closed=!0,super.close())}setIceGatheringState(e){this.emit("@icegatheringstatechange",e)}setConnectionState(e){this.emit("@connectionstatechange",e)}async updateIceServers(e){this.assertNotClosed(),F.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),F.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i}){this.assertNotClosed(),F.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let o=s.getLocalRtpCapabilities(this._fakeParameters),a=this._getSendExtendedRtpCapabilities(o),c=Ys.getSendingRtpParameters(e.kind,a);c.codecs=Ys.reduceCodecs(c.codecs,i);let p=c.codecs.some(u=>/.+\/rtx$/i.test(u.mimeType));c.mid=`mid-${bt.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let u of r)u.ssrc=bt.generateRandomNumber(),p&&(u.rtx={ssrc:bt.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(F.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new Error("local track not found");this._tracks.delete(Number(e))}}async pauseSending(e){this.assertNotClosed()}async resumeSending(e){this.assertNotClosed()}async replaceTrack(e,t){this.assertNotClosed(),t?F.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):F.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),F.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),F.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),F.debug("sendDataChannel()");let t=new Br({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:n,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),F.debug("receive() [trackId:%s, kind:%s]",n,i);let o=this._nextLocalId++,a=new ap.FakeMediaStreamTrack({kind:i});this._tracks.set(o,a),t.push({localId:String(o),track:a})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)F.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),F.debug("receiveDataChannel()"),{dataChannel:new Br({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=bt.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:r},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new uo.InvalidStateError("method called in a closed handler")}};Wr.FakeHandler=Qs;var Br=class extends pp.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:n=null,label:i="",protocol:o=""}){super(),F.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${n}, label:${i}, protocol:${o}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=n,this._label=i,this._protocol=o}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,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 uo.InvalidStateError("not open")}}});var ho=k(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.generateRouterRtpCapabilities=up;oe.generateNativeRtpCapabilities=lp;oe.generateNativeSctpCapabilities=hp;oe.generateLocalDtlsParameters=mp;oe.generateTransportRemoteParameters=fp;oe.generateProducerRemoteParameters=gp;oe.generateConsumerRemoteParameters=_p;oe.generateDataProducerRemoteParameters=vp;oe.generateDataConsumerRemoteParameters=wp;var B=Oe();function K(){return String(B.generateRandomNumber())}function up(){return B.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function lp(){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 hp(){return B.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function mp(){return B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})}function fp(){return{id:K(),iceParameters:B.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:B.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:B.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function gp(){return B.deepFreeze({id:K()})}function _p({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function vp(){return B.deepFreeze({id:K()})}function wp({id:s}={}){return{id:s??K(),dataProducerId:K(),sctpStreamParameters:B.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Ds=k(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.debug=A.testFakeParameters=A.FakeHandler=A.enhancedEvents=A.ortc=A.parseScalabilityMode=A.detectDeviceAsync=A.detectDevice=A.Device=A.version=A.types=void 0;var yp=Lt();A.debug=yp.default;A.types=jn();A.version="3.20.0";var Js=eo();Object.defineProperty(A,"Device",{enumerable:!0,get:function(){return Js.Device}});Object.defineProperty(A,"detectDevice",{enumerable:!0,get:function(){return Js.detectDevice}});Object.defineProperty(A,"detectDeviceAsync",{enumerable:!0,get:function(){return Js.detectDeviceAsync}});var bp=qe();Object.defineProperty(A,"parseScalabilityMode",{enumerable:!0,get:function(){return bp.parse}});A.ortc=pe();A.enhancedEvents=H();var Sp=lo();Object.defineProperty(A,"FakeHandler",{enumerable:!0,get:function(){return Sp.FakeHandler}});A.testFakeParameters=ho()});var fo=k((cl,Xs)=>{"use strict";var Rp=Object.prototype.hasOwnProperty,W="~";function Yt(){}Object.create&&(Yt.prototype=Object.create(null),new Yt().__proto__||(W=!1));function Tp(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function mo(s,e,t,r,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new Tp(t,r||s,n),o=W?W+e:e;return s._events[o]?s._events[o].fn?s._events[o]=[s._events[o],i]:s._events[o].push(i):(s._events[o]=i,s._eventsCount++),s}function Vr(s,e){--s._eventsCount===0?s._events=new Yt:delete s._events[e]}function q(){this._events=new Yt,this._eventsCount=0}q.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Rp.call(t,r)&&e.push(W?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};q.prototype.listeners=function(e){var t=W?W+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,i=r.length,o=new Array(i);n<i;n++)o[n]=r[n].fn;return o};q.prototype.listenerCount=function(e){var t=W?W+e:e,r=this._events[t];return r?r.fn?1:r.length:0};q.prototype.emit=function(e,t,r,n,i,o){var a=W?W+e:e;if(!this._events[a])return!1;var c=this._events[a],p=arguments.length,d,u;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,n),!0;case 5:return c.fn.call(c.context,t,r,n,i),!0;case 6:return c.fn.call(c.context,t,r,n,i,o),!0}for(u=1,d=new Array(p-1);u<p;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var l=c.length,f;for(u=0;u<l;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),p){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,r);break;case 4:c[u].fn.call(c[u].context,t,r,n);break;default:if(!d)for(f=1,d=new Array(p-1);f<p;f++)d[f-1]=arguments[f];c[u].fn.apply(c[u].context,d)}}return!0};q.prototype.on=function(e,t,r){return mo(this,e,t,r,!1)};q.prototype.once=function(e,t,r){return mo(this,e,t,r,!0)};q.prototype.removeListener=function(e,t,r,n){var i=W?W+e:e;if(!this._events[i])return this;if(!t)return Vr(this,i),this;var o=this._events[i];if(o.fn)o.fn===t&&(!n||o.once)&&(!r||o.context===r)&&Vr(this,i);else{for(var a=0,c=[],p=o.length;a<p;a++)(o[a].fn!==t||n&&!o[a].once||r&&o[a].context!==r)&&c.push(o[a]);c.length?this._events[i]=c.length===1?c[0]:c:Vr(this,i)}return this};q.prototype.removeAllListeners=function(e){var t;return e?(t=W?W+e:e,this._events[t]&&Vr(this,t)):(this._events=new Yt,this._eventsCount=0),this};q.prototype.off=q.prototype.removeListener;q.prototype.addListener=q.prototype.on;q.prefixed=W;q.EventEmitter=q;typeof Xs<"u"&&(Xs.exports=q)});var iu={};ca(iu,{ACTIVITY_DOM_EVENTS:()=>Qr,ACTIVITY_FIELD:()=>an,ACTIVITY_STAMP_MIN_INTERVAL_MS:()=>qo,App:()=>Wo,CaptureController:()=>er,CaptureUnavailableError:()=>Zt,DEFAULT_DOC_SYNC_TIMEOUT_MS:()=>un,DEFAULT_PRODUCE_ACK_TIMEOUT_MS:()=>Je,DEFAULT_WHEN_LIVE_TIMEOUT_MS:()=>ss,FOREGROUND_COALESCE_MS:()=>Uo,INPUT_PRESENCE_DEFAULT_HZ:()=>Xo,INPUT_PRESENCE_FIELD:()=>mn,InvalidDurationError:()=>Me,PermanentLockedError:()=>Mt,PinRequiresActiveTempError:()=>Dt,ProduceAckTimeoutError:()=>Ye,RecordingNotFoundError:()=>xt,RecordingsClient:()=>Le,RecordingsError:()=>Y,RecordingsUnauthorizedError:()=>Xe,RequestAbortError:()=>Ie,RequestCancelledError:()=>Qe,RequestDocSyncError:()=>Ge,RequestError:()=>re,RequestTimeoutError:()=>He,RetainNotTempError:()=>It,RuntimeArtifactNotFoundError:()=>Et,RuntimeArtifactsClient:()=>Ce,RuntimeArtifactsError:()=>U,RuntimeArtifactsUnauthorizedError:()=>kt,Session:()=>Ct,SessionAllocationError:()=>de,SessionFailedError:()=>ce,StreamDirectionConflict:()=>Ke,createActivityTracker:()=>Jr,createInputPresencePublisher:()=>Zo,createRecordingsClient:()=>Dn,createRuntimeArtifactsClient:()=>xn,createStore:()=>Go,describeSessionFailure:()=>rs,describeSessionPhase:()=>yn,isDurationString:()=>cr,isPendingRecording:()=>Yo,isWakingPhase:()=>sr,mediaRecorderChunkSource:()=>Zr,normalizeRetention:()=>In,observePageLifecycle:()=>Xr,prewake:()=>Cn,sessionFailureFromMediaError:()=>wn,sharedCaptureController:()=>Jo,videoStream:()=>Ko,whenLive:()=>nr});module.exports=da(iu);var We=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let n=this._handlers.get(r.channel);if(n)for(let i of n)i(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},Ve=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(r,i));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[o,a]of this._handlers)i.set(o.startsWith(r)?n+o.slice(r.length):o,a);this._handlers=i,this._pendingSends=this._pendingSends.map(o=>({...o,channel:o.channel.startsWith(r)?n+o.channel.slice(r.length):o.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};var re=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},He=class extends re{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Ge=class extends re{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Ke=class extends Error{stream;owner;attempted;constructor(e,t,r){super(`[urun] stream "${e}" is already produced by the ${t}; this (${r}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=r,Object.setPrototypeOf(this,new.target.prototype)}},Je=15e3,Ye=class extends Error{kind;stream;timeoutMs;constructor(e,t){let r=t?.timeoutMs??Je,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(r/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=r,Object.setPrototypeOf(this,new.target.prototype)}},Ie=class extends re{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},Qe=class extends re{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function rs(s,e){let t=e.error?.reason,r=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(s){case"create-failed":return{message:`[urun] session create failed${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""}${t?`: ${t}`:""}`,hint:e.error?.httpStatus===401||e.error?.httpStatus===403?"The backend rejected this client \u2014 sign in again or check the auth token / org access.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."};case"never-live":{let n=r!==void 0?` after ${r}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"ended":return{message:`[urun] session ended before going live${e.sessionId?` (id ${e.sessionId})`:""}`,hint:"The session was closed (server-side, or superseded by another connection). Start a new session."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs, then start a new session."};case"produce-timeout":return{message:`[urun] publishing a track timed out${t?`: ${t}`:""} \u2014 the SFU never acked the produce (the runtime\u2019s inbound port for the stream was not advertised in time)`,hint:"The runtime was still cold or the backend was at capacity when the track was published. Retry in a moment; if it persists, the backend never opened the stream to receive it."};case"expired":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} ended \u2014 ${t??"it reached its maximum length"}`,hint:"The session reached its end. Start a new session to continue."}}}var ce=class extends Error{kind;status;hint;constructor(e,t,r){let{message:n,hint:i}=rs(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,r?.cause!==void 0&&(this.cause=r.cause),Object.setPrototypeOf(this,new.target.prototype)}};function wn(s,e){if(s instanceof ce)return s;let t=s instanceof Error?s:new Error(String(s)),r={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ce("media-permission",r,{cause:s})}var de=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function sr(s){if(!s)return!1;let e=typeof s=="string"?s:s.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var ss=45e3;function nr(s,e={}){let{timeout:t=ss,signal:r}=e;return new Promise((n,i)=>{if(r?.aborted){i(r.reason instanceof Error?r.reason:new Error("whenLive aborted"));return}if(s.phase?.name==="live"){n();return}let o=s.phase?.name;if(o==="error"||o==="ended"||o==="expired"){let h=s.phase,m=s.status??{phase:h.name,transportState:"disconnected",sessionId:h.sessionId,requestId:h.requestId,queue:h.queue,error:h.error};i(new ce(o==="ended"?"ended":o==="expired"?"expired":h.error?.kind??"transport-failed",m));return}let a,c,p=!1,d=h=>{p||(p=!0,c!==void 0&&clearTimeout(c),r?.removeEventListener("abort",u),a?.(),h?i(h):n())},u=()=>{d(r?.reason instanceof Error?r.reason:new Error("whenLive aborted"))};r?.addEventListener("abort",u,{once:!0});let l=()=>{let h=s.phase;return s.status??{phase:h?.name??"idle",transportState:"disconnected",sessionId:h?.sessionId,requestId:h?.requestId,queue:h?.queue,error:h?.error}},f=h=>d(new ce(h,l()));t>0&&(c=setTimeout(()=>{let h=l();h.elapsedMs===void 0&&(h.elapsedMs=t),d(new ce("never-live",h))},t)),a=s.onPhase(h=>{h?.name==="live"?d():h?.name==="error"?f(h.error?.kind??"transport-failed"):h?.name==="ended"?f("ended"):h?.name==="expired"&&f("expired")}),p&&a()})}function yn(s){switch(s.name){case"idle":return"Initializing\u2026";case"unavailable":return s.runtime?.reason?`Runtime unavailable \u2014 ${s.runtime.reason}`:"Runtime unavailable";case"queued":return s.queue?`Waiting in queue (position ${s.queue.position} of ${s.queue.depth})\u2026`:s.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return s.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return s.error?.reason?`Session failed \u2014 ${s.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var pa="session-api.prod.cloud.urun.sh",ua=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function fe(s){return s.trim().replace(/\/+$/,"")}function ar(s,e){let t=[],r=n=>{if(!n)return;let i=fe(n);i&&!t.includes(i)&&t.push(i)};r(s);for(let n of e??[])r(n);for(let n of Ca(s))r(n);return t}function bn(s){if(typeof s!="string"||s.length===0)return null;let e=new Date(s);return Number.isFinite(e.getTime())?e:null}var la=120,ha=1e3,ma=20,fa=5,ga=500,Sn=1e4,_a=3;function va(s){if(!s)return null;try{let e=new URL(s),t=e.pathname.replace(/\/api\/sessions\/create\/?$/,"");return fe(`${e.origin}${t}`)}catch{return null}}async function Rn(s){let e=ar(s.baseUrl,s.fallbackUrls),t=null,r=e.length>1;for(let n of e)try{return await wa(n,s,{pollAttempts:la,retryAfterLimitMs:r?ha:void 0})}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof De)throw t}throw t??new Error("[urun] session allocation failed")}async function wa(s,e,t){let r,n,i,o=s,a=0,c=new Set,p=Date.now()+t.pollAttempts*Sn;for(let d=0;d<t.pollAttempts;d++){n=i??await or(e),i=void 0;let u=Math.max(1,Math.min(ma,Math.floor((p-Date.now())/1e3))),l=!!r,f=Date.now(),h=r?await fetch(`${o}/api/session-requests/${encodeURIComponent(r)}?wait_s=${u}`,{headers:ir(e,n),signal:Ta((u+fa)*1e3)}):await fetch(`${o}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...ir(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(ya(e))});if(!r&&(h.status===307||h.status===308)){let w=va(h.headers.get("location"));if(w&&w!==o&&a<_a){a+=1,o=w;continue}throw new de(`[urun] session create redirected from ${o} without a usable target`,{httpStatus:h.status})}let m=await ns(h);if(h.ok&&(m.status==="allocated"||!m.status&&!!m.session_id)&&!!m.session_id){let w=m.session_id;if(!m.ws_url)throw new De(`[urun] gateway allocated session ${w} without ws_url`);if(!kn(m.ws_url))throw new De(`[urun] gateway allocated session ${w} with non-absolute ws_url`);return{baseUrl:o,sessionId:w,wsUrl:m.ws_url,endsAt:bn(m.ends_at),response:m}}if(h.status===202||m.status==="pending"||m.status==="queued"||m.queued){if(r=m.request_id||r,!r)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(ba(m,r))}catch{}let w=Date.now()-f<ga;l&&w&&await Ra(Sa(h,m,t.retryAfterLimitMs));continue}if((h.status===401||h.status===403)&&e.getAccessToken){let w=n??"";c.add(w);let P=await or(e,{forceRefresh:!0,reason:"unauthorized"});if(P&&!c.has(P)){i=P,r=void 0;continue}}let _=m.error_message||m.error_code||`HTTP ${h.status}`;throw new de(`[urun] session allocation failed at ${o}: ${_}`,{httpStatus:h.status})}throw new de(`[urun] timed out waiting for session allocation at ${o}`)}function ir(s,e){let t={"X-Tenant-Id":s.orgId,"X-Auth-Provider":s.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function or(s,e){return s.getAccessToken?await s.getAccessToken(e)??void 0:s.jwt}function ya(s){return{app:s.app,function:s.functionName,gpus:1,idempotency_key:s.idempotencyKey}}async function Tn(s){let e=ar(s.baseUrl,s.fallbackUrls),t=null;for(let r of e)try{let n={baseUrl:r,app:"",functionName:"",orgId:s.orgId,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider,idempotencyKey:""},i=await or(n),o=await fetch(`${fe(r)}/api/sessions/${encodeURIComponent(s.sessionId)}/viewer-connect`,{headers:ir(n,i)});if(!o.ok)throw new Error(`[urun] viewer-connect for ${s.sessionId} failed: HTTP ${o.status}`);let a=await ns(o);if(!a.ws_url||!kn(a.ws_url))throw new De(`[urun] viewer-connect returned no usable ws_url for ${s.sessionId}`);return{baseUrl:fe(r),sessionId:s.sessionId,wsUrl:a.ws_url,endsAt:bn(a.ends_at),response:a}}catch(n){if(t=n instanceof Error?n:new Error(String(n)),t instanceof De)throw t}throw t??new Error("[urun] viewer-connect failed")}async function Cn(s){try{let e=fe(s.baseUrl),t=await or(s),r=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...ir(s,t),"Content-Type":"application/json"},body:JSON.stringify({app:s.app,function:s.functionName})});if(r.status===404)return{status:"unknown-app"};if(!r.ok)return{status:"unavailable"};let n=await ns(r),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function ns(s){try{let e=await s.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function ba(s,e){let t={status:s.status==="queued"||s.queued?"queued":"pending",requestId:e};typeof s.queue_position=="number"&&typeof s.queue_depth=="number"&&(t.queue={position:s.queue_position,depth:s.queue_depth});let r=s.runtime_state;return(r==="unavailable"||r==="starting"||r==="busy")&&(t.runtime={state:r},typeof s.runtime_reason=="string"&&s.runtime_reason.length>0&&(t.runtime.reason=s.runtime_reason)),t}function Sa(s,e,t){let r=Number(s.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??r),i=t??Sn;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function Ra(s){return new Promise(e=>setTimeout(e,s))}function Ta(s){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(s):void 0}var De=class extends Error{};function kn(s){try{let e=new URL(s);return e.protocol==="ws:"||e.protocol==="wss:"}catch{return!1}}function Ca(s){try{return new URL(s).hostname!==pa?[]:ua}catch{return[]}}var U=class extends Error{status;code;constructor(e,t,r=t>0?`http_${t}`:"runtime_artifacts_error",n){super(e),this.name="RuntimeArtifactsError",this.status=t,this.code=r,n!==void 0&&(this.cause=n),Object.setPrototypeOf(this,new.target.prototype)}},kt=class extends U{constructor(e="[urun] runtime artifacts: unauthorized",t="unauthorized"){super(e,401,t),this.name="RuntimeArtifactsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},Et=class extends U{constructor(e="[urun] runtime artifacts: not found",t="not_found"){super(e,404,t),this.name="RuntimeArtifactNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}};function Pt(s){return{baseUrl:s.baseUrl,fallbackUrls:s.fallbackUrls,orgId:s.orgId,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider}}function xn(s){return new Ce(s)}var Ce=class{_options;constructor(e){this._options=e}async list(e){let r=Pn(await this._request(e,"")).artifacts;if(!Array.isArray(r))throw new U("[urun] runtime artifacts: response missing `artifacts`",0,"bad_response");return r.map(En)}async getDownloadUrl(e,t){let r=Pn(await this._request(t,`/${encodeURIComponent(e)}/download`)),n=r.download_url;if(typeof n!="string"||!Ea(n))throw new U("[urun] runtime artifacts: response missing HTTPS download_url",0,"bad_response");return{artifact:En(r.artifact),downloadUrl:n}}async _request(e,t){let r=ar(this._options.baseUrl,this._options.fallbackUrls),n=null;for(let i of r)try{return await this._requestFromBase(i,e,t)}catch(o){if(n=o instanceof Error?o:new Error(String(o)),n instanceof U&&Pa(n.status))throw n}throw n??new U("[urun] runtime artifacts request failed",0)}async _requestFromBase(e,t,r){let n=`${fe(e)}/api/sessions/${encodeURIComponent(t)}/artifacts${r}`,i=await this._resolveToken(),o=await fetch(n,{method:"GET",headers:this._headers(i)});if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await fetch(n,{method:"GET",headers:this._headers(i)}))}if(!o.ok){let{code:a,message:c}=await this._readError(o,e);throw xa(o.status,a,c)}try{return await o.json()}catch(a){throw new U(`[urun] runtime artifacts: invalid JSON response from ${fe(e)}`,0,"bad_response",a)}}async _resolveToken(){return this._options.getAccessToken?await this._options.getAccessToken()??void 0:this._options.jwt}_headers(e){let t={Accept:"application/json","X-Tenant-Id":this._options.orgId,"X-Auth-Provider":this._options.authProvider||"default"};return e&&(t.Authorization=`Bearer ${e}`),t}async _readError(e,t){let r=fe(t);try{let i=(await e.json()).error;if(i&&typeof i=="object"){let{code:o,message:a}=i;return{code:typeof o=="string"&&o.length>0?o:`http_${e.status}`,message:typeof a=="string"&&a.length>0?`[urun] runtime artifacts request failed at ${r}: ${a}`:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}}catch{}return{code:`http_${e.status}`,message:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}};function En(s){if(!s||typeof s!="object")throw new U("[urun] runtime artifacts: malformed artifact",0,"malformed_artifact");let e=s,t=ge(e,"artifact_id")||ge(e,"id"),r=ge(e,"filename"),n=ge(e,"kind"),i=ge(e,"status")||"ready",o=ka(e,"size_bytes"),a=ge(e,"sha256");if(!t||!r||!n||o==null||!a)throw new U("[urun] runtime artifacts: malformed artifact metadata",0,"malformed_artifact");return{artifactId:t,kind:n,filename:r,contentType:ge(e,"content_type")||"application/octet-stream",sizeBytes:o,sha256:a,status:i,createdAt:ge(e,"created_at"),expiresAt:ge(e,"expires_at")}}function ge(s,e){let t=s[e];return typeof t=="string"&&t.length>0?t:void 0}function ka(s,e){let t=s[e];return typeof t=="number"&&Number.isFinite(t)&&Number.isInteger(t)&&t>=0?t:void 0}function Ea(s){try{return new URL(s).protocol==="https:"}catch{return!1}}function Pa(s){return s===401||s===403}function xa(s,e,t){return s===401?new kt(t,e):s===404?new Et(t,e):new U(t,s,e)}function Pn(s){if(!s||typeof s!="object"||Array.isArray(s))throw new U("[urun] runtime artifacts: malformed response",0,"bad_response");return s}var Y=class extends Error{status;code;constructor(e,t){super(e),this.name="RecordingsError",this.status=t.status,this.code=t.code,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},Xe=class extends Y{constructor(e="[urun] recordings: unauthorized",t="unauthorized"){super(e,{status:401,code:t}),this.name="RecordingsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},xt=class extends Y{constructor(e="[urun] recordings: not found",t="not_found"){super(e,{status:404,code:t}),this.name="RecordingNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}},It=class extends Y{constructor(e="[urun] recordings: retain requires a temp recording",t="retain_not_temp"){super(e,{status:409,code:t}),this.name="RetainNotTempError",Object.setPrototypeOf(this,new.target.prototype)}},Dt=class extends Y{constructor(e="[urun] recordings: pin requires an active temp recording",t="pin_requires_active_temp"){super(e,{status:409,code:t}),this.name="PinRequiresActiveTempError",Object.setPrototypeOf(this,new.target.prototype)}},Mt=class extends Y{constructor(e="[urun] recordings: recording is permanent and locked",t="permanent_locked"){super(e,{status:409,code:t}),this.name="PermanentLockedError",Object.setPrototypeOf(this,new.target.prototype)}},Me=class extends Y{constructor(e="[urun] recordings: invalid retention duration",t="bad_duration",r=400){super(e,{status:r,code:t}),this.name="InvalidDurationError",Object.setPrototypeOf(this,new.target.prototype)}};function cr(s){return/^(\d+[smhdw])+$/.test(s)}function In(s){if(s==="pin")return{action:"pin"};if(cr(s))return{action:"retain",duration:s};throw new Me(`[urun] recordings: "${s}" is not a duration or "pin"`)}function Ia(s,e,t){let r=t||e||`HTTP ${s}`;if(s===401)return new Xe(r,e??"unauthorized");if(s===404)return new xt(r,e??"not_found");if(s===400)return new Me(r,e??"bad_request",400);if(s===409)switch(e){case"retain_not_temp":return new It(r,e);case"pin_requires_active_temp":return new Dt(r,e);case"permanent_locked":return new Mt(r,e)}return new Y(r,{status:s,code:e??`http_${s}`})}var Le=class{constructor(e){this._options=e;this._base=`${e.functionsUrl.replace(/\/+$/,"")}/recordings`}_options;_base;async list(e){let r=(await this._request("GET","",{params:e?{session_id:e}:void 0})).recordings;return Array.isArray(r)?r:[]}async get(e){return this._one(await this._request("GET",`/${encodeURIComponent(e)}`))}async retain(e,t){if(!cr(t))throw new Me(`[urun] recordings: "${t}" is not a valid retention duration`);return this._one(await this._request("POST",`/${encodeURIComponent(e)}/retain`,{body:{duration:t}}))}async pin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/pin`))}async unpin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/unpin`))}async permanent(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/permanent`))}async delete(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/delete`))}_one(e){let t=e.recording;if(!t||typeof t!="object")throw new Y("[urun] recordings: response missing `recording`",{status:0,code:"bad_response"});return t}async _request(e,t,r={}){let n=this._buildUrl(t,r.params),i=await this._resolveToken(),o=await this._fetch(n,e,i,r.body);if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await this._fetch(n,e,i,r.body))}if(!o.ok){let{code:a,message:c}=await this._readError(o);throw Ia(o.status,a,c)}return this._readJson(o)}_buildUrl(e,t){let r=`${this._base}${e}`,n=Object.entries(t??{}).filter(([,i])=>i!=null&&i!=="").map(([i,o])=>`${encodeURIComponent(i)}=${encodeURIComponent(o)}`).join("&");return n&&(r+=`?${n}`),r}_fetch(e,t,r,n){let i={Authorization:`Bearer ${r}`,apikey:r,Accept:"application/json","X-Tenant-Id":this._options.orgId};this._options.authProvider&&(i["X-Auth-Provider"]=this._options.authProvider);let o={method:t,headers:i};return n!==void 0&&(i["Content-Type"]="application/json",o.body=JSON.stringify(n)),fetch(e,o)}async _resolveToken(){if(this._options.getAccessToken){let t=await this._options.getAccessToken();if(t)return t}let e=this._options.jwt??this._options.apiKey;if(!e)throw new Xe("[urun] recordings: no credential \u2014 provide one of apiKey, jwt, or getAccessToken");return e}async _readJson(e){try{return await e.json()}catch{return{}}}async _readError(e){try{let r=(await e.json()).error;if(r&&typeof r=="object"){let{code:n,message:i}=r;return{code:typeof n=="string"?n:void 0,message:typeof i=="string"?i:`HTTP ${e.status}`}}}catch{}return{message:`HTTP ${e.status}`}}};function Dn(s){return new Le(s)}var Lo=ts(Ds());var Zs=ts(fo(),1);function xe(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function go(){return xe()?"Chrome111":void 0}function St(){if(!xe())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 _o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Cp(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 Hr(s=16){let e=Cp(s),t="";for(let r=0;r<s;r++)t+=_o[e[r]%_o.length];return t}function vo(s){return`stream:${s}`}var wo="urun-stream-v1";var en=1,Se={BINARY:0,TEXT:1,JSON:2,END:3},yo=Symbol("urun:stream:end");function bo(s){if(s===yo)return Uint8Array.from([en,Se.END]);let e,t;s instanceof Uint8Array?(e=Se.BINARY,t=s):s instanceof ArrayBuffer?(e=Se.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=Se.TEXT,t=new TextEncoder().encode(s)):(e=Se.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=en,r[1]=e,r.set(t,2),r}function So(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==en)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case Se.BINARY:return r.slice();case Se.TEXT:return new TextDecoder().decode(r);case Se.JSON:return JSON.parse(new TextDecoder().decode(r));case Se.END:return yo;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}function Ro(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 To=[1e3,2e3,4e3,8e3,3e4],Co=5,kp=15e3,ko=15e3,Eo=15e3,Ep=2e3,Pp=6e3,xp=2,Ip=750,Dp=3,Po=[1e3,2e3,4e3],Mp=15e3;var Lp={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function Rt(s){return s==="error"||s==="ended"||s==="expired"}var xo=3,Io=4e3,Do=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],Tt=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Zs.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_endsAt=null;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_currentEpoch=0;_consumerId=null;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Ap()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=t=>t!==null&&!t.closed&&!t.paused;return e(this._audioProducer)||e(this._videoProducer)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}_pastDeadline(){return this._endsAt!==null&&Date.now()>=this._endsAt.getTime()}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._endsAt!==null&&(e.endsAt=this._endsAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}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=Np(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!Rt(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let o=n.error_reason??n.errorReason,a=typeof o=="string"&&o?o:"session failed";this._setPhase("error",{error:{reason:a,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,n=typeof r=="number"?r:Number(r);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,Rt(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,o=()=>{if(i())throw new Error("TransportSession: connect cancelled")},a=async()=>{for(let u of this._connectUrls()){o();try{return await this._connectOnce(u,t,e),!0}catch(l){n=l instanceof Error?l:new Error(String(l)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let p=c?0:this._resolveConnection?xp:1;for(let u=0;u<p;u++)if(u>0&&(await Mo(Ip),o()),await a())return;if(this._resolveConnection)for(let u=0;u<Dp;u++){this._setState("reconnecting"),await Mo(Po[Math.min(u,Po.length-1)]),o();try{let l=await this._resolveConnection();o(),this.setAuth({jwt:l.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:l.url,sessionId:l.sessionId,iceServers:l.iceServers??this._options.iceServers}),l.endsAt!==void 0&&(this._endsAt=l.endsAt)}catch(l){if(i())throw new Error("TransportSession: connect cancelled");n=l instanceof Error?l:new Error(String(l));continue}if(await a())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw r||this._emitError(d),d}disconnect(){this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._cleanupSocket(),this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}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 n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(n=>{n.send(bo(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(r);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${ko}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},ko);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of r)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let n=this._awaitSendTransport().then(i=>i.produceData({label:vo(e),protocol:wo,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,n)=>{let i=()=>{p(),r(e)},o=u=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${u.message}`))},a=()=>{p(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${Eo}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Eo),p=()=>{clearTimeout(c),e.off("open",i),e.off("error",o),e.observer.off("close",a)},d=u=>{p();try{e.close()}catch{}n(u)};e.on("open",i),e.on("error",o),e.observer.on("close",a)})}_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){await this._publishTrack(e,t)}async _publishTrack(e,t){let r=e.kind==="video",n=r?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(r,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...r?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});r?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(r,e,t)}_rememberPublishIntent(e,t,r){let n={track:t,...r!==void 0?{name:r}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,n=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,n=(r?Lp[r]:void 0)??"provisioning",i=Rt(n);if(this._liveReached&&!i||Rt(this._phase.name))return;r!==void 0&&(this._lastServerStatus=r);let o=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,c=typeof o=="number"&&typeof a=="number";if(n==="expired"){let p=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:p,code:r,kind:"expired"}});return}if(n==="error"){let p=typeof e.reason=="string"&&e.reason?e.reason:r??"admission failed";this._setPhase("error",{error:{reason:p,code:r,kind:r==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:r,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:o,depth:a}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){xe()&&await St();let t=go(),r=new Lo.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??Do});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;r.on("connect",({dtlsParameters:i},o,a)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:i}),o()}catch(c){a(c)}}),r.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0;return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i)}}}),this._recvTransport=r}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=xo?!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>=xo?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,o=n?this._recvTransport:i?this._sendTransport:null;o&&(Promise.resolve(o.restartIce({iceParameters:r})).catch(a=>{this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&this._emitError(new Error("media transport failed (ice restart timeout)"),"failed")},Io)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},Io)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Do});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:n},i,o)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(a){o(a)}}),t.on("produce",({kind:n,rtpParameters:i,appData:o},a,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let p=o&&typeof o.name=="string"?o.name:void 0,d=setTimeout(()=>{let u=this._pendingProduce;if(!u||u.timeoutId!==d)return;this._pendingProduce=null;let l=new Ye(n,{stream:p,timeoutMs:Je});this._setPhase("error",{error:{reason:l.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",l),u.reject(l)},Je);this._pendingProduce={timeoutId:d,resolve:u=>{a({id:u})},reject:c};try{this._send(p?{type:"produce",kind:n,name:p,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(u){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(u)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:o},a,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:p=>a({id:p}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:o})}catch(p){i&&this._pendingDataProduce.delete(i),c(p)}}),t.on("connectionstatechange",n=>{if(r===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(r){console.warn("[urun] republish: mic re-produce after reconnect failed",r)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(r){console.warn("[urun] republish: camera re-produce after reconnect failed",r)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,n),n.on("message",a=>{try{let c=typeof a=="string"?new TextEncoder().encode(a):new Uint8Array(a);this._dispatchStreamData(r,So(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,o=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?o():n.on("open",o)}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 n=e.streamName??e.label;n&&this._tracksByName.set(n,r.track),this._liveReached||this._setPhase("live"),this._emitter.emit("track",r.track);let i=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._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[n,i]of this._tracksByName)i===r&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Ep:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Pp: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._isTerminalPhase()||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=0,r=null;for(let i of this._consumers.values()){let o=await Op(i);t+=o.total,o.framesDecoded!==null&&(r=(r??0)+o.framesDecoded)}if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;let n=Date.now();if(t>this._lastInboundTotal){this._lastInboundTotal=t,this._lastInboundAdvanceAt=n,t>0&&(this._mediaEverFlowed=!0),this._checkDecodeLiveness(r,n);return}this._mediaEverFlowed&&(this._mediaDeathHandled||n-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._isTerminalPhase()||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isTerminalPhase()||this._connectStartedAt===void 0||this._cancelPendingDial)return;if(!this.isOpen){this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this._attemptReconnect(void 0,!0);return}let e=this._recvTransport?.connectionState;(e==="disconnected"||e==="failed")&&(this._recvIceRestartTimer||(this._recvIceRestartAttempts=0),this._tryRestartRecvIce()||this._renegotiate());let t=this._sendTransport?.connectionState;(t==="disconnected"||t==="failed")&&(this._sendIceRestartTimer||(this._sendIceRestartAttempts=0),this._trySendIceRestart())}_attemptReconnect(e,t=!1){if(this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer)return;if(this._reconnectAttempts>=Co){this._setState("failed"),this._emitError(new Error(`Failed after ${Co} attempts`));return}let r=t?0:To[Math.min(this._reconnectAttempts,To.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let n=/\/ws\/rtc\/[^/?#]+/.test(r),i=this._sessionId&&!n?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((n,i)=>{let o=!1,a=!1,c=null,p=new WebSocket(e);this._ws=p;let d=()=>this._ws!==p||t!==this._generation,u=f=>{a||(a=!0,c&&clearTimeout(c),this._cancelPendingDial===l&&(this._cancelPendingDial=null),i(f))},l=f=>{try{p.close()}catch{}u(f)};this._cancelPendingDial=l,c=setTimeout(()=>{try{p.close()}catch{}u(new Error("TransportSession: connect timed out"))},kp),p.onopen=()=>{if(!a){if(d()){try{p.close()}catch{}u(new Error("TransportSession: connect superseded during dial"));return}o=!0,c&&clearTimeout(c),this._multiplexer=new We(p),p.send(JSON.stringify(this._startMessage(r))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),a=!0,this._cancelPendingDial===l&&(this._cancelPendingDial=null),n()}},p.onerror=()=>{o||u(new Error("WebSocket connection error"))},p.onclose=()=>{if(!o){u(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!Rt(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(r)}},p.onmessage=f=>{if(!(this._ws!==p||t!==this._generation)&&typeof f.data=="string")try{this._handleMessage(JSON.parse(f.data))}catch(h){this._emitter.emit("error",h instanceof Error?h:new Error(String(h)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Mp))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),sr(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),this._endsAt!==null&&(r.endsAt=this._endsAt),t?.error&&(r.error=t.error),this._phase=r,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||Rt(this._phase.name))return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function Mo(s){return new Promise(e=>setTimeout(e,s))}function Ap(){return Hr()}async function Op(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,n=i=>{if(!i||typeof i!="object")return;let o=i;if(o.type==="inbound-rtp"){let a=typeof o.bytesReceived=="number"?o.bytesReceived:0,c=typeof o.packetsReceived=="number"?o.packetsReceived:0;t+=a+c,typeof o.framesDecoded=="number"&&(r=(r??0)+o.framesDecoded)}};if(e instanceof Map)for(let i of e.values())n(i);else if(Array.isArray(e))for(let i of e)n(i);else e&&typeof e.forEach=="function"&&e.forEach(n);return{total:t,framesDecoded:r}}function Np(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 Jt=ts(require("yjs"));var Ao=require("y-websocket"),rn=require("y-protocols/awareness"),jp=1;function Oo(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function No(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,n)=>{let i=`${s.sessionId}/${t}`,o=new Ao.WebsocketProvider(s.serverUrl,i,r,{awareness:n,params:{dsv:String(jp),...s.token?{token:s.token}:{}},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return o.awareness},get synced(){return o.synced},onSync(a){let c=p=>a(p);return o.on("sync",c),()=>o.off("sync",c)},ensureConnected(){o.wsconnected||o.connect()},destroy(){o.destroy()}}}}var tn=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()}},Gr=class{_target=null;_bridges=[];connect=(e,t,r)=>{let n=new tn(e,t,r);return this._target?n.attach(this._target):this._bridges.push(n),n};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)}};function Xt(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var Kr="$bytes";function Fp(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function qp(s){if(!Xt(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===Kr&&typeof s[Kr]=="string"}function Up(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function $p(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 zp(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 sn(s){if(Fp(s))return{[Kr]:$p(Up(s))};if(Array.isArray(s))return s.map(sn);if(Xt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=sn(r);return e}return s}function Qt(s){if(qp(s))return zp(s[Kr]);if(Array.isArray(s))return s.map(Qt);if(Xt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=Qt(r);return e}return s}var jo=Symbol("urun:doc:path-absent");function Bp(s,e){let t=e.split("."),r=s;for(let n of t){if(r===null||typeof r!="object"||!(n in r))return jo;r=r[n]}return r}function Wp(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function nn(s,e){for(let[t,r]of Object.entries(e))if(Xt(r)){let n=s.get(t);if(!(n instanceof Jt.Map)){let i=n;n=new Jt.Map,s.set(t,n),Xt(i)&&nn(n,i)}nn(n,r)}else{if(Wp(s.get(t),r))continue;s.set(t,r)}}var Vp=Symbol("urun:doc:local"),Yr=class{_doc=new Jt.Doc;_root=this._doc.getMap("session");_awareness=new rn.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=sn(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return Qt(r);let n=Bp(r,e);return n===jo?t:Qt(n)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new on(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(()=>{nn(this._root,e)},Vp)}snapshot(){return this._root.toJSON()}notify(){let e=Qt(this.snapshot());for(let t of this._listeners)t(e)}},on=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let n=r.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function Fo(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}var an="activity",qo=15e3,Qr=["pointerdown","pointermove","keydown","wheel","touchstart"];function Jr(s){let e=s.now??Date.now,t=s.windowTarget!==void 0?s.windowTarget:typeof window<"u"?window:null,r=s.documentTarget!==void 0?s.documentTarget:typeof document<"u"?document:null,n=!1,i,o=()=>{if(n)return;let d=e();if(!(i!==void 0&&d-i<15e3)){i=d;try{s.awareness.setLocalStateField(an,{at:d})}catch{}}},a=()=>o(),c=()=>{(!r||r.visibilityState===void 0||r.visibilityState==="visible")&&o()};if(t)for(let d of Qr)t.addEventListener(d,a,{passive:!0,capture:!0});r&&r.addEventListener("visibilitychange",c);let p=null;return s.isProducing&&(p=setInterval(()=>{if(!n)try{s.isProducing?.()&&o()}catch{}},15e3),p.unref?.()),o(),{touch:o,dispose(){if(!n){if(n=!0,t)for(let d of Qr)t.removeEventListener(d,a,{capture:!0});r&&r.removeEventListener("visibilitychange",c),p&&(clearInterval(p),p=null)}}}}var Uo=250;function Xr(s){if(typeof document>"u"||typeof window>"u"||typeof document.addEventListener!="function"||typeof window.addEventListener!="function")return()=>{};let e=0,t=()=>{if(document.visibilityState==="hidden")return;let r=Date.now();r-e<250||(e=r,s())};return document.addEventListener("visibilitychange",t),window.addEventListener("pageshow",t),window.addEventListener("focus",t),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("pageshow",t),window.removeEventListener("focus",t)}}var $o="video/mp4";function Zr(s,e={}){let t=e.timesliceMs??1e3,r=null,n=null,i=!1,o=(a,c,p)=>{let d=typeof MediaRecorder>"u"?void 0:MediaRecorder;if(!d)throw new Error("[urun] stream.chunks(): MediaRecorder is unavailable in this runtime. Pass { source } to chunks() to inject a byte-tap (e.g. a Node/werift consumer).");let u=e.mimeType??(typeof d.isTypeSupported=="function"&&d.isTypeSupported($o)?$o:void 0),l=new MediaStream([a]),f=new d(l,u?{mimeType:u}:void 0);r=f;let h=Promise.resolve();f.ondataavailable=m=>{let g=m.data;i||!g||g.size===0||(h=h.then(async()=>{let _=new Uint8Array(await g.arrayBuffer());i||c(_)}))},f.onstop=()=>{h.then(()=>{i||p()})},f.onerror=()=>{h.then(()=>{i||p()})},f.start(t)};return{start(a,c){if(r||i)return;let p=s.track();if(p){o(p,a,c);return}n=s.onTrack(d=>{!d||r||i||(n?.(),n=null,o(d,a,c))})},stop(){if(i)return;i=!0,n?.(),n=null;let a=r;if(r=null,a&&a.state!=="inactive")try{a.stop()}catch{}}}}function Hp(s){let e=s;return typeof e[Symbol.asyncIterator]=="function"||(e[Symbol.asyncIterator]=function(){let t=s.getReader();return{next(){return t.read()},async return(){try{await t.cancel()}catch{}try{t.releaseLock()}catch{}return{value:void 0,done:!0}},[Symbol.asyncIterator](){return this}}}),e}function zo(s,e){let t=null,r=!1,n=!1,i=new ReadableStream({pull(o){r||(r=!0,t=s(e),t.start(a=>{if(!n)try{o.enqueue(a)}catch{}},()=>{if(!n){n=!0;try{o.close()}catch{}}}))},cancel(){n=!0,t?.stop(),t=null}},new CountQueuingStrategy({highWaterMark:0}));return Hp(i)}var Gp=new Set;function pn(s){if(s.functionsUrl)return{functionsUrl:s.functionsUrl,orgId:s.orgId,apiKey:s.apiKey,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider}}var Kp="rpc",un=3e4,Yp="rpc-resp";function Qp(s){return`${Yp}:${s}`}function cn(){return Hr()}function Jp(s){if(s&&typeof s=="object"){let e=s.error;if(e&&typeof e=="object"){let{message:t,code:r}=e;return{message:typeof t=="string"?t:JSON.stringify(e),code:typeof r=="string"?r:void 0}}if(typeof e=="string")return{message:e}}return{message:typeof s=="string"?s:JSON.stringify(s)}}function Xp(s,e,t,r,n,i,o,a,c,p){let d=[],u=null,l=!1,f=null,h=!1,m,g,_=new Promise((x,Te)=>{m=x,g=Te});_.catch(()=>{});let w=o(),P=null,I=null,E=null,D=null,ee=!0,Re=()=>{E&&(clearTimeout(E),E=null),D&&(D(),D=null)},te=!1,ae=()=>{te||!h||(te=!0,s.set({rpc:{[e]:null}}))},tr=()=>{ee=!1,Re(),P?.(),P=null,I?.(),I=null,a?.removeEventListener("abort",gn),w.dispose(),ae()},es=()=>{if(u){if(d.length>0){let x=u;u=null,x.resolve({value:d.shift(),done:!1})}else if(f!==null){let x=u;u=null,x.reject(f)}else if(l){let x=u;u=null,x.resolve({value:void 0,done:!0})}}},ea=x=>{l||(d.push(x),es())},ze=x=>{l||(f=x,l=!0,g(x),tr(),es())},fn=x=>{l||(l=!0,m(x),tr(),es())},gn=()=>{let x=a?.reason;ze(x instanceof re?x:new Ie(e))},ta=x=>{if(!(l||!x||typeof x!="object"))switch(ae(),x.t){case"delta":typeof x.delta=="string"&&ea(x.delta);break;case"response":fn(x.body);break;case"error":{let{message:Te,code:Be}=Jp(x.body);ze(new re(Te,{requestId:e,code:x.code??Be}));break}}},ra=()=>{let x=w.messages()[Symbol.asyncIterator]();P=()=>{x.return?.(void 0)};let Te=()=>{ee&&x.next().then(Be=>{if(ee){if(Be.done){l||fn(void 0);return}ta(Be.value),Te()}},Be=>{ee&&ze(Be)})};Te()},_n=()=>{if(!h){if(h=!0,a){if(a.aborted){ze(new Ie(e));return}a.addEventListener("abort",gn,{once:!0})}I=c?.(x=>ze(x))??null,ra(),s.set({rpc:{[e]:{args:t,respond_on:r,consumer_id:n,stream:i}}}),p&&p>0&&!s.synced&&(E=setTimeout(()=>{E=null,!l&&!s.synced&&ze(new Ge(p,e))},p),D=s.onSynced(()=>Re()))}};return{deltas:{[Symbol.asyncIterator](){return{next(){if(_n(),d.length>0)return Promise.resolve({value:d.shift(),done:!1});if(f!==null){let x=f;return f=null,Promise.reject(x)}return l?Promise.resolve({value:void 0,done:!0}):new Promise((x,Te)=>{u={resolve:x,reject:Te}})},return(){return l||(l=!0,m(void 0),tr()),Promise.resolve({value:void 0,done:!0})},throw(x){return l||(l=!0,g(x),tr()),Promise.reject(x)}}}},body:_,start:_n}}function Bo(s){if(s&&typeof s=="object"){let{epoch:e,by:t}=s,r={epoch:typeof e=="number"?e:0};return(t==="runtime"||t==="browser")&&(r.by=t),r}}function Zp(s,e){let r=s.get("streams")?.[e];if(!r||typeof r!="object")return null;let{kind:n,rt:i,br:o}=r,a={};(n==="audio"||n==="video"||n==="data")&&(a.kind=n);let c=Bo(i);c&&(a.rt=c);let p=Bo(o);return p&&(a.br=p),a}var dn=class{constructor(e,t,r,n,i){this._name=e;this._transport=t;this._streamData=r;this._controlDoc=n;this._onActivity=i;this._track=this._transport.getTrackByName(this._name)??null,this._unsubscribeTransport=this._transport.on("track",()=>{let o=this._transport.getTrackByName(this._name)??null;o!==this._track&&this._setTrack(o)})}_name;_transport;_streamData;_controlDoc;_onActivity;_track=null;_handlers=new Map;_unsubscribeTransport=null;_subscribed=!1;_messageConsumers=new Set;_dataUnsub=null;_replay=[];_disposed=!1;messages(){this._ensureSubscribed();let e=this;return{[Symbol.asyncIterator](){let t=[...e._replay],r=null,n=!1,i={push(a){if(!n)if(r){let c=r;r=null,c({value:a,done:!1})}else t.push(a)},end(){if(n=!0,r){let a=r;r=null,a({value:void 0,done:!0})}}};e._messageConsumers.add(i);let o=()=>{n=!0,e._messageConsumers.delete(i)};return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):n?Promise.resolve({value:void 0,done:!0}):new Promise(a=>{r=a})},return(){return o(),Promise.resolve({value:void 0,done:!0})}}}}}_ensureSubscribed(){this._subscribed||this._disposed||(this._subscribed=!0,this._streamData&&(this._dataUnsub=this._streamData.onData(this._name,e=>this._deliver(e))))}_deliver(e){this._replay.push(e);for(let t of this._messageConsumers)t.push(e)}get track(){let e=this._transport.getTrackByName(this._name)??this._track;return e!==this._track&&this._setTrack(e),this._track}_claimBrowserProducer(e){if(!this._controlDoc)return;let t=this._controlDoc(),r=Zp(t,this._name),n=r?.br;if(n?.by==="runtime")throw new Ke(this._name,"runtime","browser");if(n)return;let i={br:{epoch:1}};r?.rt&&(i.rt=r.rt);let o=r?.kind??e;o&&(i.kind=o),t.set({streams:{[this._name]:i}})}async attach(e){this._onActivity?.(),this._claimBrowserProducer("audio"),await this._transport.addTrack(e,this._name)}async attachVideo(e){this._onActivity?.(),this._claimBrowserProducer("video"),await this._transport.addVideoTrack(e,this._name)}async emit(e,t={}){if(this._onActivity?.(),this._claimBrowserProducer("data"),!this._streamData)throw new Error("[urun] stream.emit requires the data-stream transport (no streamData wired)");await this._streamData.sendData(this._name,e,t)}async detach(){this._transport.removeTrack()}async detachVideo(){this._transport.stopVideo()}async seek(e){if(e!=="live"&&(!Number.isFinite(e)||e<0))throw new Error('[urun] stream.seek target must be "live" or a non-negative number of seconds');this._transport.seekStream(this._name,e)}chunks(e={}){let t=e.source??Zr;return zo(t,{track:()=>this.track,onTrack:n=>this.on("track",n)})}onSeeked(e){return this._transport.on("seeked",(t,r)=>{t===this._name&&e(r)})}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e)}}dispose(){this._disposed=!0,this._unsubscribeTransport?.(),this._unsubscribeTransport=null,this._handlers.clear(),this._dataUnsub?.(),this._dataUnsub=null;for(let e of this._messageConsumers)e.end();this._messageConsumers.clear()}_setTrack(e){this._track=e,e&&e.addEventListener("ended",()=>{this._track===e&&this._setTrack(null)},{once:!0});let t=this._handlers.get("track");if(t)for(let r of t)r(e)}},Ct=class s{_sessionId;_multiplexer;_transport;_docs=new Map;_streams=new Map;_docConnector=new Gr;_streamData;_presence=null;_activity=null;_activeRequests=new Set;_recordingsAuth;_artifactsAuth;_recordingsAccessor=null;_artifactsAccessor=null;_recoveryHooks=new Set;_lifecycleUnsub=null;constructor(e,t,r,n,i){this._sessionId=e,this._multiplexer=t,this._transport=r,this._recordingsAuth=n,this._artifactsAuth=i,this._streamData=Ro(r),this._wireControlDocIncarnation(),this._lifecycleUnsub=Xr(()=>this.recover()),this._activity=Jr({awareness:this.doc("control").awareness,isProducing:()=>this._transport.isProducingMedia===!0})}_wireControlDocIncarnation(){let e=this.doc("control");this._transport.applyControlDocState(e.get()),e.on("change",t=>{this._transport.applyControlDocState(t)})}static async attach(e,t){let r=await Tn({baseUrl:t.baseUrl,fallbackUrls:t.fallbackUrls,sessionId:e,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),n=t.getAccessToken?await t.getAccessToken()??void 0:t.jwt,i=new Ve,o=new Tt({url:r.wsUrl,orgId:t.orgId,jwt:n,authProvider:t.authProvider,sessionId:e,iceServers:r.response.ice_servers}),a=new s(e,i,o,pn(t),Pt({...t,baseUrl:r.baseUrl}));return o.on("connected",()=>{o.multiplexer&&i.setTarget(o.multiplexer)}),o.setConnection({url:r.wsUrl,sessionId:e,iceServers:r.response.ice_servers}),o.setEndsAt(r.endsAt),xe()&&await St(),a.setDocTransport({wsUrl:r.wsUrl,token:n}),await o.connect({role:"viewer"}),a}get id(){return this._sessionId}get phase(){return this._transport.phase}get endsAt(){return this._transport.endsAt}get status(){return this._transport.status}onPhase(e){return e(this._transport.phase),this._transport.on("phase",e)}whenLive(e){return nr(this,e)}get recordings(){if(this._recordingsAccessor)return this._recordingsAccessor;let e=this._recordingsAuth;if(!e)throw new Error("[urun] session.recordings requires `functionsUrl` to be configured on the App()/Session.attach() options (the eensx /functions/v1 base URL).");let t=new Le(e);return this._recordingsAccessor={list:r=>t.list(r??this._sessionId),get:r=>t.get(r),retain:(r,n)=>t.retain(r,n),pin:r=>t.pin(r),unpin:r=>t.unpin(r),permanent:r=>t.permanent(r),delete:r=>t.delete(r)},this._recordingsAccessor}get artifacts(){return this._artifactsAccessor?this._artifactsAccessor:(this._requireArtifactsAuth(),this._artifactsAccessor={list:e=>new Ce(this._requireArtifactsAuth()).list(e??this._sessionId),getDownloadUrl:(e,t)=>new Ce(this._requireArtifactsAuth()).getDownloadUrl(e,t??this._sessionId)},this._artifactsAccessor)}setArtifactsAuth(e){this._artifactsAuth=e}_requireArtifactsAuth(){let e=this._artifactsAuth;if(!e)throw new Error("[urun] session.artifacts requires a session-api `baseUrl` auth bag.");return e}setSessionId(e){if(e===this._sessionId)return;this._multiplexer.rewriteSessionChannels?.call(this._multiplexer,this._sessionId,e),this._sessionId=e;for(let r of this._docs.values())r.setSessionId(e)}stream(e){let t=this._streams.get(e);return t||(t=new dn(e,this._transport,this._streamData,()=>this.doc("control"),()=>this._activity?.touch()),this._streams.set(e,t)),t}doc(e){let t=this._docs.get(e);return t||(t=new Yr(e,this._sessionId,Gp.has(e)?null:this._docConnector.connect),this._docs.set(e,t)),t}get presence(){return this._presence||(this._presence=Fo(this.doc("control").awareness)),this._presence}touch(){this._activity?.touch()}connectDocs(e){this._docConnector.setTarget(e)}setDocTransport(e){this.connectDocs(No({serverUrl:Oo(e.wsUrl),sessionId:this._sessionId,token:e.token,WebSocketPolyfill:e.webSocket}))}useStreamDataTransport(e){if(this._streams.size>0)throw new Error("[urun] useStreamDataTransport must be called before opening any stream");this._streamData=e}sendImage(e){return this.request({reference_image:{value:e}})}sendImageLegacyDesired(e){this.doc("control").set({desired:{reference_image:{value:e}}})}request(e,t={}){let r=cn(),n=new AbortController;t.signal&&(t.signal.aborted?n.abort(t.signal.reason):t.signal.addEventListener("abort",()=>n.abort(t.signal.reason),{once:!0}));let i=null;if(typeof t.timeout=="number"&&t.timeout>=0){let a=t.timeout;i=setTimeout(()=>n.abort(new He(a,r)),a)}let o=this._consumeResponse(r,e,!1,n.signal);return o.start(),o.body.finally(()=>{i&&clearTimeout(i)})}_consumeResponse(e,t,r,n,i){this._activity?.touch();let o=this.doc(Kp),a=Qp(e);return Xp(o,e,t,a,this._streamData.consumerId,r,()=>this.stream(a),n,c=>(this._activeRequests.add(c),()=>this._activeRequests.delete(c)),i??un)}requestStream(e,t={}){let r=cn();return this._consumeResponse(r,e,!0,t.signal,t.docSyncTimeout).deltas}complete(e,t={}){let r=cn(),n=this._consumeResponse(r,e,!1,t.signal,t.docSyncTimeout);return n.start(),n.body}recover(){this._transport.recover();for(let e of this._docs.values())e.ensureConnected();for(let e of Array.from(this._recoveryHooks))try{e()}catch(t){console.warn("[urun] session recovery hook failed:",t)}}onRecovery(e){return this._recoveryHooks.add(e),()=>this._recoveryHooks.delete(e)}disconnect(){this._lifecycleUnsub?.(),this._lifecycleUnsub=null,this._activity?.dispose(),this._activity=null,this._recoveryHooks.clear();let e=Array.from(this._activeRequests);this._activeRequests.clear();for(let t of e)try{t(new Qe)}catch{}for(let t of this._docs.values())t.dispose();this._docs.clear();for(let t of this._streams.values())t.dispose();this._streams.clear(),this._transport.disconnect()}};var eu=new Set(["then","catch","finally","toJSON",Symbol.toPrimitive]);function Wo(s,e){return new Proxy({},{get(t,r){if(!(eu.has(r)||typeof r!="string"))return n=>{let i=n??{},o=()=>`s_${Date.now()}_${Math.random().toString(36).slice(2)}`,a=o(),c=new Ve,p=new Tt({url:"",orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider,sessionId:a}),d=new Ct(a,c,p,pn(e),Pt(e)),u=async l=>{let f=await Rn({baseUrl:e.baseUrl,fallbackUrls:e.fallbackUrls,app:s,functionName:r,orgId:e.orgId,jwt:e.jwt,getAccessToken:e.getAccessToken,authProvider:e.authProvider,idempotencyKey:l,onAdmission:m=>p.reportAdmission(m)}),h=e.getAccessToken?await e.getAccessToken()??void 0:e.jwt;return d.setSessionId(f.sessionId),d.setArtifactsAuth(Pt({...e,baseUrl:f.baseUrl})),p.setEndsAt(f.endsAt),{url:f.wsUrl,sessionId:f.sessionId,jwt:h,iceServers:f.response.ice_servers,endsAt:f.endsAt}};return p.setConnectionResolver(()=>u(o())),p.on("connected",()=>{p.multiplexer&&c.setTarget(p.multiplexer)}),(async()=>{let l;try{l=await u(a)}catch(f){console.error(`[urun] Failed to create session for ${r}:`,f);let h=f instanceof Error?f:new Error(String(f)),m=f instanceof de?f.httpStatus:void 0;p.reportAllocationFailure(h,m);return}p.setAuth({jwt:l.jwt,authProvider:e.authProvider,orgId:e.orgId}),p.setConnection({url:l.url,sessionId:l.sessionId,iceServers:l.iceServers}),xe()&&await St(),d.setDocTransport({wsUrl:l.url,token:l.jwt}),await p.connect({app:s,functionName:r,args:i})})().catch(l=>{console.error(`[urun] Failed to connect session for ${r}:`,l)}),d}}})}var Vo=3e4,Ho="stream:",ln=class{_ws;_multiplexer;_pendingRpc=new Map;_rpcId=0;constructor(e,t){this._ws=e,this._multiplexer=t,this._ws.addEventListener("message",r=>{let n;try{n=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}if(n.rpcId&&this._pendingRpc.has(n.rpcId)){let i=this._pendingRpc.get(n.rpcId);this._pendingRpc.delete(n.rpcId),clearTimeout(i.timer),n.error?i.reject(new Error(n.error)):i.resolve(n.result)}})}async get(e){return this._sendRpc("store.get",{key:e})}async has(e){return await this._sendRpc("store.has",{key:e})}on(e,t){let r=`${Ho}${e}`;return this._multiplexer.on(r,n=>{t(n)})}emit(e,t){let r=`${Ho}${e}`,n=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{data:t};this._multiplexer.emit(r,n)}_getInternals(){return{multiplexer:this._multiplexer,ws:this._ws}}_sendRpc(e,t){return new Promise((r,n)=>{if(!this._ws||this._ws.readyState!==WebSocket.OPEN){n(new Error("WebSocket not open"));return}let i=String(++this._rpcId),o=setTimeout(()=>{this._pendingRpc.has(i)&&(this._pendingRpc.delete(i),n(new Error(`RPC request "${e}" timed out after ${Vo}ms`)))},Vo);this._pendingRpc.set(i,{resolve:r,reject:n,timer:o}),this._ws.send(JSON.stringify({rpcId:i,type:e,...t}))})}};function Go(s){let r=`${s.baseUrl.replace(/\/$/,"").replace(/^http/,"ws")}/store/${encodeURIComponent(s.orgId)}`,n=new WebSocket(r);(s.jwt||s.apiKey)&&n.addEventListener("open",()=>{n.send(JSON.stringify({type:"auth",orgId:s.orgId,jwt:s.jwt,authProvider:s.authProvider,apiKey:s.apiKey}))});let i=new We(n);return new ln(n,i)}var tu='video/mp4; codecs="avc1.42E01E"';function Ko(s,e){let t=e?.codec??tu,r=document.createElement("video");r.muted=!0,r.playsInline=!0;let n=new MediaSource,i=URL.createObjectURL(n);r.src=i,n.addEventListener("sourceopen",()=>{let l;try{l=n.addSourceBuffer(t)}catch(g){throw g instanceof DOMException&&g.name==="NotSupportedError"?new Error(`Codec not supported: "${t}". Ensure the codec string matches the fMP4 container format. Common values: video/mp4; codecs="avc1.42E01E" (H.264 Baseline), video/mp4; codecs="avc1.4D401F" (H.264 Main).`):g}let f=s.getReader();function h(){return l.updating?new Promise(g=>{l.addEventListener("updateend",()=>g(),{once:!0})}):Promise.resolve()}async function m(){try{for(;;){let{done:g,value:_}=await f.read();if(g){await h(),n.readyState==="open"&&n.endOfStream();return}await h();try{l.appendBuffer(_)}catch(w){if(w instanceof DOMException&&w.name==="QuotaExceededError"){let P=l.buffered;if(P.length>0){let I=P.start(P.length-1);l.remove(0,I),await h(),l.appendBuffer(_)}else throw w}else throw w}}}catch{if(n.readyState==="open")try{n.endOfStream("decode")}catch{}}}m()}),r.play().catch(()=>{});let o=r,a=o.captureStream??o.mozCaptureStream;if(!a)throw new Error("captureStream() is not supported in this browser. videoStream() requires HTMLMediaElement.captureStream() support.");let c=a.call(r),p=c.getTracks(),d=0,u=p.length;if(u===0)r.addEventListener("emptied",()=>{URL.revokeObjectURL(i)},{once:!0});else for(let l of p)l.addEventListener("ended",()=>{d++,d>=u&&URL.revokeObjectURL(i)});return c}function Yo(s){return s.status.startsWith("pending_")}var Zt=class extends Error{constructor(){super("no getUserMedia in this environment \u2014 in headless/Node consumers, inject a media source via new CaptureController({ getUserMedia }) (e.g. a wrtc/werift capture)"),this.name="CaptureUnavailableError",Object.setPrototypeOf(this,new.target.prototype)}};function Qo(s){let e=[];return s.audio&&e.push("audio"),s.video&&e.push("video"),e.join("+")}function ru(s,e){return e==="audio"?s.getAudioTracks():s.getVideoTracks()}function su(s,e){let t=s.getTracks();if(t.length===1&&t[0]===e)return s;try{return new MediaStream([e])}catch{return s}}function hn(s,e){for(let t of[...s.lostListeners])try{t(e)}catch{}}var er=class{claims=new Map;injectedGetUserMedia;queue=Promise.resolve();constructor(e){this.injectedGetUserMedia=e?.getUserMedia}claim(e,t){return this.enqueue(async()=>{let r=this.claims.get(e);r&&(this.claims.delete(e),r.released=!0,r.track=null,r.stream=null,hn(r,new Error(`${e} capture claim superseded by a newer claim`)));let n=this.createState(e,t);return this.claims.set(e,n),await this.converge(n),n.claim})}idle(){return this.queue.then(()=>{})}enqueue(e){let t=this.queue.then(e);return this.queue=t.then(()=>{},()=>{}),t}resolveGetUserMedia(){if(this.injectedGetUserMedia)return this.injectedGetUserMedia;let e=typeof navigator<"u"?navigator.mediaDevices:void 0;if(!e?.getUserMedia)throw new Zt;return t=>e.getUserMedia(t)}async converge(e){for(let o of this.claims.values())o.track&&(o.track.stop(),o.track=null,o.stream=null);if(this.claims.size===0)return;let t=this.resolveGetUserMedia(),r={audio:this.claims.get("audio")?.constraints??!1,video:this.claims.get("video")?.constraints??!1},n;try{n=await t(r)}catch(o){let a=`one-capture getUserMedia(${Qo(r)}) failed`,c=o instanceof Error?o.message:String(o);for(let p of[...this.claims.values()])if(this.claims.delete(p.kind),p.released=!0,p!==e){let d=new Error(`${a} \u2014 ${p.kind} capture lost: ${c||o}`);d.cause=o,hn(p,d)}throw o}let i=[...this.claims.values()].sort((o,a)=>o===e?1:a===e?-1:0);for(let o of i){let a=ru(n,o.kind)[0]??null;if(o.released){a?.stop();continue}if(!a){this.claims.delete(o.kind),o.released=!0;let c=Object.assign(new Error(`one-capture getUserMedia(${Qo(r)}) returned no ${o.kind} track`),{name:"NotFoundError"});if(o===e)throw c;hn(o,c);continue}if(o.track=a,o.stream=su(n,a),o!==e)for(let c of[...o.trackListeners])try{c(a,o.stream)}catch{}}}createState(e,t){let r=this,n={kind:e,constraints:t,track:null,stream:null,released:!1,trackListeners:new Set,lostListeners:new Set,claim:{kind:e,get track(){return n.track},get stream(){return n.stream},update(i){return r.enqueue(async()=>{if(n.released)throw new Error(`${e} capture claim already released`);if(n.constraints=i,await r.converge(n),!n.track)throw new Error(`${e} capture update yielded no track`);return n.track})},release(){n.released||(n.released=!0,r.claims.get(e)===n&&r.claims.delete(e),n.track?.stop(),n.track=null,n.stream=null)},onTrack(i){return n.trackListeners.add(i),()=>n.trackListeners.delete(i)},onLost(i){return n.lostListeners.add(i),()=>n.lostListeners.delete(i)}}};return n}},nu=null;function Jo(){return nu??=new er}var mn="input",Xo=30;function Zo(s){let e=s.now??Date.now,t=s.field??mn,r=1e3/Math.max(s.hz??30,.001),n=new Set,i=0,o=0,a=0,c=0,p,d=null,u=!1,l=()=>{if(u)return;p=e(),c+=1;let h={keys:[...n],buttons:i,pointer:{x:o,y:a},seq:c,at:p};try{s.awareness.setLocalStateField(t,h)}catch{}},f=()=>{if(u)return;let h=e();if(p===void 0||h-p>=r){d&&(clearTimeout(d),d=null),l();return}if(d)return;let m=Math.max(r-(h-p),0);d=setTimeout(()=>{d=null,l()},m),d.unref?.()};return{keyDown(h){let m=String(h).toLowerCase();n.has(m)||(n.add(m),f())},keyUp(h){let m=String(h).toLowerCase();n.delete(m)&&f()},setButtons(h){let m=Number.isFinite(h)?Number(h):0;m!==i&&(i=m,f())},movePointer(h,m){let g=Number.isFinite(h)?Number(h):0,_=Number.isFinite(m)?Number(m):0;g===0&&_===0||(o+=g,a+=_,f())},heldKeys(){return[...n]},clear(){u||(n.clear(),i=0,d&&(clearTimeout(d),d=null),l())},dispose(){if(u)return;let h=n.size>0||i!==0;n.clear(),i=0,d&&(clearTimeout(d),d=null),h&&l(),u=!0}}}
|