1(function($,q){typeof exports=="object"&&typeof module<"u"?module.exports=q():typeof define=="function"&&define.amd?define(q):($=typeof globalThis<"u"?globalThis:$||self,$.mediasoupClient=q())})(this,(function(){"use strict";var Kr=Object.defineProperty;var cr=$=>{throw TypeError($)};var Jr=($,q,U)=>q in $?Kr($,q,{enumerable:!0,configurable:!0,writable:!0,value:U}):$[q]=U;var C=($,q,U)=>Jr($,typeof q!="symbol"?q+"":q,U),dr=($,q,U)=>q.has($)||cr("Cannot "+U);var N=($,q,U)=>(dr($,q,"read from private field"),U?U.call($):q.get($)),V=($,q,U)=>q.has($)?cr("Cannot add the same private member more than once"):q instanceof WeakSet?q.add($):q.set($,U),B=($,q,U,re)=>(dr($,q,"write to private field"),re?re.call($,U):q.set($,U),U);function $(m,_){for(var v=0;v<_.length;v++){const s=_[v];if(typeof s!="string"&&!Array.isArray(s)){for(const D in s)if(D!=="default"&&!(D in m)){const R=Object.getOwnPropertyDescriptor(s,D);R&&Object.defineProperty(m,D,R.get?R:{enumerable:!0,get:()=>s[D]})}}}return Object.freeze(Object.defineProperty(m,Symbol.toStringTag,{value:"Module"}))}function q(m){return m&&m.__esModule&&Object.prototype.hasOwnProperty.call(m,"default")?m.default:m}var U={},re={exports:{}},Qe,at;function lr(){if(at)return Qe;at=1;var m=1e3,_=m*60,v=_*60,s=v*24,D=s*7,R=s*365.25;Qe=function(t,a){a=a||{};var g=typeof t;if(g==="string"&&t.length>0)return E(t);if(g==="number"&&isFinite(t))return a.long?f(t):o(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function E(t){if(t=String(t),!(t.length>100)){var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(a){var g=parseFloat(a[1]),h=(a[2]||"ms").toLowerCase();switch(h){case"years":case"year":case"yrs":case"yr":case"y":return g*R;case"weeks":case"week":case"w":return g*D;case"days":case"day":case"d":return g*s;case"hours":case"hour":case"hrs":case"hr":case"h":return g*v;case"minutes":case"minute":case"mins":case"min":case"m":return g*_;case"seconds":case"second":case"secs":case"sec":case"s":return g*m;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return g;default:return}}}}function o(t){var a=Math.abs(t);return a>=s?Math.round(t/s)+"d":a>=v?Math.round(t/v)+"h":a>=_?Math.round(t/_)+"m":a>=m?Math.round(t/m)+"s":t+"ms"}function f(t){var a=Math.abs(t);return a>=s?S(t,a,s,"day"):a>=v?S(t,a,v,"hour"):a>=_?S(t,a,_,"minute"):a>=m?S(t,a,m,"second"):t+" ms"}function S(t,a,g,h){var k=a>=g*1.5;return Math.round(t/g)+" "+h+(k?"s":"")}return Qe}var We,ot;function ur(){if(ot)return We;ot=1;function m(_){s.debug=s,s.default=s,s.coerce=S,s.disable=o,s.enable=R,s.enabled=f,s.humanize=lr(),s.destroy=t,Object.keys(_).forEach(a=>{s[a]=_[a]}),s.names=[],s.skips=[],s.formatters={};function v(a){let g=0;for(let h=0;h<a.length;
vendor: 4,293 bytes, line 1
1h++)g=(g<<5)-g+a.charCodeAt(h),g|=0;return s.colors[Math.abs(g)%s.colors.length]}s.selectColor=v;function s(a){let g,h=null,k,T;function e(...r){if(!e.enabled)return;const i=e,p=Number(new Date),c=p-(g||p);i.diff=c,i.prev=g,i.curr=p,g=p,r[0]=s.coerce(r[0]),typeof r[0]!="string"&&r.unshift("%O");let l=0;r[0]=r[0].replace(/%([a-zA-Z%])/g,(n,d)=>{if(n==="%%")return"%";l++;const b=s.formatters[d];if(typeof b=="function"){const w=r[l];n=b.call(i,w),r.splice(l,1),l--}return n}),s.formatArgs.call(i,r),(i.log||s.log).apply(i,r)}return e.namespace=a,e.useColors=s.useColors(),e.color=s.selectColor(a),e.extend=D,e.destroy=s.destroy,Object.defineProperty(e,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(k!==s.namespaces&&(k=s.namespaces,T=s.enabled(a)),T),set:r=>{h=r}}),typeof s.init=="function"&&s.init(e),e}function D(a,g){const h=s(this.namespace+(typeof g>"u"?":":g)+a);return h.log=this.log,h}function R(a){s.save(a),s.namespaces=a,s.names=[],s.skips=[];const g=(typeof a=="string"?a:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const h of g)h[0]==="-"?s.skips.push(h.slice(1)):s.names.push(h)}function E(a,g){let h=0,k=0,T=-1,e=0;for(;h<a.length;)if(k<g.length&&(g[k]===a[h]||g[k]==="*"))g[k]==="*"?(T=k,e=h,k++):(h++,k++);else if(T!==-1)k=T+1,e++,h=e;else return!1;for(;k<g.length&&g[k]==="*";)k++;return k===g.length}function o(){const a=[...s.names,...s.skips.map(g=>"-"+g)].join(",");return s.enable(""),a}function f(a){for(const g of s.skips)if(E(a,g))return!1;for(const g of s.names)if(E(a,g))return!0;return!1}function S(a){return a instanceof Error?a.stack||a.message:a}function t(){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 s.enable(s.load()),s}return We=m,We}var ct;function dt(){return ct||(ct=1,(function(m,_){_.formatArgs=s,_.save=D,_.load=R,_.useColors=v,_.storage=E(),_.destroy=(()=>{let f=!1;return()=>{f||(f=!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`."))}})(),_.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 v(){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 f;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&&(f=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(f[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function s(f){if(f[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+f[0]+(this.useColors?"%c ":" ")+"+"+m.exports.humanize(this.diff),!this.useColors)return;const S="color: "+this.color;f.splice(1,0,S,"color: inherit");let t=0,a=0;f[0].replace(/%[a-zA-Z%]/g,g=>{g!=="%%"&&(t++,g==="%c"&&(a=t))}),f.splice(a,0,S)}_.log=console.debug||console.log||(()=>{});function D(f){try{f?_.storage.setItem("debug",f):_.storage.removeItem("debug")}catch{}}function R(){let f;try{f=_.storage.getItem("debug")||_.storage.getItem("DEBUG")}catch{}return!f&&typeof process<"u"&&"env"in process&&(f=process.env.DEBUG),f}function E(){try{return localStorage}catch{}}
1m.exports=ur()(_);const{formatters:o}=m.exports;o.j=function(f){try{return JSON.stringify(f)}catch(S){return"[UnexpectedJSONParseError]: "+S.message}}})(re,re.exports)),re.exports}var Ke={},pt;function hr(){return pt||(pt=1,Object.defineProperty(Ke,"__esModule",{value:!0})),Ke}var se={},pe={},lt;function Q(){if(lt)return pe;lt=1,Object.defineProperty(pe,"__esModule",{value:!0}),pe.Logger=void 0;const m=dt(),_="mediasoup-client";class v{constructor(D){C(this,"_debug");C(this,"_warn");C(this,"_error");D?(this._debug=(0,m.default)(`${_}:${D}`),this._warn=(0,m.default)(`${_}:WARN:${D}`),this._error=(0,m.default)(`${_}:ERROR:${D}`)):(this._debug=(0,m.default)(_),this._warn=(0,m.default)(`${_}:WARN`),this._error=(0,m.default)(`${_}: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}}return pe.Logger=v,pe}var le={},je={exports:{}},ut;function fr(){if(ut)return je.exports;ut=1;var m=typeof Reflect=="object"?Reflect:null,_=m&&typeof m.apply=="function"?m.apply:function(l,y,n){return Function.prototype.apply.call(l,y,n)},v;m&&typeof m.ownKeys=="function"?v=m.ownKeys:Object.getOwnPropertySymbols?v=function(l){return Object.getOwnPropertyNames(l).concat(Object.getOwnPropertySymbols(l))}:v=function(l){return Object.getOwnPropertyNames(l)};function s(c){console&&console.warn&&console.warn(c)}var D=Number.isNaN||function(l){return l!==l};function R(){R.init.call(this)}je.exports=R,je.exports.once=r,R.EventEmitter=R,R.prototype._events=void 0,R.prototype._eventsCount=0,R.prototype._maxListeners=void 0;var E=10;function o(c){if(typeof c!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof c)}Object.defineProperty(R,"defaultMaxListeners",{enumerable:!0,get:function(){return E},set:function(c){if(typeof c!="number"||c<0||D(c))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+c+".");E=c}}),R.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},R.prototype.setMaxListeners=function(l){if(typeof l!="number"||l<0||D(l))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+l+".");return this._maxListeners=l,this};function f(c){return c._maxListeners===void 0?R.defaultMaxListeners:c._maxListeners}R.prototype.getMaxListeners=function(){return f(this)},R.prototype.emit=function(l){for(var y=[],n=1;n<arguments.length;n++)y.push(arguments[n]);var d=l==="error",b=this._events;if(b!==void 0)d=d&&b.error===void 0;else if(!d)return!1;if(d){var w;if(y.length>0&&(w=y[0]),w instanceof Error)throw w;var P=new Error("Unhandled error."+(w?" ("+w.message+")":""));throw P.context=w,P}var F=b[l];if(F===void 0)return!1;if(typeof F=="function")_(F,this,y);else for(var u=F.length,x=k(F,u),n=0;n<u;++n)_(x[n],this,y);return!0};function S(c,l,y,n){var d,b,w;if(o(y),b=c._events,b===void 0?(b=c._events=Object.create(null),c._eventsCount=0):(b.newListener!==void 0&&(c.emit("newListener",l,y.listener?y.listener:y),b=c._events),w=b[l]),w===void 0)w=b[l]=y,++c._eventsCount;else if(typeof w=="function"?w=b[l]=n?[y,w]:[w,y]:n?w.unshift(y):w.push(y),d=f(c),d>0&&w.length>d&&!w.warned){w.warned=!0;var P=new Error("Possible EventEmitter memory leak detected. "+w.length+" "+String(l)+" listeners added. Use emitter.setMaxListeners() to increase limit");P.name="MaxListenersExceededWarning",P.emitter=c,P.type=l,P.count=w.length,s(P)}return c}R.prototype.addListener=function(l,y){return S(this,l,y,!1)},R.prototype.on=R.prototype.addListener,R.prototype.prependListener=function(l,y){return S(this,l,y,!0)};function t(){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 a(c,l,y){var n={fired:!1,wrapFn:void 0,target:c,type:l,listener:y},d=t.bind(n);return d.listener=y,n.wrapFn=d,d}R.prototype.once=function(l,y){return o(y),this.on(l,a(this,l,y)),this},R.prototype.prependOnceListener=function(l,y){return o(y),this.prependListener(l,a(this,l,y)),this},R.prototype.removeListener=function(l,y){var n,d,b,w,P;if(o(y),d=this._events,d===void 0)return this;if(n=d[l],n===void 0)return this;if(n===y||n.listener===y)--this._eventsCount===0?this._events=Object.create(null):(delete d[l],d.removeListener&&this.emit
vendor: 2,514 bytes, line 1
1("removeListener",l,n.listener||y));else if(typeof n!="function"){for(b=-1,w=n.length-1;w>=0;w--)if(n[w]===y||n[w].listener===y){P=n[w].listener,b=w;break}if(b<0)return this;b===0?n.shift():T(n,b),n.length===1&&(d[l]=n[0]),d.removeListener!==void 0&&this.emit("removeListener",l,P||y)}return this},R.prototype.off=R.prototype.removeListener,R.prototype.removeAllListeners=function(l){var y,n,d;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[l]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[l]),this;if(arguments.length===0){var b=Object.keys(n),w;for(d=0;d<b.length;++d)w=b[d],w!=="removeListener"&&this.removeAllListeners(w);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(y=n[l],typeof y=="function")this.removeListener(l,y);else if(y!==void 0)for(d=y.length-1;d>=0;d--)this.removeListener(l,y[d]);return this};function g(c,l,y){var n=c._events;if(n===void 0)return[];var d=n[l];return d===void 0?[]:typeof d=="function"?y?[d.listener||d]:[d]:y?e(d):k(d,d.length)}R.prototype.listeners=function(l){return g(this,l,!0)},R.prototype.rawListeners=function(l){return g(this,l,!1)},R.listenerCount=function(c,l){return typeof c.listenerCount=="function"?c.listenerCount(l):h.call(c,l)},R.prototype.listenerCount=h;function h(c){var l=this._events;if(l!==void 0){var y=l[c];if(typeof y=="function")return 1;if(y!==void 0)return y.length}return 0}R.prototype.eventNames=function(){return this._eventsCount>0?v(this._events):[]};function k(c,l){for(var y=new Array(l),n=0;n<l;++n)y[n]=c[n];return y}function T(c,l){for(;l+1<c.length;l++)c[l]=c[l+1];c.pop()}function e(c){for(var l=new Array(c.length),y=0;y<l.length;++y)l[y]=c[y].listener||c[y];return l}function r(c,l){return new Promise(function(y,n){function d(w){c.removeListener(l,b),n(w)}function b(){typeof c.removeListener=="function"&&c.removeListener("error",d),y([].slice.call(arguments))}p(c,l,b,{once:!0}),l!=="error"&&i(c,d,{once:!0})})}function i(c,l,y){typeof c.on=="function"&&p(c,"error",l,y)}function p(c,l,y,n){if(typeof c.on=="function")n.once?c.once(l,y):c.on(l,y);else if(typeof c.addEventListener=="function")c.addEventListener(l,function d(b){n.once&&c.removeEventListener(l,d),y(b)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof c)}return je.exports}var ht;function W(){if(ht)return le;
1ht=1,Object.defineProperty(le,"__esModule",{value:!0}),le.EnhancedEventEmitter=void 0;const m=fr(),_=Q(),v=new _.Logger("EnhancedEventEmitter");class s extends m.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(R,...E){return super.emit(R,...E)}safeEmit(R,...E){try{return super.emit(R,...E)}catch(o){v.error("safeEmit() | event listener threw an error [eventName:%s]:%o",R,o);try{super.emit("listenererror",R,o)}catch{}return!!super.listenerCount(R)}}on(R,E){return super.on(R,E),this}off(R,E){return super.off(R,E),this}addListener(R,E){return super.on(R,E),this}prependListener(R,E){return super.prependListener(R,E),this}once(R,E){return super.once(R,E),this}prependOnceListener(R,E){return super.prependOnceListener(R,E),this}removeListener(R,E){return super.off(R,E),this}removeAllListeners(R){return super.removeAllListeners(R),this}listenerCount(R){return super.listenerCount(R)}listeners(R){return super.listeners(R)}rawListeners(R){return super.rawListeners(R)}}return le.EnhancedEventEmitter=s,le}var ie={},ft;function J(){if(ft)return ie;ft=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.InvalidStateError=ie.UnsupportedError=void 0;class m extends Error{constructor(s){super(s),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,m):this.stack=new Error(s).stack}}ie.UnsupportedError=m;class _ extends Error{constructor(s){super(s),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,_):this.stack=new Error(s).stack}}return ie.InvalidStateError=_,ie}var ae={},mt;function oe(){if(mt)return ae;mt=1,Object.defineProperty(ae,"__esModule",{value:!0}),ae.clone=m,ae.generateRandomNumber=_,ae.deepFreeze=v;function m(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function _(){return Math.round(Math.random()*1e7)}function v(s){const D=Reflect.ownKeys(s);for(const R of D){const E=s[R];(E&&typeof E=="object"||typeof E=="function")&&v(E)}return Object.freeze(s)}return ae}var G={},H={},ue={},Ne={exports:{}},Je,gt;function mr(){if(gt)return Je;gt=1;var m=1e3,_=m*60,v=_*60,s=v*24,D=s*7,R=s*365.25;Je=function(t,a){a=a||{};var g=typeof t;if(g==="string"&&t.length>0)return E(t);if(g==="number"&&isFinite(t))return a.long?f(t):o(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function E(t){if(t=String(t),!(t.length>100)){var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(a){var g=parseFloat(a[1]),h=(a[2]||"ms").toLowerCase();switch(h){case"years":case"year":case"yrs":case"yr":case"y":return g*R;case"weeks":case"week":case"w":return g*D;case"days":case"day":case"d":return g*s;case"hours":case"hour":case"hrs":case"hr":case"h":return g*v;case"minutes":case"minute":case"mins":case"min":case"m":return g*_;case"seconds":case"second":case"secs":case"sec":case"s":return g*m;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return g;default:return}}}}function o(t){var a=Math.abs(t);return a>=s?Math.round(t/s)+"d":a>=v?Math.round(t/v)+"h":a>=_?Math.round(t/_)+"m":a>=m?Math.round(t/m)+"s":t+"ms"}function f(t){var a=Math.abs(t);return a>=s?S(t,a,s,"day"):a>=v?S(t,a,v,"hour"):a>=_?S(t,a,_,"minute"):a>=m?S(t,a,m,"second"):t+" ms"}function S(t,a,g,h){var k=a>=g*1.5;return Math.round(t/g)+" "+h+(k?"s":"")}return Je}var Ze,_t;function gr(){if(_t)return Ze;_t=1;function m(_){s.debug=s,s.default=s,s.coerce=S,s.disable=o,s.enable=R,s.enabled=f,s.humanize=mr(),s.destroy=t,Object.keys(_).forEach(a=>{s[a]=_[a]}),s.names=[],s.skips=[],s.formatters={};function v(a){let g=0;for(let h=0;h<a.length;
vendor: 4,293 bytes, line 1
1h++)g=(g<<5)-g+a.charCodeAt(h),g|=0;return s.colors[Math.abs(g)%s.colors.length]}s.selectColor=v;function s(a){let g,h=null,k,T;function e(...r){if(!e.enabled)return;const i=e,p=Number(new Date),c=p-(g||p);i.diff=c,i.prev=g,i.curr=p,g=p,r[0]=s.coerce(r[0]),typeof r[0]!="string"&&r.unshift("%O");let l=0;r[0]=r[0].replace(/%([a-zA-Z%])/g,(n,d)=>{if(n==="%%")return"%";l++;const b=s.formatters[d];if(typeof b=="function"){const w=r[l];n=b.call(i,w),r.splice(l,1),l--}return n}),s.formatArgs.call(i,r),(i.log||s.log).apply(i,r)}return e.namespace=a,e.useColors=s.useColors(),e.color=s.selectColor(a),e.extend=D,e.destroy=s.destroy,Object.defineProperty(e,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(k!==s.namespaces&&(k=s.namespaces,T=s.enabled(a)),T),set:r=>{h=r}}),typeof s.init=="function"&&s.init(e),e}function D(a,g){const h=s(this.namespace+(typeof g>"u"?":":g)+a);return h.log=this.log,h}function R(a){s.save(a),s.namespaces=a,s.names=[],s.skips=[];const g=(typeof a=="string"?a:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const h of g)h[0]==="-"?s.skips.push(h.slice(1)):s.names.push(h)}function E(a,g){let h=0,k=0,T=-1,e=0;for(;h<a.length;)if(k<g.length&&(g[k]===a[h]||g[k]==="*"))g[k]==="*"?(T=k,e=h,k++):(h++,k++);else if(T!==-1)k=T+1,e++,h=e;else return!1;for(;k<g.length&&g[k]==="*";)k++;return k===g.length}function o(){const a=[...s.names,...s.skips.map(g=>"-"+g)].join(",");return s.enable(""),a}function f(a){for(const g of s.skips)if(E(a,g))return!1;for(const g of s.names)if(E(a,g))return!0;return!1}function S(a){return a instanceof Error?a.stack||a.message:a}function t(){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 s.enable(s.load()),s}return Ze=m,Ze}var vt;function _r(){return vt||(vt=1,(function(m,_){_.formatArgs=s,_.save=D,_.load=R,_.useColors=v,_.storage=E(),_.destroy=(()=>{let f=!1;return()=>{f||(f=!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`."))}})(),_.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 v(){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 f;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&&(f=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(f[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function s(f){if(f[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+f[0]+(this.useColors?"%c ":" ")+"+"+m.exports.humanize(this.diff),!this.useColors)return;const S="color: "+this.color;f.splice(1,0,S,"color: inherit");let t=0,a=0;f[0].replace(/%[a-zA-Z%]/g,g=>{g!=="%%"&&(t++,g==="%c"&&(a=t))}),f.splice(a,0,S)}_.log=console.debug||console.log||(()=>{});function D(f){try{f?_.storage.setItem("debug",f):_.storage.removeItem("debug")}catch{}}function R(){let f;try{f=_.storage.getItem("debug")||_.storage.getItem("DEBUG")}catch{}return!f&&typeof process<"u"&&"env"in process&&(f=process.env.DEBUG),f}function E(){try{return localStorage}catch{}}
1m.exports=gr()(_);const{formatters:o}=m.exports;o.j=function(f){try{return JSON.stringify(f)}catch(S){return"[UnexpectedJSONParseError]: "+S.message}}})(Ne,Ne.exports)),Ne.exports}var wt;function vr(){if(wt)return ue;wt=1,Object.defineProperty(ue,"__esModule",{value:!0}),ue.Logger=void 0;const m=_r(),_="h264-profile-level-id";class v{constructor(D){C(this,"_debug");C(this,"_warn");C(this,"_error");D?(this._debug=(0,m.default)(`${_}:${D}`),this._warn=(0,m.default)(`${_}:WARN:${D}`),this._error=(0,m.default)(`${_}:ERROR:${D}`)):(this._debug=(0,m.default)(_),this._warn=(0,m.default)(`${_}:WARN`),this._error=(0,m.default)(`${_}: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}}return ue.Logger=v,ue}var bt;function wr(){if(bt)return H;bt=1,Object.defineProperty(H,"__esModule",{value:!0}),H.ProfileLevelId=H.Level=H.Profile=void 0,H.parseProfileLevelId=t,H.profileLevelIdToString=a,H.profileToString=g,H.levelToString=h,H.parseSdpProfileLevelId=k,H.isSameProfile=T,H.isSameProfileAndLevel=e,H.generateProfileLevelIdStringForAnswer=r,H.supportedLevel=i;const m=vr(),_=new m.Logger;var v;(function(n){n[n.ConstrainedBaseline=1]="ConstrainedBaseline",n[n.Baseline=2]="Baseline",n[n.Main=3]="Main",n[n.ConstrainedHigh=4]="ConstrainedHigh",n[n.High=5]="High",n[n.PredictiveHigh444=6]="PredictiveHigh444"})(v||(H.Profile=v={}));var s;(function(n){n[n.L1_b=0]="L1_b",n[n.L1=10]="L1",n[n.L1_1=11]="L1_1",n[n.L1_2=12]="L1_2",n[n.L1_3=13]="L1_3",n[n.L2=20]="L2",n[n.L2_1=21]="L2_1",n[n.L2_2=22]="L2_2",n[n.L3=30]="L3",n[n.L3_1=31]="L3_1",n[n.L3_2=32]="L3_2",n[n.L4=40]="L4",n[n.L4_1=41]="L4_1",n[n.L4_2=42]="L4_2",n[n.L5=50]="L5",n[n.L5_1=51]="L5_1",n[n.L5_2=52]="L5_2"})(s||(H.Level=s={}));class D{constructor(d,b){C(this,"profile");C(this,"level");this.profile=d,this.level=b}}H.ProfileLevelId=D;const R=new D(v.ConstrainedBaseline,s.L3_1);class E{constructor(d){C(this,"mask");C(this,"masked_value");this.mask=~p("x",d),this.masked_value=p("1",d)}isMatch(d){return this.masked_value===(d&this.mask)}}class o{constructor(d,b,w){C(this,"profile_idc");C(this,"profile_iop");C(this,"profile");this.profile_idc=d,this.profile_iop=b,this.profile=w}}const f=[new o(66,new E("x1xx0000"),v.ConstrainedBaseline),new o(77,new E("1xxx0000"),v.ConstrainedBaseline),new o(88,new E("11xx0000"),v.ConstrainedBaseline),new o(66,new E("x0xx0000"),v.Baseline),new o(88,new E("10xx0000"),v.Baseline),new o(77,new E("0x0x0000"),v.Main),new o(100,new E("00000000"),v.High),new o(100,new E("00001100"),v.ConstrainedHigh),new o(244,new E("00000000"),v.PredictiveHigh444)],S=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:s.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:s.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:s.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:s.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:s.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:s.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:s.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:s.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:s.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:s.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:s.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:s.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:s.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:s.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:s.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:s.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:s.L5_2}];function t(n){if(typeof n!="string"||n.length!==6)return;const b=parseInt(n,16);if(b===0)return;const w=b&255,P=b>>8&255,F=b>>16&255;let u;switch(w){case s.L1_1:{u=(P&16)!==0?s.L1_b:s.L1_1;break}case s.L1:case s.L1_2:case s.L1_3:case s.L2:case s.L2_1:case s.L2_2:case s.L3:case s.L3_1:case s.L3_2:case s.L4:case s.L4_1:case s.L4_2:case s.L5:case s.L5_1:case s.L5_2:{u=w;break}default:{_.warn(`parseProfileLevelId() | unrecognized level_idc [str:${n}, level_idc:${w}]`);return}}for(const x of f)if(F===x.profile_idc&&x.profile_iop.isMatch(P))return _.debug(`parseProfileLevelId() | result [str:${n}, profile:${x.profile}, level:${u}]`),new D(x.profile,u);_.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop comb
1ination [str:${n}, profile_idc:${F}, profile_iop:${P}]`)}function a(n){if(n.level==s.L1_b)switch(n.profile){case v.ConstrainedBaseline:return"42f00b";case v.Baseline:return"42100b";case v.Main:return"4d100b";default:{_.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${n.profile}`);return}}let d;switch(n.profile){case v.ConstrainedBaseline:{d="42e0";break}case v.Baseline:{d="4200";break}case v.Main:{d="4d00";break}case v.ConstrainedHigh:{d="640c";break}case v.High:{d="6400";break}case v.PredictiveHigh444:{d="f400";break}default:{_.warn(`profileLevelIdToString() | unrecognized profile ${n.profile}`);return}}let b=n.level.toString(16);return b.length===1&&(b=`0${b}`),`${d}${b}`}function g(n){switch(n){case v.ConstrainedBaseline:return"ConstrainedBaseline";case v.Baseline:return"Baseline";case v.Main:return"Main";case v.ConstrainedHigh:return"ConstrainedHigh";case v.High:return"High";case v.PredictiveHigh444:return"PredictiveHigh444";default:{_.warn(`profileToString() | unrecognized profile ${n}`);return}}}function h(n){switch(n){case s.L1_b:return"1b";case s.L1:return"1";case s.L1_1:return"1.1";case s.L1_2:return"1.2";case s.L1_3:return"1.3";case s.L2:return"2";case s.L2_1:return"2.1";case s.L2_2:return"2.2";case s.L3:return"3";case s.L3_1:return"3.1";case s.L3_2:return"3.2";case s.L4:return"4";case s.L4_1:return"4.1";case s.L4_2:return"4.2";case s.L5:return"5";case s.L5_1:return"5.1";case s.L5_2:return"5.2";default:{_.warn(`levelToString() | unrecognized level ${n}`);return}}}function k(n={}){const d=n["profile-level-id"];return d?t(d):R}function T(n={},d={}){const b=k(n),w=k(d);return!!(b&&w&&b.profile===w.profile)}function e(n={},d={}){const b=k(n),w=k(d);return!!(b&&w&&b.profile===w.profile&&b.level==w.level)}function r(n={},d={}){if(!n["profile-level-id"]&&!d["profile-level-id"]){_.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}const b=k(n),w=k(d);if(!b)throw new TypeError("invalid local_profile_level_id");if(!w)throw new TypeError("invalid remote_profile_level_id");if(b.profile!==w.profile)throw new TypeError("H264 Profile mismatch");const P=y(n)&&y(d),F=b.level,u=w.level,x=l(F,u),I=P?F:x;return _.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${b.profile}, level:${I}]`),a(new D(b.profile,I))}function i(n,d){for(let w=S.length-1;w>=0;--w){const P=S[w];if(P.max_macroblock_frame_size*256<=n&&P.max_macroblocks_per_second<=d*P.max_macroblock_frame_size)return _.debug(`supportedLevel() | result [max_frame_pixel_count:${n}, max_fps:${d}, level:${P.level}]`),P.level}_.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${n}, max_fps:${d}]`)}function p(n,d){return+(d[0]===n)<<7|+(d[1]===n)<<6|+(d[2]===n)<<5|+(d[3]===n)<<4|+(d[4]===n)<<3|+(d[5]===n)<<2|+(d[6]===n)<<1|+(d[7]===n)<<0}function c(n,d){return n===s.L1_b?d!==s.L1&&d!==s.L1_b:d===s.L1_b?n!==s.L1:n<d}function l(n,d){return c(n,d)?n:d}function y(n={}){const d=n["level-asymmetry-allowed"];return d===!0||d===1||d==="1"}return H}var yt;function Y(){if(yt)return G;yt=1,Object.defineProperty(G,"__esModule",{value:!0}),G.validateAndNormalizeRtpCapabilities=R,G.validateAndNormalizeRtpParameters=E,G.validateAndNormalizeSctpStreamParameters=o,G.validateSctpCapabilities=f,G.getExtendedRtpCapabilities=S,G.getRecvRtpCapabilities=t,G.getSendingRtpParameters=a,G.getSendingRemoteRtpParameters=g,G.reduceCodecs=h,G.generateProbatorRtpParameters=k,G.canSend=T,G.canReceive=e;const m=wr(),_=oe(),v="probator",s=1234,D=127;function R(u){if(typeof u!="object")throw new TypeError("caps is not an object");if(u.codecs&&!Array.isArray(u.codecs))throw new TypeError("caps.codecs is not an array");u.codecs||(u.codecs=[]);for(const x of u.codecs)r(x);if(u.headerExtensions&&!Array.isArray(u.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");u.headerExtensions||(u.headerExtensions=[]);for(const x of u.headerExtensions)p(x)}function E(u){if(typeof u!="object")throw new TypeError("params is not an object");if(u.mid&&typeof u.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(u.codecs))throw new TypeError("missing params.codecs");for(const x of u.codecs)c(x);if(u.headerExtensions&&!Array.isArray(u.headerExtensions))throw new TypeError("params.headerExtensions is not an array");u.headerExtensions||(u.headerExtensions=[]);for(const x of u.headerExtensions)l(x);if(u.encodings&&!Array.isArray(u.encodings))throw new TypeError("params.encodings is not an array");u.encodings||(u.encodings=[]);for(const x of u.encodings)y(x);if(u.rtcp&&typeof u.rtcp!="object")throw new TypeError("params.rtcp is not an object");u.rtcp||(u.rtcp={}),n(u.rtcp)}function o(u){if(typeof u!="object")throw new TypeError("params is not an object");
1if(typeof u.streamId!="number")throw new TypeError("missing params.streamId");let x=!1;if(typeof u.ordered=="boolean"?x=!0:u.ordered=!0,u.maxPacketLifeTime&&typeof u.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(u.maxRetransmits&&typeof u.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(u.maxPacketLifeTime&&u.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(x&&u.ordered&&(u.maxPacketLifeTime||u.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!x&&(u.maxPacketLifeTime||u.maxRetransmits)&&(u.ordered=!1),u.label&&typeof u.label!="string")throw new TypeError("invalid params.label");if(u.protocol&&typeof u.protocol!="string")throw new TypeError("invalid params.protocol")}function f(u){if(typeof u!="object")throw new TypeError("caps is not an object");if(!u.numStreams||typeof u.numStreams!="object")throw new TypeError("missing caps.numStreams");d(u.numStreams)}function S(u,x,I){const L={codecs:[],headerExtensions:[]};if(I)for(const M of u.codecs??[]){if(b(M))continue;const O=(x.codecs??[]).find(j=>w(j,M,{strict:!0,modify:!0}));if(!O)continue;const A={kind:M.kind,mimeType:M.mimeType,clockRate:M.clockRate,channels:M.channels,localPayloadType:M.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:O.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:M.parameters??{},remoteParameters:O.parameters??{},rtcpFeedback:F(M,O)};L.codecs.push(A)}else for(const M of x.codecs??[]){if(b(M))continue;const O=(u.codecs??[]).find(j=>w(j,M,{strict:!0,modify:!0}));if(!O)continue;const A={kind:O.kind,mimeType:O.mimeType,clockRate:O.clockRate,channels:O.channels,localPayloadType:O.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:M.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:O.parameters??{},remoteParameters:M.parameters??{},rtcpFeedback:F(O,M)};L.codecs.push(A)}for(const M of L.codecs){const O=u.codecs.find(j=>{var z;return b(j)&&((z=j.parameters)==null?void 0:z.apt)===M.localPayloadType}),A=x.codecs.find(j=>{var z;return b(j)&&((z=j.parameters)==null?void 0:z.apt)===M.remotePayloadType});O&&A&&(M.localRtxPayloadType=O.preferredPayloadType,M.remoteRtxPayloadType=A.preferredPayloadType)}for(const M of x.headerExtensions){const O=u.headerExtensions.find(j=>P(j,M));if(!O)continue;const A={kind:M.kind,uri:M.uri,sendId:O.preferredId,recvId:M.preferredId,encrypt:O.preferredEncrypt??!1,direction:"sendrecv"};switch(M.direction){case"sendrecv":{A.direction="sendrecv";break}case"recvonly":{A.direction="sendonly";break}case"sendonly":{A.direction="recvonly";break}case"inactive":{A.direction="inactive";break}}L.headerExtensions.push(A)}return L}function t(u){const x={codecs:[],headerExtensions:[]};for(const I of u.codecs){const L={kind:I.kind,mimeType:I.mimeType,preferredPayloadType:I.remotePayloadType,clockRate:I.clockRate,channels:I.channels,parameters:I.localParameters,rtcpFeedback:I.rtcpFeedback};if(x.codecs.push(L),!I.remoteRtxPayloadType)continue;const M={kind:I.kind,mimeType:`${I.kind}/rtx`,preferredPayloadType:I.remoteRtxPayloadType,clockRate:I.clockRate,parameters:{apt:I.remotePayloadType},rtcpFeedback:[]};x.codecs.push(M)}for(const I of u.headerExtensions){if(I.direction!=="sendrecv"&&I.direction!=="recvonly")continue;const L={kind:I.kind,uri:I.uri,preferredId:I.recvId,preferredEncrypt:I.encrypt??!1,direction:I.direction};x.headerExtensions.push(L)}return x}function a(u,x){const I={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const L of x.codecs){if(L.kind!==u)continue;const M={mimeType:L.mimeType,payloadType:L.localPayloadType,clockRate:L.clockRate,channels:L.channels,parameters:L.localParameters,rtcpFeedback:L.rtcpFeedback};if(I.codecs.push(M),L.localRtxPayloadType){const O={mimeType:`${L.kind}/rtx`,payloadType:L.localRtxPayloadType,clockRate:L.clockRate,parameters:{apt:L.localPayloadType},rtcpFeedback:[]};I.codecs.push(O)}}for(const L of x.headerExtensions){if(L.kind&&L.kind!==u||L.direction!=="sendrecv"&&L.direction!=="sendonly")continue;const M={uri:L.uri,id:L.sendId,encrypt:L.encrypt,parameters:{}};I.headerExtensions.push(M)}return I}function g(u,x){const I={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const L of x.codecs){if(L.kind!==u)continue;const M={mimeType:L.mimeType,payloadType:L.localPayloadType,clockRate:L.clockRate,channels:L.channels,parameters:L.remoteParameters,rtcpFeedback:L.rtcpFeedback};if(I.codecs.push(M),L.localRtxPayloadType){const O={mimeType:`${L.kind}/rtx`,payloadType:L.localRtxPayloadType,clockRate:L.clockRate,parameters:{apt:L.localPayloadType},rtcpFeedback:[]};I.codecs.push(O)}}for(const L of x.headerExtensions){if(L.kind&&L.kind!==u||L.direction!=="sendrecv"&&L.direction!=="sendonly")continue;const M={uri:L.uri,id:L.sendId,encrypt:L.encrypt,parameters:{}};I.headerExtensions.push(M)}if(I.headerExtensions.some(L=>L.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(const L of I.codecs)L.rtcpFeedback=(L.rtcpFeedback??[]).filter(M=>M.type!=="goog-remb");else if(I.headerExtensions.some(L=>L.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(const L of I.codecs)L.rtcpFeedback=(L.rtcpFeedback??[]).filter(M=>M.type!=="transport-cc");else for(const L of I.codecs)L.rtcpFeedback=(L.rtcpFeedback??[]).filter(M=>M.type!=="transport-cc"&&M.type!=="goog-remb");return I}function h(u,x){const I=[];if(!x)I.push(u[0]),b(u[1])&&I.push(u[1]);else{for(let L=0;L<u.length;++L)if(w(u[L],x,{strict:!0})){I.push(u[L]),b(u[L+1])&&I.push(u[L+1]);break}if(I.length===0)throw new TypeError("no matching codec found")}return I}function k(u){u=_.clone(u),E(u);const x={mid:v,codecs:[],headerExtensions:[],encodings:[{ssrc:s}],rtcp:{cname:"probator"}};return x.codecs.push(u.codecs[0]),x.codecs[0].payloadType=D,x.headerExtensions=u.headerExtensions,x}function T(u,x){return(x.codecs??[]).some(I=>I.kind===u)}function e(u,x){if(E(u),u.codecs.length===0)return!1;const I=u.codecs[0];return(x.codecs??[]).some(L=>L.preferredPayloadType===I.payloadType)}function r(u){const x=new RegExp("^(audio|video)/(.+)","i");if(typeof u!="object")throw new TypeError("codec is not an object");
1if(!u.mimeType||typeof u.mimeType!="string")throw new TypeError("missing codec.mimeType");const I=x.exec(u.mimeType);if(!I)throw new TypeError("invalid codec.mimeType");if(u.kind=I[1].toLowerCase(),typeof u.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof u.clockRate!="number")throw new TypeError("missing codec.clockRate");u.kind==="audio"?typeof u.channels!="number"&&(u.channels=1):delete u.channels,(!u.parameters||typeof u.parameters!="object")&&(u.parameters={});for(const L of Object.keys(u.parameters)){let M=u.parameters[L];if(M===void 0&&(u.parameters[L]="",M=""),typeof M!="string"&&typeof M!="number")throw new TypeError(`invalid codec parameter [key:${L}s, value:${M}]`);if(L==="apt"&&typeof M!="number")throw new TypeError("invalid codec apt parameter")}(!u.rtcpFeedback||!Array.isArray(u.rtcpFeedback))&&(u.rtcpFeedback=[]);for(const L of u.rtcpFeedback)i(L)}function i(u){if(typeof u!="object")throw new TypeError("fb is not an object");if(!u.type||typeof u.type!="string")throw new TypeError("missing fb.type");(!u.parameter||typeof u.parameter!="string")&&(u.parameter="")}function p(u){if(typeof u!="object")throw new TypeError("ext is not an object");if(u.kind!=="audio"&&u.kind!=="video")throw new TypeError("invalid ext.kind");if(!u.uri||typeof u.uri!="string")throw new TypeError("missing ext.uri");if(typeof u.preferredId!="number")throw new TypeError("missing ext.preferredId");if(u.preferredEncrypt&&typeof u.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(u.preferredEncrypt||(u.preferredEncrypt=!1),u.direction&&typeof u.direction!="string")throw new TypeError("invalid ext.direction");u.direction||(u.direction="sendrecv")}function c(u){const x=new RegExp("^(audio|video)/(.+)","i");if(typeof u!="object")throw new TypeError("codec is not an object");if(!u.mimeType||typeof u.mimeType!="string")throw new TypeError("missing codec.mimeType");const I=x.exec(u.mimeType);if(!I)throw new TypeError("invalid codec.mimeType");if(typeof u.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof u.clockRate!="number")throw new TypeError("missing codec.clockRate");I[1].toLowerCase()==="audio"?typeof u.channels!="number"&&(u.channels=1):delete u.channels,(!u.parameters||typeof u.parameters!="object")&&(u.parameters={});for(const M of Object.keys(u.parameters)){let O=u.parameters[M];if(O===void 0&&(u.parameters[M]="",O=""),typeof O!="string"&&typeof O!="number")throw new TypeError(`invalid codec parameter [key:${M}s, value:${O}]`);if(M==="apt"&&typeof O!="number")throw new TypeError("invalid codec apt parameter")}(!u.rtcpFeedback||!Array.isArray(u.rtcpFeedback))&&(u.rtcpFeedback=[]);for(const M of u.rtcpFeedback)i(M)}function l(u){if(typeof u!="object")throw new TypeError("ext is not an object");if(!u.uri||typeof u.uri!="string")throw new TypeError("missing ext.uri");if(typeof u.id!="number")throw new TypeError("missing ext.id");if(u.encrypt&&typeof u.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");u.encrypt||(u.encrypt=!1),(!u.parameters||typeof u.parameters!="object")&&(u.parameters={});for(const x of Object.keys(u.parameters)){let I=u.parameters[x];if(I===void 0&&(u.parameters[x]="",I=""),typeof I!="string"&&typeof I!="number")throw new TypeError("invalid header extension parameter")}}function y(u){if(typeof u!="object")throw new TypeError("encoding is not an object");if(u.ssrc&&typeof u.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(u.rid&&typeof u.rid!="string")throw new TypeError("invalid encoding.rid");if(u.rtx&&typeof u.rtx!="object")throw new TypeError("invalid encoding.rtx");if(u.rtx&&typeof u.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!u.dtx||typeof u.dtx!="boolean")&&(u.dtx=!1),u.scalabilityMode&&typeof u.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function n(u){if(typeof u!="object")throw new TypeError("rtcp is not an object");if(u.cname&&typeof u.cname!="string")throw new TypeError("invalid rtcp.cname");(!u.reducedSize||typeof u.reducedSize!="boolean")&&(u.reducedSize=!0)}function d(u){if(typeof u!="object")throw new TypeError("numStreams is not an object");
1if(typeof u.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof u.MIS!="number")throw new TypeError("missing numStreams.MIS")}function b(u){return u?/.+\/rtx$/i.test(u.mimeType):!1}function w(u,x,{strict:I=!1,modify:L=!1}={}){const M=u.mimeType.toLowerCase(),O=x.mimeType.toLowerCase();if(M!==O||u.clockRate!==x.clockRate||u.channels!==x.channels)return!1;switch(M){case"video/h264":{if(I){const A=u.parameters["packetization-mode"]??0,j=x.parameters["packetization-mode"]??0;if(A!==j||!m.isSameProfile(u.parameters,x.parameters))return!1;let z;try{z=m.generateProfileLevelIdStringForAnswer(u.parameters,x.parameters)}catch{return!1}L&&(z?(u.parameters["profile-level-id"]=z,x.parameters["profile-level-id"]=z):(delete u.parameters["profile-level-id"],delete x.parameters["profile-level-id"]))}break}case"video/vp9":{if(I){const A=u.parameters["profile-id"]??0,j=x.parameters["profile-id"]??0;if(A!==j)return!1}break}}return!0}function P(u,x){return!(u.kind&&x.kind&&u.kind!==x.kind||u.uri!==x.uri)}function F(u,x){const I=[];for(const L of u.rtcpFeedback??[]){const M=(x.rtcpFeedback??[]).find(O=>O.type===L.type&&(O.parameter===L.parameter||!O.parameter&&!L.parameter));M&&I.push(M)}return I}return G}var he={},Ye={},fe={},me={},Ae={exports:{}},Xe,Ct;function br(){if(Ct)return Xe;Ct=1;var m=1e3,_=m*60,v=_*60,s=v*24,D=s*7,R=s*365.25;Xe=function(t,a){a=a||{};var g=typeof t;if(g==="string"&&t.length>0)return E(t);if(g==="number"&&isFinite(t))return a.long?f(t):o(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function E(t){if(t=String(t),!(t.length>100)){var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(a){var g=parseFloat(a[1]),h=(a[2]||"ms").toLowerCase();switch(h){case"years":case"year":case"yrs":case"yr":case"y":return g*R;case"weeks":case"week":case"w":return g*D;case"days":case"day":case"d":return g*s;case"hours":case"hour":case"hrs":case"hr":case"h":return g*v;case"minutes":case"minute":case"mins":case"min":case"m":return g*_;case"seconds":case"second":case"secs":case"sec":case"s":return g*m;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return g;default:return}}}}function o(t){var a=Math.abs(t);return a>=s?Math.round(t/s)+"d":a>=v?Math.round(t/v)+"h":a>=_?Math.round(t/_)+"m":a>=m?Math.round(t/m)+"s":t+"ms"}function f(t){var a=Math.abs(t);return a>=s?S(t,a,s,"day"):a>=v?S(t,a,v,"hour"):a>=_?S(t,a,_,"minute"):a>=m?S(t,a,m,"second"):t+" ms"}function S(t,a,g,h){var k=a>=g*1.5;return Math.round(t/g)+" "+h+(k?"s":"")}return Xe}var et,St;function yr(){if(St)return et;St=1;function m(_){s.debug=s,s.default=s,s.coerce=S,s.disable=o,s.enable=R,s.enabled=f,s.humanize=br(),s.destroy=t,Object.keys(_).forEach(a=>{s[a]=_[a]}),s.names=[],s.skips=[],s.formatters={};function v(a){let g=0;for(let h=0;h<a.length;
vendor: 4,293 bytes, line 1
1h++)g=(g<<5)-g+a.charCodeAt(h),g|=0;return s.colors[Math.abs(g)%s.colors.length]}s.selectColor=v;function s(a){let g,h=null,k,T;function e(...r){if(!e.enabled)return;const i=e,p=Number(new Date),c=p-(g||p);i.diff=c,i.prev=g,i.curr=p,g=p,r[0]=s.coerce(r[0]),typeof r[0]!="string"&&r.unshift("%O");let l=0;r[0]=r[0].replace(/%([a-zA-Z%])/g,(n,d)=>{if(n==="%%")return"%";l++;const b=s.formatters[d];if(typeof b=="function"){const w=r[l];n=b.call(i,w),r.splice(l,1),l--}return n}),s.formatArgs.call(i,r),(i.log||s.log).apply(i,r)}return e.namespace=a,e.useColors=s.useColors(),e.color=s.selectColor(a),e.extend=D,e.destroy=s.destroy,Object.defineProperty(e,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(k!==s.namespaces&&(k=s.namespaces,T=s.enabled(a)),T),set:r=>{h=r}}),typeof s.init=="function"&&s.init(e),e}function D(a,g){const h=s(this.namespace+(typeof g>"u"?":":g)+a);return h.log=this.log,h}function R(a){s.save(a),s.namespaces=a,s.names=[],s.skips=[];const g=(typeof a=="string"?a:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const h of g)h[0]==="-"?s.skips.push(h.slice(1)):s.names.push(h)}function E(a,g){let h=0,k=0,T=-1,e=0;for(;h<a.length;)if(k<g.length&&(g[k]===a[h]||g[k]==="*"))g[k]==="*"?(T=k,e=h,k++):(h++,k++);else if(T!==-1)k=T+1,e++,h=e;else return!1;for(;k<g.length&&g[k]==="*";)k++;return k===g.length}function o(){const a=[...s.names,...s.skips.map(g=>"-"+g)].join(",");return s.enable(""),a}function f(a){for(const g of s.skips)if(E(a,g))return!1;for(const g of s.names)if(E(a,g))return!0;return!1}function S(a){return a instanceof Error?a.stack||a.message:a}function t(){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 s.enable(s.load()),s}return et=m,et}var Rt;function Cr(){return Rt||(Rt=1,(function(m,_){_.formatArgs=s,_.save=D,_.load=R,_.useColors=v,_.storage=E(),_.destroy=(()=>{let f=!1;return()=>{f||(f=!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`."))}})(),_.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 v(){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 f;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&&(f=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(f[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function s(f){if(f[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+f[0]+(this.useColors?"%c ":" ")+"+"+m.exports.humanize(this.diff),!this.useColors)return;const S="color: "+this.color;f.splice(1,0,S,"color: inherit");let t=0,a=0;f[0].replace(/%[a-zA-Z%]/g,g=>{g!=="%%"&&(t++,g==="%c"&&(a=t))}),f.splice(a,0,S)}_.log=console.debug||console.log||(()=>{});function D(f){try{f?_.storage.setItem("debug",f):_.storage.removeItem("debug")}catch{}}function R(){let f;try{f=_.storage.getItem("debug")||_.storage.getItem("DEBUG")}catch{}return!f&&typeof process<"u"&&"env"in process&&(f=process.env.DEBUG),f}function E(){try{return localStorage}catch{}}
1m.exports=yr()(_);const{formatters:o}=m.exports;o.j=function(f){try{return JSON.stringify(f)}catch(S){return"[UnexpectedJSONParseError]: "+S.message}}})(Ae,Ae.exports)),Ae.exports}var Et;function Sr(){if(Et)return me;Et=1,Object.defineProperty(me,"__esModule",{value:!0}),me.Logger=void 0;const m=Cr(),_="awaitqueue";let v=class{constructor(D){C(this,"_debug");C(this,"_warn");C(this,"_error");D?(this._debug=m(`${_}:${D}`),this._warn=m(`${_}:WARN:${D}`),this._error=m(`${_}:ERROR:${D}`)):(this._debug=m(_),this._warn=m(`${_}:WARN`),this._error=m(`${_}: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}};return me.Logger=v,me}var ne={},Tt;function kt(){if(Tt)return ne;Tt=1,Object.defineProperty(ne,"__esModule",{value:!0}),ne.AwaitQueueRemovedTaskError=ne.AwaitQueueStoppedError=void 0;class m extends Error{constructor(s){super(s??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,m)}}ne.AwaitQueueStoppedError=m;class _ extends Error{constructor(s){super(s??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,_)}}return ne.AwaitQueueRemovedTaskError=_,ne}var xt;function Rr(){if(xt)return fe;xt=1,Object.defineProperty(fe,"__esModule",{value:!0}),fe.AwaitQueue=void 0;const m=Sr(),_=kt(),v=new m.Logger("AwaitQueue");let s=class{constructor(){C(this,"pendingTasks",new Map);C(this,"nextTaskId",0);v.debug("constructor()")}get size(){return this.pendingTasks.size}async push(R,E,o){if(E=E??R.name,v.debug(`push() [name:${E}, options:%o]`,o),typeof R!="function")throw new TypeError("given task is not a function");if(E)try{Object.defineProperty(R,"name",{value:E})}catch{}return new Promise((f,S)=>{if(E&&(o!=null&&o.removeOngoingTasksWithSameName))for(const a of this.pendingTasks.values())a.name===E&&a.reject(new _.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});const t={id:this.nextTaskId++,task:R,name:E,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:a=>{if(t.completed)return;t.completed=!0,this.pendingTasks.delete(t.id),v.debug(`resolving task [name:${t.name}]`),f(a);const[g]=this.pendingTasks.values();g&&!g.executedAt&&this.execute(g)},reject:(a,{canExecuteNextTask:g})=>{if(!t.completed&&(t.completed=!0,this.pendingTasks.delete(t.id),v.debug(`rejecting task [name:${t.name}]: %s`,String(a)),S(a),g)){const[h]=this.pendingTasks.values();h&&!h.executedAt&&this.execute(h)}}};this.pendingTasks.set(t.id,t),this.pendingTasks.size===1&&this.execute(t)})}stop(){v.debug("stop()");for(const R of this.pendingTasks.values())v.debug(`stop() | stopping task [name:${R.name}]`),R.reject(new _.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(R){v.debug(`remove() [taskIdx:${R}]`);const E=Array.from(this.pendingTasks.values())[R];if(!E){v.debug(`stop() | no task with given idx [taskIdx:${R}]`);return}E.reject(new _.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){const R=Date.now();let E=0;return Array.from(this.pendingTasks.values()).map(o=>({idx:E++,task:o.task,name:o.name,enqueuedTime:o.executedAt?o.executedAt-o.enqueuedAt:R-o.enqueuedAt,executionTime:o.executedAt?R-o.executedAt:0}))}async execute(R){if(v.debug(`execute() [name:${R.name}]`),R.executedAt)throw new Error("task already being executed");R.executedAt=Date.now();try{const E=await R.task();R.resolve(E)}catch(E){R.reject(E,{canExecuteNextTask:!0})}}};return fe.AwaitQueue=s,fe}var Dt;function Er(){return Dt||(Dt=1,(function(m){Object.defineProperty(m,"__esModule",{value:!0}),m.AwaitQueueRemovedTaskError=m.AwaitQueueStoppedError=m.AwaitQueue=void 0;var _=Rr();Object.defineProperty(m,"AwaitQueue",{enumerable:!0,get:function(){return _.AwaitQueue}});var v=kt();Object.defineProperty(m,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return v.AwaitQueueStoppedError}}),Object.defineProperty(m,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return v.AwaitQueueRemovedTaskError}})})(Ye)),Ye}var ge={},Pt;function Tr(){if(Pt)return ge;
1Pt=1,Object.defineProperty(ge,"__esModule",{value:!0}),ge.Producer=void 0;const m=Q(),_=W(),v=J(),s=new m.Logger("Producer");let D=class extends _.EnhancedEventEmitter{constructor({id:o,localId:f,rtpSender:S,track:t,rtpParameters:a,stopTracks:g,disableTrackOnPause:h,zeroRtpOnPause:k,appData:T}){super();C(this,"_id");C(this,"_localId");C(this,"_closed",!1);C(this,"_rtpSender");C(this,"_track");C(this,"_kind");C(this,"_rtpParameters");C(this,"_paused");C(this,"_maxSpatialLayer");C(this,"_stopTracks");C(this,"_disableTrackOnPause");C(this,"_zeroRtpOnPause");C(this,"_appData");C(this,"_observer",new _.EnhancedEventEmitter);s.debug("constructor()"),this._id=o,this._localId=f,this._rtpSender=S,this._track=t,this._kind=t.kind,this._rtpParameters=a,this._paused=h?!t.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=g,this._disableTrackOnPause=h,this._zeroRtpOnPause=k,this._appData=T??{},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(o){this._appData=o}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new v.InvalidStateError("closed");return new Promise((o,f)=>{this.safeEmit("@getstats",o,f)})}pause(){if(s.debug("pause()"),this._closed){s.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((o,f)=>{this.safeEmit("@pause",o,f)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(s.debug("resume()"),this._closed){s.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((o,f)=>{this.safeEmit("@resume",o,f)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:o}){if(s.debug("replaceTrack() [track:%o]",o),this._closed){if(o&&this._stopTracks)try{o.stop()}catch{}throw new v.InvalidStateError("closed")}else if((o==null?void 0:o.readyState)==="ended")throw new v.InvalidStateError("track ended");if(o===this._track){s.debug("replaceTrack() | same track, ignored");return}await new Promise((f,S)=>{this.safeEmit("@replacetrack",o,f,S)}),this.destroyTrack(),this._track=o,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(o){if(this._closed)throw new v.InvalidStateError("closed");if(this._kind!=="video")throw new v.UnsupportedError("not a video Producer");if(typeof o!="number")throw new TypeError("invalid spatialLayer");o!==this._maxSpatialLayer&&(await new Promise((f,S)=>{this.safeEmit("@setmaxspatiallayer",o,f,S)}).catch(()=>{}),this._maxSpatialLayer=o)}async setRtpEncodingParameters(o){if(this._closed)throw new v.InvalidStateError("closed");if(typeof o!="object")throw new TypeError("invalid params");await new Promise((f,S)=>{this.safeEmit("@setrtpencodingparameters",o,f,S)})}onTrackEnded(){s.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{}}};return ge.Producer=D,ge}var _e={},Lt;function kr(){if(Lt)return _e;
1Lt=1,Object.defineProperty(_e,"__esModule",{value:!0}),_e.Consumer=void 0;const m=Q(),_=W(),v=J(),s=new m.Logger("Consumer");let D=class extends _.EnhancedEventEmitter{constructor({id:o,localId:f,producerId:S,rtpReceiver:t,track:a,rtpParameters:g,appData:h}){super();C(this,"_id");C(this,"_localId");C(this,"_producerId");C(this,"_closed",!1);C(this,"_rtpReceiver");C(this,"_track");C(this,"_rtpParameters");C(this,"_paused");C(this,"_appData");C(this,"_observer",new _.EnhancedEventEmitter);s.debug("constructor()"),this._id=o,this._localId=f,this._producerId=S,this._rtpReceiver=t,this._track=a,this._rtpParameters=g,this._paused=!a.enabled,this._appData=h??{},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(o){this._appData=o}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new v.InvalidStateError("closed");return new Promise((o,f)=>{this.safeEmit("@getstats",o,f)})}pause(){if(s.debug("pause()"),this._closed){s.error("pause() | Consumer closed");return}if(this._paused){s.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(s.debug("resume()"),this._closed){s.error("resume() | Consumer closed");return}if(!this._paused){s.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){s.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{}}};return _e.Consumer=D,_e}var ve={},It;function xr(){if(It)return ve;
1It=1,Object.defineProperty(ve,"__esModule",{value:!0}),ve.DataProducer=void 0;const m=Q(),_=W(),v=J(),s=new m.Logger("DataProducer");let D=class extends _.EnhancedEventEmitter{constructor({id:o,dataChannel:f,sctpStreamParameters:S,appData:t}){super();C(this,"_id");C(this,"_dataChannel");C(this,"_closed",!1);C(this,"_sctpStreamParameters");C(this,"_appData");C(this,"_observer",new _.EnhancedEventEmitter);s.debug("constructor()"),this._id=o,this._dataChannel=f,this._sctpStreamParameters=S,this._appData=t??{},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(o){this._dataChannel.bufferedAmountLowThreshold=o}get appData(){return this._appData}set appData(o){this._appData=o}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(o){if(s.debug("send()"),this._closed)throw new v.InvalidStateError("closed");this._dataChannel.send(o)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(s.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",o=>{var S,t;if(this._closed)return;const f=o.error??new Error("unknown DataChannel error");((S=o.error)==null?void 0:S.errorDetail)==="sctp-failure"?s.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",(t=o.error)==null?void 0:t.sctpCauseCode,o.error.message):s.error('DataChannel "error" event: %o',f),this.safeEmit("error",f)}),this._dataChannel.addEventListener("close",()=>{this._closed||(s.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||s.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};return ve.DataProducer=D,ve}var we={},Mt;function Dr(){if(Mt)return we;Mt=1,Object.defineProperty(we,"__esModule",{value:!0}),we.DataConsumer=void 0;const m=Q(),_=W(),v=new m.Logger("DataConsumer");let s=class extends _.EnhancedEventEmitter{constructor({id:E,dataProducerId:o,dataChannel:f,sctpStreamParameters:S,appData:t}){super();C(this,"_id");C(this,"_dataProducerId");C(this,"_dataChannel");C(this,"_closed",!1);C(this,"_sctpStreamParameters");C(this,"_appData");C(this,"_observer",new _.EnhancedEventEmitter);v.debug("constructor()"),this._id=E,this._dataProducerId=o,this._dataChannel=f,this._sctpStreamParameters=S,this._appData=t??{},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||(v.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(v.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}
1handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(v.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",E=>{var f,S;if(this._closed)return;const o=E.error??new Error("unknown DataChannel error");((f=E.error)==null?void 0:f.errorDetail)==="sctp-failure"?v.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",(S=E.error)==null?void 0:S.sctpCauseCode,E.error.message):v.error('DataChannel "error" event: %o',o),this.safeEmit("error",o)}),this._dataChannel.addEventListener("close",()=>{this._closed||(v.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)})}};return we.DataConsumer=s,we}var Ft;function Pr(){if(Ft)return he;Ft=1,Object.defineProperty(he,"__esModule",{value:!0}),he.Transport=void 0;const m=Er(),_=Q(),v=W(),s=J(),D=oe(),R=Y(),E=Tr(),o=kr(),f=xr(),S=Dr(),t=new _.Logger("Transport");class a{constructor(k){C(this,"consumerOptions");C(this,"promise");C(this,"resolve");C(this,"reject");this.consumerOptions=k,this.promise=new Promise((T,e)=>{this.resolve=T,this.reject=e})}}let g=class extends v.EnhancedEventEmitter{constructor({direction:T,id:e,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:n,appData:d,handlerFactory:b,getSendExtendedRtpCapabilities:w,recvRtpCapabilities:P,canProduceByKind:F}){super();C(this,"_id");C(this,"_closed",!1);C(this,"_direction");C(this,"_getSendExtendedRtpCapabilities");C(this,"_recvRtpCapabilities");C(this,"_canProduceByKind");C(this,"_maxSctpMessageSize");C(this,"_handler");C(this,"_iceGatheringState","new");C(this,"_connectionState","new");C(this,"_appData");C(this,"_producers",new Map);C(this,"_consumers",new Map);C(this,"_dataProducers",new Map);C(this,"_dataConsumers",new Map);C(this,"_probatorConsumerCreated",!1);C(this,"_awaitQueue",new m.AwaitQueue);C(this,"_pendingConsumerTasks",[]);C(this,"_consumerCreationInProgress",!1);C(this,"_pendingPauseConsumers",new Map);C(this,"_consumerPauseInProgress",!1);C(this,"_pendingResumeConsumers",new Map);C(this,"_consumerResumeInProgress",!1);C(this,"_pendingCloseConsumers",new Map);C(this,"_consumerCloseInProgress",!1);C(this,"_observer",new v.EnhancedEventEmitter);t.debug("constructor() [id:%s, direction:%s]",e,T),this._id=e,this._direction=T,this._getSendExtendedRtpCapabilities=w,this._recvRtpCapabilities=P,this._canProduceByKind=F,this._maxSctpMessageSize=c?c.maxMessageSize:null;const u=D.clone(n)??{};delete u.iceServers,delete u.iceTransportPolicy,delete u.bundlePolicy,delete u.rtcpMuxPolicy,this._handler=b.factory({direction:T,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:u,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(T){this._appData=T}get observer(){return this._observer}close(){if(!this._closed){t.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(const T of this._producers.values())T.transportClosed();this._producers.clear();for(const T of this._consumers.values())T.transportClosed();this._consumers.clear();for(const T of this._dataProducers.values())T.transportClosed();this._dataProducers.clear();for(const T of this._dataConsumers.values())T.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new s.InvalidStateError("closed");return this._handler.getTransportStats()}
1async restartIce({iceParameters:T}){if(t.debug("restartIce()"),this._closed)throw new s.InvalidStateError("closed");if(!T)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(T),"transport.restartIce()")}async updateIceServers({iceServers:T}={}){if(t.debug("updateIceServers()"),this._closed)throw new s.InvalidStateError("closed");if(!Array.isArray(T))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(T),"transport.updateIceServers()")}async produce({track:T,streamId:e,encodings:r,codecOptions:i,headerExtensionOptions:p,codec:c,stopTracks:l=!0,disableTrackOnPause:y=!0,zeroRtpOnPause:n=!1,onRtpSender:d,appData:b={}}={}){if(t.debug("produce() [track:%o]",T),this._closed)throw new s.InvalidStateError("closed");if(T){if(this._direction!=="send")throw new s.UnsupportedError("not a sending Transport");if(this._canProduceByKind[T.kind]){if(T.readyState==="ended")throw new s.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(b&&typeof b!="object")throw new TypeError("if given, appData must be an object")}else throw new s.UnsupportedError(`cannot produce ${T.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let w;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");(r==null?void 0:r.length)===0?w=void 0:r&&(w=r.map(x=>{const I={active:!0};return x.active===!1&&(I.active=!1),typeof x.dtx=="boolean"&&(I.dtx=x.dtx),typeof x.scalabilityMode=="string"&&(I.scalabilityMode=x.scalabilityMode),typeof x.scaleResolutionDownBy=="number"&&(I.scaleResolutionDownBy=x.scaleResolutionDownBy),typeof x.maxBitrate=="number"&&(I.maxBitrate=x.maxBitrate),typeof x.maxFramerate=="number"&&(I.maxFramerate=x.maxFramerate),typeof x.adaptivePtime=="boolean"&&(I.adaptivePtime=x.adaptivePtime),typeof x.priority=="string"&&(I.priority=x.priority),typeof x.networkPriority=="string"&&(I.networkPriority=x.networkPriority),I}));const{localId:P,rtpParameters:F,rtpSender:u}=await this._handler.send({track:T,streamId:e,encodings:w,codecOptions:i,headerExtensionOptions:p,codec:c,onRtpSender:d});try{R.validateAndNormalizeRtpParameters(F);const{id:x}=await new Promise((L,M)=>{this.safeEmit("produce",{kind:T.kind,rtpParameters:F,appData:b},L,M)}),I=new E.Producer({id:x,localId:P,rtpSender:u,track:T,rtpParameters:F,stopTracks:l,disableTrackOnPause:y,zeroRtpOnPause:n,appData:b});return this._producers.set(I.id,I),this.handleProducer(I),this._observer.safeEmit("newproducer",I),I}catch(x){throw this._handler.stopSending(P).catch(()=>{}),x}},"transport.produce()").catch(w=>{if(l)try{T.stop()}catch{}throw w})}async consume({id:T,producerId:e,kind:r,rtpParameters:i,streamId:p,onRtpReceiver:c,appData:l={}}){if(t.debug("consume()"),this._closed)throw new s.InvalidStateError("closed");if(this._direction!=="recv")throw new s.UnsupportedError("not a receiving Transport");if(typeof T!="string")throw new TypeError("missing id");if(typeof e!="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(l&&typeof l!="object")throw new TypeError("if given, appData must be an object");const y=D.clone(i);if(!R.canReceive(y,this._recvRtpCapabilities))throw new s.UnsupportedError("cannot consume this Producer");const d=new a({id:T,producerId:e,kind:r,rtpParameters:y,streamId:p,onRtpReceiver:c,appData:l});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:T=!0,maxPacketLifeTime:e,maxRetransmits:r,label:i="",protocol:p="",appData:c={}}={}){if(t.debug("produceData()"),this._closed)throw new s.InvalidStateError("closed");if(this._direction!=="send")throw new s.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(c&&typeof c!="object")throw new TypeError("if given, appData must be an object")}else throw new s.UnsupportedError("SCTP not enabled by remote Transport");return(e||r)&&(T=!1),this._awaitQueue.push(async()=>{const{dataChannel:l,sctpStreamParameters:y}
1=await this._handler.sendDataChannel({ordered:T,maxPacketLifeTime:e,maxRetransmits:r,label:i,protocol:p});R.validateAndNormalizeSctpStreamParameters(y);const{id:n}=await new Promise((b,w)=>{this.safeEmit("producedata",{sctpStreamParameters:y,label:i,protocol:p,appData:c},b,w)}),d=new f.DataProducer({id:n,dataChannel:l,sctpStreamParameters:y,appData:c});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:T,dataProducerId:e,sctpStreamParameters:r,label:i="",protocol:p="",appData:c={}}){if(t.debug("consumeData()"),this._closed)throw new s.InvalidStateError("closed");if(this._direction!=="recv")throw new s.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof T!="string")throw new TypeError("missing id");if(typeof e!="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(c&&typeof c!="object")throw new TypeError("if given, appData must be an object")}else throw new s.UnsupportedError("SCTP not enabled by remote Transport");const l=D.clone(r);return R.validateAndNormalizeSctpStreamParameters(l),this._awaitQueue.push(async()=>{const{dataChannel:y}=await this._handler.receiveDataChannel({sctpStreamParameters:l,label:i,protocol:p}),n=new S.DataConsumer({id:T,dataProducerId:e,dataChannel:y,sctpStreamParameters:l,appData:c});return this._dataConsumers.set(n.id,n),this.handleDataConsumer(n),this._observer.safeEmit("newdataconsumer",n),n},"transport.consumeData()")}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){t.debug("createPendingConsumers() | there is no Consumer to be created");return}const T=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let e;const r=[];for(const i of T){const{id:p,kind:c,rtpParameters:l,streamId:y,onRtpReceiver:n}=i.consumerOptions;r.push({trackId:p,kind:c,rtpParameters:l,streamId:y,onRtpReceiver:n})}try{const i=await this._handler.receive(r);for(let p=0;p<i.length;++p){const c=T[p],l=i[p],{id:y,producerId:n,kind:d,rtpParameters:b,appData:w}=c.consumerOptions,{localId:P,rtpReceiver:F,track:u}=l,x=new o.Consumer({id:y,localId:P,producerId:n,rtpReceiver:F,track:u,rtpParameters:b,appData:w});this._consumers.set(x.id,x),this.handleConsumer(x),!this._probatorConsumerCreated&&!e&&d==="video"&&(e=x),this._observer.safeEmit("newconsumer",x),c.resolve(x)}}catch(i){for(const p of T)p.reject(i)}if(e)try{const i=R.generateProbatorRtpParameters(e.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),t.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){t.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){t.debug("pausePendingConsumers() | there is no Consumer to be paused");return}const T=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{const e=T.map(r=>r.localId);await this._handler.pauseReceiving(e)}catch(e){t.error("pausePendingConsumers() | failed to pause Consumers:",e)}},"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){t.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}const T=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{const e=T.map(r=>r.localId);await this._handler.resumeReceiving(e)}catch(e){t.error("resumePendingConsumers() | failed to resume Consumers:",e)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>
1{if(this._pendingCloseConsumers.size===0){t.debug("closePendingConsumers() | there is no Consumer to be closed");return}const T=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(T.map(e=>e.localId))}catch(e){t.error("closePendingConsumers() | failed to close Consumers:",e)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){const T=this._handler;T.on("@connect",({dtlsParameters:e},r,i)=>{if(this._closed){i(new s.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:e},r,i)}),T.on("@icegatheringstatechange",e=>{e!==this._iceGatheringState&&(t.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))}),T.on("@icecandidateerror",e=>{t.warn(`ICE candidate error [url:${e.url}, localAddress:${e.address}, localPort:${e.port}]: ${e.errorCode} "${e.errorText}"`),this.safeEmit("icecandidateerror",e)}),T.on("@connectionstatechange",e=>{e!==this._connectionState&&(t.debug("connection state changed to %s",e),this._connectionState=e,this._closed||this.safeEmit("connectionstatechange",e))})}handleProducer(T){T.on("@close",()=>{this._producers.delete(T.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(T.localId),"producer @close event").catch(e=>t.warn("producer.close() failed:%o",e))}),T.on("@pause",(e,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(T.localId),"producer @pause event").then(e).catch(r)}),T.on("@resume",(e,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(T.localId),"producer @resume event").then(e).catch(r)}),T.on("@replacetrack",(e,r,i)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(T.localId,e),"producer @replacetrack event").then(r).catch(i)}),T.on("@setmaxspatiallayer",(e,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(T.localId,e),"producer @setmaxspatiallayer event").then(r).catch(i)}),T.on("@setrtpencodingparameters",(e,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(T.localId,e),"producer @setrtpencodingparameters event").then(r).catch(i)}),T.on("@getstats",(e,r)=>{if(this._closed)return r(new s.InvalidStateError("closed"));this._handler.getSenderStats(T.localId).then(e).catch(r)})}handleConsumer(T){T.on("@close",()=>{this._consumers.delete(T.id),this._pendingPauseConsumers.delete(T.id),this._pendingResumeConsumers.delete(T.id),!this._closed&&(this._pendingCloseConsumers.set(T.id,T),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),T.on("@pause",()=>{this._pendingResumeConsumers.has(T.id)&&this._pendingResumeConsumers.delete(T.id),this._pendingPauseConsumers.set(T.id,T),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),T.on("@resume",()=>{this._pendingPauseConsumers.has(T.id)&&this._pendingPauseConsumers.delete(T.id),this._pendingResumeConsumers.set(T.id,T),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),T.on("@getstats",(e,r)=>{if(this._closed)return r(new s.InvalidStateError("closed"));this._handler.getReceiverStats(T.localId).then(e).catch(r)})}handleDataProducer(T){T.on("@close",()=>{this._dataProducers.delete(T.id)})}handleDataConsumer(T){T.on("@close",()=>{this._dataConsumers.delete(T.id)})}};return he.Transport=g,he}var be={},Z={},tt={},rt={exports:{}},Ot;function st(){if(Ot)return rt.exports;Ot=1;var m=rt.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(_){return _.encoding?"rtpmap:%d %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(_){return _.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(_){return _.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S
1*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(_){return"extmap:%d"+(_.direction?"/%s":"%v")+(_["encrypt-uri"]?" %s":"%v")+" %s"+(_.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(_){return _.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(_){var v="candidate:%s %d %s %d %s %d typ %s";return v+=_.raddr!=null?" raddr %s rport %d":"%v%v",v+=_.tcptype!=null?" tcptype %s":"%v",_.generation!=null&&(v+=" generation %d"),v+=_["network-id"]!=null?" network-id %d":"%v",v+=_["network-cost"]!=null?" network-cost %d":"%v",v}},{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(_){var v="ssrc:%d";return _.attribute!=null&&(v+=" %s",_.value!=null&&(v+=":%s")),v}},{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(_){return _.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(_){return _.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(_){return"imageattr:%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(_){return"simulcast:%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"}
vendor: 3,627 bytes, line 1
1,{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(_){return"ts-refclk:%s"+(_.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(_){var v="mediaclk:";return v+=_.id!=null?"id=%s %s":"%v%s",v+=_.mediaClockValue!=null?"=%s":"",v+=_.rateNumerator!=null?" rate=%s":"",v+=_.rateDenominator!=null?"/%s":"",v}},{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"]}]};return Object.keys(m).forEach(function(_){var v=m[_];v.forEach(function(s){s.reg||(s.reg=/(.*)/),s.format||(s.format="%s")})}),rt.exports}var jt;function Lr(){return jt||(jt=1,(function(m){var _=function(o){return String(Number(o))===o?Number(o):o},v=function(o,f,S,t){if(t&&!S)f[t]=_(o[1]);else for(var a=0;a<S.length;a+=1)o[a+1]!=null&&(f[S[a]]=_(o[a+1]))},s=function(o,f,S){var t=o.name&&o.names;o.push&&!f[o.push]?f[o.push]=[]:t&&!f[o.name]&&(f[o.name]={});var a=o.push?{}:t?f[o.name]:f;v(S.match(o.reg),a,o.names,o.name),o.push&&f[o.push].push(a)},D=st(),R=RegExp.prototype.test.bind(/^([a-z])=(.*)/);m.parse=function(o){var f={},S=[],t=f;return o.split(/(\r\n|\r|\n)/).filter(R).forEach(function(a){var g=a[0],h=a.slice(2);g==="m"&&(S.push({rtp:[],fmtp:[]}),t=S[S.length-1]);for(var k=0;k<(D[g]||[]).length;k+=1){var T=D[g][k];if(T.reg.test(h))return s(T,t,h)}}),f.media=S,f};var E=function(o,f){var S=f.split(/=(.+)/,2);return S.length===2?o[S[0]]=_(S[1]):S.length===1&&f.length>1&&(o[S[0]]=void 0),o};m.parseParams=function(o){return o.split(/;\s?/).reduce(E,{})},m.parseFmtpConfig=m.parseParams,m.parsePayloads=function(o){return o.toString().split(" ").map(Number)},m.parseRemoteCandidates=function(o){for(var f=[],S=o.split(" ").map(_),t=0;t<S.length;t+=3)f.push({component:S[t],ip:S[t+1],port:S[t+2]});return f},m.parseImageAttributes=function(o){return o.split(" ").map(function(f){return f.substring(1,f.length-1).split(",").reduce(E,{})})},m.parseSimulcastStreamList=function(o){return o.split(";").map(function(f){return f.split(",").map(function(S){var t,a=!1;return S[0]!=="~"?t=_(S):(t=_(S.substring(1,S.length)),a=!0),{scid:t,paused:a}})})}})(tt)),tt}var it,Nt;function Ir(){if(Nt)return it;Nt=1;var m=st(),_=/%[sdv%]/g,v=function(E){var o=1,f=arguments,S=f.length;return E.replace(_,function(t){if(o>=S)return t;var a=f[o];switch(o+=1,t){case"%%":return"%";case"%s":return String(a);case"%d":return Number(a);case"%v":return""}})},s=function(E,o,f){var S=o.format instanceof Function?o.format(o.push?f:f[o.name]):o.format,t=[E+"="+S];if(o.names)for(var a=0;a<o.names.length;a+=1){var g=o.names[a];o.name?t.push(f[o.name][g]):t.push(f[o.names[a]])}else t.push(f[o.name]);return v.apply(null,t)},D=["v","o","s","i","u","e","p","c","b","t","r","z","a"],R=["i","c","b","a"];return it=function(E,o){o=o||{},E.version==null&&(E.version=0),E.name==null&&(E.name=" "),E.media.forEach(function(a){a.payloads==null&&(a.payloads="")});var f=o.outerOrder||D,S=o.innerOrder||R,t=[];return f.forEach(function(a){m[a].forEach(function(g){g.name in E&&E[g.name]!=null?t.push(s(a,g,E)):g.push in E&&E[g.push]!=null&&E[g.push].forEac
1h(function(h){t.push(s(a,g,h))})})}),E.media.forEach(function(a){t.push(s("m",m.m[0],a)),S.forEach(function(g){m[g].forEach(function(h){h.name in a&&a[h.name]!=null?t.push(s(g,h,a)):h.push in a&&a[h.push]!=null&&a[h.push].forEach(function(k){t.push(s(g,h,k))})})})}),t.join(`\r 2`)+`\r 3`},it}var At;function ee(){if(At)return Z;At=1;var m=Lr(),_=Ir(),v=st();return Z.grammar=v,Z.write=_,Z.parse=m.parse,Z.parseParams=m.parseParams,Z.parseFmtpConfig=m.parseFmtpConfig,Z.parsePayloads=m.parsePayloads,Z.parseRemoteCandidates=m.parseRemoteCandidates,Z.parseImageAttributes=m.parseImageAttributes,Z.parseSimulcastStreamList=m.parseSimulcastStreamList,Z}var ze={},zt;function ce(){if(zt)return ze;zt=1,Object.defineProperty(ze,"__esModule",{value:!0}),ze.parse=_;const m=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function _(v){const s=m.exec(v??"");return s?{spatialLayers:Number(s[1]),temporalLayers:Number(s[2])}:{spatialLayers:1,temporalLayers:1}}return ze}var ye={},X={},$t;function Mr(){if($t)return X;$t=1,Object.defineProperty(X,"__esModule",{value:!0}),X.OfferMediaSection=X.AnswerMediaSection=X.MediaSection=void 0;const m=ee(),_=oe();let v=class{constructor({iceParameters:o,iceCandidates:f,dtlsParameters:S}){C(this,"_mediaObject");if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},o&&this.setIceParameters(o),f){this._mediaObject.candidates=[];for(const t of f){const a={foundation:t.foundation,component:1,ip:t.address??t.ip,port:t.port,priority:t.priority,transport:t.protocol,type:t.type};t.tcpType&&(a.tcptype=t.tcpType),this._mediaObject.candidates.push(a)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}S&&this.setDtlsRole(S.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(o){this._mediaObject.iceUfrag=o.usernameFragment,this._mediaObject.icePwd=o.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}};X.MediaSection=v;class s extends v{constructor({iceParameters:o,iceCandidates:f,dtlsParameters:S,sctpParameters:t,plainRtpParameters:a,offerMediaObject:g,offerRtpParameters:h,answerRtpParameters:k,codecOptions:T}){switch(super({iceParameters:o,iceCandidates:f,dtlsParameters:S}),this._mediaObject.mid=String(g.mid),this._mediaObject.type=g.type,this._mediaObject.protocol=g.protocol,a?(this._mediaObject.connection={ip:a.ip,version:a.ipVersion},this._mediaObject.port=a.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),g.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(const e of k.codecs){const r={payload:e.payloadType,codec:R(e),rate:e.clockRate};e.channels>1&&(r.encoding=e.channels),this._mediaObject.rtp.push(r);const i=_.clone(e.parameters)??{};let p=_.clone(e.rtcpFeedback)??[];if(T){const{opusStereo:l,opusFec:y,opusDtx:n,opusMaxPlaybackRate:d,opusMaxAverageBitrate:b,opusPtime:w,opusNack:P,videoGoogleStartBitrate:F,videoGoogleMaxBitrate:u,videoGoogleMinBitrate:x}=T,I=h.codecs.find(L=>L.payloadType===e.payloadType);switch(e.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{l!==void 0&&(I.parameters["sprop-stereo"]=l?1:0,i.stereo=l?1:0),y!==void 0&&(I.parameters.useinbandfec=y?1:0,i.useinbandfec=y?1:0),n!==void 0&&(I.parameters.usedtx=n?1:0,i.usedtx=n?1:0),d!==void 0&&(i.maxplaybackrate=d),b!==void 0&&(i.maxaveragebitrate=b),w!==void 0&&(I.parameters.ptime=w,i.ptime=w),P||(I.rtcpFeedback=I.rtcpFeedback.filter(L=>L.type!=="nack"||L.parameter),p=p.filter(L=>L.type!=="nack"||L.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{F!==void 0&&(i["x-google-start-bitrate"]=F
3),u!==void 0&&(i["x-google-max-bitrate"]=u),x!==void 0&&(i["x-google-min-bitrate"]=x);break}}}const c={payload:e.payloadType,config:""};for(const l of Object.keys(i))c.config&&(c.config+=";"),c.config+=`${l}=${i[l]}`;c.config&&this._mediaObject.fmtp.push(c);for(const l of p)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:l.type,subtype:l.parameter})}this._mediaObject.payloads=k.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[];for(const e of k.headerExtensions)(g.ext??[]).some(i=>i.uri===e.uri)&&this._mediaObject.ext.push({uri:e.uri,value:e.id});if(g.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),g.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:g.simulcast.list1},this._mediaObject.rids=[];for(const e of g.rids??[])e.direction==="send"&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}else if(g.simulcast_03){this._mediaObject.simulcast_03={value:g.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(const e of g.rids??[])e.direction==="send"&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof g.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=t.port,this._mediaObject.maxMessageSize=t.maxMessageSize):g.sctpmap&&(this._mediaObject.payloads=String(t.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:t.port,maxMessageSize:t.maxMessageSize});break}}}setDtlsRole(o){switch(o){case"client":{this._mediaObject.setup="active";break}
3case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(o){var a,g;if(!((a=this._mediaObject.simulcast)!=null&&a.list1))return;const f={};for(const h of o)h.rid&&(f[h.rid]=h);const S=this._mediaObject.simulcast.list1,t=m.parseSimulcastStreamList(S);for(const h of t)for(const k of h)k.paused=!((g=f[k.scid])!=null&&g.active);this._mediaObject.simulcast.list1=t.map(h=>h.map(k=>`${k.paused?"~":""}${k.scid}`).join(",")).join(";")}}X.AnswerMediaSection=s;class D extends v{constructor({iceParameters:o,iceCandidates:f,dtlsParameters:S,sctpParameters:t,plainRtpParameters:a,mid:g,kind:h,offerRtpParameters:k,streamId:T,trackId:e}){var r;switch(super({iceParameters:o,iceCandidates:f,dtlsParameters:S}),this._mediaObject.mid=String(g),this._mediaObject.type=h,a?(this._mediaObject.connection={ip:a.ip,version:a.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=a.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},t?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",h){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:T,appdata:e}];for(const l of k.codecs){const y={payload:l.payloadType,codec:R(l),rate:l.clockRate};l.channels>1&&(y.encoding=l.channels),this._mediaObject.rtp.push(y);const n={payload:l.payloadType,config:""};for(const d of Object.keys(l.parameters??{}))n.config&&(n.config+=";"),n.config+=`${d}=${l.parameters[d]}`;n.config&&this._mediaObject.fmtp.push(n);for(const d of l.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:l.payloadType,type:d.type,subtype:d.parameter})}this._mediaObject.payloads=k.codecs.map(l=>l.payloadType).join(" "),this._mediaObject.ext=[];for(const l of k.headerExtensions)this._mediaObject.ext.push({uri:l.uri,value:l.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";const i=k.encodings[0],p=i.ssrc,c=(r=i.rtx)==null?void 0:r.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],p&&k.rtcp.cname&&this._mediaObject.ssrcs.push({id:p,attribute:"cname",value:k.rtcp.cname}),c&&(k.rtcp.cname&&this._mediaObject.ssrcs.push({id:c,attribute:"cname",value:k.rtcp.cname}),p&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${c}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=t.port,this._mediaObject.maxMessageSize=t.maxMessageSize;break}}}setDtlsRole(o){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}}X.OfferMediaSection=D;function R(E){const f=new RegExp("^(audio|video)/(.+)","i").exec(E.mimeType);if(!f)throw new TypeError("invalid codec.mimeType");return f[2]}return X}var qt;function Ce(){if(qt)return ye;qt=1,Object.defineProperty(ye,"__esModule",{value:!0}),ye.RemoteSdp=void 0;const m=ee(),_=Q(),v=Mr(),s=["av1","h264"],D=new _.Logger("RemoteSdp");let R=class{constructor({iceParameters:o,iceCandidates:f,dtlsParameters:S,sctpParameters:t,plainRtpParameters:a}){C(this,"_iceParameters");C(this,"_iceCandidates");C(this,"_dtlsParameters");C(this,"_sctpParameters");C(this,"_plainRtpParameters");C(this,"_mediaSections",[]);C(this,"_midToIndex",new Map);C(this,"_firstMid");C(this,"_sdpObject");if(this._iceParameters=o,this._iceCandidates=f,this._dtlsParameters=S,this._sctpParameters=t,this._plainRtpParameters=a,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",o!=null&&o.iceLite&&(this._sdpObject.icelite="ice-lite"),S){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};const g=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:S.fingerprints[g-1].algorithm,hash:S.fingerprints[g-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}a&&(this._sdpObject.origin.address=a.ip,this._sdpObject.origin.ipVer=
3a.ipVersion)}updateIceParameters(o){D.debug("updateIceParameters() [iceParameters:%o]",o),this._iceParameters=o,this._sdpObject.icelite=o.iceLite?"ice-lite":void 0;for(const f of this._mediaSections)f.setIceParameters(o)}updateDtlsRole(o){D.debug("updateDtlsRole() [role:%s]",o),this._dtlsParameters.role=o;for(const f of this._mediaSections)f.setDtlsRole(o)}setSessionExtmapAllowMixed(){D.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let o=0;o<this._mediaSections.length;++o){const f=this._mediaSections[o];if(f.closed)return{idx:o,reuseMid:f.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:o,reuseMid:f,offerRtpParameters:S,answerRtpParameters:t,codecOptions:a}){var T;const g=new v.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:o,offerRtpParameters:S,answerRtpParameters:t,codecOptions:a}),h=g.getObject();h.rtp.find(e=>s.includes(e.codec.toLowerCase()))||(h.ext=(T=h.ext)==null?void 0:T.filter(e=>e.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),f?this.replaceMediaSection(g,f):this._midToIndex.has(g.mid)?this.replaceMediaSection(g):this.addMediaSection(g)}receive({mid:o,kind:f,offerRtpParameters:S,streamId:t,trackId:a}){this.setSessionExtmapAllowMixed();const g=new v.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:o,kind:f,offerRtpParameters:S,streamId:t,trackId:a}),h=this._mediaSections.find(k=>k.closed);h?this.replaceMediaSection(g,h.mid):this.addMediaSection(g)}pauseMediaSection(o){this.findMediaSection(o).pause()}resumeSendingMediaSection(o){this.findMediaSection(o).resume()}resumeReceivingMediaSection(o){this.findMediaSection(o).resume()}disableMediaSection(o){this.findMediaSection(o).disable()}closeMediaSection(o){const f=this.findMediaSection(o);return o===this._firstMid?(D.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",o),this.disableMediaSection(o),!1):(f.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(o,f){const S=this.findMediaSection(o);S.muxSimulcastStreams(f),this.replaceMediaSection(S)}sendSctpAssociation({offerMediaObject:o}){const f=new v.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:o});this.addMediaSection(f)}receiveSctpAssociation(){const o=new v.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application"});this.addMediaSection(o)}getSdp(){return this._sdpObject.origin.sessionVersion++,m.write(this._sdpObject)}addMediaSection(o){this._firstMid||(this._firstMid=o.mid),this._mediaSections.push(o),this._midToIndex.set(o.mid,this._mediaSections.length-1),this._sdpObject.media.push(o.getObject()),this.regenerateBundleMids()}replaceMediaSection(o,f){if(typeof f=="string"){const S=this._midToIndex.get(f);if(S===void 0)throw new Error(`no media section found for reuseMid '${f}'`);const t=this._mediaSections[S];this._mediaSections[S]=o,this._midToIndex.delete(t.mid),this._midToIndex.set(o.mid,S),this._sdpObject.media[S]=o.getObject(),this.regenerateBundleMids()}else{const S=this._midToIndex.get(o.mid);if(S===void 0)throw new Error(`no media section found with mid '${o.mid}'`);this._mediaSections[S]=o,this._sdpObject.media[S]=o.getObject()}}findMediaSection(o){const f=this._midToIndex.get(o);if(f===void 0)throw new Error(`no media section found with mid '${o}'`);return this._mediaSections[f]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(o=>!o.closed).map(o=>o.mid).join(" "))}};return ye.RemoteSdp=R,ye}var te={},Bt;function Se(){if(Bt)return te;
3Bt=1,Object.defineProperty(te,"__esModule",{value:!0}),te.extractRtpCapabilities=_,te.extractDtlsParameters=v,te.getCname=s,te.applyCodecParameters=D,te.addHeaderExtension=R;const m=ee();function _({sdpObject:E}){const o=new Map,f=new Map;for(const t of E.media){const a=t.type;switch(a){case"audio":case"video":break;default:continue}for(const g of t.rtp){const h={kind:a,mimeType:`${a}/${g.codec}`,preferredPayloadType:g.payload,clockRate:g.rate,channels:g.encoding,parameters:{},rtcpFeedback:[]};o.set(h.preferredPayloadType,h)}for(const g of t.fmtp??[]){const h=m.parseParams(g.config),k=o.get(g.payload);k&&(h!=null&&h.hasOwnProperty("profile-level-id")&&(h["profile-level-id"]=String(h["profile-level-id"])),k.parameters=h)}for(const g of t.rtcpFb??[]){const h={type:g.type,parameter:g.subtype};if(h.parameter||delete h.parameter,g.payload!=="*"){const k=o.get(Number(g.payload));if(!k)continue;k.rtcpFeedback.push(h)}else for(const k of o.values())k.kind===a&&!/.+\/rtx$/i.test(k.mimeType)&&k.rtcpFeedback.push(h)}for(const g of t.ext??[]){if(g["encrypt-uri"])continue;const h={kind:a,uri:g.uri,preferredId:g.value};f.set(h.preferredId,h)}}return{codecs:Array.from(o.values()),headerExtensions:Array.from(f.values())}}function v({sdpObject:E}){let o=E.setup,f=E.fingerprint;if(!o||!f){const a=(E.media??[]).find(g=>g.port!==0);a&&(o=o??a.setup,f=f??a.fingerprint)}if(o){if(!f)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let S;switch(o){case"active":{S="client";break}case"passive":{S="server";break}case"actpass":{S="auto";break}}return{role:S,fingerprints:[{algorithm:f.type,value:f.hash}]}}function s({offerMediaObject:E}){const o=(E.ssrcs??[]).find(f=>f.attribute==="cname");return o?o.value:""}function D({offerRtpParameters:E,answerMediaObject:o}){var f;for(const S of E.codecs){const t=S.mimeType.toLowerCase();if(t!=="audio/opus"||!(o.rtp??[]).find(k=>k.payload===S.payloadType))continue;o.fmtp=o.fmtp??[];let g=o.fmtp.find(k=>k.payload===S.payloadType);g||(g={payload:S.payloadType,config:""},o.fmtp.push(g));const h=m.parseParams(g.config);switch(t){case"audio/opus":{const k=(f=S.parameters)==null?void 0:f["sprop-stereo"];k!==void 0&&(h.stereo=Number(k)?1:0);break}}g.config="";for(const k of Object.keys(h))g.config&&(g.config+=";"),g.config+=`${k}=${h[k]}`}}function R({offerMediaObject:E,headerExtensionUri:o,headerExtensionId:f}){E.ext||(E.ext=[]),E.ext.push({uri:o,value:f})}return te}var Re={},Ut;function Ee(){if(Ut)return Re;Ut=1,Object.defineProperty(Re,"__esModule",{value:!0}),Re.getRtpEncodings=m,Re.addLegacySimulcast=_;function m({offerMediaObject:v}){const s=new Set;for(const E of v.ssrcs??[]){const o=E.id;o&&s.add(o)}if(s.size===0)throw new Error("no a=ssrc lines found");const D=new Map;for(const E of v.ssrcGroups??[]){if(E.semantics!=="FID")continue;const o=E.ssrcs.split(/\s+/),f=Number(o[0]),S=Number(o[1]);s.has(f)&&(s.delete(f),s.delete(S),D.set(f,S))}for(const E of s)D.set(E,void 0);const R=[];for(const[E,o]of D){const f={ssrc:E};o&&(f.rtx={ssrc:o}),R.push(f)}return R}function _({offerMediaObject:v,numStreams:s}){if(s<=1)throw new TypeError("numStreams must be greater than 1");const D=(v.ssrcs??[]).find(h=>h.attribute==="msid");if(!D)throw new Error("a=ssrc line with msid information not found");const[R,E]=D.value.split(" "),o=Number(D.id);let f;(v.ssrcGroups??[]).some(h=>{if(h.semantics!=="FID")return!1;const k=h.ssrcs.split(/\s+/);return Number(k[0])===o?(f=Number(k[1]),!0):!1});const S=(v.ssrcs??[]).find(h=>h.attribute==="cname");if(!S)throw new Error("a=ssrc line with cname information not found");const t=S.value,a=[],g=[];for(let h=0;h<s;++h)a.push(o+h),f&&g.push(f+h);v.ssrcGroups=[],v.ssrcs=[],v.ssrcGroups.push({semantics:"SIM",ssrcs:a.join(" ")});for(const h of a)v.ssrcs.push({id:h,attribute:"cname",value:t}),v.ssrcs.push({id:h,attribute:"msid",value:`${R} ${E}`});for(let h=0;h<g.length;++h){const k=a[h],T=g[h];v.ssrcs.push({id:T,attribute:"cname",value:t}),v.ssrcs.push({id:T,attribute:"msid",value:`${R} ${E}`}),v.ssrcGroups.push({semantics:"FID",ssrcs:`${k} ${T}`})}}return Re}var de={},Ht;function Te(){if(Ht)return de;
3Ht=1,Object.defineProperty(de,"__esModule",{value:!0}),de.addNackSupportForOpus=m,de.addHeaderExtensionSupport=_,de.getMsidStreamIdAndTrackId=v;function m(s){var D;for(const R of s.codecs??[])(R.mimeType.toLowerCase()==="audio/opus"||R.mimeType.toLowerCase()==="audio/multiopus")&&!((D=R.rtcpFeedback)!=null&&D.some(E=>E.type==="nack"&&!E.parameter))&&(R.rtcpFeedback||(R.rtcpFeedback=[]),R.rtcpFeedback.push({type:"nack"}))}function _(s,D){var f;let R;const E=(f=s.headerExtensions)==null?void 0:f.find(S=>S.uri===D.uri);if(E){if(E.kind===D.kind)return;R=E.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),R===void 0){R=1;const S=new Set(s.headerExtensions.map(t=>t.preferredId));for(;S.has(R);)++R}const o={kind:D.kind,uri:D.uri,preferredId:R,preferredEncrypt:!1,direction:D.direction};s.headerExtensions.push(o)}function v(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};const[D,R]=s.trim().split(/\s+/);return D?{msidStreamId:D,msidTrackId:R}:{msidStreamId:void 0,msidTrackId:void 0}}return de}var Vt;function Fr(){if(Vt)return be;Vt=1,Object.defineProperty(be,"__esModule",{value:!0}),be.Chrome111=void 0;const m=ee(),_=W(),v=Q(),s=Y(),D=J(),R=ce(),E=Ce(),o=Se(),f=Ee(),S=Te(),t=new v.Logger("Chrome111"),a="Chrome111",g={OS:1024,MIS:1024};let h=class qe extends _.EnhancedEventEmitter{constructor({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:n,getSendExtendedRtpCapabilities:d}){super();C(this,"_closed",!1);C(this,"_direction");C(this,"_remoteSdp");C(this,"_getSendExtendedRtpCapabilities");C(this,"_forcedLocalDtlsRole");C(this,"_pc");C(this,"_mapMidTransceiver",new Map);C(this,"_sendStream",new MediaStream);C(this,"_hasDataChannelMediaSection",!1);C(this,"_nextSendSctpStreamId",0);C(this,"_transportReady",!1);C(this,"onIceGatheringStateChange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)});C(this,"onIceCandidateError",e=>{this.emit("@icecandidateerror",e)});C(this,"onConnectionStateChange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)});C(this,"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}}});t.debug("constructor()"),this._direction=e,this._remoteSdp=new E.RemoteSdp({iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c}),this._getSendExtendedRtpCapabilities=d,p.role&&p.role!=="auto"&&(this._forcedLocalDtlsRole=p.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:l??[],iceTransportPolicy:y??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...n}),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))}static createFactory(){return{name:a,factory:e=>new qe(e),getNativeRtpCapabilities:async()=>{t.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video",{sendEncodings:[{scalabilityMode:"L3T3"}]});const r=await e.createOffer();try{e.close()}catch{}e=void 0;const i=m.parse(r.sdp);return qe.getLocalRtpCapabilities(i)}catch(r){try{e==null||e.close()}catch{}throw e=void 0,r}},getNativeSctpCapabilities:async()=>(t.debug("getNativeSctpCapabilities()"),{numStreams:g})}}static getLocalRtpCapabilities(e,r=[]){const i=o.extractRtpCapabilities({sdpObject:e});s.validateAndNormalizeRtpCapabilities(i),S.addNackSupportForOpus(i);for(const p of r)S.addHeaderExtensionSupport(i,p);return i}get name(){return a}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
3("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),t.debug("updateIceServers()");const r=this._pc.getConfiguration();r.iceServers=e,this._pc.setConfiguration(r)}async restartIce(e){if(this.assertNotClosed(),t.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){const r=await this._pc.createOffer({iceRestart:!0});t.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const i={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}else{const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:r,encodings:i,codecOptions:p,headerExtensionOptions:c,codec:l,onRtpSender:y}){if(this.assertNotClosed(),this.assertSendDirection(),t.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,r),i&&i.length>1){let A=1;for(const j of i){const z=j.scalabilityMode?(0,R.parse)(j.scalabilityMode).temporalLayers:3;z>A&&(A=z)}i.forEach((j,z)=>{j.rid=`r${z}`,j.scalabilityMode=`L1T${A}`})}const n=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});y&&y(d.sender);let b=await this._pc.createOffer(),w=m.parse(b.sdp);w.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const P=[];P.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});const F=qe.getLocalRtpCapabilities(w,P),u=this._getSendExtendedRtpCapabilities(F),x=s.getSendingRtpParameters(e.kind,u);x.codecs=s.reduceCodecs(x.codecs,l);const I=s.getSendingRemoteRtpParameters(e.kind,u);if(I.codecs=s.reduceCodecs(I.codecs,l),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:w}),c!=null&&c.absCaptureTime){const A=w.media[n.idx];o.addHeaderExtension({offerMediaObject:A,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:I.headerExtensions.find(j=>j.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),b={type:"offer",sdp:m.write(w)}}t.debug("send() | calling pc.setLocalDescription() [offer:%o]",b),await this._pc.setLocalDescription(b);const L=d.mid;x.mid=L,w=m.parse(this._pc.localDescription.sdp);const M=w.media[n.idx];if(x.rtcp.cname=o.getCname({offerMediaObject:M}),x.msid=`${r??this._sendStream.id} ${e.id}`,!i)x.encodings=f.getRtpEncodings({offerMediaObject:M});else if(i.length===1){const A=f.getRtpEncodings({offerMediaObject:M});Object.assign(A[0],i[0]),x.encodings=A}else x.encodings=i;this._remoteSdp.send({offerMediaObject:M,reuseMid:n.reuseMid,offerRtpParameters:x,answerRtpParameters:I,codecOptions:p});const O={type:"answer",sdp:this._remoteSdp.getSdp()};return t.debug("send() | calling pc.setRemoteDescription() [answer:%o]",O),await this._pc.setRemoteDescription(O),this._mapMidTransceiver.set(L,d),{localId:L,rtpParameters:x,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),t.debug("stopSending() [localId:%s]",e),this._closed)return;const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");if(r.sender.replaceTrack(null),this._pc.removeTrack(r.sender),this._remoteSdp.closeMediaSection(r.mid))try{r.stop()}catch{}const p=await this._pc.createOffer();t.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);const c={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("pauseSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="inactive",this._remoteSdp.pauseMediaSection(e);const i=await this._pc.createOffer();t.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("resumeSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="sendonly";const i=await this._pc.createOffer();t.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async replaceTrack(e,r){this.assertNotClosed(),this.assertSendDirection(),r?t.debug("replaceTrack() [localId:%s, track.id:%s]",e,r.id):t.debug("replaceTrack() [localId:%s, no track]",e);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");await i.sender.replaceTrack(r)}async setMaxSpatialLayer(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setMaxSpatialLayer() [localId:%s, spatialL
3ayer:%s]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{n<=r?y.active=!0:y.active=!1}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async setRtpEncodingParameters(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{p.encodings[n]={...y,...r}}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:r,maxRetransmits:i,label:p,protocol:c}){this.assertNotClosed(),this.assertSendDirection();const l={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:r,maxRetransmits:i,protocol:c};t.debug("sendDataChannel() [options:%o]",l);const y=this._pc.createDataChannel(p,l);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){const d=await this._pc.createOffer(),b=m.parse(d.sdp),w=b.media.find(F=>F.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b}),t.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),this._remoteSdp.sendSctpAssociation({offerMediaObject:w});const P={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._hasDataChannelMediaSection=!0}const n={streamId:l.id,ordered:l.ordered,maxPacketLifeTime:l.maxPacketLifeTime,maxRetransmits:l.maxRetransmits};return{dataChannel:y,sctpStreamParameters:n}}async receive(e){var y;this.assertNotClosed(),this.assertRecvDirection();const r=[],i=new Map;for(const n of e){const{trackId:d,kind:b,rtpParameters:w,streamId:P}=n;t.debug("receive() [trackId:%s, kind:%s]",d,b);const F=w.mid??String(this._mapMidTransceiver.size);i.set(d,F);const{msidStreamId:u}=S.getMsidStreamIdAndTrackId(w.msid);this._remoteSdp.receive({mid:F,kind:b,offerRtpParameters:w,streamId:P??u??((y=w.rtcp)==null?void 0:y.cname)??"-",trackId:d})}const p={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);for(const n of e){const{trackId:d,onRtpReceiver:b}=n;if(b){const w=i.get(d),P=this._pc.getTransceivers().find(F=>F.mid===w);if(!P)throw new Error("transceiver not found");b(P.receiver)}}let c=await this._pc.createAnswer();const l=m.parse(c.sdp);for(const n of e){const{trackId:d,rtpParameters:b}=n,w=i.get(d),P=l.media.find(F=>String(F.mid)===w);o.applyCodecParameters({offerRtpParameters:b,answerMediaObject:P})}c={type:"answer",sdp:m.write(l)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),t.debug("receive() | calling pc.setLocalDescription() [answer:%o]",c),await this._pc.setLocalDescription(c);for(const n of e){const{trackId:d}=n,b=i.get(d),w=this._pc.getTransceivers().find(P=>P.mid===b);if(w)this._mapMidTransceiver.set(b,w),r.push({localId:b,track:w.receiver.track,rtpReceiver:w.receiver});else throw new Error("new RTCRtpTransceiver not found")}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const p of e){t.debug("stopReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(c.mid)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const p of e)this._mapMidTransceiver.delete(p)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("pauseReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="inactive",this._remoteSdp.pauseMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("resumeReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.receiver.getStats()}
3async receiveDataChannel({sctpStreamParameters:e,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y}=e,n={negotiated:!0,id:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y,protocol:i};t.debug("receiveDataChannel() [options:%o]",n);const d=this._pc.createDataChannel(r,n);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const b={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",b),await this._pc.setRemoteDescription(b);const w=await this._pc.createAnswer();if(!this._transportReady){const P=m.parse(w.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:P})}t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setLocalDescription(w),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:r}){r||(r=m.parse(this._pc.localDescription.sdp));const i=o.extractDtlsParameters({sdpObject:r});i.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((p,c)=>{this.safeEmit("@connect",{dtlsParameters:i},p,c)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new D.InvalidStateError("method called
3in 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')}};return be.Chrome111=h,be}var ke={},Gt;function Or(){if(Gt)return ke;Gt=1,Object.defineProperty(ke,"__esModule",{value:!0}),ke.Chrome74=void 0;const m=ee(),_=Q(),v=W(),s=Y(),D=J(),R=ce(),E=Ce(),o=Se(),f=Ee(),S=Te(),t=new _.Logger("Chrome74"),a="Chrome74",g={OS:1024,MIS:1024};let h=class Be extends v.EnhancedEventEmitter{constructor({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:n,getSendExtendedRtpCapabilities:d}){super();C(this,"_closed",!1);C(this,"_direction");C(this,"_remoteSdp");C(this,"_getSendExtendedRtpCapabilities");C(this,"_forcedLocalDtlsRole");C(this,"_pc");C(this,"_mapMidTransceiver",new Map);C(this,"_sendStream",new MediaStream);C(this,"_hasDataChannelMediaSection",!1);C(this,"_nextSendSctpStreamId",0);C(this,"_transportReady",!1);C(this,"onIceGatheringStateChange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)});C(this,"onIceCandidateError",e=>{this.emit("@icecandidateerror",e)});C(this,"onConnectionStateChange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)});C(this,"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}}});t.debug("constructor()"),this._direction=e,this._remoteSdp=new E.RemoteSdp({iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c}),this._getSendExtendedRtpCapabilities=d,p.role&&p.role!=="auto"&&(this._forcedLocalDtlsRole=p.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:l??[],iceTransportPolicy:y??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...n}),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))}static createFactory(){return{name:a,factory:e=>new Be(e),getNativeRtpCapabilities:async()=>{t.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch{}e=void 0;const i=m.parse(r.sdp);return Be.getLocalRtpCapabilities(i)}catch(r){try{e==null||e.close()}catch{}throw e=void 0,r}},getNativeSctpCapabilities:async()=>(t.debug("getNativeSctpCapabilities()"),{numStreams:g})}}static getLocalRtpCapabilities(e,r=[]){const i=o.extractRtpCapabilities({sdpObject:e});s.validateAndNormalizeRtpCapabilities(i),S.addNackSupportForOpus(i);for(const p of r)S.addHeaderExtensionSupport(i,p);return i}get name(){return a}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()");const r=this._pc.getConfiguration();r.iceServers=e,this._pc.setConfiguration(r)}async restartIce(e){if(this.assertNotClosed(),t.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){const r=await this._pc.createOffer({iceRestart:!0});t.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const i={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}else{const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:r,encodings:i,codecOptions:p,headerExtensionOptions:c,codec:l}){this.assertNotClosed(),this.assertSendDirection(),t.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,r),i&&i.length>
31&&i.forEach((j,z)=>{j.rid=`r${z}`});const y=this._remoteSdp.getNextMediaSectionIdx(),n=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});let d=await this._pc.createOffer(),b=m.parse(d.sdp);b.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const w=[];w.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});const P=Be.getLocalRtpCapabilities(b,w),F=this._getSendExtendedRtpCapabilities(P),u=s.getSendingRtpParameters(e.kind,F);u.codecs=s.reduceCodecs(u.codecs,l);const x=s.getSendingRemoteRtpParameters(e.kind,F);x.codecs=s.reduceCodecs(x.codecs,l),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b});let I=!1;const L=(0,R.parse)((i??[{}])[0].scalabilityMode);let M;(i==null?void 0:i.length)===1&&L.spatialLayers>1&&u.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(t.debug("send() | enabling legacy simulcast for VP9 SVC"),I=!0,b=m.parse(d.sdp),M=b.media[y.idx],f.addLegacySimulcast({offerMediaObject:M,numStreams:L.spatialLayers}),d={type:"offer",sdp:m.write(b)}),t.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),c!=null&&c.absCaptureTime&&(M=b.media[y.idx],o.addHeaderExtension({offerMediaObject:M,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:x.headerExtensions.find(j=>j.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:m.write(b)}),await this._pc.setLocalDescription(d);const O=n.mid;if(u.mid=O,b=m.parse(this._pc.localDescription.sdp),M=b.media[y.idx],u.rtcp.cname=o.getCname({offerMediaObject:M}),u.msid=`${r??this._sendStream.id} ${e.id}`,!i)u.encodings=f.getRtpEncodings({offerMediaObject:M});else if(i.length===1){let j=f.getRtpEncodings({offerMediaObject:M});Object.assign(j[0],i[0]),I&&(j=[j[0]]),u.encodings=j}else u.encodings=i;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(const j of u.encodings)j.scalabilityMode?j.scalabilityMode=`L1T${L.temporalLayers}`:j.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:M,reuseMid:y.reuseMid,offerRtpParameters:u,answerRtpParameters:x,codecOptions:p});const A={type:"answer",sdp:this._remoteSdp.getSdp()};return t.debug("send() | calling pc.setRemoteDescription() [answer:%o]",A),await this._pc.setRemoteDescription(A),this._mapMidTransceiver.set(O,n),{localId:O,rtpParameters:u,rtpSender:n.sender}}async stopSending(e){if(this.assertSendDirection(),t.debug("stopSending() [localId:%s]",e),this._closed)return;const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");if(r.sender.replaceTrack(null),this._pc.removeTrack(r.sender),this._remoteSdp.closeMediaSection(r.mid))try{r.stop()}catch{}const p=await this._pc.createOffer();t.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);const c={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("pauseSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="inactive",this._remoteSdp.pauseMediaSection(e);const i=await this._pc.createOffer();t.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("resumeSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="sendonly";const i=await this._pc.createOffer();t.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async replaceTrack(e,r){this.assertNotClosed(),this.assertSendDirection(),r?t.debug("replaceTrack() [localId:%s, track.id:%s]",e,r.id):t.debug("replaceTrack() [localId:%s, no track]",e);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");await i.sender.replaceTrack(r)}async setMaxSpatialLayer(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setMaxSpatialLayer() [localId:%s, spatialL
3ayer:%s]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{n<=r?y.active=!0:y.active=!1}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async setRtpEncodingParameters(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{p.encodings[n]={...y,...r}}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:r,maxRetransmits:i,label:p,protocol:c}){this.assertNotClosed(),this.assertSendDirection();const l={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:r,maxRetransmits:i,protocol:c};t.debug("sendDataChannel() [options:%o]",l);const y=this._pc.createDataChannel(p,l);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){const d=await this._pc.createOffer(),b=m.parse(d.sdp),w=b.media.find(F=>F.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b}),t.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),this._remoteSdp.sendSctpAssociation({offerMediaObject:w});const P={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._hasDataChannelMediaSection=!0}const n={streamId:l.id,ordered:l.ordered,maxPacketLifeTime:l.maxPacketLifeTime,maxRetransmits:l.maxRetransmits};return{dataChannel:y,sctpStreamParameters:n}}async receive(e){var y;this.assertNotClosed(),this.assertRecvDirection();const r=[],i=new Map;for(const n of e){const{trackId:d,kind:b,rtpParameters:w,streamId:P}=n;t.debug("receive() [trackId:%s, kind:%s]",d,b);const F=w.mid??String(this._mapMidTransceiver.size);i.set(d,F);const{msidStreamId:u}=S.getMsidStreamIdAndTrackId(w.msid);this._remoteSdp.receive({mid:F,kind:b,offerRtpParameters:w,streamId:P??u??((y=w.rtcp)==null?void 0:y.cname)??"-",trackId:d})}const p={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let c=await this._pc.createAnswer();const l=m.parse(c.sdp);for(const n of e){const{trackId:d,rtpParameters:b}=n,w=i.get(d),P=l.media.find(F=>String(F.mid)===w);o.applyCodecParameters({offerRtpParameters:b,answerMediaObject:P})}c={type:"answer",sdp:m.write(l)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),t.debug("receive() | calling pc.setLocalDescription() [answer:%o]",c),await this._pc.setLocalDescription(c);for(const n of e){const{trackId:d}=n,b=i.get(d),w=this._pc.getTransceivers().find(P=>P.mid===b);if(w)this._mapMidTransceiver.set(b,w),r.push({localId:b,track:w.receiver.track,rtpReceiver:w.receiver});else throw new Error("new RTCRtpTransceiver not found")}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const p of e){t.debug("stopReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(c.mid)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const p of e)this._mapMidTransceiver.delete(p)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("pauseReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="inactive",this._remoteSdp.pauseMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("resumeReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.receiver.getStats()}
3async receiveDataChannel({sctpStreamParameters:e,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y}=e,n={negotiated:!0,id:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y,protocol:i};t.debug("receiveDataChannel() [options:%o]",n);const d=this._pc.createDataChannel(r,n);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const b={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",b),await this._pc.setRemoteDescription(b);const w=await this._pc.createAnswer();if(!this._transportReady){const P=m.parse(w.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:P})}t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setLocalDescription(w),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:r}){r||(r=m.parse(this._pc.localDescription.sdp));const i=o.extractDtlsParameters({sdpObject:r});i.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((p,c)=>{this.safeEmit("@connect",{dtlsParameters:i},p,c)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new D.InvalidStateError("method called
3in 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')}};return ke.Chrome74=h,ke}var xe={},Qt;function jr(){if(Qt)return xe;Qt=1,Object.defineProperty(xe,"__esModule",{value:!0}),xe.Firefox120=void 0;const m=ee(),_=W(),v=Q(),s=J(),D=Y(),R=ce(),E=Ce(),o=Se(),f=Ee(),S=Te(),t=new v.Logger("Firefox120"),a="Firefox120",g={OS:16,MIS:2048};let h=class Ue extends _.EnhancedEventEmitter{constructor({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:n,getSendExtendedRtpCapabilities:d}){super();C(this,"_closed",!1);C(this,"_direction");C(this,"_remoteSdp");C(this,"_getSendExtendedRtpCapabilities");C(this,"_pc");C(this,"_mapMidTransceiver",new Map);C(this,"_sendStream",new MediaStream);C(this,"_hasDataChannelMediaSection",!1);C(this,"_nextSendSctpStreamId",0);C(this,"_transportReady",!1);C(this,"onIceGatheringStateChange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)});C(this,"onIceCandidateError",e=>{this.emit("@icecandidateerror",e)});C(this,"onConnectionStateChange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)});C(this,"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}}});t.debug("constructor()"),this._direction=e,this._remoteSdp=new E.RemoteSdp({iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c}),this._getSendExtendedRtpCapabilities=d,this._pc=new RTCPeerConnection({iceServers:l??[],iceTransportPolicy:y??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...n}),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))}static createFactory(){return{name:a,factory:e=>new Ue(e),getNativeRtpCapabilities:async()=>{t.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});const r=document.createElement("canvas");r.getContext("2d");const p=r.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"}),e.addTransceiver(p,{direction:"sendrecv",sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});const c=await e.createOffer();try{r.remove()}catch{}try{p.stop()}catch{}try{e.close()}catch{}e=void 0;const l=m.parse(c.sdp);return Ue.getLocalRtpCapabilities(l)}catch(c){try{r.remove()}catch{}try{p.stop()}catch{}try{e==null||e.close()}catch{}throw e=void 0,c}},getNativeSctpCapabilities:async()=>(t.debug("getNativeSctpCapabilities()"),{numStreams:g})}}static getLocalRtpCapabilities(e){const r=o.extractRtpCapabilities({sdpObject:e});return D.validateAndNormalizeRtpCapabilities(r),r}get name(){return a}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 s.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),t.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){const r=await this._pc.createOffer({iceRestart:!0});t.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const i={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}else{const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:r,encodings:i,codecOptions:p,codec:c,onRtpSender:l}){this.assertNotClosed(),this.assertSendDirection(),t.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,r),i&&i.length>
31&&i.forEach((M,O)=>{M.rid=`r${O}`});const y=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});l&&l(y.sender);const n=await this._pc.createOffer();let d=m.parse(n.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const b=Ue.getLocalRtpCapabilities(d),w=this._getSendExtendedRtpCapabilities(b),P=D.getSendingRtpParameters(e.kind,w);P.codecs=D.reduceCodecs(P.codecs,c);const F=D.getSendingRemoteRtpParameters(e.kind,w);F.codecs=D.reduceCodecs(F.codecs,c),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:d});const u=(0,R.parse)((i??[{}])[0].scalabilityMode);t.debug("send() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);const x=y.mid;P.mid=x,d=m.parse(this._pc.localDescription.sdp);const I=d.media[d.media.length-1];if(P.rtcp.cname=o.getCname({offerMediaObject:I}),P.msid=`${r??this._sendStream.id} ${e.id}`,!i)P.encodings=f.getRtpEncodings({offerMediaObject:I});else if(i.length===1){const M=f.getRtpEncodings({offerMediaObject:I});Object.assign(M[0],i[0]),P.encodings=M}else P.encodings=i;if(P.encodings.length>1&&(P.codecs[0].mimeType.toLowerCase()==="video/vp8"||P.codecs[0].mimeType.toLowerCase()==="video/h264"))for(const M of P.encodings)M.scalabilityMode?M.scalabilityMode=`L1T${u.temporalLayers}`:M.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:I,offerRtpParameters:P,answerRtpParameters:F,codecOptions:p});const L={type:"answer",sdp:this._remoteSdp.getSdp()};return t.debug("send() | calling pc.setRemoteDescription() [answer:%o]",L),await this._pc.setRemoteDescription(L),this._mapMidTransceiver.set(x,y),{localId:x,rtpParameters:P,rtpSender:y.sender}}async stopSending(e){if(this.assertSendDirection(),t.debug("stopSending() [localId:%s]",e),this._closed)return;const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");r.sender.replaceTrack(null),this._pc.removeTrack(r.sender),this._remoteSdp.disableMediaSection(r.mid);const i=await this._pc.createOffer();t.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("pauseSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="inactive",this._remoteSdp.pauseMediaSection(e);const i=await this._pc.createOffer();t.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("resumeSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const i=await this._pc.createOffer();t.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async replaceTrack(e,r){this.assertNotClosed(),this.assertSendDirection(),r?t.debug("replaceTrack() [localId:%s, track.id:%s]",e,r.id):t.debug("replaceTrack() [localId:%s, no track]",e);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");await i.sender.replaceTrack(r)}async setMaxSpatialLayer(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated transceiver not found");const p=i.sender.getParameters();
3p.encodings.forEach((y,n)=>{n<=r?y.active=!0:y.active=!1}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async setRtpEncodingParameters(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{p.encodings[n]={...y,...r}}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:r,maxRetransmits:i,label:p,protocol:c}){this.assertNotClosed(),this.assertSendDirection();const l={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:r,maxRetransmits:i,protocol:c};t.debug("sendDataChannel() [options:%o]",l);const y=this._pc.createDataChannel(p,l);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){const d=await this._pc.createOffer(),b=m.parse(d.sdp),w=b.media.find(F=>F.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:b}),t.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),this._remoteSdp.sendSctpAssociation({offerMediaObject:w});const P={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._hasDataChannelMediaSection=!0}const n={streamId:l.id,ordered:l.ordered,maxPacketLifeTime:l.maxPacketLifeTime,maxRetransmits:l.maxRetransmits};return{dataChannel:y,sctpStreamParameters:n}}async receive(e){var y;this.assertNotClosed(),this.assertRecvDirection();const r=[],i=new Map;for(const n of e){const{trackId:d,kind:b,rtpParameters:w,streamId:P}=n;t.debug("receive() [trackId:%s, kind:%s]",d,b);const F=w.mid??String(this._mapMidTransceiver.size);i.set(d,F);const{msidStreamId:u}=S.getMsidStreamIdAndTrackId(w.msid);this._remoteSdp.receive({mid:F,kind:b,offerRtpParameters:w,streamId:P??u??((y=w.rtcp)==null?void 0:y.cname)??"-",trackId:d})}const p={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);for(const n of e){const{trackId:d,onRtpReceiver:b}=n;if(b){const w=i.get(d),P=this._pc.getTransceivers().find(F=>F.mid===w);if(!P)throw new Error("transceiver not found");b(P.receiver)}}let c=await this._pc.createAnswer();const l=m.parse(c.sdp);for(const n of e){const{trackId:d,rtpParameters:b}=n,w=i.get(d),P=l.media.find(F=>String(F.mid)===w);o.applyCodecParameters({offerRtpParameters:b,answerMediaObject:P}),c={type:"answer",sdp:m.write(l)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:l}),t.debug("receive() | calling pc.setLocalDescription() [answer:%o]",c),await this._pc.setLocalDescription(c);for(const n of e){const{trackId:d}=n,b=i.get(d),w=this._pc.getTransceivers().find(P=>P.mid===b);if(!w)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(b,w),r.push({localId:b,track:w.receiver.track,rtpReceiver:w.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const p of e){t.debug("stopReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(c.mid)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const p of e)this._mapMidTransceiver.delete(p)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("pauseReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="inactive",this._remoteSdp.pauseMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("resumeReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async getReceiverStats(e){this.assertRecvDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.receiver.getStats()}
3async receiveDataChannel({sctpStreamParameters:e,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y}=e,n={negotiated:!0,id:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y,protocol:i};t.debug("receiveDataChannel() [options:%o]",n);const d=this._pc.createDataChannel(r,n);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const b={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",b),await this._pc.setRemoteDescription(b);const w=await this._pc.createAnswer();if(!this._transportReady){const P=m.parse(w.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:P})}t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setLocalDescription(w),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:r}){r||(r=m.parse(this._pc.localDescription.sdp));const i=o.extractDtlsParameters({sdpObject:r});i.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((p,c)=>{this.safeEmit("@connect",{dtlsParameters:i},p,c)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new s.InvalidStateError("method called
3in 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')}};return xe.Firefox120=h,xe}var De={},Wt;function Nr(){if(Wt)return De;Wt=1,Object.defineProperty(De,"__esModule",{value:!0}),De.Safari12=void 0;const m=ee(),_=W(),v=Q(),s=Y(),D=J(),R=ce(),E=Ce(),o=Se(),f=Ee(),S=Te(),t=new v.Logger("Safari12"),a="Safari12",g={OS:1024,MIS:1024};let h=class He extends _.EnhancedEventEmitter{constructor({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:n,getSendExtendedRtpCapabilities:d}){super();C(this,"_closed",!1);C(this,"_direction");C(this,"_remoteSdp");C(this,"_getSendExtendedRtpCapabilities");C(this,"_forcedLocalDtlsRole");C(this,"_pc");C(this,"_mapMidTransceiver",new Map);C(this,"_sendStream",new MediaStream);C(this,"_hasDataChannelMediaSection",!1);C(this,"_nextSendSctpStreamId",0);C(this,"_transportReady",!1);C(this,"onIceGatheringStateChange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)});C(this,"onIceCandidateError",e=>{this.emit("@icecandidateerror",e)});C(this,"onConnectionStateChange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)});C(this,"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}}});t.debug("constructor()"),this._direction=e,this._remoteSdp=new E.RemoteSdp({iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c}),this._getSendExtendedRtpCapabilities=d,p.role&&p.role!=="auto"&&(this._forcedLocalDtlsRole=p.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:l??[],iceTransportPolicy:y??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...n}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",b=>{this.emit("@icecandidateerror",b)}),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))}static createFactory(){return{name:a,factory:e=>new He(e),getNativeRtpCapabilities:async()=>{t.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch{}e=void 0;const i=m.parse(r.sdp);return He.getLocalRtpCapabilities(i)}catch(r){try{e==null||e.close()}catch{}throw e=void 0,r}},getNativeSctpCapabilities:async()=>(t.debug("getNativeSctpCapabilities()"),{numStreams:g})}}static getLocalRtpCapabilities(e,r=[]){const i=o.extractRtpCapabilities({sdpObject:e});s.validateAndNormalizeRtpCapabilities(i),S.addNackSupportForOpus(i);for(const p of r)S.addHeaderExtensionSupport(i,p);return i}get name(){return a}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
3("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),t.debug("updateIceServers()");const r=this._pc.getConfiguration();r.iceServers=e,this._pc.setConfiguration(r)}async restartIce(e){if(this.assertNotClosed(),t.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){const r=await this._pc.createOffer({iceRestart:!0});t.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const i={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}else{const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:r,encodings:i,codecOptions:p,headerExtensionOptions:c,codec:l,onRtpSender:y}){this.assertNotClosed(),this.assertSendDirection(),t.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,r);const n=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});y&&y(d.sender);let b=await this._pc.createOffer(),w=m.parse(b.sdp);w.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const P=[];P.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});const F=He.getLocalRtpCapabilities(w,P),u=this._getSendExtendedRtpCapabilities(F),x=s.getSendingRtpParameters(e.kind,u);x.codecs=s.reduceCodecs(x.codecs,l);const I=s.getSendingRemoteRtpParameters(e.kind,u);I.codecs=s.reduceCodecs(I.codecs,l);let L;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:w});const M=(0,R.parse)((i??[{}])[0].scalabilityMode);i&&i.length>1&&(t.debug("send() | enabling legacy simulcast"),w=m.parse(b.sdp),L=w.media[n.idx],f.addLegacySimulcast({offerMediaObject:L,numStreams:i.length}),b={type:"offer",sdp:m.write(w)}),c!=null&&c.absCaptureTime&&(L=w.media[n.idx],o.addHeaderExtension({offerMediaObject:L,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:I.headerExtensions.find(j=>j.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),b={type:"offer",sdp:m.write(w)}),t.debug("send() | calling pc.setLocalDescription() [offer:%o]",b),await this._pc.setLocalDescription(b);const O=d.mid;if(x.mid=O,w=m.parse(this._pc.localDescription.sdp),L=w.media[n.idx],x.rtcp.cname=o.getCname({offerMediaObject:L}),x.msid=`${r??this._sendStream.id} ${e.id}`,x.encodings=f.getRtpEncodings({offerMediaObject:L}),i)for(let j=0;j<x.encodings.length;++j)i[j]&&Object.assign(x.encodings[j],i[j]);if(x.encodings.length>1&&(x.codecs[0].mimeType.toLowerCase()==="video/vp8"||x.codecs[0].mimeType.toLowerCase()==="video/h264"))for(const j of x.encodings)j.scalabilityMode?j.scalabilityMode=`L1T${M.temporalLayers}`:j.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:L,reuseMid:n.reuseMid,offerRtpParameters:x,answerRtpParameters:I,codecOptions:p});const A={type:"answer",sdp:this._remoteSdp.getSdp()};return t.debug("send() | calling pc.setRemoteDescription() [answer:%o]",A),await this._pc.setRemoteDescription(A),this._mapMidTransceiver.set(O,d),{localId:O,rtpParameters:x,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;t.debug("stopSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");if(r.sender.replaceTrack(null),this._pc.removeTrack(r.sender),this._remoteSdp.closeMediaSection(r.mid))try{r.stop()}catch{}const p=await this._pc.createOffer();t.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);const c={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("pauseSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="inactive",this._remoteSdp.pauseMediaSection(e);const i=await this._pc.createOffer();t.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("resumeSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const i=await this._pc.createOffer();t.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async replaceTrack(e,r){this.assertNotClosed(),this.assertSendDirection(),r?t.debug("replaceTrack() [localId:%s, track.id:%s]",e,r.id):t.debug("replaceTrack() [localId:%s, no track]",e);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");await i.sender.replaceTrack(r)}async setMaxSpatialLayer(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setMaxSpatialLayer() [localId:%s, spatialL
3ayer:%s]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{n<=r?y.active=!0:y.active=!1}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async setRtpEncodingParameters(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{p.encodings[n]={...y,...r}}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:r,maxRetransmits:i,label:p,protocol:c}){this.assertNotClosed(),this.assertSendDirection();const l={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:r,maxRetransmits:i,protocol:c};t.debug("sendDataChannel() [options:%o]",l);const y=this._pc.createDataChannel(p,l);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){const d=await this._pc.createOffer(),b=m.parse(d.sdp),w=b.media.find(F=>F.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b}),t.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),this._remoteSdp.sendSctpAssociation({offerMediaObject:w});const P={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._hasDataChannelMediaSection=!0}const n={streamId:l.id,ordered:l.ordered,maxPacketLifeTime:l.maxPacketLifeTime,maxRetransmits:l.maxRetransmits};return{dataChannel:y,sctpStreamParameters:n}}async receive(e){var y;this.assertNotClosed(),this.assertRecvDirection();const r=[],i=new Map;for(const n of e){const{trackId:d,kind:b,rtpParameters:w,streamId:P}=n;t.debug("receive() [trackId:%s, kind:%s]",d,b);const F=w.mid??String(this._mapMidTransceiver.size);i.set(d,F);const{msidStreamId:u}=S.getMsidStreamIdAndTrackId(w.msid);this._remoteSdp.receive({mid:F,kind:b,offerRtpParameters:w,streamId:P??u??((y=w.rtcp)==null?void 0:y.cname)??"-",trackId:d})}const p={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);for(const n of e){const{trackId:d,onRtpReceiver:b}=n;if(b){const w=i.get(d),P=this._pc.getTransceivers().find(F=>F.mid===w);if(!P)throw new Error("transceiver not found");b(P.receiver)}}let c=await this._pc.createAnswer();const l=m.parse(c.sdp);for(const n of e){const{trackId:d,rtpParameters:b}=n,w=i.get(d),P=l.media.find(F=>String(F.mid)===w);o.applyCodecParameters({offerRtpParameters:b,answerMediaObject:P})}c={type:"answer",sdp:m.write(l)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),t.debug("receive() | calling pc.setLocalDescription() [answer:%o]",c),await this._pc.setLocalDescription(c);for(const n of e){const{trackId:d}=n,b=i.get(d),w=this._pc.getTransceivers().find(P=>P.mid===b);if(!w)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(b,w),r.push({localId:b,track:w.receiver.track,rtpReceiver:w.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const p of e){t.debug("stopReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(c.mid)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const p of e)this._mapMidTransceiver.delete(p)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("pauseReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="inactive",this._remoteSdp.pauseMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("resumeReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.receiver.getStats()}
3async receiveDataChannel({sctpStreamParameters:e,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y}=e,n={negotiated:!0,id:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y,protocol:i};t.debug("receiveDataChannel() [options:%o]",n);const d=this._pc.createDataChannel(r,n);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const b={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",b),await this._pc.setRemoteDescription(b);const w=await this._pc.createAnswer();if(!this._transportReady){const P=m.parse(w.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:P})}t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setLocalDescription(w),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:r}){r||(r=m.parse(this._pc.localDescription.sdp));const i=o.extractDtlsParameters({sdpObject:r});i.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((p,c)=>{this.safeEmit("@connect",{dtlsParameters:i},p,c)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new D.InvalidStateError("method called
3in 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')}};return De.Safari12=h,De}var Pe={},Kt;function Ar(){if(Kt)return Pe;Kt=1,Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.ReactNative106=void 0;const m=ee(),_=W(),v=Q(),s=Y(),D=J(),R=ce(),E=Ce(),o=Se(),f=Ee(),S=Te(),t=new v.Logger("ReactNative106"),a="ReactNative106",g={OS:1024,MIS:1024};let h=class Ve extends _.EnhancedEventEmitter{constructor({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c,iceServers:l,iceTransportPolicy:y,additionalSettings:n,getSendExtendedRtpCapabilities:d}){super();C(this,"_closed",!1);C(this,"_direction");C(this,"_remoteSdp");C(this,"_getSendExtendedRtpCapabilities");C(this,"_forcedLocalDtlsRole");C(this,"_pc");C(this,"_mapMidTransceiver",new Map);C(this,"_sendStream",new MediaStream);C(this,"_hasDataChannelMediaSection",!1);C(this,"_nextSendSctpStreamId",0);C(this,"_transportReady",!1);C(this,"onIceGatheringStateChange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)});C(this,"onIceCandidateError",e=>{this.emit("@icecandidateerror",e)});C(this,"onConnectionStateChange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)});C(this,"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}}});t.debug("constructor()"),this._direction=e,this._remoteSdp=new E.RemoteSdp({iceParameters:r,iceCandidates:i,dtlsParameters:p,sctpParameters:c}),this._getSendExtendedRtpCapabilities=d,p.role&&p.role!=="auto"&&(this._forcedLocalDtlsRole=p.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:l??[],iceTransportPolicy:y??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...n}),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))}static createFactory(){return{name:a,factory:e=>new Ve(e),getNativeRtpCapabilities:async()=>{t.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch{}e=void 0;const i=m.parse(r.sdp);return Ve.getLocalRtpCapabilities(i)}catch(r){try{e==null||e.close()}catch{}throw e=void 0,r}},getNativeSctpCapabilities:async()=>(t.debug("getNativeSctpCapabilities()"),{numStreams:g})}}static getLocalRtpCapabilities(e,r=[]){const i=o.extractRtpCapabilities({sdpObject:e});s.validateAndNormalizeRtpCapabilities(i),S.addNackSupportForOpus(i);for(const p of r)S.addHeaderExtensionSupport(i,p);return i}get name(){return a}close(){if(t.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(),t.debug("updateIceServers()");const r=this._pc.getConfiguration();r.iceServers=e,this._pc.setConfiguration(r)}async restartIce(e){if(this.assertNotClosed(),t.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){const r=await this._pc.createOffer({iceRestart:!0});t.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const i={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}else{const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:r,encodings:i,codecOptions:p,headerExtensionOptions:c,codec:l,onRtpSender:y}){this.assertNotClosed(),this.assertSendDirection(),t.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,r),i&&i.length>
31&&i.forEach((z,or)=>{z.rid=`r${or}`});const n=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});y&&y(d.sender);let b=await this._pc.createOffer(),w=m.parse(b.sdp);w.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const P=[];P.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});const F=Ve.getLocalRtpCapabilities(w,P),u=this._getSendExtendedRtpCapabilities(F),x=s.getSendingRtpParameters(e.kind,u);x.codecs=s.reduceCodecs(x.codecs,l);const I=s.getSendingRemoteRtpParameters(e.kind,u);I.codecs=s.reduceCodecs(I.codecs,l),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:w});let L=!1;const M=(0,R.parse)((i??[{}])[0].scalabilityMode);let O;(i==null?void 0:i.length)===1&&M.spatialLayers>1&&x.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(t.debug("send() | enabling legacy simulcast for VP9 SVC"),L=!0,w=m.parse(b.sdp),O=w.media[n.idx],f.addLegacySimulcast({offerMediaObject:O,numStreams:M.spatialLayers}),b={type:"offer",sdp:m.write(w)}),c!=null&&c.absCaptureTime&&(O=w.media[n.idx],o.addHeaderExtension({offerMediaObject:O,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:I.headerExtensions.find(z=>z.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),b={type:"offer",sdp:m.write(w)}),t.debug("send() | calling pc.setLocalDescription() [offer:%o]",b),await this._pc.setLocalDescription(b);let A=d.mid??void 0;if(A||t.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),x.mid=A,w=m.parse(this._pc.localDescription.sdp),O=w.media[n.idx],x.rtcp.cname=o.getCname({offerMediaObject:O}),x.msid=`${r??this._sendStream.id} ${e.id}`,!i)x.encodings=f.getRtpEncodings({offerMediaObject:O});else if(i.length===1){let z=f.getRtpEncodings({offerMediaObject:O});Object.assign(z[0],i[0]),L&&(z=[z[0]]),x.encodings=z}else x.encodings=i;if(x.encodings.length>1&&(x.codecs[0].mimeType.toLowerCase()==="video/vp8"||x.codecs[0].mimeType.toLowerCase()==="video/h264"))for(const z of x.encodings)z.scalabilityMode?z.scalabilityMode=`L1T${M.temporalLayers}`:z.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:O,reuseMid:n.reuseMid,offerRtpParameters:x,answerRtpParameters:I,codecOptions:p});const j={type:"answer",sdp:this._remoteSdp.getSdp()};return t.debug("send() | calling pc.setRemoteDescription() [answer:%o]",j),await this._pc.setRemoteDescription(j),A||(A=d.mid,x.mid=A),this._mapMidTransceiver.set(A,d),{localId:A,rtpParameters:x,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;t.debug("stopSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");if(r.sender.replaceTrack(null),this._pc.removeTrack(r.sender),this._remoteSdp.closeMediaSection(r.mid))try{r.stop()}catch{}const p=await this._pc.createOffer();t.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);const c={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("pauseSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="inactive",this._remoteSdp.pauseMediaSection(e);const i=await this._pc.createOffer();t.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),t.debug("resumeSending() [localId:%s]",e);const r=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!r)throw new Error("associated RTCRtpTransceiver not found");r.direction="sendonly";const i=await this._pc.createOffer();t.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const p={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",p),await this._pc.setRemoteDescription(p)}async replaceTrack(e,r){this.assertNotClosed(),this.assertSendDirection(),r?t.debug("replaceTrack() [localId:%s, track.id:%s]",e,r.id):t.debug("replaceTrack() [localId:%s, no track]",e);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");await i.sender.replaceTrack(r)}async setMaxSpatialLayer(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setMaxSpatialLayer() [localId:%s, spatialL
3ayer:%s]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{n<=r?y.active=!0:y.active=!1}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async setRtpEncodingParameters(e,r){this.assertNotClosed(),this.assertSendDirection(),t.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,r);const i=this._mapMidTransceiver.get(e);if(!i)throw new Error("associated RTCRtpTransceiver not found");const p=i.sender.getParameters();p.encodings.forEach((y,n)=>{p.encodings[n]={...y,...r}}),await i.sender.setParameters(p),this._remoteSdp.muxMediaSectionSimulcast(e,p.encodings);const c=await this._pc.createOffer();t.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",l),await this._pc.setRemoteDescription(l)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:r,maxRetransmits:i,label:p,protocol:c}){this.assertNotClosed(),this.assertSendDirection();const l={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:r,maxRetransmits:i,protocol:c};t.debug("sendDataChannel() [options:%o]",l);const y=this._pc.createDataChannel(p,l);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){const d=await this._pc.createOffer(),b=m.parse(d.sdp),w=b.media.find(F=>F.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b}),t.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),this._remoteSdp.sendSctpAssociation({offerMediaObject:w});const P={type:"answer",sdp:this._remoteSdp.getSdp()};t.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._hasDataChannelMediaSection=!0}const n={streamId:l.id,ordered:l.ordered,maxPacketLifeTime:l.maxPacketLifeTime,maxRetransmits:l.maxRetransmits};return{dataChannel:y,sctpStreamParameters:n}}async receive(e){var y;this.assertNotClosed(),this.assertRecvDirection();const r=[],i=new Map;for(const n of e){const{trackId:d,kind:b,rtpParameters:w,streamId:P}=n;t.debug("receive() [trackId:%s, kind:%s]",d,b);const F=w.mid??String(this._mapMidTransceiver.size);i.set(d,F);const{msidStreamId:u}=S.getMsidStreamIdAndTrackId(w.msid);this._remoteSdp.receive({mid:F,kind:b,offerRtpParameters:w,streamId:P??u??((y=w.rtcp)==null?void 0:y.cname)??"-",trackId:d})}const p={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);for(const n of e){const{trackId:d,onRtpReceiver:b}=n;if(b){const w=i.get(d),P=this._pc.getTransceivers().find(F=>F.mid===w);if(!P)throw new Error("transceiver not found");b(P.receiver)}}let c=await this._pc.createAnswer();const l=m.parse(c.sdp);for(const n of e){const{trackId:d,rtpParameters:b}=n,w=i.get(d),P=l.media.find(F=>String(F.mid)===w);o.applyCodecParameters({offerRtpParameters:b,answerMediaObject:P})}c={type:"answer",sdp:m.write(l)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),t.debug("receive() | calling pc.setLocalDescription() [answer:%o]",c),await this._pc.setLocalDescription(c);for(const n of e){const{trackId:d}=n,b=i.get(d),w=this._pc.getTransceivers().find(P=>P.mid===b);if(w)this._mapMidTransceiver.set(b,w),r.push({localId:b,track:w.receiver.track,rtpReceiver:w.receiver});else throw new Error("new RTCRtpTransceiver not found")}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const p of e){t.debug("stopReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(c.mid)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const p of e)this._mapMidTransceiver.delete(p)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("pauseReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="inactive",this._remoteSdp.pauseMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const p of e){t.debug("resumeReceiving() [localId:%s]",p);const c=this._mapMidTransceiver.get(p);if(!c)throw new Error("associated RTCRtpTransceiver not found");c.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(p)}const r={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);const i=await this._pc.createAnswer();t.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");return r.receiver.getStats()}
3async receiveDataChannel({sctpStreamParameters:e,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y}=e,n={negotiated:!0,id:p,ordered:c,maxPacketLifeTime:l,maxRetransmits:y,protocol:i};t.debug("receiveDataChannel() [options:%o]",n);const d=this._pc.createDataChannel(r,n);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const b={type:"offer",sdp:this._remoteSdp.getSdp()};t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",b),await this._pc.setRemoteDescription(b);const w=await this._pc.createAnswer();if(!this._transportReady){const P=m.parse(w.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:P})}t.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setLocalDescription(w),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:r}){r||(r=m.parse(this._pc.localDescription.sdp));const i=o.extractDtlsParameters({sdpObject:r});i.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((p,c)=>{this.safeEmit("@connect",{dtlsParameters:i},p,c)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new D.InvalidStateError("method called
3in 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')}};return Pe.ReactNative106=h,Pe}var Jt;function zr(){if(Jt)return se;Jt=1,Object.defineProperty(se,"__esModule",{value:!0}),se.Device=void 0,se.detectDevice=g,se.detectDeviceAsync=h;const m=Q(),_=W(),v=J(),s=oe(),D=Y(),R=Pr(),E=Fr(),o=Or(),f=jr(),S=Nr(),t=Ar(),a=new m.Logger("Device");function g(y,n){return a.debug("detectDevice()"),!y&&typeof navigator=="object"&&(y=navigator.userAgent),!n&&typeof navigator=="object"&&(n=navigator.userAgentData),T(y,n)}async function h(y,n){return a.debug("detectDeviceAsync()"),!y&&typeof navigator=="object"&&(y=navigator.userAgent),!n&&typeof navigator=="object"&&(n=navigator.userAgentData),T(y,n)}let k=class pr{constructor({handlerName:n,handlerFactory:d}={}){C(this,"_handlerFactory");C(this,"_handlerName");C(this,"_loaded",!1);C(this,"_getSendExtendedRtpCapabilities");C(this,"_recvRtpCapabilities");C(this,"_canProduceByKind",{audio:!1,video:!1});C(this,"_sctpCapabilities");C(this,"_observer",new _.EnhancedEventEmitter);if(a.debug("constructor()"),n&&d)throw new TypeError("just one of handlerName or handlerInterface can be given");if(d)this._handlerFactory=d;else{if(n)a.debug("constructor() | handler given: %s",n);else if(n=g(),n)a.debug("constructor() | detected handler: %s",n);else throw new v.UnsupportedError("device not supported");switch(n){case"Chrome111":{this._handlerFactory=E.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=o.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=f.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=S.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=t.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${n}"`)}}this._handlerName=this._handlerFactory.name}static async factory({handlerName:n,handlerFactory:d}={}){if(a.debug("factory()"),n&&d)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!n&&!d&&(n=await h(),!n))throw new v.UnsupportedError("device not supported");return new pr({handlerName:n,handlerFactory:d})}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new v.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new v.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:n,preferLocalCodecsOrder:d=!1}){if(a.debug("load() [routerRtpCapabilities:%o]",n),this._loaded)throw new v.InvalidStateError("already loaded");const b=s.clone(n);D.validateAndNormalizeRtpCapabilities(b);const{getNativeRtpCapabilities:w,getNativeSctpCapabilities:P}=this._handlerFactory,F=s.clone(await w());D.validateAndNormalizeRtpCapabilities(F),a.debug("load() | got native RTP capabilities:%o",F),this._getSendExtendedRtpCapabilities=x=>s.clone(D.getExtendedRtpCapabilities(x,b,d));const u=D.getExtendedRtpCapabilities(F,b,!1);this._recvRtpCapabilities=D.getRecvRtpCapabilities(u),D.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities),a.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._canProduceByKind.audio=D.canSend("audio",this._recvRtpCapabilities),this._canProduceByKind.video=D.canSend("video",this._recvRtpCapabilities),this._sctpCapabilities=await P(),D.validateSctpCapabilities(this._sctpCapabilities),a.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),a.debug("load() succeeded"),this._loaded=!0}canProduce(n){if(this._loaded){if(n!=="audio"&&n!=="video")throw new TypeError(`invalid kind "${n}"`)}else throw new v.InvalidStateError("not loaded");return this._canProduceByKind[n]}createSendTransport({id:n,iceParameters:d,iceCandidates:b,dtlsParameters:w,sctpParameters:P,iceServers:F,iceTransportPolicy:u,additionalSettings:x,appData:I}){return a.debug("createSendTransport()"),this.createTransport({direction:"send",id:n,iceParameters:d,iceCandidates:b,dtlsParameters:w,sctpParameters:P,iceServers:F,iceTransportPolicy:u,additionalSettings:x,appData:I})}createRecvTransport({id:n,iceParameters:d,iceCandidates:b,dtlsParameters:w,sctpParameters:P,iceServers:F,iceTransportPolicy:u,additionalSettings:x,appData:I}){return a.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:n,iceParameters:d,iceCandidates:b,dtlsParameters:w,sctpParameters:P,iceServers:F,iceTransportPolicy:u,additionalSettings:x,appData:I})}createTransport({direction:n,id:d,iceParameters:b,iceCandidates:w,dtlsParameters:P,sctpParameters:F,iceServers:u,iceTransportPolicy:x,additionalSettings:I,appData:L}){if(this._loaded){if(typeof d!="string")throw new TypeError("missing id");if(typeof b!="object")throw new TypeError("missing iceParameters");if(Array.isArray(w)){if(typeof P!="object")throw new TypeError("missing dtlsParameters");if(F&&typeof F!="object")throw new TypeError("wrong sctpParameters");if(L&&typeof L!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new v.InvalidStateError("not loaded");
3const M=new R.Transport({direction:n,id:d,iceParameters:b,iceCandidates:w,dtlsParameters:P,sctpParameters:F,iceServers:u,iceTransportPolicy:x,additionalSettings:I,appData:L,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",M),M}};se.Device=k;function T(y,n){a.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',y,n);const d=e(y,n);if(d){if(d>=111)return a.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(d>=74)return a.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";a.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}const b=r(y);if(b){if(b>=120)return a.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";a.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}const w=i(y);if(w){if(w>=605)return a.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";a.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}const P=p(y);if(P){if(P>=605)return a.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";a.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(l()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return a.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";a.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}a.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',y,n)}function e(y,n){if(a.debug("getChromiumMajorVersion()"),c(y,n)){a.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(l()){a.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(n){const b=(n.brands??[]).find(w=>w.brand==="Chromium");if(b){const w=Number(b.version);return a.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${w}`),w}}const d=y==null?void 0:y.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(d!=null&&d[1]){const b=Number(d[1]);return a.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${b}`),b}a.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function r(y){if(a.debug("getFirefoxMajorVersion()"),c(y)){a.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(l()){a.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}const n=y==null?void 0:y.match(/\bFirefox\/(\w+)/i);if(n!=null&&n[1]){const d=Number(n[1]);return a.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${d}`),d}a.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function i(y){if(a.debug("getMacOSWebKitMajorVersion()"),c(y)){a.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(l()){a.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(y&&/\bSafari\b/i.test(y)&&!/\bChrome\b/i.test(y)&&!/\bChromium\b/i.test(y)&&!/\bFirefox\b/i.test(y))){a.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}const d=y.match(/AppleWebKit\/(\w+)/i);if(d!=null&&d[1]){const b=Number(d[1]);return a.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${b}`),b}a.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function p(y){if(a.debug("getIOSWebKitMajorVersion()"),!c(y)){a.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(l()){a.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}const n=y==null?void 0:y.match(/AppleWebKit\/(\w+)/i);if(n!=null&&n[1]){const d=Number(n[1]);return a.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${d}`),d}a.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function c(y,n){return a.debug("isIOS()"),(n==null?void 0:n.platform)==="iOS"?(
3a.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):n!=null&&n.platform?(a.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):y&&/iPad|iPhone|iPod/.test(y)?(a.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(a.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(a.debug("isIOS() | this is not iOS => false"),!1)}function l(){return a.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(a.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(a.debug("isReactNative() | this is not React-Native => false"),!1)}return se}var Le={},Ie={},nt={},Zt;function $r(){if(Zt)return nt;Zt=1;for(var m=256,_=[],v;m--;)_[m]=(m+256).toString(16).substring(1);function s(){var D=0,R,E="";if(!v||m+16>256){for(v=Array(D=256);D--;)v[D]=256*Math.random()|0;D=m=0}for(;D<16;D++)R=v[m+D],D==6?E+=_[R&15|64]:D==8?E+=_[R&63|128]:E+=_[R],D&1&&D>1&&D<11&&(E+="-");return m++,E}return nt.v4=s,nt}var Me={},Yt;function qr(){if(Yt)return Me;Yt=1,Object.defineProperty(Me,"__esModule",{value:!0}),Me.FakeEventTarget=void 0;class m{constructor(){C(this,"listeners",{})}addEventListener(v,s,D){s&&(this.listeners[v]=this.listeners[v]??[],this.listeners[v].push({callback:typeof s=="function"?s:s.handleEvent,once:typeof D=="object"&&D.once===!0}))}removeEventListener(v,s,D){this.listeners[v]&&s&&(this.listeners[v]=this.listeners[v].filter(R=>R.callback!==(typeof s=="function"?s:s.handleEvent)))}dispatchEvent(v){if(!v||typeof v.type!="string")throw new Error("invalid event object");const s=this.listeners[v.type];if(!s)return!0;for(const D of[...s]){try{D.callback.call(this,v)}catch(R){setTimeout(()=>{throw R},0)}D.once&&this.removeEventListener(v.type,D.callback)}return!v.defaultPrevented}}return Me.FakeEventTarget=m,Me}var Fe={},Xt;function Br(){if(Xt)return Fe;Xt=1,Object.defineProperty(Fe,"__esModule",{value:!0}),Fe.FakeEvent=void 0;let m=class{constructor(v,s={}){C(this,"NONE",0);C(this,"CAPTURING_PHASE",1);C(this,"AT_TARGET",2);C(this,"BUBBLING_PHASE",3);C(this,"type");C(this,"bubbles");C(this,"cancelable");C(this,"defaultPrevented",!1);C(this,"composed",!1);C(this,"currentTarget",null);C(this,"eventPhase",this.NONE);C(this,"isTrusted",!0);C(this,"target",null);C(this,"timeStamp",0);C(this,"cancelBubble",!1);C(this,"returnValue",!0);C(this,"srcElement",null);this.type=v,this.bubbles=s.bubbles??!1,this.cancelable=s.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(v,s,D){}};return Fe.FakeEvent=m,Fe}var $e={},er;function Ur(){if(er)return $e;er=1,Object.defineProperty($e,"__esModule",{value:!0}),$e.clone=m;function m(_){if(_!==void 0)return Number.isNaN(_)?NaN:typeof structuredClone=="function"?structuredClone(_):JSON.parse(JSON.stringify(_))}return $e}var tr;function Hr(){var R,E,o,f,S,t,a,g,h,k,T,e,r,i,p,c;if(tr)return Ie;tr=1,Object.defineProperty(Ie,"__esModule",{value:!0}),Ie.FakeMediaStreamTrack=void 0;const m=$r(),_=qr(),v=Br(),s=Ur(),l=class l extends _.FakeEventTarget{constructor({kind:d,id:b,label:w,contentHint:P,enabled:F,muted:u,readyState:x,capabilities:I,constraints:L,settings:M,data:O}){super();V(this,R);V(this,E);V(this,o);V(this,f);V(this,S);V(this,t);V(this,a);V(this,g);V(this,h);V(this,k);V(this,T);V(this,e,null);V(this,r,null);V(this,i,null);V(this,p,null);V(this,c,null);B(this,R,b??(0,m.v4)()),B(this,E,d),B(this,o,w??""),B(this,a,P??""),B(this,S,F??!0),B(this,t,u??!1),B(this,f,x??"live"),B(this,g,I??{}),B(this,h,L??{}),B(this,k,M??{}),B(this,T,O??{})}get id(){return N(this,R)}get kind(){return N(this,E)}get label(){return N(this,o)}get contentHint(){return N(this,a)}set contentHint(d){B(this,a,d)}get enabled(){return N(this,S)}set enabled(d){const b=N(this,S)!==d;B(this,S,d),b&&this.dispatchEvent(new v.FakeEvent("enabledchange"))}get muted(){return N(this,t)}get readyState(){return N(this,f)}get data(){return N(this,T)}set data(d){B(this,T,d)}get onmute(){return N(this,e)}set onmute(d){N(this,e)&&this.removeEventListener("mute",N(this,e)),B(this,e,d),d&&this.addEventListener("mute",d)}get onunmute(){return N(this,r)}set onunmute(d){N(this,r)&&this.removeEventListener("unmute",N(this,r)),B(this,r,d),d&&this.addEventListener("unmute",d)}get onended(){return N(this,i)}set onended(d){N(this,i)&&this.removeEventListener("ended",N(this,i)),B(this,i,d),d&&this.addEventListener("ended",d)}get onenabledchange(){return N(this,p)}set onenabledchange(d){N(this,p)&&this.removeEventListener("enabledchange",N(this,p)),B(this,p,d),d&&this.addEventListener("enabledchange",d)}get onstopped(){return N(this,c)}set onstopped(d){N(this,c)&&this.removeEventListener("stopped",N(this,c)),B(this,c,d),d&&this.addEventListener("stopped",d)}addEventListener(d,b,w){super.addEventListener(d,b,w)}removeEventListener(d,b,w){super.removeEventListener(d,b,w)}stop(){N(this,f)!=="ended"&&(B(this,f,"ended"),this.dispatchEvent(new v.FakeEvent("stopped")))}clone({id:d,data:b}={}){return new l({id:d??(0,m.v4)(),kind:N(this,E),label:N(this,o),contentHint:N(this,a),enabled:N(this,S),muted:N(this,t),readyState:N(this,f),capabilities:(0,s.clone)(N(this,g)),constraints:(0,s.clone)(N(this,h)),settings:(0,s.clone)(N(this,k)),data:b??(0,s.clone)(N(this,T))})}getCapabilities(){return N(this,g)}getConstraints(){return N(this,h)}async applyConstraints(d={}){return B(this,h,d),Promise.resolve()}getSettings(){return N(this,k)}remoteStop(){N(this,f)!=="ended"&&(B(this,f,"ended"),this.dispatchEvent(new v.FakeEvent("stopped")),this.dispatchEvent(new v.FakeEvent("ended")))}remoteMute(){N(this,t)||(B(this,t,!0),this.dispatchEvent(new v.FakeEvent("mute")))}remoteUnmute(){N(this,t)&&(B(this,t,!1),this.dispatchEvent(new v.FakeEvent("unmute")))}};R=new WeakMap,E=new WeakMap,o=new WeakMap,f=new WeakMap,S=new WeakMap,t=new WeakMap,a=new WeakMap,g=new WeakMap,h=new WeakMap,k=new WeakMap,T=new WeakMap,e=new WeakMap,r=new WeakMap,i=new WeakMap,p=new WeakMap,c=new WeakMap;let D=l;return Ie.FakeMediaStreamTrack=D,Ie}var Oe={},rr;function Vr(){if(rr)return Oe;
3rr=1,Object.defineProperty(Oe,"__esModule",{value:!0}),Oe.FakeEventTarget=void 0;let m=class{constructor(){C(this,"listeners",{})}addEventListener(v,s,D){s&&(this.listeners[v]=this.listeners[v]??[],this.listeners[v].push({callback:typeof s=="function"?s:s.handleEvent,once:typeof D=="object"&&D.once===!0}))}removeEventListener(v,s,D){this.listeners[v]&&s&&(this.listeners[v]=this.listeners[v].filter(R=>R.callback!==(typeof s=="function"?s:s.handleEvent)))}dispatchEvent(v){if(!v||typeof v.type!="string")throw new Error("invalid event object");const s=this.listeners[v.type];if(!s)return!0;for(const D of[...s]){try{D.callback.call(this,v)}catch(R){setTimeout(()=>{throw R},0)}D.once&&this.removeEventListener(v.type,D.callback)}return!v.defaultPrevented}};return Oe.FakeEventTarget=m,Oe}var sr;function Gr(){if(sr)return Le;sr=1,Object.defineProperty(Le,"__esModule",{value:!0}),Le.FakeHandler=void 0;const m=Hr(),_=W(),v=Q(),s=oe(),D=Y(),R=J(),E=Vr(),o=new v.Logger("FakeHandler"),f="FakeHandler";let S=class Ge extends _.EnhancedEventEmitter{constructor({getSendExtendedRtpCapabilities:h},k){super();C(this,"_closed",!1);C(this,"_fakeParameters");C(this,"_getSendExtendedRtpCapabilities");C(this,"_cname",`CNAME-${s.generateRandomNumber()}`);C(this,"_defaultSendStreamId",`${s.generateRandomNumber()}`);C(this,"_transportReady",!1);C(this,"_nextLocalId",1);C(this,"_tracks",new Map);C(this,"_nextSctpStreamId",0);o.debug("constructor()"),this._getSendExtendedRtpCapabilities=h,this._fakeParameters=k}static createFactory(h){return{name:f,factory:k=>new Ge(k,h),getNativeRtpCapabilities:async()=>(o.debug("getNativeRtpCapabilities()"),Ge.getLocalRtpCapabilities(h)),getNativeSctpCapabilities:async()=>(o.debug("getNativeSctpCapabilities()"),h.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(h){const k=h.generateNativeRtpCapabilities();return D.validateAndNormalizeRtpCapabilities(k),k}get name(){return f}close(){o.debug("close()"),!this._closed&&(this._closed=!0,super.close())}setIceGatheringState(h){this.emit("@icegatheringstatechange",h)}setConnectionState(h){this.emit("@connectionstatechange",h)}async updateIceServers(h){this.assertNotClosed(),o.debug("updateIceServers()")}async restartIce(h){this.assertNotClosed(),o.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:h,streamId:k,encodings:T,codecOptions:e,codec:r}){this.assertNotClosed(),o.debug("send() [kind:%s, track.id:%s]",h.kind,h.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});const i=Ge.getLocalRtpCapabilities(this._fakeParameters),p=this._getSendExtendedRtpCapabilities(i),c=D.getSendingRtpParameters(h.kind,p);c.codecs=D.reduceCodecs(c.codecs,r);const l=c.codecs.some(n=>/.+\/rtx$/i.test(n.mimeType));c.mid=`mid-${s.generateRandomNumber()}`,c.msid=`${k??"-"} ${h.id}`,T||(T=[{}]);for(const n of T)n.ssrc=s.generateRandomNumber(),l&&(n.rtx={ssrc:s.generateRandomNumber()});c.encodings=T,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${k??this._defaultSendStreamId} ${h.id}`;const y=this._nextLocalId++;return this._tracks.set(y,h),{localId:String(y),rtpParameters:c}}async stopSending(h){if(o.debug("stopSending() [localId:%s]",h),!this._closed){if(!this._tracks.has(Number(h)))throw new Error("local track not found");this._tracks.delete(Number(h))}}async pauseSending(h){this.assertNotClosed()}async resumeSending(h){this.assertNotClosed()}async replaceTrack(h,k){this.assertNotClosed(),k?o.debug("replaceTrack() [localId:%s, track.id:%s]",h,k.id):o.debug("replaceTrack() [localId:%s, no track]",h),this._tracks.delete(Number(h)),this._tracks.set(Number(h),k)}async setMaxSpatialLayer(h,k){this.assertNotClosed(),o.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",h,k)}async setRtpEncodingParameters(h,k){this.assertNotClosed(),o.debug("setRtpEncodingParameters() [localId:%s, params:%o]",h,k)}async getSenderStats(h){return this.assertNotClosed(),new Map}async sendDataChannel({ordered:h,maxPacketLifeTime:k,maxRetransmits:T,label:e,protocol:r}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}
3),o.debug("sendDataChannel()");const i=new t({id:this._nextSctpStreamId++,ordered:h,maxPacketLifeTime:k,maxRetransmits:T,label:e,protocol:r}),p={streamId:this._nextSctpStreamId,ordered:h,maxPacketLifeTime:k,maxRetransmits:T};return{dataChannel:i,sctpStreamParameters:p}}async receive(h){this.assertNotClosed();const k=[];for(const T of h){const{trackId:e,kind:r}=T;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),o.debug("receive() [trackId:%s, kind:%s]",e,r);const i=this._nextLocalId++,p=new m.FakeMediaStreamTrack({kind:r});this._tracks.set(i,p),k.push({localId:String(i),track:p})}return k}async stopReceiving(h){if(!this._closed)for(const k of h)o.debug("stopReceiving() [localId:%s]",k),this._tracks.delete(Number(k))}async pauseReceiving(h){this.assertNotClosed()}async resumeReceiving(h){this.assertNotClosed()}async getReceiverStats(h){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:h,label:k,protocol:T}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),o.debug("receiveDataChannel()"),{dataChannel:new t({id:h.streamId,ordered:h.ordered,maxPacketLifeTime:h.maxPacketLifeTime,maxRetransmits:h.maxRetransmits,label:k,protocol:T})}}async setupTransport({localDtlsRole:h,localSdpObject:k}){const T=s.clone(this._fakeParameters.generateLocalDtlsParameters());h&&(T.role=h),this.emit("@connectionstatechange","connecting"),await new Promise((e,r)=>this.emit("@connect",{dtlsParameters:T},e,r)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new R.InvalidStateError("method called
3in a closed handler")}};Le.FakeHandler=S;class t extends E.FakeEventTarget{constructor({id:h,ordered:k=!0,maxPacketLifeTime:T=null,maxRetransmits:e=null,label:r="",protocol:i=""}){super();C(this,"_id");C(this,"_negotiated",!0);C(this,"_ordered");C(this,"_maxPacketLifeTime");C(this,"_maxRetransmits");C(this,"_label");C(this,"_protocol");C(this,"_readyState","connecting");C(this,"_bufferedAmount",0);C(this,"_bufferedAmountLowThreshold",0);C(this,"_binaryType","arraybuffer");C(this,"_onopen",null);C(this,"_onclosing",null);C(this,"_onclose",null);C(this,"_onmessage",null);C(this,"_onbufferedamountlow",null);C(this,"_onerror",null);o.debug(`constructor() [id:${h}, ordered:${k}, maxPacketLifeTime:${T}, maxRetransmits:${e}, label:${r}, protocol:${i}`),this._id=h,this._ordered=k,this._maxPacketLifeTime=T,this._maxRetransmits=e,this._label=r,this._protocol=i}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(h){this._bufferedAmountLowThreshold=h}get binaryType(){return this._binaryType}set binaryType(h){this._binaryType=h}get onopen(){return this._onopen}set onopen(h){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=h,h&&this.addEventListener("open",h)}get onclosing(){return this._onclosing}set onclosing(h){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=h,h&&this.addEventListener("closing",h)}get onclose(){return this._onclose}set onclose(h){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=h,h&&this.addEventListener("close",h)}get onmessage(){return this._onmessage}set onmessage(h){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=h,h&&this.addEventListener("message",h)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(h){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=h,h&&this.addEventListener("bufferedamountlow",h)}get onerror(){return this._onerror}set onerror(h){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=h,h&&this.addEventListener("error",h)}addEventListener(h,k,T){super.addEventListener(h,k,T)}removeEventListener(h,k,T){super.removeEventListener(h,k,T)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(h){if(this._readyState!=="open")throw new R.InvalidStateError("not open")}}return Le}var K={},ir;function Qr(){if(ir)return K;ir=1,Object.defineProperty(K,"__esModule",{value:!0}),K.generateRouterRtpCapabilities=v,K.generateNativeRtpCapabilities=s,K.generateNativeSctpCapabilities=D,K.generateLocalDtlsParameters=R,K.generateTransportRemoteParameters=E,K.generateProducerRemoteParameters=o,K.generateConsumerRemoteParameters=f,K.generateDataProducerRemoteParameters=S,K.generateDataConsumerRemoteParameters=t;const m=oe();function _(){return String(m.generateRandomNumber())}function v(){return m.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 s(){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"}}
3,{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 D(){return m.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function R(){return m.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 E(){return{id:_(),iceParameters:m.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:m.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:m.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:m.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function o(){return m.deepFreeze({id:_()})}function f({id:a,codecMimeType:g}={}){switch(g){case"audio/opus":return{id:a??_(),producerId:_(),kind:"audio",rtpParameters:m.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:a??_(),producerId:_(),kind:"audio",rtpParameters:m.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:a??_(),producerId:_(),kind:"video",rtpParameters:m.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:a??_(),producerId:_(),kind:"video",rtpParameters:m.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 '${g}'`)}}function S(){return m.deepFreeze({id:_()})}function t({id:a}={}){return{id:a??_(),dataProducerId:_(),sctpStreamParameters:m.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}return K}var nr;function Wr(){return nr||(nr=1,(function(m){Object.defineProperty(m,"__esMo
3dule",{value:!0}),m.debug=m.testFakeParameters=m.FakeHandler=m.enhancedEvents=m.ortc=m.parseScalabilityMode=m.detectDeviceAsync=m.detectDevice=m.Device=m.version=m.types=void 0;const _=dt();m.debug=_.default,m.types=hr(),m.version="3.18.3";var v=zr();Object.defineProperty(m,"Device",{enumerable:!0,get:function(){return v.Device}}),Object.defineProperty(m,"detectDevice",{enumerable:!0,get:function(){return v.detectDevice}}),Object.defineProperty(m,"detectDeviceAsync",{enumerable:!0,get:function(){return v.detectDeviceAsync}});var s=ce();Object.defineProperty(m,"parseScalabilityMode",{enumerable:!0,get:function(){return s.parse}}),m.ortc=Y(),m.enhancedEvents=W();var D=Gr();Object.defineProperty(m,"FakeHandler",{enumerable:!0,get:function(){return D.FakeHandler}}),m.testFakeParameters=Qr()})(U)),U}var ar=Wr();return $({__proto__:null,default:q(ar)},[ar])}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.