@whereby.com/browser-sdk 2.1.0-beta1 → 2.1.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
this.whereby=this.whereby||{},this.whereby.react=function(e,t){"use strict";function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var n=r(t);function i(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}function s(e,t,r,n){return new(r||(r=Promise))((function(i,s){function a(e){try{c(n.next(e))}catch(e){s(e)}}function o(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){e.done?i(e.value):function(e){return e instanceof r?e:new r((function(t){t(e)}))}(e.value).then(a,o)}c((n=n.apply(e,t||[])).next())}))}function a(e,{delay:t=500,edges:r}={}){let n,i=0;return(...s)=>{i+=1,r&&1===i&&e(...s),clearTimeout(n),n=setTimeout((()=>{(!r||i>1)&&e(...s),n=void 0,i=0}),t)}}"function"==typeof SuppressedError&&SuppressedError;var o=e=>{var{muted:t,mirror:r=!1,stream:s,onResize:o,onSetAspectRatio:c}=e,d=i(e,["muted","mirror","stream","onResize","onSetAspectRatio"]);const l=n.useRef(null);return n.useEffect((()=>{if(!l.current)return;const e=new ResizeObserver(a((()=>{if(l.current&&(null==s?void 0:s.id)){o&&o({width:l.current.clientWidth,height:l.current.clientHeight,stream:s});const e=l.current.videoHeight,t=l.current.videoWidth;t&&e&&t+e>20&&c&&c({aspectRatio:t/e})}}),{delay:1e3,edges:!0}));return e.observe(l.current),()=>{e.disconnect()}}),[s]),n.useEffect((()=>{l.current&&(l.current.srcObject!==s&&(l.current.srcObject=s),l.current.muted!==t&&(l.current.muted=Boolean(t)))}),[t,s,l]),n.createElement("video",Object.assign({ref:l,autoPlay:!0,playsInline:!0},d,{style:Object.assign({transform:r?"scaleX(-1)":"none",width:"100%",height:"100%"},d.style)}))},c=(()=>"function"==typeof Symbol&&Symbol.observable||"@@observable")(),d=()=>Math.random().toString(36).substring(7).split("").join("."),l={INIT:`@@redux/INIT${d()}`,REPLACE:`@@redux/REPLACE${d()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${d()}`};function p(e){if("object"!=typeof e||null===e)return!1;let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function u(e){if(void 0===e)return"undefined";if(null===e)return"null";const t=typeof e;switch(t){case"boolean":case"string":case"number":case"symbol":case"function":return t}if(Array.isArray(e))return"array";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";const r=function(e){return"function"==typeof e.constructor?e.constructor.name:null}(e);switch(r){case"Symbol":case"Promise":case"WeakMap":case"WeakSet":case"Map":case"Set":return r}return Object.prototype.toString.call(e).slice(8,-1).toLowerCase().replace(/\s/g,"")}function h(e){let t=typeof e;return t=u(e),t}function m(e,t,r){if("function"!=typeof e)throw new Error(`Expected the root reducer to be a function. Instead, received: '${h(e)}'`);if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error("It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(`Expected the enhancer to be a function. Instead, received: '${h(r)}'`);return r(m)(e,t)}let n=e,i=t,s=new Map,a=s,o=0,d=!1;function u(){a===s&&(a=new Map,s.forEach(((e,t)=>{a.set(t,e)})))}function f(){if(d)throw new Error("You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return i}function g(e){if("function"!=typeof e)throw new Error(`Expected the listener to be a function. Instead, received: '${h(e)}'`);if(d)throw new Error("You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");let t=!0;u();const r=o++;return a.set(r,e),function(){if(t){if(d)throw new Error("You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");t=!1,u(),a.delete(r),s=null}}}function v(e){if(!p(e))throw new Error(`Actions must be plain objects. Instead, the actual type was: '${h(e)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);if(void 0===e.type)throw new Error('Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');if("string"!=typeof e.type)throw new Error(`Action "type" property must be a string. Instead, the actual type was: '${h(e.type)}'. Value was: '${e.type}' (stringified)`);if(d)throw new Error("Reducers may not dispatch actions.");try{d=!0,i=n(i,e)}finally{d=!1}return(s=a).forEach((e=>{e()})),e}v({type:l.INIT});return{dispatch:v,subscribe:g,getState:f,replaceReducer:function(e){if("function"!=typeof e)throw new Error(`Expected the nextReducer to be a function. Instead, received: '${h(e)}`);n=e,v({type:l.REPLACE})},[c]:function(){const e=g;return{subscribe(t){if("object"!=typeof t||null===t)throw new Error(`Expected the observer to be an object. Instead, received: '${h(t)}'`);function r(){const e=t;e.next&&e.next(f())}r();return{unsubscribe:e(r)}},[c](){return this}}}}}function f(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e);try{throw new Error(e)}catch(e){}}function g(e){const t=Object.keys(e),r={};for(let n=0;n<t.length;n++){const i=t[n];void 0===e[i]&&f(`No reducer provided for key "${i}"`),"function"==typeof e[i]&&(r[i]=e[i])}const n=Object.keys(r);let i,s;i={};try{!function(e){Object.keys(e).forEach((t=>{const r=e[t];if(void 0===r(void 0,{type:l.INIT}))throw new Error(`The slice reducer for key "${t}" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);if(void 0===r(void 0,{type:l.PROBE_UNKNOWN_ACTION()}))throw new Error(`The slice reducer for key "${t}" returned undefined when probed with a random type. Don't try to handle '${l.INIT}' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`)}))}(r)}catch(e){s=e}return function(e={},t){if(s)throw s;{const n=function(e,t,r,n){const i=Object.keys(t),s=r&&r.type===l.INIT?"preloadedState argument passed to createStore":"previous state received by the reducer";if(0===i.length)return"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";if(!p(e))return`The ${s} has unexpected type of "${h(e)}". Expected argument to be an object with the following keys: "${i.join('", "')}"`;const a=Object.keys(e).filter((e=>!t.hasOwnProperty(e)&&!n[e]));return a.forEach((e=>{n[e]=!0})),r&&r.type===l.REPLACE?void 0:a.length>0?`Unexpected ${a.length>1?"keys":"key"} "${a.join('", "')}" found in ${s}. Expected to find one of the known reducer keys instead: "${i.join('", "')}". Unexpected keys will be ignored.`:void 0}(e,r,t,i);n&&f(n)}let a=!1;const o={};for(let i=0;i<n.length;i++){const s=n[i],c=r[s],d=e[s],l=c(d,t);if(void 0===l){const e=t&&t.type;throw new Error(`When called with an action of type ${e?`"${String(e)}"`:"(unknown type)"}, the slice reducer for key "${s}" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`)}o[s]=l,a=a||l!==d}return a=a||n.length!==Object.keys(e).length,a?o:e}}function v(...e){return 0===e.length?e=>e:1===e.length?e[0]:e.reduce(((e,t)=>(...r)=>e(t(...r))))}function y(e){return p(e)&&"type"in e&&"string"==typeof e.type}var _=Symbol.for("immer-nothing"),b=Symbol.for("immer-draftable"),w=Symbol.for("immer-state"),S=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},"This object has been frozen and should not be mutated",function(e){return"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+e},"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.","Immer forbids circular references","The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},"Object.defineProperty() cannot be used on an Immer draft","Object.setPrototypeOf() cannot be used on an Immer draft","Immer only supports deleting array indices","Immer only supports setting array indices and the 'length' property",function(e){return`'original' expects a draft, got: ${e}`}];function C(e,...t){{const r=S[e],n="function"==typeof r?r.apply(null,t):r;throw new Error(`[Immer] ${n}`)}}var R=Object.getPrototypeOf;function T(e){return!!e&&!!e[w]}function P(e){return!!e&&(E(e)||Array.isArray(e)||!!e[b]||!!e.constructor?.[b]||M(e)||j(e))}var k=Object.prototype.constructor.toString();function E(e){if(!e||"object"!=typeof e)return!1;const t=R(e);if(null===t)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===k}function D(e,t){0===O(e)?Object.entries(e).forEach((([r,n])=>{t(r,n,e)})):e.forEach(((r,n)=>t(n,r,e)))}function O(e){const t=e[w];return t?t.type_:Array.isArray(e)?1:M(e)?2:j(e)?3:0}function I(e,t){return 2===O(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function x(e,t,r){const n=O(e);2===n?e.set(t,r):3===n?e.add(r):e[t]=r}function M(e){return e instanceof Map}function j(e){return e instanceof Set}function L(e){return e.copy_||e.base_}function A(e,t){if(M(e))return new Map(e);if(j(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);if(!t&&E(e)){if(!R(e)){const t=Object.create(null);return Object.assign(t,e)}return{...e}}const r=Object.getOwnPropertyDescriptors(e);delete r[w];let n=Reflect.ownKeys(r);for(let t=0;t<n.length;t++){const i=n[t],s=r[i];!1===s.writable&&(s.writable=!0,s.configurable=!0),(s.get||s.set)&&(r[i]={configurable:!0,writable:!0,enumerable:s.enumerable,value:e[i]})}return Object.create(R(e),r)}function N(e,t=!1){return B(e)||T(e)||!P(e)||(O(e)>1&&(e.set=e.add=e.clear=e.delete=F),Object.freeze(e),t&&D(e,((e,t)=>N(t,!0)))),e}function F(){C(2)}function B(e){return Object.isFrozen(e)}var U,z={};function V(e){const t=z[e];return t||C(0,e),t}function $(){return U}function q(e,t){t&&(V("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function G(e){W(e),e.drafts_.forEach(J),e.drafts_=null}function W(e){e===U&&(U=e.parent_)}function K(e){return U={drafts_:[],parent_:U,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function J(e){const t=e[w];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function H(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return void 0!==e&&e!==r?(r[w].modified_&&(G(t),C(4)),P(e)&&(e=Y(t,e),t.parent_||X(t,e)),t.patches_&&V("Patches").generateReplacementPatches_(r[w].base_,e,t.patches_,t.inversePatches_)):e=Y(t,r,[]),G(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==_?e:void 0}function Y(e,t,r){if(B(t))return t;const n=t[w];if(!n)return D(t,((i,s)=>Q(e,n,t,i,s,r))),t;if(n.scope_!==e)return t;if(!n.modified_)return X(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const t=n.copy_;let i=t,s=!1;3===n.type_&&(i=new Set(t),t.clear(),s=!0),D(i,((i,a)=>Q(e,n,t,i,a,r,s))),X(e,t,!1),r&&e.patches_&&V("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function Q(e,t,r,n,i,s,a){if(i===r&&C(5),T(i)){const a=Y(e,i,s&&t&&3!==t.type_&&!I(t.assigned_,n)?s.concat(n):void 0);if(x(r,n,a),!T(a))return;e.canAutoFreeze_=!1}else a&&r.add(i);if(P(i)&&!B(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Y(e,i),t&&t.scope_.parent_||X(e,i)}}function X(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&N(t,r)}var Z={get(e,t){if(t===w)return e;const r=L(e);if(!I(r,t))return function(e,t,r){const n=re(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}(e,r,t);const n=r[t];return e.finalized_||!P(n)?n:n===te(e.base_,t)?(ie(e),e.copy_[t]=se(n,e)):n},has:(e,t)=>t in L(e),ownKeys:e=>Reflect.ownKeys(L(e)),set(e,t,r){const n=re(L(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const n=te(L(e),t),a=n?.[w];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(((i=r)===(s=n)?0!==i||1/i==1/s:i!=i&&s!=s)&&(void 0!==r||I(e.base_,t)))return!0;ie(e),ne(e)}var i,s;return e.copy_[t]===r&&(void 0!==r||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty:(e,t)=>(void 0!==te(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,ie(e),ne(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0),getOwnPropertyDescriptor(e,t){const r=L(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:n.enumerable,value:r[t]}:n},defineProperty(){C(11)},getPrototypeOf:e=>R(e.base_),setPrototypeOf(){C(12)}},ee={};function te(e,t){const r=e[w];return(r?L(r):e)[t]}function re(e,t){if(!(t in e))return;let r=R(e);for(;r;){const e=Object.getOwnPropertyDescriptor(r,t);if(e)return e;r=R(r)}}function ne(e){e.modified_||(e.modified_=!0,e.parent_&&ne(e.parent_))}function ie(e){e.copy_||(e.copy_=A(e.base_,e.scope_.immer_.useStrictShallowCopy_))}D(Z,((e,t)=>{ee[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),ee.deleteProperty=function(e,t){return isNaN(parseInt(t))&&C(13),ee.set.call(this,e,t,void 0)},ee.set=function(e,t,r){return"length"!==t&&isNaN(parseInt(t))&&C(14),Z.set.call(this,e[0],t,r,e[0])};function se(e,t){const r=M(e)?V("MapSet").proxyMap_(e,t):j(e)?V("MapSet").proxySet_(e,t):function(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:$(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,s=Z;r&&(i=[n],s=ee);const{revoke:a,proxy:o}=Proxy.revocable(i,s);return n.draft_=o,n.revoke_=a,o}(e,t);return(t?t.scope_:$()).drafts_.push(r),r}function ae(e){return T(e)||C(10,e),oe(e)}function oe(e){if(!P(e)||B(e))return e;const t=e[w];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=A(e,t.scope_.immer_.useStrictShallowCopy_)}else r=A(e,!0);return D(r,((e,t)=>{x(r,e,oe(t))})),t&&(t.finalized_=!1),r}var ce=new class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(e,t,r)=>{if("function"==typeof e&&"function"!=typeof t){const r=t;t=e;const n=this;return function(e=r,...i){return n.produce(e,(e=>t.call(this,e,...i)))}}let n;if("function"!=typeof t&&C(6),void 0!==r&&"function"!=typeof r&&C(7),P(e)){const i=K(this),s=se(e,void 0);let a=!0;try{n=t(s),a=!1}finally{a?G(i):W(i)}return q(i,r),H(n,i)}if(!e||"object"!=typeof e){if(n=t(e),void 0===n&&(n=e),n===_&&(n=void 0),this.autoFreeze_&&N(n,!0),r){const t=[],i=[];V("Patches").generateReplacementPatches_(e,n,t,i),r(t,i)}return n}C(1,e)},this.produceWithPatches=(e,t)=>{if("function"==typeof e)return(t,...r)=>this.produceWithPatches(t,(t=>e(t,...r)));let r,n;return[this.produce(e,t,((e,t)=>{r=e,n=t})),r,n]},"boolean"==typeof e?.autoFreeze&&this.setAutoFreeze(e.autoFreeze),"boolean"==typeof e?.useStrictShallowCopy&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){P(e)||C(8),T(e)&&(e=ae(e));const t=K(this),r=se(e,void 0);return r[w].isManual_=!0,W(t),r}finishDraft(e,t){const r=e&&e[w];r&&r.isManual_||C(9);const{scope_:n}=r;return q(n,t),H(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const n=t[r];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}r>-1&&(t=t.slice(r+1));const n=V("Patches").applyPatches_;return T(e)?n(e,t):this.produce(e,(e=>n(e,t)))}},de=ce.produce;ce.produceWithPatches.bind(ce),ce.setAutoFreeze.bind(ce),ce.setUseStrictShallowCopy.bind(ce),ce.applyPatches.bind(ce),ce.createDraft.bind(ce),ce.finishDraft.bind(ce);var le=e=>{let t=!1;try{const r={};e(r)===r&&(t=!0)}catch{}if(t){let e;try{throw new Error}catch(t){({stack:e}=t)}console.warn("The result function returned its own inputs without modification. e.g\n`createSelector([state => state.todos], todos => todos)`\nThis could lead to inefficient memoization and unnecessary re-renders.\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.",{stack:e})}},pe=(e,t,r)=>{const{memoize:n,memoizeOptions:i}=t,{inputSelectorResults:s,inputSelectorResultsCopy:a}=e,o=n((()=>({})),...i);if(!(o.apply(null,s)===o.apply(null,a))){let e;try{throw new Error}catch(t){({stack:e}=t)}console.warn("An input selector returned a different result when passed same arguments.\nThis means your output selector will likely run more frequently than intended.\nAvoid returning a new reference inside your input selector, e.g.\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`",{arguments:r,firstInputs:s,secondInputs:a,stack:e})}},ue={inputStabilityCheck:"once",identityFunctionCheck:"once"};var he=e=>Array.isArray(e)?e:[e];function me(e){const t=Array.isArray(e[0])?e[0]:e;return function(e,t="expected all items to be functions, instead received the following types: "){if(!e.every((e=>"function"==typeof e))){const r=e.map((e=>"function"==typeof e?`function ${e.name||"unnamed"}()`:typeof e)).join(", ");throw new TypeError(`${t}[${r}]`)}}(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function fe(e,t){const r=[],{length:n}=e;for(let i=0;i<n;i++)r.push(e[i].apply(null,t));return r}var ge="undefined"!=typeof WeakRef?WeakRef:class{constructor(e){this.value=e}deref(){return this.value}},ve=0,ye=1;function _e(){return{s:ve,v:void 0,o:null,p:null}}function be(e,t={}){let r=_e();const{resultEqualityCheck:n}=t;let i,s=0;function a(){let t=r;const{length:a}=arguments;for(let e=0,r=a;e<r;e++){const r=arguments[e];if("function"==typeof r||"object"==typeof r&&null!==r){let e=t.o;null===e&&(t.o=e=new WeakMap);const n=e.get(r);void 0===n?(t=_e(),e.set(r,t)):t=n}else{let e=t.p;null===e&&(t.p=e=new Map);const n=e.get(r);void 0===n?(t=_e(),e.set(r,t)):t=n}}const o=t;let c;if(t.s===ye?c=t.v:(c=e.apply(null,arguments),s++),o.s=ye,n){const e=i?.deref()??i;null!=e&&n(e,c)&&(c=e,0!==s&&s--);i="object"==typeof c&&null!==c||"function"==typeof c?new ge(c):c}return o.v=c,c}return a.clearCache=()=>{r=_e(),a.resetResultsCount()},a.resultsCount=()=>s,a.resetResultsCount=()=>{s=0},a}function we(e,...t){const r="function"==typeof e?{memoize:e,memoizeOptions:t}:e;return(...e)=>{let t,n=0,i=0,s={},a=e.pop();"object"==typeof a&&(s=a,a=e.pop()),function(e,t="expected a function, instead received "+typeof e){if("function"!=typeof e)throw new TypeError(t)}(a,`createSelector expects an output function after the inputs, but received: [${typeof a}]`);const o={...r,...s},{memoize:c,memoizeOptions:d=[],argsMemoize:l=be,argsMemoizeOptions:p=[],devModeChecks:u={}}=o,h=he(d),m=he(p),f=me(e),g=c((function(){return n++,a.apply(null,arguments)}),...h);let v=!0;const y=l((function(){i++;const e=fe(f,arguments);{const{identityFunctionCheck:t,inputStabilityCheck:r}=((e,t)=>{const{identityFunctionCheck:r,inputStabilityCheck:n}={...ue,...t};return{identityFunctionCheck:{shouldRun:"always"===r||"once"===r&&e,run:le},inputStabilityCheck:{shouldRun:"always"===n||"once"===n&&e,run:pe}}})(v,u);if(t.shouldRun&&t.run(a),r.shouldRun){const t=fe(f,arguments);r.run({inputSelectorResults:e,inputSelectorResultsCopy:t},{memoize:c,memoizeOptions:h},arguments)}v&&(v=!1)}return t=g.apply(null,e),t}),...m);return Object.assign(y,{resultFunc:a,memoizedResultFunc:g,dependencies:f,dependencyRecomputations:()=>i,resetDependencyRecomputations:()=>{i=0},lastResult:()=>t,recomputations:()=>n,resetRecomputations:()=>{n=0},memoize:c,argsMemoize:l})}}var Se=we(be);function Ce(e){return({dispatch:t,getState:r})=>n=>i=>"function"==typeof i?i(t,r,e):n(i)}var Re=Ce(),Te=Ce;((...e)=>{const t=we(...e)})(be);var Pe="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?v:v.apply(null,arguments)},ke=e=>e&&"function"==typeof e.match;function Ee(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return{type:e,payload:n.payload,..."meta"in n&&{meta:n.meta},..."error"in n&&{error:n.error}}}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>y(t)&&t.type===e,r}function De(e){return"function"==typeof e&&"type"in e&&ke(e)}function Oe(e,t){let r=0;return{measureTime(e){const t=Date.now();try{return e()}finally{const e=Date.now();r+=e-t}},warnIfExceeded(){r>e&&console.warn(`${t} took ${r}ms, which is more than the warning threshold of ${e}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`)}}}function Ie(e,t){for(const r of e)if(t(r))return r}var xe=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...e){return super.concat.apply(this,e)}prepend(...t){return 1===t.length&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function Me(e){return P(e)?de(e,(()=>{})):e}function je(e,t,r){if(e.has(t)){let n=e.get(t);return r.update&&(n=r.update(n,t,e),e.set(t,n)),n}if(!r.insert)throw new Error("No insert provided for key not already in map");const n=r.insert(t,e);return e.set(t,n),n}function Le(e){return"object"!=typeof e||null==e||Object.isFrozen(e)}function Ae(e,t,r){const n=Ne(e,t,r);return{detectMutations:()=>Fe(e,t,n,r)}}function Ne(e,t=[],r,n="",i=new Set){const s={value:r};if(!e(r)&&!i.has(r)){i.add(r),s.children={};for(const i in r){const a=n?n+"."+i:i;t.length&&-1!==t.indexOf(a)||(s.children[i]=Ne(e,t,r[i],a))}}return s}function Fe(e,t=[],r,n,i=!1,s=""){const a=r?r.value:void 0,o=a===n;if(i&&!o&&!Number.isNaN(n))return{wasMutated:!0,path:s};if(e(a)||e(n))return{wasMutated:!1};const c={};for(let e in r.children)c[e]=!0;for(let e in n)c[e]=!0;const d=t.length>0;for(let i in c){const a=s?s+"."+i:i;if(d){if(t.some((e=>e instanceof RegExp?e.test(a):a===e)))continue}const c=Fe(e,t,r.children[i],n[i],o,a);if(c.wasMutated)return c}return{wasMutated:!1}}function Be(e){const t=typeof e;return null==e||"string"===t||"boolean"===t||"number"===t||Array.isArray(e)||p(e)}function Ue(e,t="",r=Be,n,i=[],s){let a;if(!r(e))return{keyPath:t||"<root>",value:e};if("object"!=typeof e||null===e)return!1;if(s?.has(e))return!1;const o=null!=n?n(e):Object.entries(e),c=i.length>0;for(const[e,d]of o){const o=t?t+"."+e:e;if(c){if(i.some((e=>e instanceof RegExp?e.test(o):o===e)))continue}if(!r(d))return{keyPath:o,value:d};if("object"==typeof d&&(a=Ue(d,o,r,n,i,s),a))return a}return s&&ze(e)&&s.add(e),!1}function ze(e){if(!Object.isFrozen(e))return!1;for(const t of Object.values(e))if("object"==typeof t&&null!==t&&!ze(t))return!1;return!0}function Ve(e){return"boolean"==typeof e}var $e=()=>function(e){const{thunk:t=!0,immutableCheck:r=!0,serializableCheck:n=!0,actionCreatorCheck:i=!0}=e??{};let s=new xe;if(t&&(Ve(t)?s.push(Re):s.push(Te(t.extraArgument))),r){let e={};Ve(r)||(e=r),s.unshift(function(e={}){{let t=function(e,t,n,i){return JSON.stringify(e,r(t,i),n)},r=function(e,t){let r=[],n=[];return t||(t=function(e,t){return r[0]===t?"[Circular ~]":"[Circular ~."+n.slice(0,r.indexOf(t)).join(".")+"]"}),function(i,s){if(r.length>0){var a=r.indexOf(this);~a?r.splice(a+1):r.push(this),~a?n.splice(a,1/0,i):n.push(i),~r.indexOf(s)&&(s=t.call(this,i,s))}else r.push(s);return null==e?s:e.call(this,i,s)}},{isImmutable:n=Le,ignoredPaths:i,warnAfter:s=32}=e;const a=Ae.bind(null,n,i);return({getState:e})=>{let r,n=e(),i=a(n);return o=>c=>{const d=Oe(s,"ImmutableStateInvariantMiddleware");d.measureTime((()=>{if(n=e(),r=i.detectMutations(),i=a(n),r.wasMutated)throw new Error(`A state mutation was detected between dispatches, in the path '${r.path||""}'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`)}));const l=o(c);return d.measureTime((()=>{if(n=e(),r=i.detectMutations(),i=a(n),r.wasMutated)throw new Error(`A state mutation was detected inside a dispatch, in the path: ${r.path||""}. Take a look at the reducer(s) handling the action ${t(c)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`)})),d.warnIfExceeded(),l}}}}(e))}if(n){let e={};Ve(n)||(e=n),s.push(function(e={}){{const{isSerializable:t=Be,getEntries:r,ignoredActions:n=[],ignoredActionPaths:i=["meta.arg","meta.baseQueryMeta"],ignoredPaths:s=[],warnAfter:a=32,ignoreState:o=!1,ignoreActions:c=!1,disableCache:d=!1}=e,l=!d&&WeakSet?new WeakSet:void 0;return e=>d=>p=>{if(!y(p))return d(p);const u=d(p),h=Oe(a,"SerializableStateInvariantMiddleware");return c||n.length&&-1!==n.indexOf(p.type)||h.measureTime((()=>{const e=Ue(p,"",t,r,i,l);if(e){const{keyPath:t,value:r}=e;console.error(`A non-serializable value was detected in an action, in the path: \`${t}\`. Value:`,r,"\nTake a look at the logic that dispatched this action: ",p,"\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)","\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)")}})),o||(h.measureTime((()=>{const n=Ue(e.getState(),"",t,r,s,l);if(n){const{keyPath:e,value:t}=n;console.error(`A non-serializable value was detected in the state, in the path: \`${e}\`. Value:`,t,`\nTake a look at the reducer(s) handling this action type: ${p.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`)}})),h.warnIfExceeded()),u}}}(e))}if(i){let e={};Ve(i)||(e=i),s.unshift(function(e={}){const{isActionCreator:t=De}=e;return()=>e=>r=>(t(r)&&console.warn(function(e){const t=e?`${e}`.split("/"):[],r=t[t.length-1]||"actionCreator";return`Detected an action creator with type "${e||"unknown"}" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \`dispatch(${r}())\` instead of \`dispatch(${r})\`. This is necessary even if the action has no payload.`}(r.type)),e(r))}(e))}return s},qe=e=>t=>{setTimeout(t,e)},Ge="undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame:qe(10),We=e=>function(t){const{autoBatch:r=!0}=t??{};let n=new xe(e);return r&&n.push(((e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,s=!1,a=!1;const o=new Set,c="tick"===e.type?queueMicrotask:"raf"===e.type?Ge:"callback"===e.type?e.queueNotification:qe(e.timeout),d=()=>{a=!1,s&&(s=!1,o.forEach((e=>e())))};return Object.assign({},n,{subscribe(e){const t=n.subscribe((()=>i&&e()));return o.add(e),()=>{t(),o.delete(e)}},dispatch(e){try{return i=!e?.meta?.RTK_autoBatch,s=!i,s&&(a||(a=!0,c(d))),n.dispatch(e)}finally{i=!0}}})})("object"==typeof r?r:void 0)),n};function Ke(e){const t=$e(),{reducer:r,middleware:n,devTools:i=!0,preloadedState:s,enhancers:a}=e||{};let o,c;if("function"==typeof r)o=r;else{if(!p(r))throw new Error("`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers");o=g(r)}if(n&&"function"!=typeof n)throw new Error("`middleware` field must be a callback");if("function"==typeof n){if(c=n(t),!Array.isArray(c))throw new Error("when using a middleware builder function, an array of middleware must be returned")}else c=t();if(c.some((e=>"function"!=typeof e)))throw new Error("each middleware provided to configureStore must be a function");let d=v;i&&(d=Pe({trace:!0,..."object"==typeof i&&i}));const l=function(...e){return t=>(r,n)=>{const i=t(r,n);let s=()=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")};const a={getState:i.getState,dispatch:(e,...t)=>s(e,...t)},o=e.map((e=>e(a)));return s=v(...o)(i.dispatch),{...i,dispatch:s}}}(...c),u=We(l);if(a&&"function"!=typeof a)throw new Error("`enhancers` field must be a callback");let h="function"==typeof a?a(u):u();if(!Array.isArray(h))throw new Error("`enhancers` callback must return an array");if(h.some((e=>"function"!=typeof e)))throw new Error("each enhancer provided to configureStore must be a function");c.length&&!h.includes(l)&&console.error("middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`");return m(o,s,d(...h))}function Je(e){const t={},r=[];let n;const i={addCase(e,s){if(r.length>0)throw new Error("`builder.addCase` should only be called before calling `builder.addMatcher`");if(n)throw new Error("`builder.addCase` should only be called before calling `builder.addDefaultCase`");const a="string"==typeof e?e:e.type;if(!a)throw new Error("`builder.addCase` cannot be called with an empty action type");if(a in t)throw new Error(`\`builder.addCase\` cannot be called with two reducers for the same action type '${a}'`);return t[a]=s,i},addMatcher(e,t){if(n)throw new Error("`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");return r.push({matcher:e,reducer:t}),i},addDefaultCase(e){if(n)throw new Error("`builder.addDefaultCase` can only be called once");return n=e,i}};return e(i),[t,r,n]}var He=(e=21)=>{let t="",r=e;for(;r--;)t+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return t};function Ye(...e){return t=>e.some((e=>((e,t)=>ke(e)?e.match(t):e(t))(e,t)))}var Qe=["name","message","stack","code"],Xe=class{constructor(e,t){this.payload=e,this.meta=t}_type},Ze=class{constructor(e,t){this.payload=e,this.meta=t}_type},et=e=>{if("object"==typeof e&&null!==e){const t={};for(const r of Qe)"string"==typeof e[r]&&(t[r]=e[r]);return t}return{message:String(e)}},tt=(()=>{function e(e,t,r){const n=Ee(e+"/fulfilled",((e,t,r,n)=>({payload:e,meta:{...n||{},arg:r,requestId:t,requestStatus:"fulfilled"}}))),i=Ee(e+"/pending",((e,t,r)=>({payload:void 0,meta:{...r||{},arg:t,requestId:e,requestStatus:"pending"}}))),s=Ee(e+"/rejected",((e,t,n,i,s)=>({payload:i,error:(r&&r.serializeError||et)(e||"Rejected"),meta:{...s||{},arg:n,requestId:t,rejectedWithValue:!!i,requestStatus:"rejected",aborted:"AbortError"===e?.name,condition:"ConditionError"===e?.name}})));return Object.assign((function(e){return(a,o,c)=>{const d=r?.idGenerator?r.idGenerator(e):He(),l=new AbortController;let p;function u(e){p=e,l.abort()}const h=async function(){let h;try{let s=r?.condition?.(e,{getState:o,extra:c});if(function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.then}(s)&&(s=await s),!1===s||l.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};const m=new Promise(((e,t)=>l.signal.addEventListener("abort",(()=>t({name:"AbortError",message:p||"Aborted"})))));a(i(d,e,r?.getPendingMeta?.({requestId:d,arg:e},{getState:o,extra:c}))),h=await Promise.race([m,Promise.resolve(t(e,{dispatch:a,getState:o,extra:c,requestId:d,signal:l.signal,abort:u,rejectWithValue:(e,t)=>new Xe(e,t),fulfillWithValue:(e,t)=>new Ze(e,t)})).then((t=>{if(t instanceof Xe)throw t;return t instanceof Ze?n(t.payload,d,e,t.meta):n(t,d,e)}))])}catch(t){h=t instanceof Xe?s(null,d,e,t.payload,t.meta):s(t,d,e)}return r&&!r.dispatchConditionRejection&&s.match(h)&&h.meta.condition||a(h),h}();return Object.assign(h,{abort:u,requestId:d,arg:e,unwrap:()=>h.then(rt)})}}),{pending:i,rejected:s,fulfilled:n,settled:Ye(s,n),typePrefix:e})}return e.withTypes=()=>e,e})();function rt(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}var nt=Symbol.for("rtk-slice-createasyncthunk");function it(e,t){return`${e}/${t}`}function st(e,t,r,n){function i(i,...s){let a=r.call(e,i);if(void 0===a){if(!n)throw new Error("selectState returned undefined for an uninjected slice reducer");a=e.getInitialState()}return t(a,...s)}return i.unwrapped=t,i}var at=function({creators:e}={}){const t=e?.asyncThunk?.[nt];return function(e){const{name:r,reducerPath:n=r}=e;if(!r)throw new Error("`name` is a required option for createSlice");const i=("function"==typeof e.reducers?e.reducers(function(){function e(e,t){return{_reducerDefinitionType:"asyncThunk",payloadCreator:e,...t}}return e.withTypes=()=>e,{reducer:e=>Object.assign({[e.name]:(...t)=>e(...t)}[e.name],{_reducerDefinitionType:"reducer"}),preparedReducer:(e,t)=>({_reducerDefinitionType:"reducerWithPrepare",prepare:e,reducer:t}),asyncThunk:e}}()):e.reducers)||{},s=Object.keys(i),a={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},o={addCase(e,t){const r="string"==typeof e?e:e.type;if(!r)throw new Error("`context.addCase` cannot be called with an empty action type");if(r in a.sliceCaseReducersByType)throw new Error("`context.addCase` cannot be called with two reducers for the same action type: "+r);return a.sliceCaseReducersByType[r]=t,o},addMatcher:(e,t)=>(a.sliceMatchers.push({matcher:e,reducer:t}),o),exposeAction:(e,t)=>(a.actionCreators[e]=t,o),exposeCaseReducer:(e,t)=>(a.sliceCaseReducersByName[e]=t,o)};function c(){if("object"==typeof e.extraReducers)throw new Error("The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");const[t={},r=[],n]="function"==typeof e.extraReducers?Je(e.extraReducers):[e.extraReducers],i={...t,...a.sliceCaseReducersByType};return function(e,t){if("object"==typeof t)throw new Error("The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");let r,[n,i,s]=Je(t);if("function"==typeof e)r=()=>Me(e());else{const t=Me(e);r=()=>t}function a(e=r(),t){let a=[n[t.type],...i.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===a.filter((e=>!!e)).length&&(a=[s]),a.reduce(((e,r)=>{if(r){if(T(e)){const n=r(e,t);return void 0===n?e:n}if(P(e))return de(e,(e=>r(e,t)));{const n=r(e,t);if(void 0===n){if(null===e)return e;throw new Error("A case reducer on a non-draftable value must not return undefined")}return n}}return e}),e)}return a.getInitialState=r,a}(e.initialState,(e=>{for(let t in i)e.addCase(t,i[t]);for(let t of a.sliceMatchers)e.addMatcher(t.matcher,t.reducer);for(let t of r)e.addMatcher(t.matcher,t.reducer);n&&e.addDefaultCase(n)}))}s.forEach((n=>{const s=i[n],a={reducerName:n,type:it(r,n),createNotation:"function"==typeof e.reducers};!function(e){return"asyncThunk"===e._reducerDefinitionType}(s)?function({type:e,reducerName:t,createNotation:r},n,i){let s,a;if("reducer"in n){if(r&&!function(e){return"reducerWithPrepare"===e._reducerDefinitionType}(n))throw new Error("Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.");s=n.reducer,a=n.prepare}else s=n;i.addCase(e,s).exposeCaseReducer(t,s).exposeAction(t,a?Ee(e,a):Ee(e))}(a,s,o):function({type:e,reducerName:t},r,n,i){if(!i)throw new Error("Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.");const{payloadCreator:s,fulfilled:a,pending:o,rejected:c,settled:d,options:l}=r,p=i(e,s,l);n.exposeAction(t,p),a&&n.addCase(p.fulfilled,a);o&&n.addCase(p.pending,o);c&&n.addCase(p.rejected,c);d&&n.addMatcher(p.settled,d);n.exposeCaseReducer(t,{fulfilled:a||ot,pending:o||ot,rejected:c||ot,settled:d||ot})}(a,s,o,t)}));const d=e=>e,l=new WeakMap;let p;const u={name:r,reducerPath:n,reducer:(e,t)=>(p||(p=c()),p(e,t)),actions:a.actionCreators,caseReducers:a.sliceCaseReducersByName,getInitialState:()=>(p||(p=c()),p.getInitialState()),getSelectors(t=d){const r=je(l,this,{insert:()=>new WeakMap});return je(r,t,{insert:()=>{const r={};for(const[n,i]of Object.entries(e.selectors??{}))r[n]=st(this,i,t,this!==u);return r}})},selectSlice(e){let t=e[this.reducerPath];if(void 0===t){if(this===u)throw new Error("selectSlice returned undefined for an uninjected slice reducer");t=this.getInitialState()}return t},get selectors(){return this.getSelectors(this.selectSlice)},injectInto(e,{reducerPath:t,...r}={}){const n=t??this.reducerPath;return e.inject({reducerPath:n,reducer:this.reducer},r),{...this,reducerPath:n}}};return u}}();function ot(){}var ct=(e,t)=>{if("function"!=typeof e)throw new Error(`${t} is not a function`)},dt=()=>{},lt=(e,t=dt)=>(e.catch(t),e),pt=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),ut=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},ht="listener",mt="completed",ft="cancelled",gt=`task-${ft}`,vt=`task-${mt}`,yt=`${ht}-${ft}`,_t=`${ht}-${mt}`,bt=class{constructor(e){this.code=e,this.message=`task ${ft} (reason: ${e})`}name="TaskAbortError";message},wt=e=>{if(e.aborted){const{reason:t}=e;throw new bt(t)}};function St(e,t){let r=dt;return new Promise(((n,i)=>{const s=()=>i(new bt(e.reason));e.aborted?s():(r=pt(e,s),t.finally((()=>r())).then(n,i))})).finally((()=>{r=dt}))}var Ct=e=>t=>lt(St(e,t).then((t=>(wt(e),t)))),Rt=e=>{const t=Ct(e);return e=>t(new Promise((t=>setTimeout(t,e))))},{assign:Tt}=Object,Pt={},kt="listenerMiddleware",Et=(e,t)=>(r,n)=>{ct(r,"taskExecutor");const i=new AbortController;var s;s=i,pt(e,(()=>ut(s,e.reason)));const a=(async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(e){return{status:e instanceof bt?"cancelled":"rejected",error:e}}finally{t?.()}})((async()=>{wt(e),wt(i.signal);const t=await r({pause:Ct(i.signal),delay:Rt(i.signal),signal:i.signal});return wt(i.signal),t}),(()=>ut(i,vt)));return n?.autoJoin&&t.push(a),{result:Ct(e)(a),cancel(){ut(i,gt)}}},Dt=(e,t)=>(r,n)=>lt((async(r,n)=>{wt(t);let i=()=>{};const s=[new Promise(((t,n)=>{let s=e({predicate:r,effect:(e,r)=>{r.unsubscribe(),t([e,r.getState(),r.getOriginalState()])}});i=()=>{s(),n()}}))];null!=n&&s.push(new Promise((e=>setTimeout(e,n,null))));try{const e=await St(t,Promise.race(s));return wt(t),e}finally{i()}})(r,n)),Ot=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:s}=e;if(t)i=Ee(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error("Creating or removing a listener requires one of the known fields for matching an action");return ct(s,"options.listener"),{predicate:i,type:t,effect:s}},It=e=>{e.pending.forEach((e=>{ut(e,yt)}))},xt=(e,t,r)=>{try{e(t,r)}catch(e){setTimeout((()=>{throw e}),0)}},Mt=Ee(`${kt}/add`),jt=Ee(`${kt}/removeAll`),Lt=Ee(`${kt}/remove`),At=(...e)=>{console.error(`${kt}/error`,...e)};const Nt=function(e={}){const t=new Map,{extra:r,onError:n=At}=e;ct(n,"onError");const i=e=>{let r=Ie(Array.from(t.values()),(t=>t.effect===e.effect));return r||(r=(e=>{const{type:t,predicate:r,effect:n}=Ot(e);return{id:He(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error("Unsubscribe not initialized")}}})(e)),(e=>(e.unsubscribe=()=>t.delete(e.id),t.set(e.id,e),t=>{e.unsubscribe(),t?.cancelActive&&It(e)}))(r)},s=e=>{const{type:r,effect:n,predicate:i}=Ot(e),s=Ie(Array.from(t.values()),(e=>("string"==typeof r?e.type===r:e.predicate===i)&&e.effect===n));return s&&(s.unsubscribe(),e.cancelActive&&It(s)),!!s},a=async(e,s,a,o)=>{const c=new AbortController,d=Dt(i,c.signal),l=[];try{e.pending.add(c),await Promise.resolve(e.effect(s,Tt({},a,{getOriginalState:o,condition:(e,t)=>d(e,t).then(Boolean),take:d,delay:Rt(c.signal),pause:Ct(c.signal),extra:r,signal:c.signal,fork:Et(c.signal,l),unsubscribe:e.unsubscribe,subscribe:()=>{t.set(e.id,e)},cancelActiveListeners:()=>{e.pending.forEach(((e,t,r)=>{e!==c&&(ut(e,yt),r.delete(e))}))},cancel:()=>{ut(c,yt),e.pending.delete(c)},throwIfCancelled:()=>{wt(c.signal)}})))}catch(e){e instanceof bt||xt(n,e,{raisedBy:"effect"})}finally{await Promise.allSettled(l),ut(c,_t),e.pending.delete(c)}},o=(e=>()=>{e.forEach(It),e.clear()})(t);return{middleware:e=>r=>c=>{if(!y(c))return r(c);if(Mt.match(c))return i(c.payload);if(jt.match(c))return void o();if(Lt.match(c))return s(c.payload);let d=e.getState();const l=()=>{if(d===Pt)throw new Error(`${kt}: getOriginalState can only be called synchronously`);return d};let p;try{if(p=r(c),t.size>0){let r=e.getState();const i=Array.from(t.values());for(let t of i){let i=!1;try{i=t.predicate(c,r,d)}catch(e){i=!1,xt(n,e,{raisedBy:"predicate"})}i&&a(t,c,e,l)}}}finally{d=Pt}return p},startListening:i,stopListening:s,clearListeners:o}}(),Ft=Nt.startListening,Bt=(e,t)=>Ft({predicate:(t,r,n)=>{const i=e.map((e=>e(n))),s=e.map((e=>e(r)));return i.some(((e,t)=>e!==s[t]))},effect:(r,{dispatch:n,getState:i,extra:s})=>{const a=e.map((e=>e(i())));t({dispatch:n,getState:i,extra:s},...a)}}),Ut=at({name:"app",initialState:{wantsToJoin:!1,roomName:null,roomKey:null,roomUrl:null,displayName:null,sdkVersion:null,externalId:null},reducers:{doAppJoin:(e,t)=>{const r=new URL(t.payload.roomUrl);return Object.assign(Object.assign(Object.assign({},e),t.payload),{roomName:r.pathname,wantsToJoin:!0})},appLeft:e=>Object.assign(Object.assign({},e),{wantsToJoin:!1}),setRoomKey:(e,t)=>Object.assign(Object.assign({},e),{roomKey:t.payload})}}),{doAppJoin:zt,appLeft:Vt,setRoomKey:$t}=Ut.actions,qt=e=>e.app.wantsToJoin,Gt=e=>e.app.roomName,Wt=e=>e.app.roomKey,Kt=e=>e.app.displayName,Jt=e=>e.app.sdkVersion,Ht=e=>e.app.externalId;function Yt(e,t){return tt(e,t)}function Qt(e){return Ee(`signalConnection/event/${e}`)}const Xt={audioEnabled:Qt("audioEnabled"),chatMessage:Qt("chatMessage"),clientLeft:Qt("clientLeft"),clientMetadataReceived:Qt("clientMetadataReceived"),cloudRecordingStarted:Qt("cloudRecordingStarted"),cloudRecordingStopped:Qt("cloudRecordingStopped"),disconnect:Qt("disconnect"),knockerLeft:Qt("knockerLeft"),knockHandled:Qt("knockHandled"),newClient:Qt("newClient"),roomJoined:Qt("roomJoined"),roomKnocked:Qt("roomKnocked"),roomSessionEnded:Qt("roomSessionEnded"),screenshareStarted:Qt("screenshareStarted"),screenshareStopped:Qt("screenshareStopped"),streamingStopped:Qt("streamingStopped"),videoEnabled:Qt("videoEnabled")},Zt=at({name:"deviceCredentials",initialState:{isFetching:!1,data:null},reducers:{},extraReducers:e=>{e.addCase(er.pending,(e=>Object.assign(Object.assign({},e),{isFetching:!0}))),e.addCase(er.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{isFetching:!1,data:t.payload}))),e.addCase(er.rejected,(e=>Object.assign(Object.assign({},e),{isFetching:!0})))}}),er=Yt("deviceCredentials/doGetDeviceCredentials",((e,{extra:t})=>s(void 0,void 0,void 0,(function*(){try{return yield t.services.credentialsService.getCredentials()}catch(e){console.error(e)}})))),tr=e=>e.deviceCredentials;Bt([Se(qt,tr,((e,t)=>!(!e||t.isFetching||t.data)))],(({dispatch:e},t)=>{t&&e(er())}));const rr=Object.create(null);rr.open="0",rr.close="1",rr.ping="2",rr.pong="3",rr.message="4",rr.upgrade="5",rr.noop="6";const nr=Object.create(null);Object.keys(rr).forEach((e=>{nr[rr[e]]=e}));const ir={type:"error",data:"parser error"},sr="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),ar="function"==typeof ArrayBuffer,or=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,cr=({type:e,data:t},r,n)=>sr&&t instanceof Blob?r?n(t):dr(t,n):ar&&(t instanceof ArrayBuffer||or(t))?r?n(t):dr(new Blob([t]),n):n(rr[e]+(t||"")),dr=(e,t)=>{const r=new FileReader;return r.onload=function(){const e=r.result.split(",")[1];t("b"+(e||""))},r.readAsDataURL(e)};function lr(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let pr;const ur="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",hr="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)hr[ur.charCodeAt(e)]=e;const mr="function"==typeof ArrayBuffer,fr=(e,t)=>{if("string"!=typeof e)return{type:"message",data:vr(e,t)};const r=e.charAt(0);if("b"===r)return{type:"message",data:gr(e.substring(1),t)};return nr[r]?e.length>1?{type:nr[r],data:e.substring(1)}:{type:nr[r]}:ir},gr=(e,t)=>{if(mr){const r=(e=>{let t,r,n,i,s,a=.75*e.length,o=e.length,c=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const d=new ArrayBuffer(a),l=new Uint8Array(d);for(t=0;t<o;t+=4)r=hr[e.charCodeAt(t)],n=hr[e.charCodeAt(t+1)],i=hr[e.charCodeAt(t+2)],s=hr[e.charCodeAt(t+3)],l[c++]=r<<2|n>>4,l[c++]=(15&n)<<4|i>>2,l[c++]=(3&i)<<6|63&s;return d})(e);return vr(r,t)}return{base64:!0,data:e}},vr=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer,yr=String.fromCharCode(30);function _r(){return new TransformStream({transform(e,t){!function(e,t){sr&&e.data instanceof Blob?e.data.arrayBuffer().then(lr).then(t):ar&&(e.data instanceof ArrayBuffer||or(e.data))?t(lr(e.data)):cr(e,!1,(e=>{pr||(pr=new TextEncoder),t(pr.encode(e))}))}(e,(r=>{const n=r.length;let i;if(n<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,n);else if(n<65536){i=new Uint8Array(3);const e=new DataView(i.buffer);e.setUint8(0,126),e.setUint16(1,n)}else{i=new Uint8Array(9);const e=new DataView(i.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(n))}e.data&&"string"!=typeof e.data&&(i[0]|=128),t.enqueue(i),t.enqueue(r)}))}})}let br;function wr(e){return e.reduce(((e,t)=>e+t.length),0)}function Sr(e,t){if(e[0].length===t)return e.shift();const r=new Uint8Array(t);let n=0;for(let i=0;i<t;i++)r[i]=e[0][n++],n===e[0].length&&(e.shift(),n=0);return e.length&&n<e[0].length&&(e[0]=e[0].slice(n)),r}function Cr(e){if(e)return function(e){for(var t in Cr.prototype)e[t]=Cr.prototype[t];return e}(e)}Cr.prototype.on=Cr.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},Cr.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},Cr.prototype.off=Cr.prototype.removeListener=Cr.prototype.removeAllListeners=Cr.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var i=0;i<n.length;i++)if((r=n[i])===t||r.fn===t){n.splice(i,1);break}return 0===n.length&&delete this._callbacks["$"+e],this},Cr.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),r=this._callbacks["$"+e],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(r){n=0;for(var i=(r=r.slice(0)).length;n<i;++n)r[n].apply(this,t)}return this},Cr.prototype.emitReserved=Cr.prototype.emit,Cr.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},Cr.prototype.hasListeners=function(e){return!!this.listeners(e).length};const Rr="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function Tr(e,...t){return t.reduce(((t,r)=>(e.hasOwnProperty(r)&&(t[r]=e[r]),t)),{})}const Pr=Rr.setTimeout,kr=Rr.clearTimeout;function Er(e,t){t.useNativeTimers?(e.setTimeoutFn=Pr.bind(Rr),e.clearTimeoutFn=kr.bind(Rr)):(e.setTimeoutFn=Rr.setTimeout.bind(Rr),e.clearTimeoutFn=Rr.clearTimeout.bind(Rr))}class Dr extends Error{constructor(e,t,r){super(e),this.description=t,this.context=r,this.type="TransportError"}}let Or=class extends Cr{constructor(e){super(),this.writable=!1,Er(this,e),this.opts=e,this.query=e.query,this.socket=e.socket}onError(e,t,r){return super.emitReserved("error",new Dr(e,t,r)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}send(e){"open"===this.readyState&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){const t=fr(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){const e=this.opts.hostname;return-1===e.indexOf(":")?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(443!==this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}_query(e){const t=function(e){let t="";for(let r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}(e);return t.length?"?"+t:""}};const Ir="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),xr=64,Mr={};let jr,Lr=0,Ar=0;function Nr(e){let t="";do{t=Ir[e%xr]+t,e=Math.floor(e/xr)}while(e>0);return t}function Fr(){const e=Nr(+new Date);return e!==jr?(Lr=0,jr=e):e+"."+Nr(Lr++)}for(;Ar<xr;Ar++)Mr[Ir[Ar]]=Ar;let Br=!1;try{Br="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}const Ur=Br;function zr(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||Ur))return new XMLHttpRequest}catch(e){}if(!t)try{return new(Rr[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}}function Vr(){}const $r=null!=new zr({xdomain:!1}).responseType;class qr extends Cr{constructor(e,t){super(),Er(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=Tr(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const r=this.xhr=new zr(t);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&r.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var e;3===r.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(r)),4===r.readyState&&(200===r.status||1223===r.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=qr.requestsCount++,qr.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Vr,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete qr.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(qr.requestsCount=0,qr.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",Gr);else if("function"==typeof addEventListener){addEventListener("onpagehide"in Rr?"pagehide":"unload",Gr,!1)}function Gr(){for(let e in qr.requests)qr.requests.hasOwnProperty(e)&&qr.requests[e].abort()}var Wr="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Kr=[],Jr=[],Hr="undefined"!=typeof Uint8Array?Uint8Array:Array,Yr=!1;function Qr(){Yr=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0;t<64;++t)Kr[t]=e[t],Jr[e.charCodeAt(t)]=t;Jr["-".charCodeAt(0)]=62,Jr["_".charCodeAt(0)]=63}function Xr(e,t,r){for(var n,i,s=[],a=t;a<r;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],s.push(Kr[(i=n)>>18&63]+Kr[i>>12&63]+Kr[i>>6&63]+Kr[63&i]);return s.join("")}function Zr(e){var t;Yr||Qr();for(var r=e.length,n=r%3,i="",s=[],a=16383,o=0,c=r-n;o<c;o+=a)s.push(Xr(e,o,o+a>c?c:o+a));return 1===n?(t=e[r-1],i+=Kr[t>>2],i+=Kr[t<<4&63],i+="=="):2===n&&(t=(e[r-2]<<8)+e[r-1],i+=Kr[t>>10],i+=Kr[t>>4&63],i+=Kr[t<<2&63],i+="="),s.push(i),s.join("")}function en(e,t,r,n,i){var s,a,o=8*i-n-1,c=(1<<o)-1,d=c>>1,l=-7,p=r?i-1:0,u=r?-1:1,h=e[t+p];for(p+=u,s=h&(1<<-l)-1,h>>=-l,l+=o;l>0;s=256*s+e[t+p],p+=u,l-=8);for(a=s&(1<<-l)-1,s>>=-l,l+=n;l>0;a=256*a+e[t+p],p+=u,l-=8);if(0===s)s=1-d;else{if(s===c)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,n),s-=d}return(h?-1:1)*a*Math.pow(2,s-n)}function tn(e,t,r,n,i,s){var a,o,c,d=8*s-i-1,l=(1<<d)-1,p=l>>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:s-1,m=n?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+p>=1?u/c:u*Math.pow(2,1-p))*c>=2&&(a++,c/=2),a+p>=l?(o=0,a=l):a+p>=1?(o=(t*c-1)*Math.pow(2,i),a+=p):(o=t*Math.pow(2,p-1)*Math.pow(2,i),a=0));i>=8;e[r+h]=255&o,h+=m,o/=256,i-=8);for(a=a<<i|o,d+=i;d>0;e[r+h]=255&a,h+=m,a/=256,d-=8);e[r+h-m]|=128*f}var rn={}.toString,nn=Array.isArray||function(e){return"[object Array]"==rn.call(e)};function sn(){return on.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function an(e,t){if(sn()<t)throw new RangeError("Invalid typed array length");return on.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=on.prototype:(null===e&&(e=new on(t)),e.length=t),e}function on(e,t,r){if(!(on.TYPED_ARRAY_SUPPORT||this instanceof on))return new on(e,t,r);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return ln(this,e)}return cn(this,e,t,r)}function cn(e,t,r,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);on.TYPED_ARRAY_SUPPORT?(e=t).__proto__=on.prototype:e=pn(e,t);return e}(e,t,r,n):"string"==typeof t?function(e,t,r){"string"==typeof r&&""!==r||(r="utf8");if(!on.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|mn(t,r);e=an(e,n);var i=e.write(t,r);i!==n&&(e=e.slice(0,i));return e}(e,t,r):function(e,t){if(hn(t)){var r=0|un(t.length);return 0===(e=an(e,r)).length||t.copy(e,0,0,r),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?an(e,0):pn(e,t);if("Buffer"===t.type&&nn(t.data))return pn(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function dn(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function ln(e,t){if(dn(t),e=an(e,t<0?0:0|un(t)),!on.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function pn(e,t){var r=t.length<0?0:0|un(t.length);e=an(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function un(e){if(e>=sn())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+sn().toString(16)+" bytes");return 0|e}function hn(e){return!(null==e||!e._isBuffer)}function mn(e,t){if(hn(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return zn(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Vn(e).length;default:if(n)return zn(e).length;t=(""+t).toLowerCase(),n=!0}}function fn(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return On(this,t,r);case"utf8":case"utf-8":return Pn(this,t,r);case"ascii":return En(this,t,r);case"latin1":case"binary":return Dn(this,t,r);case"base64":return Tn(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return In(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function gn(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function vn(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=on.from(t,n)),hn(t))return 0===t.length?-1:yn(e,t,r,n,i);if("number"==typeof t)return t&=255,on.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):yn(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function yn(e,t,r,n,i){var s,a=1,o=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,o/=2,c/=2,r/=2}function d(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var l=-1;for(s=r;s<o;s++)if(d(e,s)===d(t,-1===l?0:s-l)){if(-1===l&&(l=s),s-l+1===c)return l*a}else-1!==l&&(s-=s-l),l=-1}else for(r+c>o&&(r=o-c),s=r;s>=0;s--){for(var p=!0,u=0;u<c;u++)if(d(e,s+u)!==d(t,u)){p=!1;break}if(p)return s}return-1}function _n(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var s=t.length;if(s%2!=0)throw new TypeError("Invalid hex string");n>s/2&&(n=s/2);for(var a=0;a<n;++a){var o=parseInt(t.substr(2*a,2),16);if(isNaN(o))return a;e[r+a]=o}return a}function bn(e,t,r,n){return $n(zn(t,e.length-r),e,r,n)}function wn(e,t,r,n){return $n(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function Sn(e,t,r,n){return wn(e,t,r,n)}function Cn(e,t,r,n){return $n(Vn(t),e,r,n)}function Rn(e,t,r,n){return $n(function(e,t){for(var r,n,i,s=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(r=e.charCodeAt(a))>>8,i=r%256,s.push(i),s.push(n);return s}(t,e.length-r),e,r,n)}function Tn(e,t,r){return 0===t&&r===e.length?Zr(e):Zr(e.slice(t,r))}function Pn(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var s,a,o,c,d=e[i],l=null,p=d>239?4:d>223?3:d>191?2:1;if(i+p<=r)switch(p){case 1:d<128&&(l=d);break;case 2:128==(192&(s=e[i+1]))&&(c=(31&d)<<6|63&s)>127&&(l=c);break;case 3:s=e[i+1],a=e[i+2],128==(192&s)&&128==(192&a)&&(c=(15&d)<<12|(63&s)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:s=e[i+1],a=e[i+2],o=e[i+3],128==(192&s)&&128==(192&a)&&128==(192&o)&&(c=(15&d)<<18|(63&s)<<12|(63&a)<<6|63&o)>65535&&c<1114112&&(l=c)}null===l?(l=65533,p=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|1023&l),n.push(l),i+=p}return function(e){var t=e.length;if(t<=kn)return String.fromCharCode.apply(String,e);var r="",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=kn));return r}(n)}on.TYPED_ARRAY_SUPPORT=void 0===Wr.TYPED_ARRAY_SUPPORT||Wr.TYPED_ARRAY_SUPPORT,sn(),on.poolSize=8192,on._augment=function(e){return e.__proto__=on.prototype,e},on.from=function(e,t,r){return cn(null,e,t,r)},on.TYPED_ARRAY_SUPPORT&&(on.prototype.__proto__=Uint8Array.prototype,on.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&on[Symbol.species]),on.alloc=function(e,t,r){return function(e,t,r,n){return dn(t),t<=0?an(e,t):void 0!==r?"string"==typeof n?an(e,t).fill(r,n):an(e,t).fill(r):an(e,t)}(null,e,t,r)},on.allocUnsafe=function(e){return ln(null,e)},on.allocUnsafeSlow=function(e){return ln(null,e)},on.isBuffer=function(e){return null!=e&&(!!e._isBuffer||qn(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&qn(e.slice(0,0))}(e))},on.compare=function(e,t){if(!hn(e)||!hn(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var r=e.length,n=t.length,i=0,s=Math.min(r,n);i<s;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0},on.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},on.concat=function(e,t){if(!nn(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return on.alloc(0);var r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;var n=on.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){var s=e[r];if(!hn(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(n,i),i+=s.length}return n},on.byteLength=mn,on.prototype._isBuffer=!0,on.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)gn(this,t,t+1);return this},on.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)gn(this,t,t+3),gn(this,t+1,t+2);return this},on.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)gn(this,t,t+7),gn(this,t+1,t+6),gn(this,t+2,t+5),gn(this,t+3,t+4);return this},on.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?Pn(this,0,e):fn.apply(this,arguments)},on.prototype.equals=function(e){if(!hn(e))throw new TypeError("Argument must be a Buffer");return this===e||0===on.compare(this,e)},on.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},on.prototype.compare=function(e,t,r,n,i){if(!hn(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var s=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),o=Math.min(s,a),c=this.slice(n,i),d=e.slice(t,r),l=0;l<o;++l)if(c[l]!==d[l]){s=c[l],a=d[l];break}return s<a?-1:a<s?1:0},on.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},on.prototype.indexOf=function(e,t,r){return vn(this,e,t,r,!0)},on.prototype.lastIndexOf=function(e,t,r){return vn(this,e,t,r,!1)},on.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return _n(this,e,t,r);case"utf8":case"utf-8":return bn(this,e,t,r);case"ascii":return wn(this,e,t,r);case"latin1":case"binary":return Sn(this,e,t,r);case"base64":return Cn(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rn(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},on.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var kn=4096;function En(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(127&e[i]);return n}function Dn(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function On(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i="",s=t;s<r;++s)i+=Un(e[s]);return i}function In(e,t,r){for(var n=e.slice(t,r),i="",s=0;s<n.length;s+=2)i+=String.fromCharCode(n[s]+256*n[s+1]);return i}function xn(e,t,r){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function Mn(e,t,r,n,i,s){if(!hn(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<s)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}function jn(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,s=Math.min(e.length-r,2);i<s;++i)e[r+i]=(t&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function Ln(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,s=Math.min(e.length-r,4);i<s;++i)e[r+i]=t>>>8*(n?i:3-i)&255}function An(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Nn(e,t,r,n,i){return i||An(e,0,r,4),tn(e,t,r,n,23,4),r+4}function Fn(e,t,r,n,i){return i||An(e,0,r,8),tn(e,t,r,n,52,8),r+8}on.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),on.TYPED_ARRAY_SUPPORT)(r=this.subarray(e,t)).__proto__=on.prototype;else{var i=t-e;r=new on(i,void 0);for(var s=0;s<i;++s)r[s]=this[s+e]}return r},on.prototype.readUIntLE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n},on.prototype.readUIntBE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},on.prototype.readUInt8=function(e,t){return t||xn(e,1,this.length),this[e]},on.prototype.readUInt16LE=function(e,t){return t||xn(e,2,this.length),this[e]|this[e+1]<<8},on.prototype.readUInt16BE=function(e,t){return t||xn(e,2,this.length),this[e]<<8|this[e+1]},on.prototype.readUInt32LE=function(e,t){return t||xn(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},on.prototype.readUInt32BE=function(e,t){return t||xn(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},on.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*t)),n},on.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return s>=(i*=128)&&(s-=Math.pow(2,8*t)),s},on.prototype.readInt8=function(e,t){return t||xn(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},on.prototype.readInt16LE=function(e,t){t||xn(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},on.prototype.readInt16BE=function(e,t){t||xn(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},on.prototype.readInt32LE=function(e,t){return t||xn(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},on.prototype.readInt32BE=function(e,t){return t||xn(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},on.prototype.readFloatLE=function(e,t){return t||xn(e,4,this.length),en(this,e,!0,23,4)},on.prototype.readFloatBE=function(e,t){return t||xn(e,4,this.length),en(this,e,!1,23,4)},on.prototype.readDoubleLE=function(e,t){return t||xn(e,8,this.length),en(this,e,!0,52,8)},on.prototype.readDoubleBE=function(e,t){return t||xn(e,8,this.length),en(this,e,!1,52,8)},on.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||Mn(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,s=0;for(this[t]=255&e;++s<r&&(i*=256);)this[t+s]=e/i&255;return t+r},on.prototype.writeUIntBE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||Mn(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},on.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,1,255,0),on.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},on.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,65535,0),on.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):jn(this,e,t,!0),t+2},on.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,65535,0),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):jn(this,e,t,!1),t+2},on.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,4294967295,0),on.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):Ln(this,e,t,!0),t+4},on.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,4294967295,0),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ln(this,e,t,!1),t+4},on.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);Mn(this,e,t,r,i-1,-i)}var s=0,a=1,o=0;for(this[t]=255&e;++s<r&&(a*=256);)e<0&&0===o&&0!==this[t+s-1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},on.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);Mn(this,e,t,r,i-1,-i)}var s=r-1,a=1,o=0;for(this[t+s]=255&e;--s>=0&&(a*=256);)e<0&&0===o&&0!==this[t+s+1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},on.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,1,127,-128),on.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},on.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,32767,-32768),on.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):jn(this,e,t,!0),t+2},on.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,32767,-32768),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):jn(this,e,t,!1),t+2},on.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,2147483647,-2147483648),on.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):Ln(this,e,t,!0),t+4},on.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ln(this,e,t,!1),t+4},on.prototype.writeFloatLE=function(e,t,r){return Nn(this,e,t,!0,r)},on.prototype.writeFloatBE=function(e,t,r){return Nn(this,e,t,!1,r)},on.prototype.writeDoubleLE=function(e,t,r){return Fn(this,e,t,!0,r)},on.prototype.writeDoubleBE=function(e,t,r){return Fn(this,e,t,!1,r)},on.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var i,s=n-r;if(this===e&&r<t&&t<n)for(i=s-1;i>=0;--i)e[i+t]=this[i+r];else if(s<1e3||!on.TYPED_ARRAY_SUPPORT)for(i=0;i<s;++i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+s),t);return s},on.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!on.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<r)throw new RangeError("Out of range index");if(r<=t)return this;var s;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(s=t;s<r;++s)this[s]=e;else{var a=hn(e)?e:zn(new on(e,n).toString()),o=a.length;for(s=0;s<r-t;++s)this[s+t]=a[s%o]}return this};var Bn=/[^+\/0-9A-Za-z-_]/g;function Un(e){return e<16?"0"+e.toString(16):e.toString(16)}function zn(e,t){var r;t=t||1/0;for(var n=e.length,i=null,s=[],a=0;a<n;++a){if((r=e.charCodeAt(a))>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function Vn(e){return function(e){var t,r,n,i,s,a;Yr||Qr();var o=e.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");s="="===e[o-2]?2:"="===e[o-1]?1:0,a=new Hr(3*o/4-s),n=s>0?o-4:o;var c=0;for(t=0,r=0;t<n;t+=4,r+=3)i=Jr[e.charCodeAt(t)]<<18|Jr[e.charCodeAt(t+1)]<<12|Jr[e.charCodeAt(t+2)]<<6|Jr[e.charCodeAt(t+3)],a[c++]=i>>16&255,a[c++]=i>>8&255,a[c++]=255&i;return 2===s?(i=Jr[e.charCodeAt(t)]<<2|Jr[e.charCodeAt(t+1)]>>4,a[c++]=255&i):1===s&&(i=Jr[e.charCodeAt(t)]<<10|Jr[e.charCodeAt(t+1)]<<4|Jr[e.charCodeAt(t+2)]>>2,a[c++]=i>>8&255,a[c++]=255&i),a}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(Bn,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function $n(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function qn(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}const Gn="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),Wn=Rr.WebSocket||Rr.MozWebSocket,Kn="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();const Jn={websocket:class extends Or{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,r=Kn?{}:Tr(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=Kn?new Wn(e,t,r):t?new Wn(e,t):new Wn(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],n=t===e.length-1;cr(r,this.supportsBinary,(e=>{try{this.ws.send(e)}catch(e){}n&&Gn((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=Fr()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!Wn}},webtransport:class extends Or{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{this.onClose()})).catch((e=>{this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=function(e,t){br||(br=new TextDecoder);const r=[];let n=0,i=-1,s=!1;return new TransformStream({transform(a,o){for(r.push(a);;){if(0===n){if(wr(r)<1)break;const e=Sr(r,1);s=128==(128&e[0]),i=127&e[0],n=i<126?3:126===i?1:2}else if(1===n){if(wr(r)<2)break;const e=Sr(r,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),n=3}else if(2===n){if(wr(r)<8)break;const e=Sr(r,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){o.enqueue(ir);break}i=s*Math.pow(2,32)+t.getUint32(4),n=3}else{if(wr(r)<i)break;const e=Sr(r,i);o.enqueue(fr(s?e:br.decode(e),t)),n=0}if(0===i||i>e){o.enqueue(ir);break}}}})}(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=e.readable.pipeThrough(t).getReader(),n=_r();n.readable.pipeTo(e.writable),this.writer=n.writable.getWriter();const i=()=>{r.read().then((({done:e,value:t})=>{e||(this.onPacket(t),i())})).catch((e=>{}))};i();const s={type:"open"};this.query.sid&&(s.data=`{"sid":"${this.query.sid}"}`),this.writer.write(s).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],n=t===e.length-1;this.writer.write(r).then((()=>{n&&Gn((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}},polling:class extends Or{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let r=location.port;r||(r=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||r!==e.port}const t=e&&e.forceBase64;this.supportsBinary=$r&&!t,this.opts.withCredentials&&(this.cookieJar=void 0)}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(e++,this.once("pollComplete",(function(){--e||t()}))),this.writable||(e++,this.once("drain",(function(){--e||t()})))}else t()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){((e,t)=>{const r=e.split(yr),n=[];for(let e=0;e<r.length;e++){const i=fr(r[e],t);if(n.push(i),"error"===i.type)break}return n})(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState&&this.poll())}doClose(){const e=()=>{this.write([{type:"close"}])};"open"===this.readyState?e():this.once("open",e)}write(e){this.writable=!1,((e,t)=>{const r=e.length,n=new Array(r);let i=0;e.forEach(((e,s)=>{cr(e,!1,(e=>{n[s]=e,++i===r&&t(n.join(yr))}))}))})(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=Fr()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new qr(this.uri(),e)}doWrite(e,t){const r=this.request({method:"POST",data:e});r.on("success",t),r.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}},Hn=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Yn=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Qn(e){const t=e,r=e.indexOf("["),n=e.indexOf("]");-1!=r&&-1!=n&&(e=e.substring(0,r)+e.substring(r,n).replace(/:/g,";")+e.substring(n,e.length));let i=Hn.exec(e||""),s={},a=14;for(;a--;)s[Yn[a]]=i[a]||"";return-1!=r&&-1!=n&&(s.source=t,s.host=s.host.substring(1,s.host.length-1).replace(/;/g,":"),s.authority=s.authority.replace("[","").replace("]","").replace(/;/g,":"),s.ipv6uri=!0),s.pathNames=function(e,t){const r=/\/{2,9}/g,n=t.replace(r,"/").split("/");"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1);"/"==t.slice(-1)&&n.splice(n.length-1,1);return n}(0,s.path),s.queryKey=function(e,t){const r={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,n){t&&(r[t]=n)})),r}(0,s.query),s}let Xn=class e extends Cr{constructor(e,t={}){super(),this.binaryType="arraybuffer",this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=Qn(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=Qn(t.host).host),Er(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(e){let t={},r=e.split("&");for(let e=0,n=r.length;e<n;e++){let n=r[e].split("=");t[decodeURIComponent(n[0])]=decodeURIComponent(n[1])}return t}(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){const t=Object.assign({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);const r=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new Jn[e](r)}open(){let t;if(this.opts.rememberUpgrade&&e.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(e){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(t){let r=this.createTransport(t),n=!1;e.priorWebsocketSuccess=!1;const i=()=>{n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(t=>{if(!n)if("pong"===t.type&&"probe"===t.data){if(this.upgrading=!0,this.emitReserved("upgrading",r),!r)return;e.priorWebsocketSuccess="websocket"===r.name,this.transport.pause((()=>{n||"closed"!==this.readyState&&(l(),this.setTransport(r),r.send([{type:"upgrade"}]),this.emitReserved("upgrade",r),r=null,this.upgrading=!1,this.flush())}))}else{const e=new Error("probe error");e.transport=r.name,this.emitReserved("upgradeError",e)}})))};function s(){n||(n=!0,l(),r.close(),r=null)}const a=e=>{const t=new Error("probe error: "+e);t.transport=r.name,s(),this.emitReserved("upgradeError",t)};function o(){a("transport closed")}function c(){a("socket closed")}function d(e){r&&e.name!==r.name&&s()}const l=()=>{r.removeListener("open",i),r.removeListener("error",a),r.removeListener("close",o),this.off("close",c),this.off("upgrading",d)};r.once("open",i),r.once("error",a),r.once("close",o),this.once("close",c),this.once("upgrading",d),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==t?this.setTimeoutFn((()=>{n||r.open()}),200):r.open()}onOpen(){if(this.readyState="open",e.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){let e=0;const t=this.upgrades.length;for(;e<t;e++)this.probe(this.upgrades[e])}}onPacket(e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),this.resetPingTimeout(),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this.sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong");break;case"error":const t=new Error("server error");t.code=e.data,this.onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data)}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this.upgrades=this.filterUpgrades(e.upgrades),this.pingInterval=e.pingInterval,this.pingTimeout=e.pingTimeout,this.maxPayload=e.maxPayload,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}resetPingTimeout(){this.clearTimeoutFn(this.pingTimeoutTimer),this.pingTimeoutTimer=this.setTimeoutFn((()=>{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let r=0;r<this.writeBuffer.length;r++){const n=this.writeBuffer[r].data;if(n&&(e+="string"==typeof(t=n)?function(e){let t=0,r=0;for(let n=0,i=e.length;n<i;n++)t=e.charCodeAt(n),t<128?r+=1:t<2048?r+=2:t<55296||t>=57344?r+=3:(n++,r+=4);return r}(t):Math.ceil(1.33*(t.byteLength||t.size))),r>0&&e>this.maxPayload)return this.writeBuffer.slice(0,r);e+=2}var t;return this.writeBuffer}write(e,t,r){return this.sendPacket("message",e,t,r),this}send(e,t,r){return this.sendPacket("message",e,t,r),this}sendPacket(e,t,r,n){if("function"==typeof t&&(n=t,t=void 0),"function"==typeof r&&(n=r,r=null),"closing"===this.readyState||"closed"===this.readyState)return;(r=r||{}).compress=!1!==r.compress;const i={type:e,data:t,options:r};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),n&&this.once("flush",n),this.flush()}close(){const e=()=>{this.onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},r=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?r():e()})):this.upgrading?r():e()),this}onError(t){e.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let r=0;const n=e.length;for(;r<n;r++)~this.transports.indexOf(e[r])&&t.push(e[r]);return t}};Xn.protocol=4;const Zn="function"==typeof ArrayBuffer,ei=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,ti=Object.prototype.toString,ri="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===ti.call(Blob),ni="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===ti.call(File);function ii(e){return Zn&&(e instanceof ArrayBuffer||ei(e))||ri&&e instanceof Blob||ni&&e instanceof File}function si(e,t){if(!e||"object"!=typeof e)return!1;if(Array.isArray(e)){for(let t=0,r=e.length;t<r;t++)if(si(e[t]))return!0;return!1}if(ii(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return si(e.toJSON(),!0);for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&si(e[t]))return!0;return!1}function ai(e){const t=[],r=e.data,n=e;return n.data=oi(r,t),n.attachments=t.length,{packet:n,buffers:t}}function oi(e,t){if(!e)return e;if(ii(e)){const r={_placeholder:!0,num:t.length};return t.push(e),r}if(Array.isArray(e)){const r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=oi(e[n],t);return r}if("object"==typeof e&&!(e instanceof Date)){const r={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=oi(e[n],t));return r}return e}function ci(e,t){return e.data=di(e.data,t),delete e.attachments,e}function di(e,t){if(!e)return e;if(e&&!0===e._placeholder){if("number"==typeof e.num&&e.num>=0&&e.num<t.length)return t[e.num];throw new Error("illegal attachments")}if(Array.isArray(e))for(let r=0;r<e.length;r++)e[r]=di(e[r],t);else if("object"==typeof e)for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=di(e[r],t));return e}const li=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var pi;!function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(pi||(pi={}));function ui(e){return"[object Object]"===Object.prototype.toString.call(e)}class hi extends Cr{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const r=t.type===pi.BINARY_EVENT;r||t.type===pi.BINARY_ACK?(t.type=r?pi.EVENT:pi.ACK,this.reconstructor=new mi(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!ii(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const r={type:Number(e.charAt(0))};if(void 0===pi[r.type])throw new Error("unknown packet type "+r.type);if(r.type===pi.BINARY_EVENT||r.type===pi.BINARY_ACK){const n=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const i=e.substring(n,t);if(i!=Number(i)||"-"!==e.charAt(t))throw new Error("Illegal attachments");r.attachments=Number(i)}if("/"===e.charAt(t+1)){const n=t+1;for(;++t;){if(","===e.charAt(t))break;if(t===e.length)break}r.nsp=e.substring(n,t)}else r.nsp="/";const n=e.charAt(t+1);if(""!==n&&Number(n)==n){const n=t+1;for(;++t;){const r=e.charAt(t);if(null==r||Number(r)!=r){--t;break}if(t===e.length)break}r.id=Number(e.substring(n,t+1))}if(e.charAt(++t)){const n=this.tryParse(e.substr(t));if(!hi.isPayloadValid(r.type,n))throw new Error("invalid payload");r.data=n}return r}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case pi.CONNECT:return ui(t);case pi.DISCONNECT:return void 0===t;case pi.CONNECT_ERROR:return"string"==typeof t||ui(t);case pi.EVENT:case pi.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===li.indexOf(t[0]));case pi.ACK:case pi.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class mi{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=ci(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}var fi=Object.freeze({__proto__:null,Decoder:hi,Encoder:class{constructor(e){this.replacer=e}encode(e){return e.type!==pi.EVENT&&e.type!==pi.ACK||!si(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===pi.EVENT?pi.BINARY_EVENT:pi.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==pi.BINARY_EVENT&&e.type!==pi.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){const t=ai(e),r=this.encodeAsString(t.packet),n=t.buffers;return n.unshift(r),n}},get PacketType(){return pi},protocol:5});function gi(e,t,r){return e.on(t,r),function(){e.off(t,r)}}const vi=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class yi extends Cr{constructor(e,t,r){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,r&&r.auth&&(this.auth=r.auth),this._opts=Object.assign({},r),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[gi(e,"open",this.onopen.bind(this)),gi(e,"packet",this.onpacket.bind(this)),gi(e,"error",this.onerror.bind(this)),gi(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(vi.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const r={type:pi.EVENT,data:t,options:{}};if(r.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++,n=t.pop();this._registerAckCallback(e,n),r.id=e}const n=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return this.flags.volatile&&(!n||!this.connected)||(this.connected?(this.notifyOutgoingListeners(r),this.packet(r)):this.sendBuffer.push(r)),this.flags={},this}_registerAckCallback(e,t){var r;const n=null!==(r=this.flags.timeout)&&void 0!==r?r:this._opts.ackTimeout;if(void 0===n)return void(this.acks[e]=t);const i=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t<this.sendBuffer.length;t++)this.sendBuffer[t].id===e&&this.sendBuffer.splice(t,1);t.call(this,new Error("operation has timed out"))}),n);this.acks[e]=(...e)=>{this.io.clearTimeoutFn(i),t.apply(this,[null,...e])}}emitWithAck(e,...t){const r=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((n,i)=>{t.push(((e,t)=>r?e?i(e):n(t):n(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...n)=>{if(r!==this._queue[0])return;return null!==e?r.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(e)):(this._queue.shift(),t&&t(null,...n)),r.pending=!1,this._drainQueue()})),this._queue.push(r),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||0===this._queue.length)return;const t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:pi.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case pi.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case pi.EVENT:case pi.BINARY_EVENT:this.onevent(e);break;case pi.ACK:case pi.BINARY_ACK:this.onack(e);break;case pi.DISCONNECT:this.ondisconnect();break;case pi.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];null!=e.id&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const r of t)r.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let r=!1;return function(...n){r||(r=!0,t.packet({type:pi.ACK,id:e,data:n}))}}onack(e){const t=this.acks[e.id];"function"==typeof t&&(t.apply(this,e.data),delete this.acks[e.id])}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:pi.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){const t=this._anyOutgoingListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const t=this._anyOutgoingListeners.slice();for(const r of t)r.apply(this,e.data)}}}function _i(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}_i.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-r:e+r}return 0|Math.min(e,this.max)},_i.prototype.reset=function(){this.attempts=0},_i.prototype.setMin=function(e){this.ms=e},_i.prototype.setMax=function(e){this.max=e},_i.prototype.setJitter=function(e){this.jitter=e};class bi extends Cr{constructor(e,t){var r;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,Er(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(r=t.randomizationFactor)&&void 0!==r?r:.5),this.backoff=new _i({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const n=t.parser||fi;this.encoder=new n.Encoder,this.decoder=new n.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new Xn(this.uri,this.opts);const t=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const n=gi(t,"open",(function(){r.onopen(),e&&e()})),i=t=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},s=gi(t,"error",i);if(!1!==this._timeout){const e=this._timeout,r=this.setTimeoutFn((()=>{n(),i(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&r.unref(),this.subs.push((()=>{this.clearTimeoutFn(r)}))}return this.subs.push(n),this.subs.push(s),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(gi(e,"ping",this.onping.bind(this)),gi(e,"data",this.ondata.bind(this)),gi(e,"error",this.onerror.bind(this)),gi(e,"close",this.onclose.bind(this)),gi(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){Gn((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let r=this.nsps[e];return r?this._autoConnect&&!r.active&&r.connect():(r=new yi(this,e,t),this.nsps[e]=r),r}_destroy(e){const t=Object.keys(this.nsps);for(const e of t){if(this.nsps[e].active)return}this._close()}_packet(e){const t=this.encoder.encode(e);for(let r=0;r<t.length;r++)this.engine.write(t[r],e.options)}cleanup(){this.subs.forEach((e=>e())),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn((()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):e.onreconnect()})))}),t);this.opts.autoUnref&&r.unref(),this.subs.push((()=>{this.clearTimeoutFn(r)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const wi={};function Si(e,t){"object"==typeof e&&(t=e,e=void 0);const r=function(e,t="",r){let n=e;r=r||"undefined"!=typeof location&&location,null==e&&(e=r.protocol+"//"+r.host),"string"==typeof e&&("/"===e.charAt(0)&&(e="/"===e.charAt(1)?r.protocol+e:r.host+e),/^(https?|wss?):\/\//.test(e)||(e=void 0!==r?r.protocol+"//"+e:"https://"+e),n=Qn(e)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";const i=-1!==n.host.indexOf(":")?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+i+":"+n.port+t,n.href=n.protocol+"://"+i+(r&&r.port===n.port?"":":"+n.port),n}(e,(t=t||{}).path||"/socket.io"),n=r.source,i=r.id,s=r.path,a=wi[i]&&s in wi[i].nsps;let o;return t.forceNew||t["force new connection"]||!1===t.multiplex||a?o=new bi(n,t):(wi[i]||(wi[i]=new bi(n,t)),o=wi[i]),r.query&&!t.query&&(t.query=r.queryKey),o.socket(r.path,t)}Object.assign(Si,{Manager:bi,Socket:yi,io:Si,connect:Si});let Ci=!0,Ri=!0;function Ti(e,t,r){const n=e.match(t);return n&&n.length>=r&&parseInt(n[r],10)}function Pi(e,t,r){if(!e.RTCPeerConnection)return;const n=e.RTCPeerConnection.prototype,i=n.addEventListener;n.addEventListener=function(e,n){if(e!==t)return i.apply(this,arguments);const s=e=>{const t=r(e);t&&(n.handleEvent?n.handleEvent(t):n(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(n,s),i.apply(this,[e,s])};const s=n.removeEventListener;n.removeEventListener=function(e,r){if(e!==t||!this._eventMap||!this._eventMap[t])return s.apply(this,arguments);if(!this._eventMap[t].has(r))return s.apply(this,arguments);const n=this._eventMap[t].get(r);return this._eventMap[t].delete(r),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,s.apply(this,[e,n])},Object.defineProperty(n,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function ki(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ci=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function Ei(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ri=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function Di(){if("object"==typeof window){if(Ci)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function Oi(e,t){Ri&&console.warn(e+" is deprecated, please use "+t+" instead.")}function Ii(e){return"[object Object]"===Object.prototype.toString.call(e)}function xi(e){return Ii(e)?Object.keys(e).reduce((function(t,r){const n=Ii(e[r]),i=n?xi(e[r]):e[r],s=n&&!Object.keys(i).length;return void 0===i||s?t:Object.assign(t,{[r]:i})}),{}):e}function Mi(e,t,r){t&&!r.has(t.id)&&(r.set(t.id,t),Object.keys(t).forEach((n=>{n.endsWith("Id")?Mi(e,e.get(t[n]),r):n.endsWith("Ids")&&t[n].forEach((t=>{Mi(e,e.get(t),r)}))})))}function ji(e,t,r){const n=r?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;const s=[];return e.forEach((e=>{"track"===e.type&&e.trackIdentifier===t.id&&s.push(e)})),s.forEach((t=>{e.forEach((r=>{r.type===n&&r.trackId===t.id&&Mi(e,r,i)}))})),i}const Li=Di;function Ai(e,t){const r=e&&e.navigator;if(!r.mediaDevices)return;const n=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach((r=>{if("require"===r||"advanced"===r||"mediaSource"===r)return;const n="object"==typeof e[r]?e[r]:{ideal:e[r]};void 0!==n.exact&&"number"==typeof n.exact&&(n.min=n.max=n.exact);const i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==n.ideal){t.optional=t.optional||[];let e={};"number"==typeof n.ideal?(e[i("min",r)]=n.ideal,t.optional.push(e),e={},e[i("max",r)]=n.ideal,t.optional.push(e)):(e[i("",r)]=n.ideal,t.optional.push(e))}void 0!==n.exact&&"number"!=typeof n.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",r)]=n.exact):["min","max"].forEach((e=>{void 0!==n[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,r)]=n[e])}))})),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(t.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=n(e.audio)}if(e&&"object"==typeof e.video){let s=e.video.facingMode;s=s&&("object"==typeof s?s:{ideal:s});const a=t.version<66;if(s&&("user"===s.exact||"environment"===s.exact||"user"===s.ideal||"environment"===s.ideal)&&(!r.mediaDevices.getSupportedConstraints||!r.mediaDevices.getSupportedConstraints().facingMode||a)){let t;if(delete e.video.facingMode,"environment"===s.exact||"environment"===s.ideal?t=["back","rear"]:"user"!==s.exact&&"user"!==s.ideal||(t=["front"]),t)return r.mediaDevices.enumerateDevices().then((r=>{let a=(r=r.filter((e=>"videoinput"===e.kind))).find((e=>t.some((t=>e.label.toLowerCase().includes(t)))));return!a&&r.length&&t.includes("back")&&(a=r[r.length-1]),a&&(e.video.deviceId=s.exact?{exact:a.deviceId}:{ideal:a.deviceId}),e.video=n(e.video),Li("chrome: "+JSON.stringify(e)),i(e)}))}e.video=n(e.video)}return Li("chrome: "+JSON.stringify(e)),i(e)},s=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(r.getUserMedia=function(e,t,n){i(e,(e=>{r.webkitGetUserMedia(e,t,(e=>{n&&n(s(e))}))}))}.bind(r),r.mediaDevices.getUserMedia){const e=r.mediaDevices.getUserMedia.bind(r.mediaDevices);r.mediaDevices.getUserMedia=function(t){return i(t,(t=>e(t).then((e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach((e=>{e.stop()})),new DOMException("","NotFoundError");return e}),(e=>Promise.reject(s(e))))))}}}function Ni(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function Fi(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",(r=>{let n;n=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===r.track.id)):{track:r.track};const i=new Event("track");i.track=r.track,i.receiver=n,i.transceiver={receiver:n},i.streams=[t.stream],this.dispatchEvent(i)})),t.stream.getTracks().forEach((r=>{let n;n=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===r.id)):{track:r};const i=new Event("track");i.track=r,i.receiver=n,i.transceiver={receiver:n},i.streams=[t.stream],this.dispatchEvent(i)}))},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else Pi(e,"track",(e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e)))}function Bi(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const r=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){let i=r.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};const n=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){n.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach((e=>{this._senders.push(t(this,e))}))};const n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach((e=>{const t=this._senders.find((t=>t.track===e));t&&this._senders.splice(this._senders.indexOf(t),1)}))}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function Ui(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,r,n]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof e))return t.apply(this,[]);const i=function(e){const t={};return e.result().forEach((e=>{const r={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach((t=>{r[t]=e.stat(t)})),t[r.id]=r})),t},s=function(e){return new Map(Object.keys(e).map((t=>[t,e[t]])))};if(arguments.length>=2){const n=function(e){r(s(i(e)))};return t.apply(this,[n,e])}return new Promise(((e,r)=>{t.apply(this,[function(t){e(s(i(t)))},r])})).then(r,n)}}function zi(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>ji(t,e.track,!0)))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Pi(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>ji(t,e.track,!1)))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,r,n;return this.getSenders().forEach((r=>{r.track===e&&(t?n=!0:t=r)})),this.getReceivers().forEach((t=>(t.track===e&&(r?n=!0:r=t),t.track===e))),n||t&&r?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():r?r.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function Vi(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((e=>this._shimmedLocalStreams[e][0]))};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){if(!r)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const n=t.apply(this,arguments);return this._shimmedLocalStreams[r.id]?-1===this._shimmedLocalStreams[r.id].indexOf(n)&&this._shimmedLocalStreams[r.id].push(n):this._shimmedLocalStreams[r.id]=[r,n],n};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")}));const t=this.getSenders();r.apply(this,arguments);const n=this.getSenders().filter((e=>-1===t.indexOf(e)));this._shimmedLocalStreams[e.id]=[e].concat(n)};const n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],n.apply(this,arguments)};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach((t=>{const r=this._shimmedLocalStreams[t].indexOf(e);-1!==r&&this._shimmedLocalStreams[t].splice(r,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]})),i.apply(this,arguments)}}function $i(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return Vi(e);const r=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=r.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map((e=>this._reverseStreams[e.id]))};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[t.id]){const r=new e.MediaStream(t.getTracks());this._streams[t.id]=r,this._reverseStreams[r.id]=t,t=r}n.apply(this,[t])};const i=e.RTCPeerConnection.prototype.removeStream;function s(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const n=e._reverseStreams[t],i=e._streams[n.id];r=r.replace(new RegExp(i.id,"g"),n.id)})),new RTCSessionDescription({type:t.type,sdp:r})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,r){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const n=[].slice.call(arguments,1);if(1!==n.length||!n[0].getTracks().find((e=>e===t)))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find((e=>e.track===t)))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const i=this._streams[r.id];if(i)i.addTrack(t),Promise.resolve().then((()=>{this.dispatchEvent(new Event("negotiationneeded"))}));else{const n=new e.MediaStream([t]);this._streams[r.id]=n,this._reverseStreams[n.id]=r,this.addStream(n)}return this.getSenders().find((e=>e.track===t))},["createOffer","createAnswer"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],n={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?r.apply(this,[t=>{const r=s(this,t);e[0].apply(null,[r])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):r.apply(this,arguments).then((e=>s(this,e)))}};e.RTCPeerConnection.prototype[t]=n[t]}));const a=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const n=e._reverseStreams[t],i=e._streams[n.id];r=r.replace(new RegExp(n.id,"g"),i.id)})),new RTCSessionDescription({type:t.type,sdp:r})}(this,arguments[0]),a.apply(this,arguments)):a.apply(this,arguments)};const o=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=o.get.apply(this);return""===e.type?e:s(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach((r=>{this._streams[r].getTracks().find((t=>e.track===t))&&(t=this._streams[r])})),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function qi(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],n={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=n[t]}))}function Gi(e,t){Pi(e,"negotiationneeded",(e=>{const r=e.target;if(!(t.version<72||r.getConfiguration&&"plan-b"===r.getConfiguration().sdpSemantics)||"stable"===r.signalingState)return e}))}var Wi=Object.freeze({__proto__:null,fixNegotiationNeeded:Gi,shimAddTrackRemoveTrack:$i,shimAddTrackRemoveTrackWithNative:Vi,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(r){return t(r).then((t=>{const n=r.video&&r.video.width,i=r.video&&r.video.height,s=r.video&&r.video.frameRate;return r.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:s||3}},n&&(r.video.mandatory.maxWidth=n),i&&(r.video.mandatory.maxHeight=i),e.navigator.mediaDevices.getUserMedia(r)}))}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))},shimGetSendersWithDtmf:Bi,shimGetStats:Ui,shimGetUserMedia:Ai,shimMediaStream:Ni,shimOnTrack:Fi,shimPeerConnection:qi,shimSenderReceiverGetStats:zi});var Ki="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Ji(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Hi(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var r=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})})),r}var Yi={exports:{}};!function(e){var t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((function(e){return e.trim()}))},t.splitSections=function(e){return e.split("\nm=").map((function(e,t){return(t>0?"m="+e:e).trim()+"\r\n"}))},t.getDescription=function(e){var r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){var r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((function(e){return 0===e.indexOf(r)}))},t.parseCandidate=function(e){for(var t,r={foundation:(t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" "))[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]},n=8;n<t.length;n+=2)switch(t[n]){case"raddr":r.relatedAddress=t[n+1];break;case"rport":r.relatedPort=parseInt(t[n+1],10);break;case"tcptype":r.tcpType=t[n+1];break;case"ufrag":r.ufrag=t[n+1],r.usernameFragment=t[n+1];break;default:r[t[n]]=t[n+1]}return r},t.writeCandidate=function(e){var t=[];t.push(e.foundation),t.push(e.component),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);var r=e.type;return t.push("typ"),t.push(r),"host"!==r&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substr(14).split(" ")},t.parseRtpMap=function(e){var t=e.substr(9).split(" "),r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){var t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);var r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\r\n"},t.parseExtmap=function(e){var t=e.substr(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},t.parseFmtp=function(e){for(var t,r={},n=e.substr(e.indexOf(" ")+1).split(";"),i=0;i<n.length;i++)r[(t=n[i].trim().split("="))[0].trim()]=t[1];return r},t.writeFmtp=function(e){var t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){var n=[];Object.keys(e.parameters).forEach((function(t){e.parameters[t]?n.push(t+"="+e.parameters[t]):n.push(t)})),t+="a=fmtp:"+r+" "+n.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){var t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){var t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((function(e){t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){var t=e.indexOf(" "),r={ssrc:parseInt(e.substr(7,t-7),10)},n=e.indexOf(":",t);return n>-1?(r.attribute=e.substr(t+1,n-t-1),r.value=e.substr(n+1)):r.attribute=e.substr(t+1),r},t.parseSsrcGroup=function(e){var t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((function(e){return parseInt(e,10)}))}},t.getMid=function(e){var r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substr(6)},t.parseFingerprint=function(e){var t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1]}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){var r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((function(e){r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){var t=e.substr(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;var t=e.substr(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){var n=t.matchPrefix(e+r,"a=ice-ufrag:")[0],i=t.matchPrefix(e+r,"a=ice-pwd:")[0];return n&&i?{usernameFragment:n.substr(12),password:i.substr(10)}:null},t.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},t.parseRtpParameters=function(e){for(var r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=t.splitLines(e)[0].split(" "),i=3;i<n.length;i++){var s=n[i],a=t.matchPrefix(e,"a=rtpmap:"+s+" ")[0];if(a){var o=t.parseRtpMap(a),c=t.matchPrefix(e,"a=fmtp:"+s+" ");switch(o.parameters=c.length?t.parseFmtp(c[0]):{},o.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+s+" ").map(t.parseRtcpFb),r.codecs.push(o),o.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(o.name.toUpperCase())}}}return t.matchPrefix(e,"a=extmap:").forEach((function(e){r.headerExtensions.push(t.parseExtmap(e))})),r},t.writeRtpDescription=function(e,r){var n="";n+="m="+e+" ",n+=r.codecs.length>0?"9":"0",n+=" UDP/TLS/RTP/SAVPF ",n+=r.codecs.map((function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType})).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((function(e){n+=t.writeRtpMap(e),n+=t.writeFmtp(e),n+=t.writeRtcpFb(e)}));var i=0;return r.codecs.forEach((function(e){e.maxptime>i&&(i=e.maxptime)})),i>0&&(n+="a=maxptime:"+i+"\r\n"),n+="a=rtcp-mux\r\n",r.headerExtensions&&r.headerExtensions.forEach((function(e){n+=t.writeExtmap(e)})),n},t.parseRtpEncodingParameters=function(e){var r,n=[],i=t.parseRtpParameters(e),s=-1!==i.fecMechanisms.indexOf("RED"),a=-1!==i.fecMechanisms.indexOf("ULPFEC"),o=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute})),c=o.length>0&&o[0].ssrc,d=t.matchPrefix(e,"a=ssrc-group:FID").map((function(e){return e.substr(17).split(" ").map((function(e){return parseInt(e,10)}))}));d.length>0&&d[0].length>1&&d[0][0]===c&&(r=d[0][1]),i.codecs.forEach((function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var t={ssrc:c,codecPayloadType:parseInt(e.parameters.apt,10)};c&&r&&(t.rtx={ssrc:r}),n.push(t),s&&((t=JSON.parse(JSON.stringify(t))).fec={ssrc:c,mechanism:a?"red+ulpfec":"red"},n.push(t))}})),0===n.length&&c&&n.push({ssrc:c});var l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substr(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substr(5),10)*.95-16e3:void 0,n.forEach((function(e){e.maxBitrate=l}))),n},t.parseRtcpParameters=function(e){var r={},n=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute}))[0];n&&(r.cname=n.value,r.ssrc=n.ssrc);var i=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=i.length>0,r.compound=0===i.length;var s=t.matchPrefix(e,"a=rtcp-mux");return r.mux=s.length>0,r},t.parseMsid=function(e){var r,n=t.matchPrefix(e,"a=msid:");if(1===n.length)return{stream:(r=n[0].substr(7).split(" "))[0],track:r[1]};var i=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"msid"===e.attribute}));return i.length>0?{stream:(r=i[0].value.split(" "))[0],track:r[1]}:void 0},t.parseSctpDescription=function(e){var r,n=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");i.length>0&&(r=parseInt(i[0].substr(19),10)),isNaN(r)&&(r=65536);var s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substr(12),10),protocol:n.fmt,maxMessageSize:r};if(t.matchPrefix(e,"a=sctpmap:").length>0){var a=t.matchPrefix(e,"a=sctpmap:")[0].substr(10).split(" ");return{port:parseInt(a[0],10),protocol:a[1],maxMessageSize:r}}},t.writeSctpDescription=function(e,t){var r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(e,r,n){var i=void 0!==r?r:2;return"v=0\r\no="+(n||"thisisadapterortc")+" "+(e||t.generateSessionId())+" "+i+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.writeMediaSection=function(e,r,n,i){var s=t.writeRtpDescription(e.kind,r);if(s+=t.writeIceParameters(e.iceGatherer.getLocalParameters()),s+=t.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":"active"),s+="a=mid:"+e.mid+"\r\n",e.direction?s+="a="+e.direction+"\r\n":e.rtpSender&&e.rtpReceiver?s+="a=sendrecv\r\n":e.rtpSender?s+="a=sendonly\r\n":e.rtpReceiver?s+="a=recvonly\r\n":s+="a=inactive\r\n",e.rtpSender){var a="msid:"+i.id+" "+e.rtpSender.track.id+"\r\n";s+="a="+a,s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+a,e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+a,s+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+t.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+t.localCName+"\r\n"),s},t.getDirection=function(e,r){for(var n=t.splitLines(e),i=0;i<n.length;i++)switch(n[i]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[i].substr(2)}return r?t.getDirection(r):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substr(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){var r=t.splitLines(e)[0].substr(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){var r=t.matchPrefix(e,"o=")[0].substr(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;for(var r=t.splitLines(e),n=0;n<r.length;n++)if(r[n].length<2||"="!==r[n].charAt(1))return!1;return!0},e.exports=t}(Yi);var Qi=Yi.exports,Xi=Ji(Qi),Zi=Qi;function es(e,t,r,n,i){var s=Zi.writeRtpDescription(e.kind,t);if(s+=Zi.writeIceParameters(e.iceGatherer.getLocalParameters()),s+=Zi.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===r?"actpass":i||"active"),s+="a=mid:"+e.mid+"\r\n",e.rtpSender&&e.rtpReceiver?s+="a=sendrecv\r\n":e.rtpSender?s+="a=sendonly\r\n":e.rtpReceiver?s+="a=recvonly\r\n":s+="a=inactive\r\n",e.rtpSender){var a=e.rtpSender._initialTrackId||e.rtpSender.track.id;e.rtpSender._initialTrackId=a;var o="msid:"+(n?n.id:"-")+" "+a+"\r\n";s+="a="+o,s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+o,e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+o,s+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+Zi.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+Zi.localCName+"\r\n"),s}function ts(e,t){var r={codecs:[],headerExtensions:[],fecMechanisms:[]},n=function(e,t){e=parseInt(e,10);for(var r=0;r<t.length;r++)if(t[r].payloadType===e||t[r].preferredPayloadType===e)return t[r]},i=function(e,t,r,i){var s=n(e.parameters.apt,r),a=n(t.parameters.apt,i);return s&&a&&s.name.toLowerCase()===a.name.toLowerCase()};return e.codecs.forEach((function(n){for(var s=0;s<t.codecs.length;s++){var a=t.codecs[s];if(n.name.toLowerCase()===a.name.toLowerCase()&&n.clockRate===a.clockRate){if("rtx"===n.name.toLowerCase()&&n.parameters&&a.parameters.apt&&!i(n,a,e.codecs,t.codecs))continue;(a=JSON.parse(JSON.stringify(a))).numChannels=Math.min(n.numChannels,a.numChannels),r.codecs.push(a),a.rtcpFeedback=a.rtcpFeedback.filter((function(e){for(var t=0;t<n.rtcpFeedback.length;t++)if(n.rtcpFeedback[t].type===e.type&&n.rtcpFeedback[t].parameter===e.parameter)return!0;return!1}));break}}})),e.headerExtensions.forEach((function(e){for(var n=0;n<t.headerExtensions.length;n++){var i=t.headerExtensions[n];if(e.uri===i.uri){r.headerExtensions.push(i);break}}})),r}function rs(e,t,r){return-1!=={offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[t][e].indexOf(r)}function ns(e,t){var r=e.getRemoteCandidates().find((function(e){return t.foundation===e.foundation&&t.ip===e.ip&&t.port===e.port&&t.priority===e.priority&&t.protocol===e.protocol&&t.type===e.type}));return r||e.addRemoteCandidate(t),!r}function is(e,t){var r=new Error(t);return r.name=e,r.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[e],r}var ss=function(e,t){function r(t,r){r.addTrack(t),r.dispatchEvent(new e.MediaStreamTrackEvent("addtrack",{track:t}))}function n(t,r,n,i){var s=new Event("track");s.track=r,s.receiver=n,s.transceiver={receiver:n},s.streams=i,e.setTimeout((function(){t._dispatchEvent("track",s)}))}var i=function(r){var n=this,i=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach((function(e){n[e]=i[e].bind(i)})),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",r=JSON.parse(JSON.stringify(r||{})),this.usingBundle="max-bundle"===r.bundlePolicy,"negotiate"===r.rtcpMuxPolicy)throw is("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(r.rtcpMuxPolicy||(r.rtcpMuxPolicy="require"),r.iceTransportPolicy){case"all":case"relay":break;default:r.iceTransportPolicy="all"}switch(r.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:r.bundlePolicy="balanced"}if(r.iceServers=function(e,t){var r=!1;return(e=JSON.parse(JSON.stringify(e))).filter((function(e){if(e&&(e.urls||e.url)){var n=e.urls||e.url;e.url&&!e.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var i="string"==typeof n;return i&&(n=[n]),n=n.filter((function(e){return 0!==e.indexOf("turn:")||-1===e.indexOf("transport=udp")||-1!==e.indexOf("turn:[")||r?0===e.indexOf("stun:")&&t>=14393&&-1===e.indexOf("?transport=udp"):(r=!0,!0)})),delete e.url,e.urls=i?n[0]:n,!!n.length}}))}(r.iceServers||[],t),this._iceGatherers=[],r.iceCandidatePoolSize)for(var s=r.iceCandidatePoolSize;s>0;s--)this._iceGatherers.push(new e.RTCIceGatherer({iceServers:r.iceServers,gatherPolicy:r.iceTransportPolicy}));else r.iceCandidatePoolSize=0;this._config=r,this.transceivers=[],this._sdpSessionId=Zi.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(i.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(i.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),i.prototype.onicecandidate=null,i.prototype.onaddstream=null,i.prototype.ontrack=null,i.prototype.onremovestream=null,i.prototype.onsignalingstatechange=null,i.prototype.oniceconnectionstatechange=null,i.prototype.onconnectionstatechange=null,i.prototype.onicegatheringstatechange=null,i.prototype.onnegotiationneeded=null,i.prototype.ondatachannel=null,i.prototype._dispatchEvent=function(e,t){this._isClosed||(this.dispatchEvent(t),"function"==typeof this["on"+e]&&this["on"+e](t))},i.prototype._emitGatheringStateChange=function(){var e=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",e)},i.prototype.getConfiguration=function(){return this._config},i.prototype.getLocalStreams=function(){return this.localStreams},i.prototype.getRemoteStreams=function(){return this.remoteStreams},i.prototype._createTransceiver=function(e,t){var r=this.transceivers.length>0,n={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:e,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&r)n.iceTransport=this.transceivers[0].iceTransport,n.dtlsTransport=this.transceivers[0].dtlsTransport;else{var i=this._createIceAndDtlsTransports();n.iceTransport=i.iceTransport,n.dtlsTransport=i.dtlsTransport}return t||this.transceivers.push(n),n},i.prototype.addTrack=function(t,r){if(this._isClosed)throw is("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var n;if(this.transceivers.find((function(e){return e.track===t})))throw is("InvalidAccessError","Track already exists.");for(var i=0;i<this.transceivers.length;i++)this.transceivers[i].track||this.transceivers[i].kind!==t.kind||(n=this.transceivers[i]);return n||(n=this._createTransceiver(t.kind)),this._maybeFireNegotiationNeeded(),-1===this.localStreams.indexOf(r)&&this.localStreams.push(r),n.track=t,n.stream=r,n.rtpSender=new e.RTCRtpSender(t,n.dtlsTransport),n.rtpSender},i.prototype.addStream=function(e){var r=this;if(t>=15025)e.getTracks().forEach((function(t){r.addTrack(t,e)}));else{var n=e.clone();e.getTracks().forEach((function(e,t){var r=n.getTracks()[t];e.addEventListener("enabled",(function(e){r.enabled=e.enabled}))})),n.getTracks().forEach((function(e){r.addTrack(e,n)}))}},i.prototype.removeTrack=function(t){if(this._isClosed)throw is("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(t instanceof e.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var r=this.transceivers.find((function(e){return e.rtpSender===t}));if(!r)throw is("InvalidAccessError","Sender was not created by this connection.");var n=r.stream;r.rtpSender.stop(),r.rtpSender=null,r.track=null,r.stream=null,-1===this.transceivers.map((function(e){return e.stream})).indexOf(n)&&this.localStreams.indexOf(n)>-1&&this.localStreams.splice(this.localStreams.indexOf(n),1),this._maybeFireNegotiationNeeded()},i.prototype.removeStream=function(e){var t=this;e.getTracks().forEach((function(e){var r=t.getSenders().find((function(t){return t.track===e}));r&&t.removeTrack(r)}))},i.prototype.getSenders=function(){return this.transceivers.filter((function(e){return!!e.rtpSender})).map((function(e){return e.rtpSender}))},i.prototype.getReceivers=function(){return this.transceivers.filter((function(e){return!!e.rtpReceiver})).map((function(e){return e.rtpReceiver}))},i.prototype._createIceGatherer=function(t,r){var n=this;if(r&&t>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var i=new e.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(i,"state",{value:"new",writable:!0}),this.transceivers[t].bufferedCandidateEvents=[],this.transceivers[t].bufferCandidates=function(e){var r=!e.candidate||0===Object.keys(e.candidate).length;i.state=r?"completed":"gathering",null!==n.transceivers[t].bufferedCandidateEvents&&n.transceivers[t].bufferedCandidateEvents.push(e)},i.addEventListener("localcandidate",this.transceivers[t].bufferCandidates),i},i.prototype._gather=function(t,r){var n=this,i=this.transceivers[r].iceGatherer;if(!i.onlocalcandidate){var s=this.transceivers[r].bufferedCandidateEvents;this.transceivers[r].bufferedCandidateEvents=null,i.removeEventListener("localcandidate",this.transceivers[r].bufferCandidates),i.onlocalcandidate=function(e){if(!(n.usingBundle&&r>0)){var s=new Event("icecandidate");s.candidate={sdpMid:t,sdpMLineIndex:r};var a=e.candidate,o=!a||0===Object.keys(a).length;if(o)"new"!==i.state&&"gathering"!==i.state||(i.state="completed");else{"new"===i.state&&(i.state="gathering"),a.component=1,a.ufrag=i.getLocalParameters().usernameFragment;var c=Zi.writeCandidate(a);s.candidate=Object.assign(s.candidate,Zi.parseCandidate(c)),s.candidate.candidate=c,s.candidate.toJSON=function(){return{candidate:s.candidate.candidate,sdpMid:s.candidate.sdpMid,sdpMLineIndex:s.candidate.sdpMLineIndex,usernameFragment:s.candidate.usernameFragment}}}var d=Zi.getMediaSections(n._localDescription.sdp);d[s.candidate.sdpMLineIndex]+=o?"a=end-of-candidates\r\n":"a="+s.candidate.candidate+"\r\n",n._localDescription.sdp=Zi.getDescription(n._localDescription.sdp)+d.join("");var l=n.transceivers.every((function(e){return e.iceGatherer&&"completed"===e.iceGatherer.state}));"gathering"!==n.iceGatheringState&&(n.iceGatheringState="gathering",n._emitGatheringStateChange()),o||n._dispatchEvent("icecandidate",s),l&&(n._dispatchEvent("icecandidate",new Event("icecandidate")),n.iceGatheringState="complete",n._emitGatheringStateChange())}},e.setTimeout((function(){s.forEach((function(e){i.onlocalcandidate(e)}))}),0)}},i.prototype._createIceAndDtlsTransports=function(){var t=this,r=new e.RTCIceTransport(null);r.onicestatechange=function(){t._updateIceConnectionState(),t._updateConnectionState()};var n=new e.RTCDtlsTransport(r);return n.ondtlsstatechange=function(){t._updateConnectionState()},n.onerror=function(){Object.defineProperty(n,"state",{value:"failed",writable:!0}),t._updateConnectionState()},{iceTransport:r,dtlsTransport:n}},i.prototype._disposeIceAndDtlsTransports=function(e){var t=this.transceivers[e].iceGatherer;t&&(delete t.onlocalcandidate,delete this.transceivers[e].iceGatherer);var r=this.transceivers[e].iceTransport;r&&(delete r.onicestatechange,delete this.transceivers[e].iceTransport);var n=this.transceivers[e].dtlsTransport;n&&(delete n.ondtlsstatechange,delete n.onerror,delete this.transceivers[e].dtlsTransport)},i.prototype._transceive=function(e,r,n){var i=ts(e.localCapabilities,e.remoteCapabilities);r&&e.rtpSender&&(i.encodings=e.sendEncodingParameters,i.rtcp={cname:Zi.localCName,compound:e.rtcpParameters.compound},e.recvEncodingParameters.length&&(i.rtcp.ssrc=e.recvEncodingParameters[0].ssrc),e.rtpSender.send(i)),n&&e.rtpReceiver&&i.codecs.length>0&&("video"===e.kind&&e.recvEncodingParameters&&t<15019&&e.recvEncodingParameters.forEach((function(e){delete e.rtx})),e.recvEncodingParameters.length?i.encodings=e.recvEncodingParameters:i.encodings=[{}],i.rtcp={compound:e.rtcpParameters.compound},e.rtcpParameters.cname&&(i.rtcp.cname=e.rtcpParameters.cname),e.sendEncodingParameters.length&&(i.rtcp.ssrc=e.sendEncodingParameters[0].ssrc),e.rtpReceiver.receive(i))},i.prototype.setLocalDescription=function(e){var t,r,n=this;if(-1===["offer","answer"].indexOf(e.type))return Promise.reject(is("TypeError",'Unsupported type "'+e.type+'"'));if(!rs("setLocalDescription",e.type,n.signalingState)||n._isClosed)return Promise.reject(is("InvalidStateError","Can not set local "+e.type+" in state "+n.signalingState));if("offer"===e.type)t=Zi.splitSections(e.sdp),r=t.shift(),t.forEach((function(e,t){var r=Zi.parseRtpParameters(e);n.transceivers[t].localCapabilities=r})),n.transceivers.forEach((function(e,t){n._gather(e.mid,t)}));else if("answer"===e.type){t=Zi.splitSections(n._remoteDescription.sdp),r=t.shift();var i=Zi.matchPrefix(r,"a=ice-lite").length>0;t.forEach((function(e,t){var s=n.transceivers[t],a=s.iceGatherer,o=s.iceTransport,c=s.dtlsTransport,d=s.localCapabilities,l=s.remoteCapabilities;if(!(Zi.isRejected(e)&&0===Zi.matchPrefix(e,"a=bundle-only").length)&&!s.rejected){var p=Zi.getIceParameters(e,r),u=Zi.getDtlsParameters(e,r);i&&(u.role="server"),n.usingBundle&&0!==t||(n._gather(s.mid,t),"new"===o.state&&o.start(a,p,i?"controlling":"controlled"),"new"===c.state&&c.start(u));var h=ts(d,l);n._transceive(s,h.codecs.length>0,!1)}}))}return n._localDescription={type:e.type,sdp:e.sdp},"offer"===e.type?n._updateSignalingState("have-local-offer"):n._updateSignalingState("stable"),Promise.resolve()},i.prototype.setRemoteDescription=function(i){var s=this;if(-1===["offer","answer"].indexOf(i.type))return Promise.reject(is("TypeError",'Unsupported type "'+i.type+'"'));if(!rs("setRemoteDescription",i.type,s.signalingState)||s._isClosed)return Promise.reject(is("InvalidStateError","Can not set remote "+i.type+" in state "+s.signalingState));var a={};s.remoteStreams.forEach((function(e){a[e.id]=e}));var o=[],c=Zi.splitSections(i.sdp),d=c.shift(),l=Zi.matchPrefix(d,"a=ice-lite").length>0,p=Zi.matchPrefix(d,"a=group:BUNDLE ").length>0;s.usingBundle=p;var u=Zi.matchPrefix(d,"a=ice-options:")[0];return s.canTrickleIceCandidates=!!u&&u.substr(14).split(" ").indexOf("trickle")>=0,c.forEach((function(n,c){var u=Zi.splitLines(n),h=Zi.getKind(n),m=Zi.isRejected(n)&&0===Zi.matchPrefix(n,"a=bundle-only").length,f=u[0].substr(2).split(" ")[2],g=Zi.getDirection(n,d),v=Zi.parseMsid(n),y=Zi.getMid(n)||Zi.generateIdentifier();if(m||"application"===h&&("DTLS/SCTP"===f||"UDP/DTLS/SCTP"===f))s.transceivers[c]={mid:y,kind:h,protocol:f,rejected:!0};else{var _,b,w,S,C,R,T,P,k;!m&&s.transceivers[c]&&s.transceivers[c].rejected&&(s.transceivers[c]=s._createTransceiver(h,!0));var E,D,O=Zi.parseRtpParameters(n);m||(E=Zi.getIceParameters(n,d),(D=Zi.getDtlsParameters(n,d)).role="client"),T=Zi.parseRtpEncodingParameters(n);var I=Zi.parseRtcpParameters(n),x=Zi.matchPrefix(n,"a=end-of-candidates",d).length>0,M=Zi.matchPrefix(n,"a=candidate:").map((function(e){return Zi.parseCandidate(e)})).filter((function(e){return 1===e.component}));if(("offer"===i.type||"answer"===i.type)&&!m&&p&&c>0&&s.transceivers[c]&&(s._disposeIceAndDtlsTransports(c),s.transceivers[c].iceGatherer=s.transceivers[0].iceGatherer,s.transceivers[c].iceTransport=s.transceivers[0].iceTransport,s.transceivers[c].dtlsTransport=s.transceivers[0].dtlsTransport,s.transceivers[c].rtpSender&&s.transceivers[c].rtpSender.setTransport(s.transceivers[0].dtlsTransport),s.transceivers[c].rtpReceiver&&s.transceivers[c].rtpReceiver.setTransport(s.transceivers[0].dtlsTransport)),"offer"!==i.type||m){if("answer"===i.type&&!m){b=(_=s.transceivers[c]).iceGatherer,w=_.iceTransport,S=_.dtlsTransport,C=_.rtpReceiver,R=_.sendEncodingParameters,P=_.localCapabilities,s.transceivers[c].recvEncodingParameters=T,s.transceivers[c].remoteCapabilities=O,s.transceivers[c].rtcpParameters=I,M.length&&"new"===w.state&&(!l&&!x||p&&0!==c?M.forEach((function(e){ns(_.iceTransport,e)})):w.setRemoteCandidates(M)),p&&0!==c||("new"===w.state&&w.start(b,E,"controlling"),"new"===S.state&&S.start(D)),!ts(_.localCapabilities,_.remoteCapabilities).codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&_.sendEncodingParameters[0].rtx&&delete _.sendEncodingParameters[0].rtx,s._transceive(_,"sendrecv"===g||"recvonly"===g,"sendrecv"===g||"sendonly"===g),!C||"sendrecv"!==g&&"sendonly"!==g?delete _.rtpReceiver:(k=C.track,v?(a[v.stream]||(a[v.stream]=new e.MediaStream),r(k,a[v.stream]),o.push([k,C,a[v.stream]])):(a.default||(a.default=new e.MediaStream),r(k,a.default),o.push([k,C,a.default])))}}else{(_=s.transceivers[c]||s._createTransceiver(h)).mid=y,_.iceGatherer||(_.iceGatherer=s._createIceGatherer(c,p)),M.length&&"new"===_.iceTransport.state&&(!x||p&&0!==c?M.forEach((function(e){ns(_.iceTransport,e)})):_.iceTransport.setRemoteCandidates(M)),P=e.RTCRtpReceiver.getCapabilities(h),t<15019&&(P.codecs=P.codecs.filter((function(e){return"rtx"!==e.name}))),R=_.sendEncodingParameters||[{ssrc:1001*(2*c+2)}];var j,L=!1;if("sendrecv"===g||"sendonly"===g){if(L=!_.rtpReceiver,C=_.rtpReceiver||new e.RTCRtpReceiver(_.dtlsTransport,h),L)k=C.track,v&&"-"===v.stream||(v?(a[v.stream]||(a[v.stream]=new e.MediaStream,Object.defineProperty(a[v.stream],"id",{get:function(){return v.stream}})),Object.defineProperty(k,"id",{get:function(){return v.track}}),j=a[v.stream]):(a.default||(a.default=new e.MediaStream),j=a.default)),j&&(r(k,j),_.associatedRemoteMediaStreams.push(j)),o.push([k,C,j])}else _.rtpReceiver&&_.rtpReceiver.track&&(_.associatedRemoteMediaStreams.forEach((function(t){var r=t.getTracks().find((function(e){return e.id===_.rtpReceiver.track.id}));r&&function(t,r){r.removeTrack(t),r.dispatchEvent(new e.MediaStreamTrackEvent("removetrack",{track:t}))}(r,t)})),_.associatedRemoteMediaStreams=[]);_.localCapabilities=P,_.remoteCapabilities=O,_.rtpReceiver=C,_.rtcpParameters=I,_.sendEncodingParameters=R,_.recvEncodingParameters=T,s._transceive(s.transceivers[c],!1,L)}}})),void 0===s._dtlsRole&&(s._dtlsRole="offer"===i.type?"active":"passive"),s._remoteDescription={type:i.type,sdp:i.sdp},"offer"===i.type?s._updateSignalingState("have-remote-offer"):s._updateSignalingState("stable"),Object.keys(a).forEach((function(t){var r=a[t];if(r.getTracks().length){if(-1===s.remoteStreams.indexOf(r)){s.remoteStreams.push(r);var i=new Event("addstream");i.stream=r,e.setTimeout((function(){s._dispatchEvent("addstream",i)}))}o.forEach((function(e){var t=e[0],i=e[1];r.id===e[2].id&&n(s,t,i,[r])}))}})),o.forEach((function(e){e[2]||n(s,e[0],e[1],[])})),e.setTimeout((function(){s&&s.transceivers&&s.transceivers.forEach((function(e){e.iceTransport&&"new"===e.iceTransport.state&&e.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),e.iceTransport.addRemoteCandidate({}))}))}),4e3),Promise.resolve()},i.prototype.close=function(){this.transceivers.forEach((function(e){e.iceTransport&&e.iceTransport.stop(),e.dtlsTransport&&e.dtlsTransport.stop(),e.rtpSender&&e.rtpSender.stop(),e.rtpReceiver&&e.rtpReceiver.stop()})),this._isClosed=!0,this._updateSignalingState("closed")},i.prototype._updateSignalingState=function(e){this.signalingState=e;var t=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",t)},i.prototype._maybeFireNegotiationNeeded=function(){var t=this;"stable"===this.signalingState&&!0!==this.needNegotiation&&(this.needNegotiation=!0,e.setTimeout((function(){if(t.needNegotiation){t.needNegotiation=!1;var e=new Event("negotiationneeded");t._dispatchEvent("negotiationneeded",e)}}),0))},i.prototype._updateIceConnectionState=function(){var e,t={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&!e.rejected&&t[e.iceTransport.state]++})),e="new",t.failed>0?e="failed":t.checking>0?e="checking":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0?e="connected":t.completed>0&&(e="completed"),e!==this.iceConnectionState){this.iceConnectionState=e;var r=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",r)}},i.prototype._updateConnectionState=function(){var e,t={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&e.dtlsTransport&&!e.rejected&&(t[e.iceTransport.state]++,t[e.dtlsTransport.state]++)})),t.connected+=t.completed,e="new",t.failed>0?e="failed":t.connecting>0?e="connecting":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0&&(e="connected"),e!==this.connectionState){this.connectionState=e;var r=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",r)}},i.prototype.createOffer=function(){var r=this;if(r._isClosed)return Promise.reject(is("InvalidStateError","Can not call createOffer after close"));var n=r.transceivers.filter((function(e){return"audio"===e.kind})).length,i=r.transceivers.filter((function(e){return"video"===e.kind})).length,s=arguments[0];if(s){if(s.mandatory||s.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");void 0!==s.offerToReceiveAudio&&(n=!0===s.offerToReceiveAudio?1:!1===s.offerToReceiveAudio?0:s.offerToReceiveAudio),void 0!==s.offerToReceiveVideo&&(i=!0===s.offerToReceiveVideo?1:!1===s.offerToReceiveVideo?0:s.offerToReceiveVideo)}for(r.transceivers.forEach((function(e){"audio"===e.kind?--n<0&&(e.wantReceive=!1):"video"===e.kind&&--i<0&&(e.wantReceive=!1)}));n>0||i>0;)n>0&&(r._createTransceiver("audio"),n--),i>0&&(r._createTransceiver("video"),i--);var a=Zi.writeSessionBoilerplate(r._sdpSessionId,r._sdpSessionVersion++);r.transceivers.forEach((function(n,i){var s=n.track,a=n.kind,o=n.mid||Zi.generateIdentifier();n.mid=o,n.iceGatherer||(n.iceGatherer=r._createIceGatherer(i,r.usingBundle));var c=e.RTCRtpSender.getCapabilities(a);t<15019&&(c.codecs=c.codecs.filter((function(e){return"rtx"!==e.name}))),c.codecs.forEach((function(e){"H264"===e.name&&void 0===e.parameters["level-asymmetry-allowed"]&&(e.parameters["level-asymmetry-allowed"]="1"),n.remoteCapabilities&&n.remoteCapabilities.codecs&&n.remoteCapabilities.codecs.forEach((function(t){e.name.toLowerCase()===t.name.toLowerCase()&&e.clockRate===t.clockRate&&(e.preferredPayloadType=t.payloadType)}))})),c.headerExtensions.forEach((function(e){(n.remoteCapabilities&&n.remoteCapabilities.headerExtensions||[]).forEach((function(t){e.uri===t.uri&&(e.id=t.id)}))}));var d=n.sendEncodingParameters||[{ssrc:1001*(2*i+1)}];s&&t>=15019&&"video"===a&&!d[0].rtx&&(d[0].rtx={ssrc:d[0].ssrc+1}),n.wantReceive&&(n.rtpReceiver=new e.RTCRtpReceiver(n.dtlsTransport,a)),n.localCapabilities=c,n.sendEncodingParameters=d})),"max-compat"!==r._config.bundlePolicy&&(a+="a=group:BUNDLE "+r.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),a+="a=ice-options:trickle\r\n",r.transceivers.forEach((function(e,t){a+=es(e,e.localCapabilities,"offer",e.stream,r._dtlsRole),a+="a=rtcp-rsize\r\n",!e.iceGatherer||"new"===r.iceGatheringState||0!==t&&r.usingBundle||(e.iceGatherer.getLocalCandidates().forEach((function(e){e.component=1,a+="a="+Zi.writeCandidate(e)+"\r\n"})),"completed"===e.iceGatherer.state&&(a+="a=end-of-candidates\r\n"))}));var o=new e.RTCSessionDescription({type:"offer",sdp:a});return Promise.resolve(o)},i.prototype.createAnswer=function(){var r=this;if(r._isClosed)return Promise.reject(is("InvalidStateError","Can not call createAnswer after close"));if("have-remote-offer"!==r.signalingState&&"have-local-pranswer"!==r.signalingState)return Promise.reject(is("InvalidStateError","Can not call createAnswer in signalingState "+r.signalingState));var n=Zi.writeSessionBoilerplate(r._sdpSessionId,r._sdpSessionVersion++);r.usingBundle&&(n+="a=group:BUNDLE "+r.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),n+="a=ice-options:trickle\r\n";var i=Zi.getMediaSections(r._remoteDescription.sdp).length;r.transceivers.forEach((function(e,s){if(!(s+1>i)){if(e.rejected)return"application"===e.kind?"DTLS/SCTP"===e.protocol?n+="m=application 0 DTLS/SCTP 5000\r\n":n+="m=application 0 "+e.protocol+" webrtc-datachannel\r\n":"audio"===e.kind?n+="m=audio 0 UDP/TLS/RTP/SAVPF 0\r\na=rtpmap:0 PCMU/8000\r\n":"video"===e.kind&&(n+="m=video 0 UDP/TLS/RTP/SAVPF 120\r\na=rtpmap:120 VP8/90000\r\n"),void(n+="c=IN IP4 0.0.0.0\r\na=inactive\r\na=mid:"+e.mid+"\r\n");var a;if(e.stream)"audio"===e.kind?a=e.stream.getAudioTracks()[0]:"video"===e.kind&&(a=e.stream.getVideoTracks()[0]),a&&t>=15019&&"video"===e.kind&&!e.sendEncodingParameters[0].rtx&&(e.sendEncodingParameters[0].rtx={ssrc:e.sendEncodingParameters[0].ssrc+1});var o=ts(e.localCapabilities,e.remoteCapabilities);!o.codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&e.sendEncodingParameters[0].rtx&&delete e.sendEncodingParameters[0].rtx,n+=es(e,o,"answer",e.stream,r._dtlsRole),e.rtcpParameters&&e.rtcpParameters.reducedSize&&(n+="a=rtcp-rsize\r\n")}}));var s=new e.RTCSessionDescription({type:"answer",sdp:n});return Promise.resolve(s)},i.prototype.addIceCandidate=function(e){var t,r=this;return e&&void 0===e.sdpMLineIndex&&!e.sdpMid?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise((function(n,i){if(!r._remoteDescription)return i(is("InvalidStateError","Can not add ICE candidate without a remote description"));if(e&&""!==e.candidate){var s=e.sdpMLineIndex;if(e.sdpMid)for(var a=0;a<r.transceivers.length;a++)if(r.transceivers[a].mid===e.sdpMid){s=a;break}var o=r.transceivers[s];if(!o)return i(is("OperationError","Can not add ICE candidate"));if(o.rejected)return n();var c=Object.keys(e.candidate).length>0?Zi.parseCandidate(e.candidate):{};if("tcp"===c.protocol&&(0===c.port||9===c.port))return n();if(c.component&&1!==c.component)return n();if((0===s||s>0&&o.iceTransport!==r.transceivers[0].iceTransport)&&!ns(o.iceTransport,c))return i(is("OperationError","Can not add ICE candidate"));var d=e.candidate.trim();0===d.indexOf("a=")&&(d=d.substr(2)),(t=Zi.getMediaSections(r._remoteDescription.sdp))[s]+="a="+(c.type?d:"end-of-candidates")+"\r\n",r._remoteDescription.sdp=Zi.getDescription(r._remoteDescription.sdp)+t.join("")}else for(var l=0;l<r.transceivers.length&&(r.transceivers[l].rejected||(r.transceivers[l].iceTransport.addRemoteCandidate({}),(t=Zi.getMediaSections(r._remoteDescription.sdp))[l]+="a=end-of-candidates\r\n",r._remoteDescription.sdp=Zi.getDescription(r._remoteDescription.sdp)+t.join(""),!r.usingBundle));l++);n()}))},i.prototype.getStats=function(t){if(t&&t instanceof e.MediaStreamTrack){var r=null;if(this.transceivers.forEach((function(e){e.rtpSender&&e.rtpSender.track===t?r=e.rtpSender:e.rtpReceiver&&e.rtpReceiver.track===t&&(r=e.rtpReceiver)})),!r)throw is("InvalidAccessError","Invalid selector.");return r.getStats()}var n=[];return this.transceivers.forEach((function(e){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach((function(t){e[t]&&n.push(e[t].getStats())}))})),Promise.all(n).then((function(e){var t=new Map;return e.forEach((function(e){e.forEach((function(e){t.set(e.id,e)}))})),t}))};["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"].forEach((function(t){var r=e[t];if(r&&r.prototype&&r.prototype.getStats){var n=r.prototype.getStats;r.prototype.getStats=function(){return n.apply(this).then((function(e){var t=new Map;return Object.keys(e).forEach((function(r){var n;e[r].type={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[(n=e[r]).type]||n.type,t.set(r,e[r])})),t}))}}}));var s=["createOffer","createAnswer"];return s.forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[0]||"function"==typeof e[1]?t.apply(this,[arguments[2]]).then((function(t){"function"==typeof e[0]&&e[0].apply(null,[t])}),(function(t){"function"==typeof e[1]&&e[1].apply(null,[t])})):t.apply(this,arguments)}})),(s=["setLocalDescription","setRemoteDescription","addIceCandidate"]).forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[1]||"function"==typeof e[2]?t.apply(this,arguments).then((function(){"function"==typeof e[1]&&e[1].apply(null)}),(function(t){"function"==typeof e[2]&&e[2].apply(null,[t])})):t.apply(this,arguments)}})),["getStats"].forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[1]?t.apply(this,arguments).then((function(){"function"==typeof e[1]&&e[1].apply(null)})):t.apply(this,arguments)}})),i},as=Ji(ss);function os(e){const t=e&&e.navigator,r=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(e){return r(e).catch((e=>Promise.reject(function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString(){return this.name}}}(e))))}}function cs(e){"getDisplayMedia"in e.navigator&&e.navigator.mediaDevices&&(e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=e.navigator.getDisplayMedia.bind(e.navigator)))}function ds(e,t){if(e.RTCIceGatherer&&(e.RTCIceCandidate||(e.RTCIceCandidate=function(e){return e}),e.RTCSessionDescription||(e.RTCSessionDescription=function(e){return e}),t.version<15025)){const t=Object.getOwnPropertyDescriptor(e.MediaStreamTrack.prototype,"enabled");Object.defineProperty(e.MediaStreamTrack.prototype,"enabled",{set(e){t.set.call(this,e);const r=new Event("enabled");r.enabled=e,this.dispatchEvent(r)}})}e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)&&Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=new e.RTCDtmfSender(this):"video"===this.track.kind&&(this._dtmf=null)),this._dtmf}}),e.RTCDtmfSender&&!e.RTCDTMFSender&&(e.RTCDTMFSender=e.RTCDtmfSender);const r=as(e,t.version);e.RTCPeerConnection=function(e){return e&&e.iceServers&&(e.iceServers=function(e,t){let r=!1;return(e=JSON.parse(JSON.stringify(e))).filter((e=>{if(e&&(e.urls||e.url)){let t=e.urls||e.url;e.url&&!e.urls&&Oi("RTCIceServer.url","RTCIceServer.urls");const n="string"==typeof t;return n&&(t=[t]),t=t.filter((e=>{if(0===e.indexOf("stun:"))return!1;const t=e.startsWith("turn")&&!e.startsWith("turn:[")&&e.includes("transport=udp");return t&&!r?(r=!0,!0):t&&!r})),delete e.url,e.urls=n?t[0]:t,!!t.length}}))}(e.iceServers,t.version),Di("ICE servers after filtering:",e.iceServers)),new r(e)},e.RTCPeerConnection.prototype=r.prototype}function ls(e){e.RTCRtpSender&&!("replaceTrack"in e.RTCRtpSender.prototype)&&(e.RTCRtpSender.prototype.replaceTrack=e.RTCRtpSender.prototype.setTrack)}var ps=Object.freeze({__proto__:null,shimGetDisplayMedia:cs,shimGetUserMedia:os,shimPeerConnection:ds,shimReplaceTrack:ls});function us(e,t){const r=e&&e.navigator,n=e&&e.MediaStreamTrack;if(r.getUserMedia=function(e,t,n){Oi("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),r.mediaDevices.getUserMedia(e).then(t,n)},!(t.version>55&&"autoGainControl"in r.mediaDevices.getSupportedConstraints())){const e=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])},t=r.mediaDevices.getUserMedia.bind(r.mediaDevices);if(r.mediaDevices.getUserMedia=function(r){return"object"==typeof r&&"object"==typeof r.audio&&(r=JSON.parse(JSON.stringify(r)),e(r.audio,"autoGainControl","mozAutoGainControl"),e(r.audio,"noiseSuppression","mozNoiseSuppression")),t(r)},n&&n.prototype.getSettings){const t=n.prototype.getSettings;n.prototype.getSettings=function(){const r=t.apply(this,arguments);return e(r,"mozAutoGainControl","autoGainControl"),e(r,"mozNoiseSuppression","noiseSuppression"),r}}if(n&&n.prototype.applyConstraints){const t=n.prototype.applyConstraints;n.prototype.applyConstraints=function(r){return"audio"===this.kind&&"object"==typeof r&&(r=JSON.parse(JSON.stringify(r)),e(r,"autoGainControl","mozAutoGainControl"),e(r,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[r])}}}}function hs(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function ms(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],n={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=n[t]}));const r={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},n=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,i,s]=arguments;return n.apply(this,[e||null]).then((e=>{if(t.version<53&&!i)try{e.forEach((e=>{e.type=r[e.type]||e.type}))}catch(t){if("TypeError"!==t.name)throw t;e.forEach(((t,n)=>{e.set(n,Object.assign({},t,{type:r[t.type]||t.type}))}))}return e})).then(i,s)}}function fs(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function gs(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Pi(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function vs(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){Oi("removeStream","removeTrack"),this.getSenders().forEach((t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)}))})}function ys(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function _s(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const e=arguments[1],r=e&&"sendEncodings"in e;r&&e.sendEncodings.forEach((e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));const n=t.apply(this,arguments);if(r){const{sender:t}=n,r=t.getParameters();(!("encodings"in r)||1===r.encodings.length&&0===Object.keys(r.encodings[0]).length)&&(r.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(r).then((()=>{delete t.sendEncodings})).catch((()=>{delete t.sendEncodings}))))}return n})}function bs(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function ws(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function Ss(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}var Cs=Object.freeze({__proto__:null,shimAddTransceiver:_s,shimCreateAnswer:Ss,shimCreateOffer:ws,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(r){if(!r||!r.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===r.video?r.video={mediaSource:t}:r.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(r)})},shimGetParameters:bs,shimGetUserMedia:us,shimOnTrack:hs,shimPeerConnection:ms,shimRTCDataChannel:ys,shimReceiverGetStats:gs,shimRemoveStream:vs,shimSenderGetStats:fs});function Rs(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach((r=>t.call(this,r,e))),e.getVideoTracks().forEach((r=>t.call(this,r,e)))},e.RTCPeerConnection.prototype.addTrack=function(e,...r){return r&&r.forEach((e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]})),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const r=e.getTracks();this.getSenders().forEach((e=>{r.includes(e.track)&&this.removeTrack(e)}))})}}function Ts(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach((e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)}))})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach((t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const r=new Event("addstream");r.stream=t,e.dispatchEvent(r)}))}),t.apply(e,arguments)}}}function Ps(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,r=t.createOffer,n=t.createAnswer,i=t.setLocalDescription,s=t.setRemoteDescription,a=t.addIceCandidate;t.createOffer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){const r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i};let o=function(e,t,r){const n=i.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n};t.setLocalDescription=o,o=function(e,t,r){const n=s.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n},t.setRemoteDescription=o,o=function(e,t,r){const n=a.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n},t.addIceCandidate=o}function ks(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,r=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>r(Es(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,r,n){t.mediaDevices.getUserMedia(e).then(r,n)}.bind(t))}function Es(e){return e&&void 0!==e.video?Object.assign({},e,{video:xi(e.video)}):e}function Ds(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,r){if(e&&e.iceServers){const t=[];for(let r=0;r<e.iceServers.length;r++){let n=e.iceServers[r];!n.hasOwnProperty("urls")&&n.hasOwnProperty("url")?(Oi("RTCIceServer.url","RTCIceServer.urls"),n=JSON.parse(JSON.stringify(n)),n.urls=n.url,delete n.url,t.push(n)):t.push(e.iceServers[r])}e.iceServers=t}return new t(e,r)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in t&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get:()=>t.generateCertificate})}function Os(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Is(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find((e=>"audio"===e.receiver.track.kind));!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio"),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const r=this.getTransceivers().find((e=>"video"===e.receiver.track.kind));!1===e.offerToReceiveVideo&&r?"sendrecv"===r.direction?r.setDirection?r.setDirection("sendonly"):r.direction="sendonly":"recvonly"===r.direction&&(r.setDirection?r.setDirection("inactive"):r.direction="inactive"):!0!==e.offerToReceiveVideo||r||this.addTransceiver("video")}return t.apply(this,arguments)}}function xs(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var Ms=Object.freeze({__proto__:null,shimAudioContext:xs,shimCallbacksAPI:Ps,shimConstraints:Es,shimCreateOfferLegacy:Is,shimGetUserMedia:ks,shimLocalStreamsAPI:Rs,shimRTCIceServerUrls:Ds,shimRemoteStreamsAPI:Ts,shimTrackEventTransceiver:Os});function js(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){const r=new t(e),n=Xi.parseCandidate(e.candidate),i=Object.assign(r,n);return i.toJSON=function(){return{candidate:i.candidate,sdpMid:i.sdpMid,sdpMLineIndex:i.sdpMLineIndex,usernameFragment:i.usernameFragment}},i}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,Pi(e,"icecandidate",(t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t)))}function Ls(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=Xi.splitSections(e.sdp);return t.shift(),t.some((e=>{const t=Xi.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")}))}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const r=parseInt(t[1],10);return r!=r?-1:r}(arguments[0]),r=function(e){let r=65536;return"firefox"===t.browser&&(r=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),r}(e),n=function(e,r){let n=65536;"firefox"===t.browser&&57===t.version&&(n=65535);const i=Xi.matchPrefix(e.sdp,"a=max-message-size:");return i.length>0?n=parseInt(i[0].substr(19),10):"firefox"===t.browser&&-1!==r&&(n=2147483637),n}(arguments[0],e);let i;i=0===r&&0===n?Number.POSITIVE_INFINITY:0===r||0===n?Math.max(r,n):Math.min(r,n);const s={};Object.defineProperty(s,"maxMessageSize",{get:()=>i}),this._sctp=s}return r.apply(this,arguments)}}function As(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const r=e.send;e.send=function(){const n=arguments[0],i=n.length||n.size||n.byteLength;if("open"===e.readyState&&t.sctp&&i>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return r.apply(e,arguments)}}const r=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=r.apply(this,arguments);return t(e,this),e},Pi(e,"datachannel",(e=>(t(e.channel,e.target),e)))}function Ns(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((e=>{const r=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const r=new Event("connectionstatechange",e);t.dispatchEvent(r)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),r.apply(this,arguments)}}))}function Fs(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t.version>=605)return;const r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){const r=t.sdp.split("\n").filter((e=>"a=extmap-allow-mixed"!==e.trim())).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:r}):t.sdp=r}return r.apply(this,arguments)}}function Bs(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const r=e.RTCPeerConnection.prototype.addIceCandidate;r&&0!==r.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():r.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}var Us=Object.freeze({__proto__:null,removeExtmapAllowMixed:Fs,shimAddIceCandidateNullOrEmpty:Bs,shimConnectionState:Ns,shimMaxMessageSize:Ls,shimRTCIceCandidate:js,shimSendThrowTypeError:As});const zs=function({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const r=Di,n=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator)return t.browser="Not a browser.",t;const{navigator:r}=e;if(r.mozGetUserMedia)t.browser="firefox",t.version=Ti(r.userAgent,/Firefox\/(\d+)\./,1);else if(r.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser="chrome",t.version=Ti(r.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(r.mediaDevices&&r.userAgent.match(/Edge\/(\d+).(\d+)$/))t.browser="edge",t.version=Ti(r.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!e.RTCPeerConnection||!r.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=Ti(r.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype}return t}(e),i={browserDetails:n,commonShim:Us,extractVersion:Ti,disableLog:ki,disableWarnings:Ei};switch(n.browser){case"chrome":if(!Wi||!qi||!t.shimChrome)return r("Chrome shim is not included in this adapter release."),i;if(null===n.version)return r("Chrome shim can not determine version, not shimming."),i;r("adapter.js shimming chrome."),i.browserShim=Wi,Bs(e,n),Ai(e,n),Ni(e),qi(e,n),Fi(e),$i(e,n),Bi(e),Ui(e),zi(e),Gi(e,n),js(e),Ns(e),Ls(e,n),As(e),Fs(e,n);break;case"firefox":if(!Cs||!ms||!t.shimFirefox)return r("Firefox shim is not included in this adapter release."),i;r("adapter.js shimming firefox."),i.browserShim=Cs,Bs(e,n),us(e,n),ms(e,n),hs(e),vs(e),fs(e),gs(e),ys(e),_s(e),bs(e),ws(e),Ss(e),js(e),Ns(e),Ls(e,n),As(e);break;case"edge":if(!ps||!ds||!t.shimEdge)return r("MS edge shim is not included in this adapter release."),i;r("adapter.js shimming edge."),i.browserShim=ps,os(e),cs(e),ds(e,n),ls(e),Ls(e,n),As(e);break;case"safari":if(!Ms||!t.shimSafari)return r("Safari shim is not included in this adapter release."),i;r("adapter.js shimming safari."),i.browserShim=Ms,Bs(e,n),Ds(e),Is(e),Ps(e),Rs(e),Ts(e),Os(e),ks(e),xs(e),js(e),Ls(e,n),As(e),Fs(e,n);break;default:r("Unsupported browser!")}return i}({window:"undefined"==typeof window?void 0:window});class Vs{constructor(e,t){this._socket=Si(e,{path:"/protocol/socket.io/v4",randomizationFactor:.5,reconnectionDelay:250,reconnectionDelayMax:5e3,timeout:5e3,transports:["websocket"],withCredentials:!0,...t}),this._socket.io.on("reconnect",(()=>{this._socket.sendBuffer=[]})),this._socket.io.on("reconnect_attempt",(()=>{this._wasConnectedUsingWebsocket?(this._socket.io.opts.transports=["websocket"],"safari"!==zs.browserDetails.browser&&delete this._wasConnectedUsingWebsocket):this._socket.io.opts.transports=["websocket","polling"]})),this._socket.on("connect",(()=>{"websocket"===this.getTransport()&&(this._wasConnectedUsingWebsocket=!0)}))}connect(){this.isConnected()||this.isConnecting()||this._socket.open()}disconnect(){this._socket.disconnect()}disconnectOnConnect(){this._socket.once("connect",(()=>{this._socket.disconnect()}))}emit(){this._socket.emit.apply(this._socket,arguments)}emitIfConnected(e,t){this.isConnected()&&this.emit(e,t)}getTransport(){return this._socket&&this._socket.io&&this._socket.io.engine&&this._socket.io.engine.transport&&this._socket.io.engine.transport.name}getManager(){return this._socket.io}isConnecting(){return this._socket&&this._socket.connecting}isConnected(){return this._socket&&this._socket.connected}on(e,t){return this._socket.on(e,t),()=>{this._socket.off(e,t)}}once(e,t){this._socket.once(e,t)}off(e,t){this._socket.off(e,t)}}const $s=at({name:"signalConnection",initialState:{deviceIdentified:!1,isIdentifyingDevice:!1,status:"",socket:null},reducers:{socketConnecting:e=>Object.assign(Object.assign({},e),{status:"connecting"}),socketConnected:(e,t)=>Object.assign(Object.assign({},e),{socket:t.payload,status:"connected"}),socketDisconnected:e=>Object.assign(Object.assign({},e),{status:"disconnected"}),socketReconnecting:e=>Object.assign(Object.assign({},e),{status:"reconnect"}),deviceIdentifying:e=>Object.assign(Object.assign({},e),{isIdentifyingDevice:!0}),deviceIdentified:e=>Object.assign(Object.assign({},e),{deviceIdentified:!0,isIdentifyingDevice:!1})}}),{deviceIdentifying:qs,deviceIdentified:Gs,socketConnected:Ws,socketConnecting:Ks,socketDisconnected:Js}=$s.actions,Hs=()=>(e,t)=>{if(na(t()))return;e(Ks());const r=function(){const e=new URL("wss://signal.appearin.net").origin;return new Vs(e,{autoConnect:!1})}();r.on("connect",(()=>e(Ws(r)))),r.on("device_identified",(()=>e(Gs()))),r.getManager().on("reconnect",(()=>e(Xs()))),function(e,t){e.on("room_joined",(e=>t(Xt.roomJoined(e)))),e.on("new_client",(e=>t(Xt.newClient(e)))),e.on("client_left",(e=>t(Xt.clientLeft(e)))),e.on("audio_enabled",(e=>t(Xt.audioEnabled(e)))),e.on("video_enabled",(e=>t(Xt.videoEnabled(e)))),e.on("client_metadata_received",(e=>t(Xt.clientMetadataReceived(e)))),e.on("chat_message",(e=>t(Xt.chatMessage(e)))),e.on("disconnect",(()=>t(Xt.disconnect()))),e.on("room_knocked",(e=>t(Xt.roomKnocked(e)))),e.on("room_session_ended",(e=>t(Xt.roomSessionEnded(e)))),e.on("knocker_left",(e=>t(Xt.knockerLeft(e)))),e.on("knock_handled",(e=>t(Xt.knockHandled(e)))),e.on("screenshare_started",(e=>t(Xt.screenshareStarted(e)))),e.on("screenshare_stopped",(e=>t(Xt.screenshareStopped(e)))),e.on("cloud_recording_started",(e=>t(Xt.cloudRecordingStarted(e)))),e.on("cloud_recording_stopped",(()=>t(Xt.cloudRecordingStopped()))),e.on("streaming_stopped",(()=>t(Xt.streamingStopped())))}(r,e),r.connect()},Ys=({deviceCredentials:e})=>(t,r)=>{const n=r(),i=na(n);i&&(i.emit("identify_device",{deviceCredentials:e}),t(qs()))},Qs=()=>(e,t)=>{const r=ea(t()).socket;null==r||r.emit("leave_room"),null==r||r.disconnect(),e(Js())},Xs=()=>(e,t)=>{const r=tr(t());e(Zs()),r.data&&e(Ys({deviceCredentials:r.data}))},{socketReconnecting:Zs}=$s.actions,ea=e=>e.signalConnection,ta=e=>e.signalConnection.deviceIdentified,ra=e=>e.signalConnection.status,na=e=>e.signalConnection.socket;Ft({actionCreator:Vt,effect:(e,{dispatch:t})=>{t(Qs())}});Bt([Se(qt,ra,((e,t)=>!(!e||!["","reconnect"].includes(t))))],(({dispatch:e},t)=>{t&&e(Hs())}));const ia=Se(tr,ra,ta,(e=>e.signalConnection.isIdentifyingDevice),((e,t,r,n)=>!(!e.data||"connected"!==t||r||n)));Bt([ia,tr],(({dispatch:e},t,r)=>{t&&r.data&&e(Ys({deviceCredentials:r.data}))}));const sa=at({name:"chat",initialState:{chatMessages:[]},reducers:{},extraReducers(e){e.addCase(Xt.chatMessage,((e,t)=>{const r={senderId:t.payload.senderId,timestamp:t.payload.timestamp,text:t.payload.text};return Object.assign(Object.assign({},e),{chatMessages:[...e.chatMessages,r]})}))}}),aa=e=>(t,r)=>{const n=r(),i=ea(n).socket;null==i||i.emit("chat_message",{text:e.text})},oa=at({name:"cloudRecording",initialState:{isRecording:!1,error:null,startedAt:void 0},reducers:{recordingRequestStarted:e=>Object.assign(Object.assign({},e),{status:"requested"})},extraReducers:e=>{e.addCase(Xt.cloudRecordingStopped,(e=>Object.assign(Object.assign({},e),{isRecording:!1,status:void 0}))),e.addCase(Xt.cloudRecordingStarted,((e,t)=>{const{payload:r}=t;return r.error?Object.assign(Object.assign({},e),{isRecording:!1,status:"error",error:r.error}):e})),e.addCase(Xt.newClient,((e,{payload:t})=>{var r;const{client:n}=t;return"recorder"===(null===(r=n.role)||void 0===r?void 0:r.roleName)?Object.assign(Object.assign({},e),{isRecording:!0,status:"recording",startedAt:n.startedCloudRecordingAt?new Date(n.startedCloudRecordingAt).getTime():(new Date).getTime()}):e}))}}),{recordingRequestStarted:ca}=oa.actions,da=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=pa(r);i&&["recording","requested"].includes(i)||(null==n||n.emit("start_recording",{recording:"cloud"}),e(ca()))},la=()=>(e,t)=>{const r=t(),n=ea(r).socket;null==n||n.emit("stop_recording")},pa=e=>e.cloudRecording.status,ua="safari"===zs.browserDetails.browser,ha=e=>e.split(/[^\d]/g).map((e=>parseInt(e,10)));function ma({devices:e,videoId:t,audioId:r,options:n,type:i="ideal"}){const s=e.filter((e=>"audioinput"===e.kind)),a=e.filter((e=>"videoinput"===e.kind)),o=!r||!s.some((e=>e.deviceId===r)),c=!t||!a.some((e=>e.deviceId===t)),d=function({disableAEC:e,disableAGC:t,hd:r,lax:n,lowDataMode:i,preferredDeviceIds:s,resolution:a,simulcast:o,widescreen:c}){let d=480,l=240,p=15;r&&(d=n||ua?720:{min:360,ideal:720}),o&&(!1===r?(d=360,l=270):l=360,p=30);const u={audio:{...s.audioId&&{deviceId:s.audioId}},video:{...s.videoId?{deviceId:s.videoId}:{facingMode:"user"},height:i?l:d,...i&&{frameRate:p}}};if(n)return u.audio.deviceId||(u.audio=!0),delete u.video.facingMode,u;if(a){const[e,t,r]=ha(a);e&&(u.video.width={exact:e}),t&&(u.video.height={exact:t}),r&&(u.video.frameRate={exact:r}),delete u.video.facingMode}else u.video.aspectRatio=c?16/9:4/3;return t&&(u.audio.autoGainControl=!1),e&&(u.audio.echoCancellation=!1),u}({preferredDeviceIds:{audioId:o?null:{[i]:r},videoId:c?null:{[i]:t}},...n});return!1!==r&&s.length||delete d.audio,!1!==t&&a.length||delete d.video,d}class fa extends Error{constructor(e){super(e.message),this.name="AssertionError",this.code="ERR_ASSERTION",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,Error.captureStackTrace&&Error.captureStackTrace(this,e.stackStartFn)}}function ga(...e){!function(e,t,r,n){if(!r){let i=!1;if(0===t)i=!0,n="No value argument passed to `assert.ok()`";else if(n instanceof Error)throw n;const s=new fa({actual:r,expected:!0,message:n,operator:"==",stackStartFn:e});throw s.generatedMessage=i,s}}(ga,e.length,...e)}const va=ga;va.notEqual=function e(t,r,n){if(arguments.length<2)throw new Error("'actual' and 'expected' arguments are required");t==r&&function(e){if(e.message instanceof Error)throw e.message;throw new fa(e)}({actual:t,expected:r,message:n,operator:"!=",stackStartFn:e})},va.ok=ga;var ya=Ji(va);const _a=/mobi/i.test(navigator.userAgent);class ba extends Error{constructor(...e){super(...e),this.name="nodevices"}}function wa(e){return e.audio||e.video?navigator.mediaDevices.getUserMedia(e).catch((t=>{const r=`${t}, ${JSON.stringify(e,null,2)}`;throw console.error(`getUserMedia ${r}`),t})):Promise.reject(new ba("No provided devices"))}function Sa(e,t,r,n){let i={deviceId:null};return t?(i.label=t.label,t.getSettings&&(i={...i,...t.getSettings()}),i.deviceId?i:(t.getCapabilities&&(i.deviceId=t.getCapabilities().deviceId),i.deviceId?i:(t.label&&r&&(i.deviceId=r.find((r=>t.label===r.label&&r.kind===e))?.deviceId),i.deviceId||(i.deviceId=t.getConstraints()?.deviceId?.exact,i.broken=1),i))):(n&&r&&(i.deviceId=r.find((t=>t.deviceId===n&&t.kind===e))?.deviceId),i)}function Ca(e,t){ya(!t||["audio","video"].includes(t),"only is invalid"),t&&"audio"!==t||e.getAudioTracks().forEach((e=>e.stop())),t&&"video"!==t||e.getVideoTracks().forEach((e=>e.stop()))}async function Ra(e,{replaceStream:t,fallback:r=!0}={}){let n,i,s,a;ya(e,"constraints is required");const o=!1===e.audioId?"video":!1===e.videoId&&"audio",c=_a||"video"!==o,d=ma(e),l=(e,t)=>(e.details={constraints:d,constraint:e.constraint||t?.constraint,newConstraints:i,fallback:r,stopTracks:c,...e!==n&&{error:String(n)}},e);c&&t&&Ca(t,o);try{a=await wa(d)}catch(i){if(n=i,!r)throw l(i);if("OverconstrainedError"===i.name)s={deviceId:{videoId:null,audioId:null},width:{lax:!0},height:{lax:!0},"":{videoId:null,audioId:null,lax:!0}}[i.constraint||""];else if("NotFoundError"===i.name){if(d.audio&&d.video){try{a=await wa(ma({...e,audioId:!1}))}catch(e){if("NotFoundError"!==e.name)throw l(e,i)}try{a||(a=await wa(ma({...e,videoId:!1})))}catch(e){throw l(e,i)}}}else if("NotAllowedError"===i.name||"NotReadableError"===i.name||"AbortError"===i.name)if(t&&!c)Ca(t,o),s=e;else if("NotAllowedError"!==i.name){try{a=await wa(ma({...e,options:{...e.options,lax:!0}}))}catch(e){console.warn("Tried getting stream again with laxer constraints, but failed: "+(""+e))}const t=(""+i).toLowerCase(),r={audio:"audioId",video:"videoId"}[/(video|audio)/.exec(t)?.[0]||o];if(!a&&r)try{a=await wa(ma({...e,[r]:null}))}catch(e){console.warn(`Re-tried ${r} with no constraints, but failed: ${""+e}`)}if(!a){const t=r?[r]:["videoId","audioId"];for(const r of t){try{a=await wa(ma({...e,[r]:!1}))}catch(e){console.warn(`Re-tried without ${r}, but failed: ${""+e}`)}if(a)break}}}}if(s){i=ma({...e,...s,options:{...e.options,lax:s.lax},...{audio:{videoId:!1},video:{audioId:!1}}[o]});try{a=await wa(i)}catch(e){throw l(e,n)}}if(!a)throw l(n);let p;return t&&(c||Ca(t,o),p=function(e,t,r){const n=[];return r&&"audio"!==r||(n.push(...e.getAudioTracks()),t.getAudioTracks().forEach((t=>{t.replacement=!0,e.addTrack(t)}))),r&&"video"!==r||(n.push(...e.getVideoTracks()),t.getVideoTracks().forEach((t=>{t.replacement=!0,e.addTrack(t)}))),n.forEach((t=>{t.replaced=!0,e.removeTrack(t)})),n}(t,a,o),a=t),{error:n&&l(n),stream:a,replacedTracks:p}}const Ta=at({name:"localMedia",initialState:{busyDeviceIds:[],cameraEnabled:!1,devices:[],isSettingCameraDevice:!1,isSettingMicrophoneDevice:!1,isTogglingCamera:!1,microphoneEnabled:!1,status:"",isSwitchingStream:!1},reducers:{deviceBusy:(e,t)=>e.busyDeviceIds.includes(t.payload.deviceId)?e:Object.assign(Object.assign({},e),{busyDeviceIds:[...e.busyDeviceIds,t.payload.deviceId]}),toggleCameraEnabled(e,t){var r;return Object.assign(Object.assign({},e),{cameraEnabled:null!==(r=t.payload.enabled)&&void 0!==r?r:!e.cameraEnabled})},setCurrentCameraDeviceId:(e,t)=>Object.assign(Object.assign({},e),{currentCameraDeviceId:t.payload.deviceId}),toggleMicrophoneEnabled(e,t){var r;return Object.assign(Object.assign({},e),{microphoneEnabled:null!==(r=t.payload.enabled)&&void 0!==r?r:!e.microphoneEnabled})},setCurrentMicrophoneDeviceId:(e,t)=>Object.assign(Object.assign({},e),{currentMicrophoneDeviceId:t.payload.deviceId}),setDevices:(e,t)=>Object.assign(Object.assign({},e),{devices:t.payload.devices}),setLocalMediaStream:(e,t)=>Object.assign(Object.assign({},e),{stream:t.payload.stream}),setLocalMediaOptions:(e,t)=>Object.assign(Object.assign({},e),{options:t.payload.options}),localMediaStopped:e=>Object.assign(Object.assign({},e),{status:"stopped",stream:void 0}),localStreamMetadataUpdated(e,t){const{audio:r,video:n}=t.payload;return Object.assign(Object.assign({},e),{currentCameraDeviceId:n.deviceId,currentMicrophoneDeviceId:r.deviceId,busyDeviceIds:e.busyDeviceIds.filter((e=>e!==r.deviceId&&e!==n.deviceId))})}},extraReducers:e=>{e.addCase(zt,((e,t)=>Object.assign(Object.assign({},e),{options:t.payload.localMediaOptions}))),e.addCase(Na.pending,((e,t)=>{const{audio:r,video:n}=t.meta.arg;return Object.assign(Object.assign({},e),{isSettingCameraDevice:n,isSettingMicrophoneDevice:r})})),e.addCase(Na.fulfilled,((e,t)=>{const{audio:r,video:n}=t.meta.arg;return Object.assign(Object.assign({},e),{isSettingCameraDevice:!n&&e.isSettingCameraDevice,isSettingMicrophoneDevice:!r&&e.isSettingMicrophoneDevice})})),e.addCase(Na.rejected,((e,t)=>{const{audio:r,video:n}=t.meta.arg;return Object.assign(Object.assign({},e),{isSettingCameraDevice:!n&&e.isSettingCameraDevice,isSettingMicrophoneDevice:!r&&e.isSettingMicrophoneDevice,cameraDeviceError:n?t.error:e.cameraDeviceError,microphoneDeviceError:r?t.error:e.microphoneDeviceError})})),e.addCase(La.pending,(e=>Object.assign(Object.assign({},e),{isTogglingCamera:!0}))),e.addCase(La.fulfilled,(e=>Object.assign(Object.assign({},e),{isTogglingCamera:!1}))),e.addCase(Fa.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{devices:t.payload.devices}))),e.addCase(Ua.pending,(e=>Object.assign(Object.assign({},e),{status:"starting"}))),e.addCase(Ua.fulfilled,((e,{payload:{stream:t,onDeviceChange:r}})=>{let n,i,s=!1,a=!1;const o=t.getAudioTracks()[0],c=t.getVideoTracks()[0];return o&&(i=o.getSettings().deviceId,a=o.enabled),c&&(s=c.enabled,n=c.getSettings().deviceId),Object.assign(Object.assign({},e),{stream:t,status:"started",currentCameraDeviceId:n,currentMicrophoneDeviceId:i,cameraEnabled:s,microphoneEnabled:a,onDeviceChange:r})})),e.addCase(Ua.rejected,((e,t)=>Object.assign(Object.assign({},e),{status:"error",startError:t.error}))),e.addCase(Ba.pending,(e=>Object.assign(Object.assign({},e),{isSwitchingStream:!0}))),e.addCase(Ba.fulfilled,(e=>Object.assign(Object.assign({},e),{isSwitchingStream:!1}))),e.addCase(Ba.rejected,(e=>Object.assign(Object.assign({},e),{isSwitchingStream:!1})))}}),{deviceBusy:Pa,setCurrentCameraDeviceId:ka,setCurrentMicrophoneDeviceId:Ea,toggleCameraEnabled:Da,toggleMicrophoneEnabled:Oa,setLocalMediaOptions:Ia,setLocalMediaStream:xa,localMediaStopped:Ma,localStreamMetadataUpdated:ja}=Ta.actions,La=Yt("localMedia/doToggleCamera",((e,{getState:t,rejectWithValue:r})=>s(void 0,void 0,void 0,(function*(){const e=t(),n=Xa(e);if(!n)return;let i=n.getVideoTracks()[0];const s=Ga(e),a=Ha(e);try{if(s)if(i)i.enabled=!0;else{const t=eo(e),r=$a(e);yield Ra(Object.assign(Object.assign({},t),{audioId:!1,videoId:r,type:"exact"}),{replaceStream:n}),i=n.getVideoTracks()[0]}else{if(!i)return;i.enabled=!1,a&&(i.stop(),n.removeTrack(i))}n.dispatchEvent(new CustomEvent("stopresumevideo",{detail:{track:i,enable:s}}))}catch(e){return r(e)}})))),Aa=Yt("localMedia/doToggleMicrophone",((e,{getState:t})=>{var r;const n=t(),i=Xa(n);if(!i)return;const s=Wa(n),a=null===(r=i.getAudioTracks())||void 0===r?void 0:r[0];a&&(a.enabled=s)})),Na=Yt("localMedia/reactSetDevice",(({audio:e,video:t},{getState:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){try{const n=r(),i=Xa(n);if(!i)throw new Error("No stream");const s=!!e&&qa(n),a=!!t&&$a(n),o=eo(n),{replacedTracks:c}=yield Ra(Object.assign(Object.assign({},o),{audioId:s,videoId:a,type:"exact"}),{replaceStream:i}),d=Wa(n);i.getAudioTracks().forEach((e=>e.enabled=d));const l=Ga(n);return i.getVideoTracks().forEach((e=>e.enabled=l)),{replacedTracks:c}}catch(e){return n(e)}})))),Fa=Yt("localMedia/doUpdateDeviceList",((e,{getState:t,dispatch:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){var e,i;const s=t();let a=[],o=[];const c=Xa(s),d=Va(s);try{a=yield navigator.mediaDevices.enumerateDevices(),o=Ka(s);if(!(c&&!Za(s)&&a&&o&&o.find((e=>e.deviceId))))return{devices:a};const{changedDevices:l}=function({oldDevices:e,newDevices:t,currentAudioId:r,currentVideoId:n,currentSpeakerId:i}){const s=function(e,t){const[r,n]=[e,t].map((e=>e.filter((e=>e.kind&&e.deviceId)).reduce(((e,t)=>({...e,[t.kind]:{...e[t.kind],[t.deviceId]:t}})),{}))),i={};return e.forEach((e=>{e.kind&&e.deviceId&&(i[e.kind]||(i[e.kind]={added:{},removed:{},changed:{}}),n[e.kind]&&n[e.kind][e.deviceId]||(i[e.kind].removed[e.deviceId]=e))})),t.forEach((e=>{e.kind&&e.deviceId&&(i[e.kind]||(i[e.kind]={added:{},removed:{},changed:{}}),r[e.kind]&&r[e.kind][e.deviceId]?r[e.kind][e.deviceId].label&&r[e.kind][e.deviceId].label!==e.label&&(i[e.kind].changed[e.deviceId]=e):i[e.kind].added[e.deviceId]=e)})),i}(e,t),a={},o={};return[["audioinput",r],["videoinput",n],["audiooutput",i]].forEach((([e,r])=>{const n=s[e];if(n){if(r){if(n.removed[r]&&(a[e]={deviceId:null},"audiooutput"===e)){const r=t.find((e=>"audiooutput"===e.kind));a[e]={deviceId:r?.deviceId}}n.changed[r]&&(a[e]={deviceId:r})}if(Object.keys(n.added).length){const[t]=Object.keys(n.added).slice(0,1),r=n.added[t];o[e]={deviceId:r.deviceId,label:r.label,kind:r.kind}}}})),{addedDevices:o,changedDevices:a}}({oldDevices:o,newDevices:a,currentAudioId:qa(s),currentVideoId:$a(s)});let p=null===(e=l.audioinput)||void 0===e?void 0:e.deviceId,u=null===(i=l.videoinput)||void 0===i?void 0:i.deviceId;function h(e,t){const r=t?e.findIndex((e=>e.deviceId===t)):0;return(e[(r+1)%e.length]||{}).deviceId}if(void 0!==u){const m=Ka(s).filter((e=>"videoinput"===e.kind)),f=$a(s);let g=h(m.filter((e=>!d.includes(e.deviceId))),f);g&&f!==g||(g=h(m,f)),f!==g&&(u=g)}if(void 0!==p){const v=Ka(s).filter((e=>"audioinput"===e.kind)),y=qa(s);let _=h(v.filter((e=>!d.includes(e.deviceId))),y);_&&y!==_||(_=h(v,y)),y!==_&&(p=_)}return void 0===p&&void 0===u||r(Ba({audioId:p,videoId:u})),{devices:a}}catch(b){return n(b)}})))),Ba=Yt("localMedia/doSwitchLocalStream",(({audioId:e,videoId:t},{dispatch:r,getState:n,rejectWithValue:i})=>s(void 0,void 0,void 0,(function*(){const s=n(),a=Xa(s),o=eo(s),c=!(!t||e)||!(t||!e);if(a)try{const{replacedTracks:n}=yield Ra(Object.assign(Object.assign({},o),{audioId:void 0!==e&&e,videoId:void 0!==t&&t,type:"exact"}),{replaceStream:a}),i=e||t;return c&&i&&r(Pa({deviceId:i})),{replacedTracks:n}}catch(n){console.error(n);const s=e||t;return c&&s&&r(Pa({deviceId:s})),i(n)}})))),Ua=Yt("localMedia/doStartLocalMedia",((e,{getState:t,dispatch:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){const i=a((()=>{r(Fa())}),{delay:500});if(navigator.mediaDevices&&navigator.mediaDevices.addEventListener("devicechange",i),"getTracks"in e)return Promise.resolve({stream:e,onDeviceChange:i});if(!e.audio&&!e.video)return{stream:new MediaStream,onDeviceChange:i};r(Ia({options:e}));try{yield r(Fa());const n=t(),s=eo(n),{stream:a}=yield Ra(Object.assign(Object.assign({},s),{audioId:e.audio,videoId:e.video}));return{stream:a,onDeviceChange:i}}catch(e){return n(e)}})))),za=()=>(e,t)=>{const r=Xa(t()),n=Ya(t()).onDeviceChange;null==r||r.getTracks().forEach((e=>{e.stop()})),navigator.mediaDevices&&n&&navigator.mediaDevices.removeEventListener("devicechange",n),e(Ma())},Va=e=>e.localMedia.busyDeviceIds,$a=e=>e.localMedia.currentCameraDeviceId,qa=e=>e.localMedia.currentMicrophoneDeviceId,Ga=e=>e.localMedia.cameraEnabled,Wa=e=>e.localMedia.microphoneEnabled,Ka=e=>e.localMedia.devices,Ja=e=>e.localMedia.options,Ha=Se(Ja,(e=>!!e)),Ya=e=>e.localMedia,Qa=e=>e.localMedia.status,Xa=e=>e.localMedia.stream,Za=e=>e.localMedia.isSwitchingStream,eo=Se(Ka,(e=>({devices:e,options:{disableAEC:!1,disableAGC:!1,hd:!0,lax:!1,lowDataMode:!1,simulcast:!0,widescreen:!0}}))),to=Se(Qa,(e=>"starting"===e)),ro=Se(Ka,Va,((e,t)=>e.filter((e=>"videoinput"===e.kind)).filter((e=>!t.includes(e.deviceId))))),no=Se(Ka,Va,((e,t)=>e.filter((e=>"audioinput"===e.kind)).filter((e=>!t.includes(e.deviceId))))),io=Se(Ka,(e=>e.filter((e=>"audiooutput"===e.kind))));Bt([Se(qt,Qa,Ja,((e,t,r)=>{if(e&&""===t&&r)return r}))],(({dispatch:e},t)=>{t&&e(Ua(t))}));Bt([Se(qt,Qa,Ja,((e,t,r)=>!e&&""!==t&&!!r))],(({dispatch:e},t)=>{t&&e(za())})),Ft({predicate:(e,t,r)=>{const n=Wa(r),i=Wa(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(Aa())}}),Ft({predicate:(e,t,r)=>{if(t.localMedia.isTogglingCamera)return!1;const n=Ga(r),i=Ga(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(La())}}),Ft({predicate:(e,t,r)=>{const n=$a(r),i=$a(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(Na({audio:!1,video:!0}))}}),Ft({predicate:(e,t,r)=>{const n=qa(r),i=qa(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(Na({audio:!0,video:!1}))}}),Ft({matcher:Ye(Ua.fulfilled,Fa.fulfilled,Ba.fulfilled,Ba.rejected),effect:(e,{dispatch:t,getState:r})=>{const n=r(),i=Xa(n),s=Ka(n);if(!i)return;const a=function({audioTrack:e,videoTrack:t,devices:r,stoppedVideoTrack:n,lastAudioId:i,lastVideoId:s}){const a=e=>"live"===e?.readyState?e:null;return t=a(t)||n,e=a(e),{video:Sa("videoinput",t,r,s),audio:Sa("audioinput",e,r,i)}}({audioTrack:i.getAudioTracks()[0],videoTrack:i.getVideoTracks()[0],devices:s});t(ja(a))}});const so={displayName:"",id:"",isAudioEnabled:!0,isVideoEnabled:!0,isLocalParticipant:!0,stream:void 0,isScreenSharing:!1,roleName:""},ao=Yt("localParticipant/doEnableAudio",((e,{getState:t})=>s(void 0,void 0,void 0,(function*(){const r=t(),n=ea(r).socket;return null==n||n.emit("enable_audio",{enabled:e.enabled}),e.enabled})))),oo=Yt("localParticipant/doEnableVideo",((e,{getState:t})=>s(void 0,void 0,void 0,(function*(){const r=t(),n=ea(r).socket;return null==n||n.emit("enable_video",{enabled:e.enabled}),e.enabled})))),co=Yt("localParticipant/doSetDisplayName",((e,{getState:t})=>s(void 0,void 0,void 0,(function*(){const r=t(),n=ea(r).socket;return null==n||n.emit("send_client_metadata",{type:"UserData",payload:e}),e.displayName})))),lo=at({name:"localParticipant",initialState:so,reducers:{doSetLocalParticipant:(e,t)=>Object.assign(Object.assign({},e),t.payload)},extraReducers:e=>{e.addCase(zt,((e,t)=>Object.assign(Object.assign({},e),{displayName:t.payload.displayName}))),e.addCase(ao.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{isAudioEnabled:t.payload}))),e.addCase(oo.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{isVideoEnabled:t.payload}))),e.addCase(co.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{displayName:t.payload}))),e.addCase(Xt.roomJoined,((e,t)=>{var r,n;const i=null===(n=null===(r=t.payload)||void 0===r?void 0:r.room)||void 0===n?void 0:n.clients.find((e=>{var r;return e.id===(null===(r=t.payload)||void 0===r?void 0:r.selfId)}));return Object.assign(Object.assign({},e),{id:t.payload.selfId,roleName:(null==i?void 0:i.role.roleName)||""})}))}});lo.actions;const po=e=>e.localParticipant,uo=e=>e.localParticipant.id;Ft({actionCreator:Da,effect:({payload:e},{dispatch:t,getState:r})=>{const{enabled:n}=e,{isVideoEnabled:i}=po(r());t(oo({enabled:n||!i}))}}),Ft({actionCreator:Oa,effect:({payload:e},{dispatch:t,getState:r})=>{const{enabled:n}=e,{isAudioEnabled:i}=po(r());t(ao({enabled:n||!i}))}});const ho=at({name:"localScreenshare",initialState:{status:"",stream:null,error:null},reducers:{stopScreenshare:(e,t)=>Object.assign(Object.assign({},e),{status:"",stream:null})},extraReducers:e=>{e.addCase(fo.pending,(e=>Object.assign(Object.assign({},e),{status:"starting"}))),e.addCase(fo.fulfilled,((e,{payload:{stream:t}})=>Object.assign(Object.assign({},e),{status:"active",stream:t}))),e.addCase(fo.rejected,((e,{payload:t})=>Object.assign(Object.assign({},e),{error:t,status:"",stream:null})))}}),{stopScreenshare:mo}=ho.actions,fo=Yt("localScreenshare/doStartScreenshare",((e,{dispatch:t,getState:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){var e;try{const n=r(),i=vo(n);if(i)return{stream:i};const s=yield navigator.mediaDevices.getDisplayMedia(),a=()=>{t(go())};return"oninactive"in s?s.addEventListener("inactive",a):null===(e=s.getVideoTracks()[0])||void 0===e||e.addEventListener("ended",a),{stream:s}}catch(e){return n(e)}})))),go=()=>(e,t)=>{const r=t(),n=vo(r);n&&(n.getTracks().forEach((e=>e.stop())),e(mo({stream:n})))},vo=e=>e.localScreenshare.stream;Ft({actionCreator:Ma,effect:(e,{getState:t})=>{const r=t(),n=vo(r);n&&(null==n||n.getTracks().forEach((e=>{e.stop()})))}});const yo=at({initialState:{data:null,isFetching:!1,error:null},name:"organization",reducers:{},extraReducers:e=>{e.addCase(_o.pending,(e=>Object.assign(Object.assign({},e),{isFetching:!0}))),e.addCase(_o.fulfilled,((e,t)=>t.payload?Object.assign(Object.assign({},e),{isFetching:!1,data:t.payload}):Object.assign(Object.assign({},e),{isFetching:!0}))),e.addCase(_o.rejected,(e=>Object.assign(Object.assign({},e),{isFetching:!1,error:!0})))}}),_o=Yt("organization/doOrganizationFetch",((e,{extra:t,getState:r})=>s(void 0,void 0,void 0,(function*(){try{const e=r().app.roomUrl,n=yield t.services.fetchOrganizationFromRoomUrl(e||"");if(!n)throw new Error("Invalid room url");return n}catch(e){console.error(e)}})))),bo=e=>{var t;return null===(t=e.organization.data)||void 0===t?void 0:t.organizationId};function wo(e){return Ee(`rtcConnection/event/${e}`)}Bt([Se(qt,(e=>e.organization),tr,((e,t,r)=>!(!e||t.data||t.isFetching||t.error||r.isFetching)))],(({dispatch:e},t)=>{t&&e(_o())}));const So={rtcManagerCreated:wo("rtcManagerCreated"),rtcManagerDestroyed:wo("rtcManagerDestroyed"),streamAdded:wo("streamAdded")},Co=["recorder","streamer"];function Ro(e,t=!1){const{streams:r}=e,n=i(e,["streams"]);return Object.assign(Object.assign({},n),{stream:null,streams:r.map((e=>({id:e,state:t?"new_accept":"to_accept"}))),isLocalParticipant:!1,presentationStream:null,newJoiner:t})}function To(e,t){const r=e.remoteParticipants.findIndex((e=>e.id===t));return{index:r,participant:e.remoteParticipants[r]}}function Po(e,t,r){const{participant:n,index:i}=To(e,t);return n?Object.assign(Object.assign({},e),{remoteParticipants:[...e.remoteParticipants.slice(0,i),Object.assign(Object.assign({},n),r),...e.remoteParticipants.slice(i+1)]}):(console.error(`Did not find client for update ${t}`),e)}function ko(e,t,r,n){const{participant:i}=To(e,t);if(!i)return console.error(`No client ${t} found to update stream ${r} ${n}`),e;const s=i.streams.findIndex((e=>e.id===r)),a=[...i.streams];return a[s]=Object.assign(Object.assign({},a[s]),{state:n}),Po(e,t,{streams:a})}function Eo(e,t,r){const{participant:n}=To(e,t);return!n||n.streams.find((e=>e.id===r))?(console.warn(`No participant ${t} or stream ${r} already exists`),e):Po(e,t,{streams:[...n.streams,{id:r,state:"to_accept"}]})}const Do=at({name:"remoteParticipants",initialState:{remoteParticipants:[]},reducers:{streamStatusUpdated:(e,t)=>{let r=e;for(const{clientId:e,streamId:n,state:i}of t.payload)r=ko(r,e,n,i);return r},participantStreamAdded:(e,t)=>{const{clientId:r,stream:n}=t.payload;return Po(e,r,{stream:n})},participantStreamIdAdded:(e,t)=>{const{clientId:r,streamId:n}=t.payload;return Eo(e,r,n)}},extraReducers:e=>{e.addCase(Xt.roomJoined,((e,t)=>{var r;if(!(null===(r=t.payload)||void 0===r?void 0:r.room))return e;const n=t.payload.selfId,{clients:i}=t.payload.room;return Object.assign(Object.assign({},e),{remoteParticipants:i.filter((e=>e.id!==n)).filter((e=>!Co.includes(e.role.roleName))).map((e=>Ro(e)))})})),e.addCase(So.streamAdded,((e,t)=>function(e,t){const{clientId:r,stream:n,streamType:i}=t;let{streamId:s}=t;const{participant:a}=To(e,r);if(!a)return console.error(`Did not find client ${r} for adding stream`),e;const o=e.remoteParticipants;s||(s=n.id);const c=o.find((e=>e.id===r));if(!c)return e;const d=c.streams.find((e=>e.id===s));return c.stream&&(c.stream.id===s||c.stream.inboundId===s)||!c.stream&&"webcam"===i||!c.stream&&!i&&!d?Po(e,r,{stream:n}):Po(e,r,{presentationStream:n})}(e,t.payload))),e.addCase(Xt.newClient,((e,t)=>{const{client:r}=t.payload;return Co.includes(r.role.roleName)?e:function(e,t){const{participant:r}=To(e,t.id);return r?(console.warn(`Client already existing ${t.id}. Ignoring`),e):Object.assign(Object.assign({},e),{remoteParticipants:[...e.remoteParticipants,t]})}(e,Ro(r,!0))})),e.addCase(Xt.clientLeft,((e,t)=>{const{clientId:r}=t.payload;return function(e,t){return Object.assign(Object.assign({},e),{remoteParticipants:e.remoteParticipants.filter((e=>e.id!==t))})}(e,r)})),e.addCase(Xt.audioEnabled,((e,t)=>{const{clientId:r,isAudioEnabled:n}=t.payload;return Po(e,r,{isAudioEnabled:n})})),e.addCase(Xt.videoEnabled,((e,t)=>{const{clientId:r,isVideoEnabled:n}=t.payload;return Po(e,r,{isVideoEnabled:n})})),e.addCase(Xt.clientMetadataReceived,((e,t)=>{const{clientId:r,displayName:n}=t.payload.payload;return Po(e,r,{displayName:n})})),e.addCase(Xt.screenshareStarted,((e,t)=>{const{clientId:r,streamId:n}=t.payload;return Eo(e,r,n)})),e.addCase(Xt.screenshareStopped,((e,t)=>{const{clientId:r,streamId:n}=t.payload;return function(e,t,r){var n,i;const{participant:s}=To(e,t);if(!s)return console.error(`No participant ${t} found to remove stream ${r}`),e;const a=s.stream&&s.stream.id,o=(null===(n=s.presentationStream)||void 0===n?void 0:n.inboundId)||(null===(i=s.presentationStream)||void 0===i?void 0:i.id),c=s.streams.findIndex((e=>e.id===r));return Po(e,t,Object.assign(Object.assign({streams:s.streams.filter(((e,t)=>t!==c))},a===r&&{stream:null}),o===r&&{presentationStream:null}))}(e,r,n)}))}}),{participantStreamAdded:Oo,participantStreamIdAdded:Io,streamStatusUpdated:xo}=Do.actions,Mo=e=>e.remoteParticipants.remoteParticipants,jo=Se(vo,Mo,((e,t)=>{const r=[];e&&r.push({id:e.id,participantId:"local",hasAudioTrack:e.getAudioTracks().length>0,stream:e,isLocal:!0});for(const e of t)e.presentationStream&&r.push({id:e.presentationStream.id,participantId:e.id,hasAudioTrack:e.presentationStream.getAudioTracks().length>0,stream:e.presentationStream,isLocal:!1});return r})),Lo=at({initialState:{session:null,status:"initializing",error:null},name:"roomConnection",reducers:{connectionStatusChanged:(e,t)=>Object.assign(Object.assign({},e),{status:t.payload})},extraReducers:e=>{e.addCase(Xt.roomJoined,((e,t)=>{var r,n;const{error:i,isLocked:s}=t.payload;return"room_locked"===i&&s?Object.assign(Object.assign({},e),{status:"room_locked"}):Object.assign(Object.assign({},e),{status:"connected",session:null!==(n=null===(r=t.payload.room)||void 0===r?void 0:r.session)&&void 0!==n?n:null})})),e.addCase(Xt.newClient,((e,t)=>{var r,n;return Object.assign(Object.assign({},e),{session:null!==(n=null===(r=t.payload.room)||void 0===r?void 0:r.session)&&void 0!==n?n:null})})),e.addCase(Xt.roomSessionEnded,((e,t)=>{var r;return(null===(r=e.session)||void 0===r?void 0:r.id)!==t.payload.roomSessionId?e:Object.assign(Object.assign({},e),{session:null})})),e.addCase(Zs,(e=>Object.assign(Object.assign({},e),{status:"reconnect"})))}}),{connectionStatusChanged:Ao}=Lo.actions,No=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=Gt(r),s=Wt(r),a=Kt(r),o=Jt(r),c=Ht(r),d=bo(r);null==n||n.emit("knock_room",{avatarUrl:null,config:{isAudioEnabled:!0,isVideoEnabled:!0},deviceCapabilities:{canScreenshare:!0},displayName:a,isCoLocated:!1,isDevicePermissionDenied:!1,kickFromOtherRooms:!1,organizationId:d,roomKey:s,roomName:i,selfId:"",userAgent:`browser-sdk:${o||"unknown"}`,externalId:c}),e(Ao("knocking"))},Fo=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=Gt(r),s=Wt(r),a=Kt(r),o=Jt(r),c=Ht(r),d=bo(r),l=Ga(t()),p=Wa(t()),u=uo(t());null==n||n.emit("join_room",{avatarUrl:null,config:{isAudioEnabled:p,isVideoEnabled:l},deviceCapabilities:{canScreenshare:!0},displayName:a,isCoLocated:!1,isDevicePermissionDenied:!1,kickFromOtherRooms:!1,organizationId:d,roomKey:s,roomName:i,selfId:u,userAgent:`browser-sdk:${o||"unknown"}`,externalId:c}),e(Ao("connecting"))},Bo=e=>e.roomConnection.status;Bt([Se([bo,Bo,ta,Qa],((e,t,r,n)=>!!("started"===n&&r&&e&&["initializing","reconnect"].includes(t))))],(({dispatch:e},t)=>{t&&e(Fo())})),Ft({actionCreator:Xt.knockHandled,effect:({payload:e},{dispatch:t,getState:r})=>{const{clientId:n,resolution:i}=e,s=r();n===uo(s)&&("accepted"===i?(t($t(e.metadata.roomKey)),t(Fo())):"rejected"===i&&t(Ao("knock_rejected")))}});const Uo="client_connection_status_changed",zo="stream_added",Vo="rtc_manager_created",$o="rtc_manager_destroyed",qo="local_stream_track_added",Go="local_stream_track_removed",Wo="connecting",Ko="connection_failed",Jo="connection_successful",Ho="connection_disconnected",Yo="fetch_mediaserver_config",Qo="start_screenshare",Xo="stop_screenshare",Zo="mediaserver_config",ec="room_joined",tc="ice_candidate",rc="ice_endofcandidates",nc="ready_to_receive_offer",ic="sdp_answer",sc="sdp_offer",ac="camera",oc="screen_share";class cc{constructor(e,t){ya.notEqual(e,void 0,"id is required"),ya.notEqual(t,void 0,"type is required"),this.id=""+e,this.type=t,this.isEnabled=!0,this.hasSupportForAutoSuperSize=!1,this.isAudioEnabled=!0,this.isVideoEnabled=!0,this.status=Wo}setup(e){return this.stream=e,this.streamId=e.id,this.setVideoEnabled(this.isVideoEnabled&&e.getVideoTracks().length>0),this.setAudioEnabled(this.isAudioEnabled&&e.getAudioTracks().length>0),this}setStatus(e){return this.status=e,this}setVideoEnabled(e){this.isVideoEnabled=e,this.stream&&this.stream.getVideoTracks().forEach((t=>{t.enabled=e}))}setAudioEnabled(e){this.isAudioEnabled=e,this.stream&&this.stream.getAudioTracks().forEach((t=>{t.enabled=e}))}static getCameraId(){return"0"}static getTypeFromId(e){ya.notEqual(e,void 0,"id is required");return"0"===""+e?ac:oc}}var dc="connection_blocked_by_network",lc="microphone_not_working",pc="microphone_stopped_working",uc="dominant_speaker",hc={},mc={},fc={exports:{}},gc=fc.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(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.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(e){return null!=e.address?"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(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"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"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%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(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%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(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{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(e){return null!=e.maxMessageSize?"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(e){return e.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(e){return"imageattr:%s %s %s"+(e.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(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(gc).forEach((function(e){gc[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}));var vc=fc.exports;!function(e){var t=function(e){return String(Number(e))===e?Number(e):e},r=function(e,r,n){var i=e.name&&e.names;e.push&&!r[e.push]?r[e.push]=[]:i&&!r[e.name]&&(r[e.name]={});var s=e.push?{}:i?r[e.name]:r;!function(e,r,n,i){if(i&&!n)r[i]=t(e[1]);else for(var s=0;s<n.length;s+=1)null!=e[s+1]&&(r[n[s]]=t(e[s+1]))}(n.match(e.reg),s,e.names,e.name),e.push&&r[e.push].push(s)},n=vc,i=RegExp.prototype.test.bind(/^([a-z])=(.*)/);e.parse=function(e){var t={},s=[],a=t;return e.split(/(\r\n|\r|\n)/).filter(i).forEach((function(e){var t=e[0],i=e.slice(2);"m"===t&&(s.push({rtp:[],fmtp:[]}),a=s[s.length-1]);for(var o=0;o<(n[t]||[]).length;o+=1){var c=n[t][o];if(c.reg.test(i))return r(c,a,i)}})),t.media=s,t};var s=function(e,r){var n=r.split(/=(.+)/,2);return 2===n.length?e[n[0]]=t(n[1]):1===n.length&&r.length>1&&(e[n[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(s,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return e.toString().split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var r=[],n=e.split(" ").map(t),i=0;i<n.length;i+=3)r.push({component:n[i],ip:n[i+1],port:n[i+2]});return r},e.parseImageAttributes=function(e){return e.split(" ").map((function(e){return e.substring(1,e.length-1).split(",").reduce(s,{})}))},e.parseSimulcastStreamList=function(e){return e.split(";").map((function(e){return e.split(",").map((function(e){var r,n=!1;return"~"!==e[0]?r=t(e):(r=t(e.substring(1,e.length)),n=!0),{scid:r,paused:n}}))}))}}(mc);var yc=vc,_c=/%[sdv%]/g,bc=function(e){var t=1,r=arguments,n=r.length;return e.replace(_c,(function(e){if(t>=n)return e;var i=r[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}}))},wc=function(e,t,r){var n=[e+"="+(t.format instanceof Function?t.format(t.push?r:r[t.name]):t.format)];if(t.names)for(var i=0;i<t.names.length;i+=1){var s=t.names[i];t.name?n.push(r[t.name][s]):n.push(r[t.names[i]])}else n.push(r[t.name]);return bc.apply(null,n)},Sc=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Cc=["i","c","b","a"],Rc=mc,Tc=function(e,t){t=t||{},null==e.version&&(e.version=0),null==e.name&&(e.name=" "),e.media.forEach((function(e){null==e.payloads&&(e.payloads="")}));var r=t.outerOrder||Sc,n=t.innerOrder||Cc,i=[];return r.forEach((function(t){yc[t].forEach((function(r){r.name in e&&null!=e[r.name]?i.push(wc(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach((function(e){i.push(wc(t,r,e))}))}))})),e.media.forEach((function(e){i.push(wc("m",yc.m[0],e)),n.forEach((function(t){yc[t].forEach((function(r){r.name in e&&null!=e[r.name]?i.push(wc(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach((function(e){i.push(wc(t,r,e))}))}))}))})),i.join("\r\n")+"\r\n"},Pc=hc.write=Tc,kc=hc.parse=Rc.parse;hc.parseParams=Rc.parseParams,hc.parseFmtpConfig=Rc.parseFmtpConfig,hc.parsePayloads=Rc.parsePayloads,hc.parseRemoteCandidates=Rc.parseRemoteCandidates,hc.parseImageAttributes=Rc.parseImageAttributes,hc.parseSimulcastStreamList=Rc.parseSimulcastStreamList;const Ec=zs.browserDetails.browser,Dc=zs.browserDetails.version;function Oc(e,t){let r=e.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/),n=t.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);r||(r=e.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/),n=t.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/));for(let e=1;e<r.length;e++)t=t.replace(new RegExp(n[e],"g"),r[e]);return t}function Ic(e){return"firefox"!==Ec?e:Xi.splitLines(e.trim()).map((e=>e.startsWith("a=msid-semantic:")?"a=msid-semantic: WMS *":e)).join("\r\n")+"\r\n"}function xc(e,t,r=console){const n=e.getSenders().find((e=>e.track&&"video"===e.track.kind));if(!n)return Promise.resolve();const i=n.getParameters();return i.encodings&&0===i.encodings.length?Promise.resolve():(i.encodings||(i.encodings=[{}]),0===t?delete i.encodings[0].maxBitrate:i.encodings[0].maxBitrate=1e3*t,n.setParameters(i).catch((e=>{r.error("setParameters err: ",e)})))}const Mc=400;class jc{constructor({peerConnectionId:e,bandwidth:t,maximumTurnBandwidth:r,deprioritizeH264Encoding:n,logger:i=console}){this.peerConnectionId=e,this.relayCandidateSeen=!1,this.pc=null,this.wasEverConnected=!1,this.connectionStatus=null,this.stats={totalSent:0,totalRecv:0},this.bandwidth=t||0,this.maximumTurnBandwidth=r,this.pending=[],this.isOperationPending=!1,this.streamIds=[],this.streams=[],this.earlyIceCandidates=[],this.afterConnected=new Promise((e=>{this.registerConnected=e})),this.offerOptions={offerToReceiveAudio:!0,offerToReceiveVideo:!0},this._deprioritizeH264Encoding=n,this._logger=i}setAndGetPeerConnection({clientId:e,constraints:t,peerConnectionConfig:r,shouldAddLocalVideo:n}){return this.peerConnectionConfig=r,this.shouldAddLocalVideo=n,this.clientId=e,this.pc=new RTCPeerConnection(r,t),this.signalingState=this.pc.signalingState,this.pc.addEventListener("signalingstatechange",(()=>{if(this.signalingState!==this.pc.signalingState&&(this.signalingState=this.pc.signalingState,"stable"===this.pc.signalingState)){this.isOperationPending=!1;const e=this.pending.shift();e&&e.apply()}})),this.pc}addStream(e){this.streamIds.push(e.id),this.streams.push(e),RTCPeerConnection.prototype.addTrack?(e.getAudioTracks().forEach((t=>{this.pc.addTrack(t,e)})),e.getVideoTracks().forEach((t=>{this.pc.addTrack(t,e)}))):this.pc.addStream(e)}addTrack(e,t){t||(t=this.streams[0]),t.addTrack(e),this.pc.addTrack(e,t)}removeTrack(e){this.streams[0].removeTrack(e);const t=this.pc.getSenders().find((t=>t.track===e));t&&this.pc.removeTrack(t)}removeStream(e){for(let t=0;t<this.streamIds.length;t++)this.streamIds[t]===e.id&&(this.streamIds.splice(t,1),this.streams.splice(t,1));this.pc&&(this.pc.removeTrack?e.getTracks().forEach((e=>{const t=this.pc.getSenders().find((t=>t.track===e));t&&this.pc.removeTrack(t)})):this.pc.removeStream&&this.pc.removeStream(e))}_setRemoteDescription(e){return this._deprioritizeH264Encoding&&(e.sdp=function(e){return Xi.splitSections(e).map((e=>{if("video"!==Xi.getKind(e))return e;const t=Xi.matchPrefix(e,"a=rtpmap:").map((e=>Xi.parseRtpMap(e))).filter((e=>/h264/i.test(e.name))).map((e=>""+e.payloadType));if(!t.length)return e;const r=Xi.matchPrefix(e,"m=video")[0],n=/(\s\d+)+$/i.exec(r)[0],i=[...n.split(" ").filter((e=>e&&!t.includes(e))),...t].join(" "),s=r.replace(n," "+i);return e.replace(r,s)})).join("")}(e.sdp)),this.srdComplete=this.pc.setRemoteDescription(e),this.srdComplete.then((()=>{this.earlyIceCandidates.forEach((e=>this.pc.addIceCandidate(e))),this.earlyIceCandidates=[]}))}handleOffer(e){if(!this.canModifyPeerConnection())return new Promise((t=>{this.pending.push((()=>this.handleOffer(e).then(t)))}));this.isOperationPending=!0;let t=e.sdp;t=function(e){return"safari"!==Ec&&("firefox"!==Ec||Dc>=63||60===Dc)?e:Xi.splitLines(e.trim()).filter((e=>!e.startsWith("a=extmap:")||"urn:ietf:params:rtp-hdrext:sdes:mid"!==Xi.parseExtmap(e).uri)).join("\r\n")+"\r\n"}(t),t=Ic(t);const r={type:e.type,sdp:t};let n;return this._setRemoteDescription(r).then((()=>this.pc.createAnswer())).then((e=>(n=e,this.pc.setLocalDescription(e)))).then((()=>xc(this.pc,this.bandwidth))).then((()=>n))}handleAnswer(e){if(this.pendingOffer){const t=this.pendingOffer;return delete this.pendingOffer,this.pc.setLocalDescription(t).then((()=>this.handleAnswer(e)))}let t=e.sdp;t=Ic(t);const r={type:e.type,sdp:t};return this._setRemoteDescription(r).then((()=>xc(this.pc,this.bandwidth)),(e=>{this._logger.warn("Could not set remote description from remote answer: ",e)}))}addIceCandidate(e){this.srdComplete?this.srdComplete.then((()=>{"closed"!==this.pc.signalingState&&("safari"===zs.browserDetails.browser&&e&&""===e.candidate||this.pc.addIceCandidate(e).catch((t=>{this._logger.warn("Failed to add ICE candidate ('%s'): %s",e?e.candidate:null,t)})))})):this.earlyIceCandidates.push(e)}canModifyPeerConnection(){return"stable"===this.pc.signalingState&&!this.isOperationPending}close(){const e=this.pc;if(e){e.oniceconnectionstatechange=null,e.onicecandidate=null,e.ontrack=null;try{e.close()}catch(e){console.warn("failures during close of session",e)}}}hasConnectedPeerConnection(){return this.pc&&"connected"===this.pc.connectionState}replaceTrack(e,t){const r=this.pc;if(!r)return!1;const n=r.getSenders();function i(r){const i=e=>e&&`id:${e.id},kind:${e.kind},state:${e.readyState}`;this._logger.warn(`${r}. newTrack:${i(t)}, oldTrack:${i(e)}, sender tracks: ${JSON.stringify(n.map((e=>`s ${i(e.track)}`)))}, sender first codecs: ${JSON.stringify(n.map((e=>(e.getParameters().codecs||[])[0])))}`)}if(n.length||i("No senders!"),e||(e=(n.find((e=>e.track&&e.track.kind===t.kind))||{}).track)||i("No sender with same kind! Add new track then."),window.RTCRtpSender&&window.RTCRtpSender.prototype.replaceTrack){if(e){const r=()=>{for(let r=0;r<n.length;r++){const s=n[r],a=s.track;if(s||a||i("One of the tracks is null!"),a.id===t.id)return Promise.resolve(t);if(a.id===e.id)return n[r].replaceTrack(t)}return null};let s=r();if(s)return s;let a=null,o=null;s=new Promise(((e,t)=>{a=e,o=t}));let c=0,d=setInterval((async()=>{const e=r();if(!e)return void(3<++c&&(clearInterval(d),d=null,i("No sender track to replace"),o("No sender track to replace")));clearInterval(d),d=null;const t=await e;a(t)}),1e3);return s}const s=this.streams.find((e=>e.getTracks().find((e=>e.id===t.id))))||this.streams[0];return s?r.addTrack(t,s):(i("No stream?"),Promise.reject(new Error("replaceTrack: No stream?")))}if(!this.canModifyPeerConnection())return void this.pending.push((()=>{this.replaceTrack(e,t)}));this.isOperationPending=!0;const s=r.onnegotiationneeded;return r.onnegotiationneeded=null,this.removeTrack(e),this.addTrack(t),setTimeout((()=>{r.onnegotiationneeded=s}),0),"offer"===r.localDescription.type?r.createOffer().then((e=>(e.sdp=Oc(r.localDescription.sdp,e.sdp),r.setLocalDescription(e)))).then((()=>this._setRemoteDescription(r.remoteDescription))):this._setRemoteDescription(r.remoteDescription).then((()=>r.createAnswer())).then((e=>(e.sdp=Oc(r.localDescription.sdp,e.sdp),r.setLocalDescription(e))))}maybeRestrictRelayBandwidth(){var e;-1!==this.maximumTurnBandwidth&&(this.pc.getStats&&(e=this.pc,e.getStats(null).then((e=>{let t,r;return e.forEach((n=>{if("transport"===n.type&&n.selectedCandidatePairId){const i=e.get(n.selectedCandidatePairId);if(!i)return;return t=e.get(i.localCandidateId).candidateType,void(r=e.get(i.remoteCandidateId).candidateType)}"candidate-pair"===n.type&&n.selected&&(t=e.get(n.localCandidateId).candidateType,r=e.get(n.remoteCandidateId).candidateType)})),"relay"===t||"relayed"===t||"relay"===r||"relayed"===r}))).then((e=>{e&&0===this.bandwidth&&this.changeBandwidth(this.maximumTurnBandwidth)})))}changeBandwidth(e){e!==this.bandwidth&&(this.canModifyPeerConnection()?(this.bandwidth=e,this.pc.localDescription&&""!==this.pc.localDescription.type&&xc(this.pc,this.bandwidth)):this.pending.push((()=>this.changeBandwidth(e))))}}function Lc(){throw new Error("setTimeout has not been defined")}function Ac(){throw new Error("clearTimeout has not been defined")}var Nc=Lc,Fc=Ac;function Bc(e){if(Nc===setTimeout)return setTimeout(e,0);if((Nc===Lc||!Nc)&&setTimeout)return Nc=setTimeout,setTimeout(e,0);try{return Nc(e,0)}catch(t){try{return Nc.call(null,e,0)}catch(t){return Nc.call(this,e,0)}}}"function"==typeof Wr.setTimeout&&(Nc=setTimeout),"function"==typeof Wr.clearTimeout&&(Fc=clearTimeout);var Uc,zc=[],Vc=!1,$c=-1;function qc(){Vc&&Uc&&(Vc=!1,Uc.length?zc=Uc.concat(zc):$c=-1,zc.length&&Gc())}function Gc(){if(!Vc){var e=Bc(qc);Vc=!0;for(var t=zc.length;t;){for(Uc=zc,zc=[];++$c<t;)Uc&&Uc[$c].run();$c=-1,t=zc.length}Uc=null,Vc=!1,function(e){if(Fc===clearTimeout)return clearTimeout(e);if((Fc===Ac||!Fc)&&clearTimeout)return Fc=clearTimeout,clearTimeout(e);try{return Fc(e)}catch(t){try{return Fc.call(null,e)}catch(t){return Fc.call(this,e)}}}(e)}}function Wc(e,t){this.fun=e,this.array=t}Wc.prototype.run=function(){this.fun.apply(null,this.array)};function Kc(){}var Jc=Kc,Hc=Kc,Yc=Kc,Qc=Kc,Xc=Kc,Zc=Kc,ed=Kc;var td=Wr.performance||{},rd=td.now||td.mozNow||td.msNow||td.oNow||td.webkitNow||function(){return(new Date).getTime()};var nd=new Date;var id={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];zc.push(new Wc(e,t)),1!==zc.length||Vc||Bc(Gc)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:Jc,addListener:Hc,once:Yc,off:Qc,removeListener:Xc,removeAllListeners:Zc,emit:ed,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*rd.call(td),r=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(r-=e[0],(n-=e[1])<0&&(r--,n+=1e9)),[r,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-nd)/1e3}};function sd(e){return{id:e.id,tracks:e.getTracks().map((function(e){return{id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState}}))}}var ad=function(e,t,r){var n=0,i=!!window.mozRTCPeerConnection,s=!!window.RTCIceGatherer;if(r.forEach((function(r){if(window[r+"RTCPeerConnection"]&&("webkit"!==r||!s)){var a=window[r+"RTCPeerConnection"],o=function(r,o){var c=new a(r,o),d="PC_"+n++;c.__rtcStatsId=d,r||(r={nullConfig:!0}),((r=JSON.parse(JSON.stringify(r)))&&r.iceServers||[]).forEach((function(e){delete e.credential})),r.browserType=i?"moz":s?"edge":"webkit",e("create",d,r),o&&e("constraints",d,o),c.addEventListener("icecandidate",(function(t){e("onicecandidate",d,t.candidate)})),c.addEventListener("addstream",(function(t){e("onaddstream",d,t.stream.id+" "+t.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),c.addEventListener("track",(function(t){e("ontrack",d,t.track.kind+":"+t.track.id+" "+t.streams.map((function(e){return"stream:"+e.id})))})),c.addEventListener("removestream",(function(t){e("onremovestream",d,t.stream.id+" "+t.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),c.addEventListener("signalingstatechange",(function(){e("onsignalingstatechange",d,c.signalingState)})),c.addEventListener("iceconnectionstatechange",(function(){e("oniceconnectionstatechange",d,c.iceConnectionState)})),c.addEventListener("icegatheringstatechange",(function(){e("onicegatheringstatechange",d,c.iceGatheringState)})),c.addEventListener("connectionstatechange",(function(){e("onconnectionstatechange",d,c.connectionState)})),c.addEventListener("negotiationneeded",(function(){e("onnegotiationneeded",d,void 0)})),c.addEventListener("datachannel",(function(t){e("ondatachannel",d,[t.channel.id,t.channel.label])}));var l={},p=function(){c.getStats(null).then((function(t){var r=function(e){if(!e.entries)return e;var t={};return e.forEach((function(e,r){t[r]=e})),t}(t),n=JSON.parse(JSON.stringify(r));e("getstats",d,function(e,t){t=JSON.parse(JSON.stringify(t)),Object.keys(t).forEach((function(r){var n=t[r];delete n.id,e[r]&&Object.keys(n).forEach((function(i){n[i]===e[r][i]&&delete t[r][i],(0===Object.keys(n).length||1===Object.keys(n).length&&n.timestamp)&&delete t[r]}))}));var r=-1/0;return Object.keys(t).forEach((function(e){var n=t[e];n.timestamp>r&&(r=n.timestamp)})),Object.keys(t).forEach((function(e){var n=t[e];n.timestamp===r&&(n.timestamp=0)})),t.timestamp=r,t}(l,r)),l=n}))};if(!s&&t)var u=window.setInterval((function(){"closed"!==c.signalingState?p():window.clearInterval(u)}),t);return s||c.addEventListener("connectionstatechange",(function(){"connected"!==c.connectionState&&"failed"!==c.connectionState||p()})),c};["createDataChannel","close"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){return e(t,this.__rtcStatsId,arguments),r.apply(this,arguments)})})),["addStream","removeStream"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=arguments[0],i=n.getTracks().map((function(e){return e.kind+":"+e.id})).join(",");return e(t,this.__rtcStatsId,n.id+" "+i),r.apply(this,arguments)})})),["addTrack"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=arguments[0],i=[].slice.call(arguments,1);return e(t,this.__rtcStatsId,n.kind+":"+n.id+" "+(i.map((function(e){return"stream:"+e.id})).join(";")||"-")),r.apply(this,arguments)})})),["removeTrack"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=arguments[0].track;return e(t,this.__rtcStatsId,n?n.kind+":"+n.id:"null"),r.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n,i=this.__rtcStatsId,s=arguments;return 1===arguments.length&&"object"==typeof arguments[0]?n=arguments[0]:3===arguments.length&&"object"==typeof arguments[2]&&(n=arguments[2]),e(t,this.__rtcStatsId,n),r.apply(this,n?[n]:void 0).then((function(r){if(e(t+"OnSuccess",i,r),!(s.length>0&&"function"==typeof s[0]))return r;s[0].apply(null,[r])}),(function(r){if(e(t+"OnFailure",i,r.toString()),!(s.length>1&&"function"==typeof s[1]))throw r;s[1].apply(null,[r])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=this.__rtcStatsId,i=arguments;return e(t,this.__rtcStatsId,i[0]),r.apply(this,[i[0]]).then((function(){e(t+"OnSuccess",n,void 0),i.length>=2&&"function"==typeof i[1]&&i[1].apply(null,[])}),(function(r){if(e(t+"OnFailure",n,r.toString()),!(i.length>=3&&"function"==typeof i[2]))throw r;i[2].apply(null,[r])}))})})),a.generateCertificate&&Object.defineProperty(o,"generateCertificate",{get:function(){return arguments.length?a.generateCertificate.apply(null,arguments):a.generateCertificate}}),window[r+"RTCPeerConnection"]=o,window[r+"RTCPeerConnection"].prototype=a.prototype}})),r.forEach((function(t){var r=t+(t.length?"GetUserMedia":"getUserMedia");if(navigator[r]){var n=navigator[r].bind(navigator);navigator[r]=function(){e("getUserMedia",null,arguments[0]);var t=arguments[1],r=arguments[2];n(arguments[0],(function(r){e("getUserMediaOnSuccess",null,sd(r)),t&&t(r)}),(function(t){e("getUserMediaOnFailure",null,t.name),r&&r(t)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var a=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return e("navigator.mediaDevices.getUserMedia",null,arguments[0]),a.apply(navigator.mediaDevices,arguments).then((function(t){return e("navigator.mediaDevices.getUserMediaOnSuccess",null,sd(t)),t}),(function(t){return e("navigator.mediaDevices.getUserMediaOnFailure",null,t.name),Promise.reject(t)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var o=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return e("navigator.mediaDevices.getDisplayMedia",null,arguments[0]),o.apply(navigator.mediaDevices,arguments).then((function(t){return e("navigator.mediaDevices.getDisplayMediaOnSuccess",null,sd(t)),t}),(function(t){return e("navigator.mediaDevices.getDisplayMediaOnFailure",null,t.name),Promise.reject(t)}))}.bind(navigator.mediaDevices)}},od=Ji(ad);let cd;const dd=new Uint8Array(16);function ld(){if(!cd&&(cd="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!cd))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return cd(dd)}const pd=[];for(let e=0;e<256;++e)pd.push((e+256).toString(16).slice(1));var ud={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function hd(e,t,r){if(ud.randomUUID&&!t&&!e)return ud.randomUUID();const n=(e=e||{}).random||(e.rng||ld)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=n[e];return t}return function(e,t=0){return pd[e[t+0]]+pd[e[t+1]]+pd[e[t+2]]+pd[e[t+3]]+"-"+pd[e[t+4]]+pd[e[t+5]]+"-"+pd[e[t+6]]+pd[e[t+7]]+"-"+pd[e[t+8]]+pd[e[t+9]]+"-"+pd[e[t+10]]+pd[e[t+11]]+pd[e[t+12]]+pd[e[t+13]]+pd[e[t+14]]+pd[e[t+15]]}(n)}const md={id:hd(),connectionNumber:0};const fd=function(e,t=console){const r=[];let n,i,s,a,o,c,d,l=0,p=!1;const u={connected:!1,trace:(...e)=>{if(e.push(Date.now()),"customEvent"===e[0]&&"roomSessionId"===e[2].type){const t=c&&c[2].value.roomSessionId,r=e[2].value.roomSessionId;if(c=e,p&&r&&r!==t&&n)return void n.close();r&&(p=!0)}else"customEvent"===e[0]&&"clientId"===e[2].type?s=e:"customEvent"===e[0]&&"organizationId"===e[2].type?i=e:"customEvent"===e[0]&&"displayName"===e[2].type?a=e:"customEvent"===e[0]&&"userRole"===e[2].type&&(o=e);n.readyState===WebSocket.OPEN?(l=0,n.send(JSON.stringify(e))):"getstats"===e[0]||"customEvent"===e[0]&&"insightsStats"===e[2].type||r.push(e),n.readyState===WebSocket.CLOSED&&d&&setTimeout((()=>{n.readyState===WebSocket.CLOSED&&d&&u.connect()}),1e3*l)},close:()=>{d=!1,n&&n.close()},connect:()=>{d=!0,l+=1,n&&n.close(),u.connected=!0,n=new WebSocket(e+window.location.pathname,"1.0"),n.onerror=e=>{u.connected=!1,t.warn("[RTCSTATS] WebSocket error",e)},n.onclose=e=>{u.connected=!1,t.info(`[RTCSTATS] Closed ${e.code}`)},n.onopen=()=>{for(md.connectionNumber++,n.send(JSON.stringify(["clientInfo",null,md])),i&&n.send(JSON.stringify(i)),s&&n.send(JSON.stringify(s)),c&&n.send(JSON.stringify(c)),a&&n.send(JSON.stringify(a)),o&&n.send(JSON.stringify(o));r.length;)n.send(JSON.stringify(r.shift()))}}};return u.connect(),u}("wss://rtcstats.srv.whereby.com");od(fd.trace,1e4,[""]);const gd={sendEvent:(e,t)=>{fd.trace("customEvent",null,{type:e,value:t})},sendAudioMuted:e=>{gd.sendEvent("audio_muted",{muted:e})},sendVideoMuted:e=>{gd.sendEvent("video_muted",{muted:e})},server:fd},vd=cc.getCameraId(),yd=zs.browserDetails.browser,_d=zs.browserDetails.version;"firefox"===yd&&zs.browserShim.shimGetDisplayMedia(window,"screen");let bd=!1;"chrome"===yd&&window.document.addEventListener("beforeunload",(()=>{bd=!0}));class wd{constructor({selfId:e,room:t,emitter:r,serverSocket:n,webrtcProvider:i,features:s,logger:a=console}){ya.ok(e,"selfId is required"),ya.ok(t,"room is required"),ya.ok(r&&r.emit,"emitter is required"),ya.ok(n instanceof Vs,"serverSocket is required"),ya.ok(i,"webrtcProvider is required");const{name:o,session:c,iceServers:d,sfuServer:l,mediaserverConfigTtlSeconds:p}=t;this._selfId=e,this._roomName=o,this._roomSessionId=c&&c.id,this.peerConnections={},this.localStreams={},this.enabledLocalStreamIds=[],this._socketListenerDeregisterFunctions=[],this._localStreamDeregisterFunction=null,this._emitter=r,this._serverSocket=n,this._webrtcProvider=i,this._features=s||{},this._logger=a,this.offerOptions={offerToReceiveAudio:!0,offerToReceiveVideo:!0},this._pendingActionsForConnectedPeerConnections=[],this._audioTrackOnEnded=()=>{gd.sendEvent("audio_ended",{unloading:bd}),this._emit(pc,{})},this._updateAndScheduleMediaServersRefresh({sfuServer:l,iceServers:d.iceServers||[],mediaserverConfigTtlSeconds:p})}numberOfPeerconnections(){return Object.keys(this.peerConnections).length}numberOfRemotePeers(){return Object.values(this.peerConnections).filter((e=>e.clientId!==this._selfId)).length}_setConnectionStatus(e,t,r){const n=e.connectionStatus;n!==t&&e.peerConnectionId!==this._selfId&&(n===Ho&&t===Wo||(e.connectionStatus=t,setTimeout((()=>{this._emit(Uo,{streamIds:e.streamIds,clientId:r,status:t,previous:n})}),0)))}_setJitterBufferTarget(e){try{e.getReceivers().forEach((e=>{e.jitterBufferTarget=Mc,e.playoutDelayHint=.4}))}catch(e){this._logger.error("Error during setting jitter buffer target:",e)}}_emitServerEvent(e,t,r){this._serverSocket.emit(e,t,r)}_emit(e,t){this._emitter.emit(e,t)}isInitializedWith({selfId:e,roomName:t,isSfu:r}){return this._selfId===e&&this._roomName===t&&r===!!this._sfuServer}supportsScreenShareAudio(){return!0}_addEnabledLocalStreamId(e){this.enabledLocalStreamIds.push(e)}_deleteEnabledLocalStreamId(e){const t=this.enabledLocalStreamIds.indexOf(e);-1!==t&&this.enabledLocalStreamIds.splice(t,1)}_getSession(e){return e in this.peerConnections?this.peerConnections[e]:null}_getOrCreateSession(e,t){let r=this.peerConnections[e];if(void 0===r){const n="safari"===yd&&_d>=14&&this._features.deprioritizeH264OnSafari;this.peerConnections[e]=r=new jc({peerConnectionId:e,bandwidth:t,maximumTurnBandwidth:this._features.unlimitedBandwidthWhenUsingRelayP2POn?-1:1280,deprioritizeH264Encoding:n})}return r}_getLocalCameraStream(){return this.localStreams[vd]}_getNonLocalCameraStreamIds(){return Object.keys(this.localStreams).filter((e=>e!==vd))}_isScreensharingLocally(){return this._getNonLocalCameraStreamIds().length>0}_getFirstLocalNonCameraStream(){const e=this._getNonLocalCameraStreamIds();return 0===e.length?null:this.localStreams[e[0]]}_transformIncomingSdp(e){return{type:e.type,sdp:e.sdpU}}_transformOutgoingSdp(e){return{type:e.type,sdpU:e.sdp}}_createSession({clientId:e,initialBandwidth:t,isOfferer:r,peerConnectionId:n,shouldAddLocalVideo:i}){if(!n)throw new Error("peerConnectionId is missing");if(!e)throw new Error("clientId is missing");const s=this._getOrCreateSession(n,t),a={optional:[]};"chrome"===yd&&a.optional.push({googCpuOveruseDetection:!0}),a.optional.push({rtcStatsRoomSessionId:this._roomSessionId}),a.optional.push({rtcStatsClientId:this._selfId}),a.optional.push({rtcStatsPeerId:n}),a.optional.push({rtcStatsConferenceId:this._roomName});const o={iceServers:this._iceServers};if(this._features.turnServerOverrideHost){const e=this._features.turnServerOverrideHost,t=e.indexOf(":")>0?"":":443",r=":"+e+t;o.iceServers=o.iceServers.map((e=>{const t=Object.assign({},e);return t.url&&(t.url=t.url.replace(/:[^?]*/,r)),t.urls&&(t.urls=t.urls.map((e=>e.replace(/:[^?]*/,r)))),t}))}if(this._features.useOnlyTURN){o.iceTransportPolicy="relay";const e={onlyudp:/^turn:.*transport=udp$/,onlytcp:/^turn:.*transport=tcp$/,onlytls:/^turns:.*transport=tcp$/}[this._features.useOnlyTURN];e&&(o.iceServers=o.iceServers.filter((t=>t.url&&t.url.match(e))))}"chrome"===yd&&(o.sdpSemantics="unified-plan");const c=s.setAndGetPeerConnection({constraints:a,peerConnectionConfig:o,shouldAddLocalVideo:i,clientId:e});c.ontrack=t=>{const r=t.streams[0];"default"===r.id&&0===r.getAudioTracks().length||-1===s.streamIds.indexOf(r.id)&&(s.streamIds.push(r.id),this._emit(zo,{clientId:e,stream:r}),s.connectionStatus===Jo&&setTimeout((()=>{this._emit(Uo,{streamIds:s.streamIds,clientId:e,status:s.connectionStatus,previous:Wo})}),0))},c.oniceconnectionstatechange=()=>{let t;const r=s.connectionStatus;switch(c.iceConnectionState){case"checking":t=Wo;break;case"connected":case"completed":t=Jo,s.wasEverConnected||(this._pendingActionsForConnectedPeerConnections.forEach((e=>{"function"==typeof e&&e()})),this._pendingActionsForConnectedPeerConnections=[]),!s.wasEverConnected&&(c.iceConnectionState.match(/connected|completed/)||"chrome"===yd&&c.localDescription&&"answer"===c.localDescription.type)&&(s.wasEverConnected=!0,"false"!==this._features.bandwidth&&this.maybeRestrictRelayBandwidth(s)),s.registerConnected();break;case"disconnected":t=Ho,setTimeout((()=>{"disconnected"===c.iceConnectionState&&this._maybeRestartIce(e,s)}),2e3);break;case"failed":t=Ko,r!==t&&this._maybeRestartIce(e,s),null!==s.relayCandidateSeen||s.wasEverConnected||this._emit(dc);break;default:return}this._setConnectionStatus(s,t,e)},c.onconnectionstate=()=>{switch(c.connectionState){case"connected":setTimeout((()=>{(function(e){if("chrome"!==zs.browserDetails.browser||zs.browserDetails.browser<58||"closed"===e.signalingState)return Promise.resolve(!1);const t=e.getSenders().some((e=>e.track&&"audio"===e.track.kind)),r=e.getReceivers().some((e=>e.track&&"audio"===e.track.kind));return e.getStats(null).then((e=>{let n=!1;return e.forEach((e=>{"outbound-rtp"!==e.type||"audio"!==e.kind&&"audio"!==e.mediaType||!t?"inbound-rtp"!==e.type||"audio"!==e.kind&&"audio"!==e.mediaType||!r||0===e.bytesReceived&&(n="inbound"):0===e.bytesSent&&(n="outbound")})),n}))})(s.pc).then((t=>{!1!==t&&this._emit(lc,{failureDirection:t,clientId:e})}))}),3e3),s.registerConnected();break;case"failed":const t=Ko;null!==s.relayCandidateSeen||s.wasEverConnected||this._emit(dc),this._setConnectionStatus(s,t,e)}};const d=this.localStreams[vd];return i&&d&&s.addStream(d),i&&Object.keys(this.localStreams).forEach((e=>{if(e===vd)return;const t=this.localStreams[e];r?s.addStream(t):s.afterConnected.then((()=>{this._emitServerEvent(Qo,{receiverId:s.clientId,streamId:t.id,hasAudioTrack:!!t.getAudioTracks().length}),this._withForcedRenegotiation(s,(()=>s.addStream(t)))}))})),s}_cleanup(e){const t=this._getSession(e);t?(t.close(),delete this.peerConnections[e]):this._logger.warn("No RTCPeerConnection in RTCManager.disconnect()",e)}_forEachPeerConnection(e){Object.keys(this.peerConnections).forEach((t=>{const r=this.peerConnections[t];e(r)}))}_addStreamToPeerConnections(e){this._forEachPeerConnection((t=>{this._withForcedRenegotiation(t,(()=>t.addStream(e)))}))}_addTrackToPeerConnections(e,t){this._forEachPeerConnection((r=>{this._withForcedRenegotiation(r,(()=>r.addTrack(e,t)))}))}_replaceTrackToPeerConnections(e,t){const r=[];return this._forEachPeerConnection((n=>{if(!n.hasConnectedPeerConnection()){this._logger.log("Session doesn't have a connected PeerConnection, adding pending action!");const i=this._pendingActionsForConnectedPeerConnections;if(!i)return void this._logger.warn("No pending action is created to repalce track, because the pending actions array is null");const s=new Promise(((r,s)=>{i.push((()=>{const i=n.replaceTrack(e,t);if(!i)return this._logger.error("replaceTrack returned false!"),void s("ReplaceTrack returned false");i.then((e=>r(e))).catch((e=>s(e)))}))}));return void r.push(s)}const i=n.replaceTrack(e,t);i?r.push(i):this._logger.error("replaceTrack returned false!")})),Promise.all(r)}_removeStreamFromPeerConnections(e){this._forEachPeerConnection((t=>{this._withForcedRenegotiation(t,(()=>t.removeStream(e)))}))}_removeTrackFromPeerConnections(e){this._forEachPeerConnection((t=>{this._withForcedRenegotiation(t,(()=>t.removeTrack(e)))}))}_addLocalStream(e,t){this._addEnabledLocalStreamId(e),this.localStreams[e]=t}_removeLocalStream(e){delete this.localStreams[e],this._deleteEnabledLocalStreamId(e)}maybeRestrictRelayBandwidth(e){e.maybeRestrictRelayBandwidth()}addNewStream(e,t){if(t!==this.localStreams[e]){if(this._addLocalStream(e,t),e===vd){this._addStreamToPeerConnections(t);const[e]=t.getAudioTracks();e&&this._startMonitoringAudioTrack(e),this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null);const r=e=>{const{enable:t,track:r}=e.detail;this._handleStopOrResumeVideo({enable:t,track:r})};return t.addEventListener("stopresumevideo",r),void(this._localStreamDeregisterFunction=()=>{t.removeEventListener("stopresumevideo",r)})}this._shareScreen(e,t)}}removeStream(e,t){this._removeLocalStream(e,t)}replaceTrack(e,t){return e&&"audio"===e.kind&&this._stopMonitoringAudioTrack(e),t&&"audio"===t.kind&&this._startMonitoringAudioTrack(t),this._replaceTrackToPeerConnections(e,t)}accept({clientId:e,shouldAddLocalVideo:t}){return this.acceptNewStream({streamId:e,clientId:e,shouldAddLocalVideo:t})}disconnectAll(){Object.keys(this.peerConnections).forEach((e=>{this.disconnect(e)})),this.peerConnections={},this._socketListenerDeregisterFunctions.forEach((e=>{e()})),this._socketListenerDeregisterFunctions=[],this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null)}stopOrResumeAudio(){}stopOrResumeVideo(){}_handleStopOrResumeVideo(){}fixChromeAudio(e){if("chrome"!==yd)return;const t=this._getLocalCameraStream(),r=t.getAudioTracks()[0];return r&&"ended"===r.readyState?navigator.mediaDevices.getUserMedia({audio:e}).then((e=>{const n=e.getAudioTracks()[0];return n.enabled=r.enabled,t.removeTrack(r),t.addTrack(n),this.replaceTrack(r,n)})):void 0}_updateAndScheduleMediaServersRefresh({iceServers:e,sfuServer:t,mediaserverConfigTtlSeconds:r}){this._iceServers=e,this._sfuServer=t,this._mediaserverConfigTtlSeconds=r,this._clearMediaServersRefresh(),r&&(this._fetchMediaServersTimer=setTimeout((()=>this._emitServerEvent(Yo)),1e3*r))}_clearMediaServersRefresh(){this._fetchMediaServersTimer&&(clearTimeout(this._fetchMediaServersTimer),this._fetchMediaServersTimer=null)}setupSocketListeners(){this._socketListenerDeregisterFunctions=[()=>this._clearMediaServersRefresh(),this._serverSocket.on(Zo,(e=>{e.error?this._logger.warn("FETCH_MEDIASERVER_CONFIG failed:",e.error):this._updateAndScheduleMediaServersRefresh(e)})),this._serverSocket.on(nc,(e=>{this._connect(e.clientId)})),this._serverSocket.on(tc,(e=>{const t=this._getSession(e.clientId);t?t.addIceCandidate(e.message):this._logger.warn("No RTCPeerConnection on ICE_CANDIDATE",e)})),this._serverSocket.on(rc,(e=>{const t=this._getSession(e.clientId);t?t.addIceCandidate(null):this._logger.warn("No RTCPeerConnection on ICE_END_OF_CANDIDATES",e)})),this._serverSocket.on(sc,(e=>{const t=this._getSession(e.clientId);if(!t)return void this._logger.warn("No RTCPeerConnection on SDP_OFFER",e);const r=this._transformIncomingSdp(e.message,t.pc);t.handleOffer(r).then((t=>{this._emitServerEvent(ic,{receiverId:e.clientId,message:this._transformOutgoingSdp(t)})}))})),this._serverSocket.on(ic,(e=>{const t=this._getSession(e.clientId);if(!t)return void this._logger.warn("No RTCPeerConnection on SDP_ANSWER",e);const r=this._transformIncomingSdp(e.message,t.pc);t.handleAnswer(r)}))]}sendAudioMutedStats(e){gd.sendEvent("audio_muted",{muted:e})}sendVideoMutedStats(e){gd.sendEvent("video_muted",{muted:e})}sendStatsCustomEvent(e,t){gd.sendEvent(e,t)}rtcStatsDisconnect(){gd.server.close()}rtcStatsReconnect(){gd.server.connected||gd.server.connect()}_startMonitoringAudioTrack(e){e.addEventListener("ended",this._audioTrackOnEnded)}_stopMonitoringAudioTrack(e){e.removeEventListener("ended",this._audioTrackOnEnded)}setRoomSessionId(e){this._roomSessionId=e}}const Sd=57600,Cd=2.6041666666666665,Rd=921600,Td=1.0850694444444444;const Pd=cc.getCameraId(),kd=zs.browserDetails.browser;class Ed extends wd{_connect(e){this.rtcStatsReconnect();let t=this._getSession(e),r=t&&t.bandwidth||0;return t?(this._logger.warn("Replacing peer session",e),this._cleanup(e)):r=this._changeBandwidthForAllClients(!0),t=this._createP2pSession(e,r,!0,!0),this._negotiatePeerConnection(e,t),Promise.resolve(t)}_maybeRestartIce(e,t){const r=t.pc;"disconnected"!==r.iceConnectionState&&"failed"!==r.iceConnectionState||"offer"===r.localDescription.type&&(t.wasEverConnected=!1,t.relayCandidateSeen=!1,this._negotiatePeerConnection(e,t,Object.assign({},this.offerOptions,{iceRestart:!0})))}_setCodecPreferences(e,t,r,n){try{e.getTransceivers().filter((e=>"audio"===e?.sender?.track?.kind)).forEach((e=>{if(void 0===RTCRtpSender.getCapabilities)return;const t=RTCRtpSender.getCapabilities("audio");for(let e=0;e<t.codecs.length;e++)if(n&&"audio/red"===t.codecs[e].mimeType.toLowerCase()){t.codecs.unshift(t.codecs.splice(e,1)[0]);break}void 0!==e.setCodecPreferences&&e.setCodecPreferences(t.codecs)}));e.getTransceivers().filter((e=>"video"===e?.sender?.track?.kind)).forEach((e=>{if(void 0===RTCRtpSender.getCapabilities)return;const n=RTCRtpSender.getCapabilities("video");for(let e=0;e<n.codecs.length;e++){if(t&&"video/vp9"===n.codecs[e].mimeType.toLowerCase()){n.codecs.unshift(n.codecs.splice(e,1)[0]);break}if(r&&"video/av1"===n.codecs[e].mimeType.toLowerCase()){n.codecs.unshift(n.codecs.splice(e,1)[0]);break}}void 0!==e.setCodecPreferences&&e.setCodecPreferences(n.codecs)}))}catch(e){this._logger.error("Error during setting setCodecPreferences:",e)}}_negotiatePeerConnection(e,t,r){if(!t)return void this._logger.warn("No RTCPeerConnection in negotiatePeerConnection()",e);const n=t.pc;if(!t.canModifyPeerConnection())return void t.pending.push((()=>{this._negotiatePeerConnection(e,t,r)}));t.isOperationPending=!0;const{vp9On:i,av1On:s,redOn:a}=this._features;(i||s||a)&&this._setCodecPreferences(n,i,s,a),n.createOffer(r||this.offerOptions).then((r=>{(i||a)&&"firefox"===kd&&(r.sdp=function(e,t,r){try{const n=kc(e);if(Array.isArray(n?.media)){const e=n.media.find((e=>"audio"===e.type));if(Array.isArray(e?.rtp)){const t=e.rtp;for(let n=0;n<t.length;n++)if(r&&"red"===t[n].codec){const r=e.payloads.split(" "),i=r.indexOf(""+t[n].payload);i&&-1!==i&&i>=0&&(r.unshift(r.splice(i,1)[0]),e.payloads=r.join(" "))}}const i=n.media.find((e=>"video"===e.type));if(Array.isArray(i?.rtp)){const e=i.rtp;for(let r=0;r<e.length;r++)if(t&&"VP9"===e[r].codec){const t=i.payloads.split(" "),n=t.indexOf(""+e[r].payload);n&&-1!==n&&n>=0&&(t.unshift(t.splice(n,1)[0]),i.payloads=t.join(" "))}}}return Pc(n)}catch(e){console.log("setCodecPreferenceSDP error:",e)}}(r.sdp,i,a)),this._emitServerEvent(sc,{receiverId:e,message:this._transformOutgoingSdp(r)}),"chrome"===kd&&n.getSenders().filter((e=>e.track&&"video"===e.track.kind)).length>=2?t.pendingOffer=r:n.setLocalDescription(r).catch((e=>{this._logger.warn("RTCPeerConnection.setLocalDescription() failed with local offer",e)}))})).catch((e=>{this._logger.warn("RTCPeerConnection.createOffer() failed to create local offer",e)}))}_withForcedRenegotiation(e,t){const r=e.pc,n=r.onnegotationneeded;r.onnegotiationneeded=null,t(),this._negotiatePeerConnection(e.clientId,e),setTimeout((()=>r.onnegotiationneeded=n),0)}_changeBandwidthForAllClients(e){let t=this.numberOfPeerconnections();if(e&&(t+=1),0===t)return 0;t>7&&(t=7);let r=this._features.bandwidth?parseInt(this._features.bandwidth,10):{1:this._features.cap2pBitrate?1e3:0,2:this._features.highP2PBandwidth?768:384,3:this._features.highP2PBandwidth?512:256,4:192,5:128,6:128,7:64}[t];if(void 0===r)return 0;if(this._features.adjustBitratesFromResolution){const e=this._getLocalCameraStream();if(e){const t=e&&e.getVideoTracks()[0];if(t){const{width:e,height:n,frameRate:i}=t.getSettings();if(e&&n&&i){const t=Math.round(function(e,t,r){let n=e*t;n<Sd&&(n=Sd),n>Rd&&(n=Rd);let i=Cd;n>Rd?i=Td:n>Sd&&(i+=-17582143775720163e-22*(n-Sd));let s=e*t*i;return r<=15?s*=.7:r<=24&&(s*=.9),s}(e,n,i)/1e3);r=Math.min(t,r||t)}}}}return this._features.higherP2PBitrates&&(r*=1.5),this._forEachPeerConnection((e=>{e.changeBandwidth(r)})),r}_createP2pSession(e,t,r,n){const i=this._createSession({peerConnectionId:e,clientId:e,initialBandwidth:t,shouldAddLocalVideo:r,isOfferer:n}),s=i.pc;this._features.increaseIncomingMediaBufferOn&&this._setJitterBufferTarget(s);const a=this.localStreams[Pd];return r&&a&&!a.getVideoTracks().length&&this._stoppedVideoTrack&&s.addTrack(this._stoppedVideoTrack,a),s.onicecandidate=t=>{t.candidate?(i.relayCandidateSeen=i.relayCandidateSeen||"relay"===t.candidate.type,this._emitServerEvent(tc,{receiverId:e,message:t.candidate})):this._emitServerEvent(rc,{receiverId:e})},s.onnegotiationneeded=()=>{"new"!==s.iceConnectionState&&i.connectionStatus&&this._negotiatePeerConnection(e,i)},i}acceptNewStream({streamId:e,clientId:t,shouldAddLocalVideo:r}){let n=this._getSession(t);if(n&&e!==t)return n;let i=n&&n.bandwidth||0;return n?(this._logger.warn("Replacing peer session",t),this._cleanup(t)):i=this._changeBandwidthForAllClients(!0),n=this._createP2pSession(t,i,r),this._emitServerEvent(nc,{receiverId:t}),n}disconnect(e){this._cleanup(e),this._changeBandwidthForAllClients(!1);0===this.numberOfPeerconnections()&&setTimeout((()=>{0===this.numberOfPeerconnections()&&this.rtcStatsDisconnect()}),6e4)}updateStreamResolution(){}stopOrResumeAudio(){}_handleStopOrResumeVideo({enable:e,track:t}){e?this._stoppedVideoTrack?(this._replaceTrackToPeerConnections(this._stoppedVideoTrack,t),delete this._stoppedVideoTrack):this._addTrackToPeerConnections(t):this._stoppedVideoTrack=t}stopOrResumeVideo(e,t){if(["chrome","safari"].includes(kd))if(!1===t)setTimeout((()=>{e.getVideoTracks().forEach((r=>{!1===r.enabled&&(r.stop(),e.removeTrack(r),this._emit(Go,{stream:e,track:r}),this._handleStopOrResumeVideo({enable:t,track:r}))}))}),5e3);else if(0===e.getVideoTracks().length){const r=this._webrtcProvider.getMediaConstraints().video;if(!r)return;navigator.mediaDevices.getUserMedia({video:r}).then((r=>{const n=r.getVideoTracks()[0];e.addTrack(n),this._emit(qo,{streamId:e.id,tracks:[n],screenShare:!1}),this._handleStopOrResumeVideo({enable:t,track:n})}))}}_shareScreen(e,t){this._emitServerEvent(Qo,{streamId:e,hasAudioTrack:!!t.getAudioTracks().length}),this._addStreamToPeerConnections(t)}removeStream(e,t,r){super.removeStream(e,t),this._removeStreamFromPeerConnections(t),this._emitServerEvent(Xo,{streamId:e,requestedByClientId:r})}}var Dd,Od,Id={},xd={exports:{}};function Md(){if(Od)return Dd;Od=1;var e=1e3,t=60*e,r=60*t,n=24*r,i=7*n,s=365.25*n;function a(e,t,r,n){var i=t>=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}return Dd=function(o,c){c=c||{};var d=typeof o;if("string"===d&&o.length>0)return function(a){if((a=String(a)).length>100)return;var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(a);if(!o)return;var c=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*s;case"weeks":case"week":case"w":return c*i;case"days":case"day":case"d":return c*n;case"hours":case"hour":case"hrs":case"hr":case"h":return c*r;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(o);if("number"===d&&isFinite(o))return c.long?function(i){var s=Math.abs(i);if(s>=n)return a(i,s,n,"day");if(s>=r)return a(i,s,r,"hour");if(s>=t)return a(i,s,t,"minute");if(s>=e)return a(i,s,e,"second");return i+" ms"}(o):function(i){var s=Math.abs(i);if(s>=n)return Math.round(i/n)+"d";if(s>=r)return Math.round(i/r)+"h";if(s>=t)return Math.round(i/t)+"m";if(s>=e)return Math.round(i/e)+"s";return i+"ms"}(o);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(o))}}var jd=function(e){function t(e){let n,i,s,a=null;function o(...e){if(!o.enabled)return;const r=o,i=Number(new Date),s=i-(n||i);r.diff=s,r.prev=n,r.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,i)=>{if("%%"===n)return"%";a++;const s=t.formatters[i];if("function"==typeof s){const t=e[a];n=s.call(r,t),e.splice(a,1),a--}return n})),t.formatArgs.call(r,e);(r.log||t.log).apply(r,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==a?a:(i!==t.namespaces&&(i=t.namespaces,s=t.enabled(e)),s),set:e=>{a=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,r){const n=t(this.namespace+(void 0===r?":":r)+e);return n.log=this.log,n}function n(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},t.disable=function(){const e=[...t.names.map(n),...t.skips.map(n).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let r;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),i=n.length;for(r=0;r<i;r++)n[r]&&("-"===(e=n[r].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.slice(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){if("*"===e[e.length-1])return!0;let r,n;for(r=0,n=t.skips.length;r<n;r++)if(t.skips[r].test(e))return!1;for(r=0,n=t.names.length;r<n;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=Md(),t.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach((r=>{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t<e.length;t++)r=(r<<5)-r+e.charCodeAt(t),r|=0;return t.colors[Math.abs(r)%t.colors.length]},t.enable(t.load()),t};!function(e,t){t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let n=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(i=n))})),t.splice(i,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==id&&"env"in id&&(e=id.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!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`."))}})(),t.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"],t.log=console.debug||console.log||(()=>{}),e.exports=jd(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(xd,xd.exports);var Ld=xd.exports,Ad={},Nd={exports:{}};!function(e,t){!function(r,n){var i="function",s="undefined",a="object",o="string",c="major",d="model",l="name",p="type",u="vendor",h="version",m="architecture",f="console",g="mobile",v="tablet",y="smarttv",_="wearable",b="embedded",w="Amazon",S="Apple",C="ASUS",R="BlackBerry",T="Browser",P="Chrome",k="Firefox",E="Google",D="Huawei",O="LG",I="Microsoft",x="Motorola",M="Opera",j="Samsung",L="Sharp",A="Sony",N="Xiaomi",F="Zebra",B="Facebook",U="Chromium OS",z="Mac OS",V=function(e){for(var t={},r=0;r<e.length;r++)t[e[r].toUpperCase()]=e[r];return t},$=function(e,t){return typeof e===o&&-1!==q(t).indexOf(q(e))},q=function(e){return e.toLowerCase()},G=function(e,t){if(typeof e===o)return e=e.replace(/^\s\s*/,""),typeof t===s?e:e.substring(0,500)},W=function(e,t){for(var r,s,o,c,d,l,p=0;p<t.length&&!d;){var u=t[p],h=t[p+1];for(r=s=0;r<u.length&&!d&&u[r];)if(d=u[r++].exec(e))for(o=0;o<h.length;o++)l=d[++s],typeof(c=h[o])===a&&c.length>0?2===c.length?typeof c[1]==i?this[c[0]]=c[1].call(this,l):this[c[0]]=c[1]:3===c.length?typeof c[1]!==i||c[1].exec&&c[1].test?this[c[0]]=l?l.replace(c[1],c[2]):n:this[c[0]]=l?c[1].call(this,l,c[2]):n:4===c.length&&(this[c[0]]=l?c[3].call(this,l.replace(c[1],c[2])):n):this[c]=l||n;p+=2}},K=function(e,t){for(var r in t)if(typeof t[r]===a&&t[r].length>0){for(var i=0;i<t[r].length;i++)if($(t[r][i],e))return"?"===r?n:r}else if($(t[r],e))return"?"===r?n:r;return e},J={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},H={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[l,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[l,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[l,h],[/opios[\/ ]+([\w\.]+)/i],[h,[l,M+" Mini"]],[/\bopr\/([\w\.]+)/i],[h,[l,M]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[h,[l,"Baidu"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[l,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[l,"UC"+T]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[h,[l,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[l,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[l,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[h,[l,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[h,[l,"Smart Lenovo "+T]],[/(avast|avg)\/([\w\.]+)/i],[[l,/(.+)/,"$1 Secure "+T],h],[/\bfocus\/([\w\.]+)/i],[h,[l,k+" Focus"]],[/\bopt\/([\w\.]+)/i],[h,[l,M+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[l,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[l,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[l,M+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[l,"MIUI "+T]],[/fxios\/([-\w\.]+)/i],[h,[l,k]],[/\bqihu|(qi?ho?o?|360)browser/i],[[l,"360 "+T]],[/(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i],[[l,/(.+)/,"$1 "+T],h],[/samsungbrowser\/([\w\.]+)/i],[h,[l,j+" Internet"]],[/(comodo_dragon)\/([\w\.]+)/i],[[l,/_/g," "],h],[/metasr[\/ ]?([\d\.]+)/i],[h,[l,"Sogou Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[l,"Sogou Mobile"],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i],[l,h],[/(lbbrowser)/i,/\[(linkedin)app\]/i],[l],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[l,B],h],[/(Klarna)\/([\w\.]+)/i,/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i],[l,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[l,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[h,[l,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[l,P+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[l,P+" WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[l,"Android "+T]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[l,h],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[h,[l,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[h,l],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[l,[h,K,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[l,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[l,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[l,k+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[l,h],[/(cobalt)\/([\w\.]+)/i],[l,[h,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[m,"amd64"]],[/(ia32(?=;))/i],[[m,q]],[/((?:i[346]|x)86)[;\)]/i],[[m,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[m,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[m,"armhf"]],[/windows (ce|mobile); ppc;/i],[[m,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[m,/ower/,"",q]],[/(sun4\w)[;\)]/i],[[m,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[m,q]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[d,[u,j],[p,v]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[d,[u,j],[p,g]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[d,[u,S],[p,g]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[d,[u,S],[p,v]],[/(macintosh);/i],[d,[u,S]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[d,[u,L],[p,g]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[d,[u,D],[p,v]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[d,[u,D],[p,g]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[d,/_/g," "],[u,N],[p,g]],[/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[d,/_/g," "],[u,N],[p,v]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[d,[u,"OPPO"],[p,g]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[d,[u,"Vivo"],[p,g]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[d,[u,"Realme"],[p,g]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[d,[u,x],[p,g]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[d,[u,x],[p,v]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[d,[u,O],[p,v]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[d,[u,O],[p,g]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[d,[u,"Lenovo"],[p,v]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[d,/_/g," "],[u,"Nokia"],[p,g]],[/(pixel c)\b/i],[d,[u,E],[p,v]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[d,[u,E],[p,g]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[d,[u,A],[p,g]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[d,"Xperia Tablet"],[u,A],[p,v]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[d,[u,"OnePlus"],[p,g]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[d,[u,w],[p,v]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[d,/(.+)/g,"Fire Phone $1"],[u,w],[p,g]],[/(playbook);[-\w\),; ]+(rim)/i],[d,u,[p,v]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[d,[u,R],[p,g]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[d,[u,C],[p,v]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[d,[u,C],[p,g]],[/(nexus 9)/i],[d,[u,"HTC"],[p,v]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[u,[d,/_/g," "],[p,g]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[d,[u,"Acer"],[p,v]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[d,[u,"Meizu"],[p,g]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[d,[u,"Ulefone"],[p,g]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[u,d,[p,g]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[u,d,[p,v]],[/(surface duo)/i],[d,[u,I],[p,v]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[d,[u,"Fairphone"],[p,g]],[/(u304aa)/i],[d,[u,"AT&T"],[p,g]],[/\bsie-(\w*)/i],[d,[u,"Siemens"],[p,g]],[/\b(rct\w+) b/i],[d,[u,"RCA"],[p,v]],[/\b(venue[\d ]{2,7}) b/i],[d,[u,"Dell"],[p,v]],[/\b(q(?:mv|ta)\w+) b/i],[d,[u,"Verizon"],[p,v]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[d,[u,"Barnes & Noble"],[p,v]],[/\b(tm\d{3}\w+) b/i],[d,[u,"NuVision"],[p,v]],[/\b(k88) b/i],[d,[u,"ZTE"],[p,v]],[/\b(nx\d{3}j) b/i],[d,[u,"ZTE"],[p,g]],[/\b(gen\d{3}) b.+49h/i],[d,[u,"Swiss"],[p,g]],[/\b(zur\d{3}) b/i],[d,[u,"Swiss"],[p,v]],[/\b((zeki)?tb.*\b) b/i],[d,[u,"Zeki"],[p,v]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[u,"Dragon Touch"],d,[p,v]],[/\b(ns-?\w{0,9}) b/i],[d,[u,"Insignia"],[p,v]],[/\b((nxa|next)-?\w{0,9}) b/i],[d,[u,"NextBook"],[p,v]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[u,"Voice"],d,[p,g]],[/\b(lvtel\-)?(v1[12]) b/i],[[u,"LvTel"],d,[p,g]],[/\b(ph-1) /i],[d,[u,"Essential"],[p,g]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[d,[u,"Envizen"],[p,v]],[/\b(trio[-\w\. ]+) b/i],[d,[u,"MachSpeed"],[p,v]],[/\btu_(1491) b/i],[d,[u,"Rotor"],[p,v]],[/(shield[\w ]+) b/i],[d,[u,"Nvidia"],[p,v]],[/(sprint) (\w+)/i],[u,d,[p,g]],[/(kin\.[onetw]{3})/i],[[d,/\./g," "],[u,I],[p,g]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[d,[u,F],[p,v]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[d,[u,F],[p,g]],[/smart-tv.+(samsung)/i],[u,[p,y]],[/hbbtv.+maple;(\d+)/i],[[d,/^/,"SmartTV"],[u,j],[p,y]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[u,O],[p,y]],[/(apple) ?tv/i],[u,[d,S+" TV"],[p,y]],[/crkey/i],[[d,P+"cast"],[u,E],[p,y]],[/droid.+aft(\w+)( bui|\))/i],[d,[u,w],[p,y]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[d,[u,L],[p,y]],[/(bravia[\w ]+)( bui|\))/i],[d,[u,A],[p,y]],[/(mitv-\w{5}) bui/i],[d,[u,N],[p,y]],[/Hbbtv.*(technisat) (.*);/i],[u,d,[p,y]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[u,G],[d,G],[p,y]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[p,y]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[u,d,[p,f]],[/droid.+; (shield) bui/i],[d,[u,"Nvidia"],[p,f]],[/(playstation [345portablevi]+)/i],[d,[u,A],[p,f]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[d,[u,I],[p,f]],[/((pebble))app/i],[u,d,[p,_]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[d,[u,S],[p,_]],[/droid.+; (glass) \d/i],[d,[u,E],[p,_]],[/droid.+; (wt63?0{2,3})\)/i],[d,[u,F],[p,_]],[/(quest( 2| pro)?)/i],[d,[u,B],[p,_]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[u,[p,b]],[/(aeobc)\b/i],[d,[u,w],[p,b]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],[d,[p,g]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[d,[p,v]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[p,v]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[p,g]],[/(android[-\w\. ]{0,9});.+buil/i],[d,[u,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[l,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[l,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[l,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,l]],os:[[/microsoft (windows) (vista|xp)/i],[l,h],[/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i],[l,[h,K,J]],[/windows nt 6\.2; (arm)/i,/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[h,K,J],[l,"Windows"]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[l,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[l,z],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[h,l],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[l,h],[/\(bb(10);/i],[h,[l,R]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[l,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[l,k+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[l,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[h,[l,"watchOS"]],[/crkey\/([\d\.]+)/i],[h,[l,P+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[l,U],h],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[l,h],[/(sunos) ?([\w\.\d]*)/i],[[l,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[l,h]]},Y=function(e,t){if(typeof e===a&&(t=e,e=n),!(this instanceof Y))return new Y(e,t).getResult();var f=typeof r!==s&&r.navigator?r.navigator:n,y=e||(f&&f.userAgent?f.userAgent:""),_=f&&f.userAgentData?f.userAgentData:n,b=t?function(e,t){var r={};for(var n in e)t[n]&&t[n].length%2==0?r[n]=t[n].concat(e[n]):r[n]=e[n];return r}(H,t):H,w=f&&f.userAgent==y;return this.getBrowser=function(){var e={};return e[l]=n,e[h]=n,W.call(e,y,b.browser),e[c]=function(e){return typeof e===o?e.replace(/[^\d\.]/g,"").split(".")[0]:n}(e[h]),w&&f&&f.brave&&typeof f.brave.isBrave==i&&(e[l]="Brave"),e},this.getCPU=function(){var e={};return e[m]=n,W.call(e,y,b.cpu),e},this.getDevice=function(){var e={};return e[u]=n,e[d]=n,e[p]=n,W.call(e,y,b.device),w&&!e[p]&&_&&_.mobile&&(e[p]=g),w&&"Macintosh"==e[d]&&f&&typeof f.standalone!==s&&f.maxTouchPoints&&f.maxTouchPoints>2&&(e[d]="iPad",e[p]=v),e},this.getEngine=function(){var e={};return e[l]=n,e[h]=n,W.call(e,y,b.engine),e},this.getOS=function(){var e={};return e[l]=n,e[h]=n,W.call(e,y,b.os),w&&!e[l]&&_&&"Unknown"!=_.platform&&(e[l]=_.platform.replace(/chrome os/i,U).replace(/macos/i,z)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return y},this.setUA=function(e){return y=typeof e===o&&e.length>500?G(e,500):e,this},this.setUA(y),this};Y.VERSION="1.0.37",Y.BROWSER=V([l,h,c]),Y.CPU=V([m]),Y.DEVICE=V([d,u,p,f,g,y,v,_,b]),Y.ENGINE=Y.OS=V([l,h]),e.exports&&(t=e.exports=Y),t.UAParser=Y;var Q=typeof r!==s&&(r.jQuery||r.Zepto);if(Q&&!Q.ua){var X=new Y;Q.ua=X.getResult(),Q.ua.get=function(){return X.getUA()},Q.ua.set=function(e){X.setUA(e);var t=X.getResult();for(var r in t)Q.ua[r]=t[r]}}}("object"==typeof window?window:Ki)}(Nd,Nd.exports);var Fd=Nd.exports,Bd={},Ud=Ki&&Ki.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Bd,"__esModule",{value:!0}),Bd.Logger=void 0;const zd=Ud(Ld),Vd="mediasoup-client";Bd.Logger=class{constructor(e){e?(this._debug=(0,zd.default)(`${Vd}:${e}`),this._warn=(0,zd.default)(`${Vd}:WARN:${e}`),this._error=(0,zd.default)(`${Vd}:ERROR:${e}`)):(this._debug=(0,zd.default)(Vd),this._warn=(0,zd.default)(`${Vd}:WARN`),this._error=(0,zd.default)(`${Vd}: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}};var $d={};function qd(){}function Gd(){Gd.init.call(this)}function Wd(e){return void 0===e._maxListeners?Gd.defaultMaxListeners:e._maxListeners}function Kd(e,t,r,n){var i,s,a,o;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((s=e._events)?(s.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),s=e._events),a=s[t]):(s=e._events=new qd,e._eventsCount=0),a){if("function"==typeof a?a=s[t]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),!a.warned&&(i=Wd(e))&&i>0&&a.length>i){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,o=c,"function"==typeof console.warn?console.warn(o):console.log(o)}}else a=s[t]=r,++e._eventsCount;return e}function Jd(e,t,r){var n=!1;function i(){e.removeListener(t,i),n||(n=!0,r.apply(e,arguments))}return i.listener=r,i}function Hd(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function Yd(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}qd.prototype=Object.create(null),Gd.EventEmitter=Gd,Gd.usingDomains=!1,Gd.prototype.domain=void 0,Gd.prototype._events=void 0,Gd.prototype._maxListeners=void 0,Gd.defaultMaxListeners=10,Gd.init=function(){this.domain=null,Gd.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new qd,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Gd.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},Gd.prototype.getMaxListeners=function(){return Wd(this)},Gd.prototype.emit=function(e){var t,r,n,i,s,a,o,c="error"===e;if(a=this._events)c=c&&null==a.error;else if(!c)return!1;if(o=this.domain,c){if(t=arguments[1],!o){if(t instanceof Error)throw t;var d=new Error('Uncaught, unspecified "error" event. ('+t+")");throw d.context=t,d}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=o,t.domainThrown=!1,o.emit("error",t),!1}if(!(r=a[e]))return!1;var l="function"==typeof r;switch(n=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var n=e.length,i=Yd(e,n),s=0;s<n;++s)i[s].call(r)}(r,l,this);break;case 2:!function(e,t,r,n){if(t)e.call(r,n);else for(var i=e.length,s=Yd(e,i),a=0;a<i;++a)s[a].call(r,n)}(r,l,this,arguments[1]);break;case 3:!function(e,t,r,n,i){if(t)e.call(r,n,i);else for(var s=e.length,a=Yd(e,s),o=0;o<s;++o)a[o].call(r,n,i)}(r,l,this,arguments[1],arguments[2]);break;case 4:!function(e,t,r,n,i,s){if(t)e.call(r,n,i,s);else for(var a=e.length,o=Yd(e,a),c=0;c<a;++c)o[c].call(r,n,i,s)}(r,l,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(n-1),s=1;s<n;s++)i[s-1]=arguments[s];!function(e,t,r,n){if(t)e.apply(r,n);else for(var i=e.length,s=Yd(e,i),a=0;a<i;++a)s[a].apply(r,n)}(r,l,this,i)}return!0},Gd.prototype.addListener=function(e,t){return Kd(this,e,t,!1)},Gd.prototype.on=Gd.prototype.addListener,Gd.prototype.prependListener=function(e,t){return Kd(this,e,t,!0)},Gd.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,Jd(this,e,t)),this},Gd.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,Jd(this,e,t)),this},Gd.prototype.removeListener=function(e,t){var r,n,i,s,a;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(n=this._events))return this;if(!(r=n[e]))return this;if(r===t||r.listener&&r.listener===t)0==--this._eventsCount?this._events=new qd:(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,s=r.length;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=r[s].listener,i=s;break}if(i<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new qd,this;delete n[e]}else!function(e,t){for(var r=t,n=r+1,i=e.length;n<i;r+=1,n+=1)e[r]=e[n];e.pop()}(r,i);n.removeListener&&this.emit("removeListener",e,a||t)}return this},Gd.prototype.off=function(e,t){return this.removeListener(e,t)},Gd.prototype.removeAllListeners=function(e){var t,r;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=new qd,this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=new qd:delete r[e]),this;if(0===arguments.length){for(var n,i=Object.keys(r),s=0;s<i.length;++s)"removeListener"!==(n=i[s])&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events=new qd,this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(t)do{this.removeListener(e,t[t.length-1])}while(t[0]);return this},Gd.prototype.listeners=function(e){var t,r,n=this._events;return r=n&&(t=n[e])?"function"==typeof t?[t.listener||t]:function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(t):[],r},Gd.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):Hd.call(e,t)},Gd.prototype.listenerCount=Hd,Gd.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var Qd=Hi(Object.freeze({__proto__:null,EventEmitter:Gd,default:Gd}));Object.defineProperty($d,"__esModule",{value:!0}),$d.EnhancedEventEmitter=void 0;const Xd=Qd,Zd=new Bd.Logger("EnhancedEventEmitter");class el extends Xd.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){const r=super.listenerCount(e);try{return super.emit(e,...t)}catch(t){return Zd.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,t),Boolean(r)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}}$d.EnhancedEventEmitter=el;var tl={};Object.defineProperty(tl,"__esModule",{value:!0}),tl.InvalidStateError=tl.UnsupportedError=void 0;class rl extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,rl):this.stack=new Error(e).stack}}tl.UnsupportedError=rl;class nl extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,nl):this.stack=new Error(e).stack}}tl.InvalidStateError=nl;var il={};Object.defineProperty(il,"__esModule",{value:!0}),il.generateRandomNumber=il.clone=void 0,il.clone=function(e,t){return void 0===e?t:JSON.parse(JSON.stringify(e))},il.generateRandomNumber=function(){return Math.round(1e7*Math.random())};var sl={},al={};!function(e){const t=Ld("h264-profile-level-id");t.log=console.info.bind(console);e.ProfileConstrainedBaseline=1,e.ProfileBaseline=2,e.ProfileMain=3,e.ProfileConstrainedHigh=4,e.ProfileHigh=5;const r=0,n=10;e.Level1_b=r,e.Level1=n,e.Level1_1=11,e.Level1_2=12,e.Level1_3=13,e.Level2=20,e.Level2_1=21,e.Level2_2=22,e.Level3=30,e.Level3_1=31,e.Level3_2=32,e.Level4=40,e.Level4_1=41,e.Level4_2=42,e.Level5=50,e.Level5_1=51,e.Level5_2=52;class i{constructor(e,t){this.profile=e,this.level=t}}e.ProfileLevelId=i;const s=new i(1,31);class a{constructor(e){this._mask=~d("x",e),this._maskedValue=d("1",e)}isMatch(e){return this._maskedValue===(e&this._mask)}}class o{constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}}const c=[new o(66,new a("x1xx0000"),1),new o(77,new a("1xxx0000"),1),new o(88,new a("11xx0000"),1),new o(66,new a("x0xx0000"),2),new o(88,new a("10xx0000"),2),new o(77,new a("0x0x0000"),3),new o(100,new a("00000000"),5),new o(100,new a("00001100"),4)];function d(e,t){return(t[0]===e)<<7|(t[1]===e)<<6|(t[2]===e)<<5|(t[3]===e)<<4|(t[4]===e)<<3|(t[5]===e)<<2|(t[6]===e)<<1|(t[7]===e)<<0}function l(e={}){const t=e["level-asymmetry-allowed"];return 1===t||"1"===t}e.parseProfileLevelId=function(e){if("string"!=typeof e||6!==e.length)return null;const s=parseInt(e,16);if(0===s)return null;const a=255&s,o=s>>8&255,d=s>>16&255;let l;switch(a){case 11:l=0!=(16&o)?r:11;break;case n:case 12:case 13:case 20:case 21:case 22:case 30:case 31:case 32:case 40:case 41:case 42:case 50:case 51:case 52:l=a;break;default:return t("parseProfileLevelId() | unrecognized level_idc:%s",a),null}for(const e of c)if(d===e.profile_idc&&e.profile_iop.isMatch(o))return new i(e.profile,l);return t("parseProfileLevelId() | unrecognized profile_idc/profile_iop combination"),null},e.profileLevelIdToString=function(e){if(e.level==r)switch(e.profile){case 1:return"42f00b";case 2:return"42100b";case 3:return"4d100b";default:return t("profileLevelIdToString() | Level 1_b not is allowed for profile:%s",e.profile),null}let n;switch(e.profile){case 1:n="42e0";break;case 2:n="4200";break;case 3:n="4d00";break;case 4:n="640c";break;case 5:n="6400";break;default:return t("profileLevelIdToString() | unrecognized profile:%s",e.profile),null}let i=e.level.toString(16);return 1===i.length&&(i=`0${i}`),`${n}${i}`},e.parseSdpProfileLevelId=function(t={}){const r=t["profile-level-id"];return r?e.parseProfileLevelId(r):s},e.isSameProfile=function(t={},r={}){const n=e.parseSdpProfileLevelId(t),i=e.parseSdpProfileLevelId(r);return Boolean(n&&i&&n.profile===i.profile)},e.generateProfileLevelIdForAnswer=function(s={},a={}){if(!s["profile-level-id"]&&!a["profile-level-id"])return t("generateProfileLevelIdForAnswer() | no profile-level-id in local and remote params"),null;const o=e.parseSdpProfileLevelId(s),c=e.parseSdpProfileLevelId(a);if(!o)throw new TypeError("invalid local_profile_level_id");if(!c)throw new TypeError("invalid remote_profile_level_id");if(o.profile!==c.profile)throw new TypeError("H264 Profile mismatch");const d=l(s)&&l(a),p=o.level,u=c.level,h=function(e,t){return e===r?t!==n&&t!==r:t===r?e!==n:e<t}(m=p,f=u)?m:f;var m,f;const g=d?p:h;return t("generateProfileLevelIdForAnswer() | result: [profile:%s, level:%s]",o.profile,g),e.profileLevelIdToString(new i(o.profile,g))}}(al);var ol=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),cl=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),dl=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ol(t,e,r);return cl(t,e),t};Object.defineProperty(sl,"__esModule",{value:!0}),sl.canReceive=sl.canSend=sl.generateProbatorRtpParameters=sl.reduceCodecs=sl.getSendingRemoteRtpParameters=sl.getSendingRtpParameters=sl.getRecvRtpCapabilities=sl.getExtendedRtpCapabilities=sl.validateSctpStreamParameters=sl.validateSctpParameters=sl.validateNumSctpStreams=sl.validateSctpCapabilities=sl.validateRtcpParameters=sl.validateRtpEncodingParameters=sl.validateRtpHeaderExtensionParameters=sl.validateRtpCodecParameters=sl.validateRtpParameters=sl.validateRtpHeaderExtension=sl.validateRtcpFeedback=sl.validateRtpCodecCapability=sl.validateRtpCapabilities=void 0;const ll=dl(al),pl=dl(il);function ul(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if(e.kind=r[1].toLowerCase(),e.preferredPayloadType&&"number"!=typeof e.preferredPayloadType)throw new TypeError("invalid codec.preferredPayloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===e.kind?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError(`invalid codec parameter [key:${t}s, value:${r}]`);if("apt"===t&&"number"!=typeof r)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const t of e.rtcpFeedback)hl(t)}function hl(e){if("object"!=typeof e)throw new TypeError("fb is not an object");if(!e.type||"string"!=typeof e.type)throw new TypeError("missing fb.type");e.parameter&&"string"==typeof e.parameter||(e.parameter="")}function ml(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if("audio"!==e.kind&&"video"!==e.kind)throw new TypeError("invalid ext.kind");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.preferredId)throw new TypeError("missing ext.preferredId");if(e.preferredEncrypt&&"boolean"!=typeof e.preferredEncrypt)throw new TypeError("invalid ext.preferredEncrypt");if(e.preferredEncrypt||(e.preferredEncrypt=!1),e.direction&&"string"!=typeof e.direction)throw new TypeError("invalid ext.direction");e.direction||(e.direction="sendrecv")}function fl(e){if("object"!=typeof e)throw new TypeError("params is not an object");if(e.mid&&"string"!=typeof e.mid)throw new TypeError("params.mid is not a string");if(!Array.isArray(e.codecs))throw new TypeError("missing params.codecs");for(const t of e.codecs)gl(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("params.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)vl(t);if(e.encodings&&!Array.isArray(e.encodings))throw new TypeError("params.encodings is not an array");e.encodings||(e.encodings=[]);for(const t of e.encodings)yl(t);if(e.rtcp&&"object"!=typeof e.rtcp)throw new TypeError("params.rtcp is not an object");e.rtcp||(e.rtcp={}),_l(e.rtcp)}function gl(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if("number"!=typeof e.payloadType)throw new TypeError("missing codec.payloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===r[1].toLowerCase()?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError(`invalid codec parameter [key:${t}s, value:${r}]`);if("apt"===t&&"number"!=typeof r)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const t of e.rtcpFeedback)hl(t)}function vl(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.id)throw new TypeError("missing ext.id");if(e.encrypt&&"boolean"!=typeof e.encrypt)throw new TypeError("invalid ext.encrypt");e.encrypt||(e.encrypt=!1),e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError("invalid header extension parameter")}}function yl(e){if("object"!=typeof e)throw new TypeError("encoding is not an object");if(e.ssrc&&"number"!=typeof e.ssrc)throw new TypeError("invalid encoding.ssrc");if(e.rid&&"string"!=typeof e.rid)throw new TypeError("invalid encoding.rid");if(e.rtx&&"object"!=typeof e.rtx)throw new TypeError("invalid encoding.rtx");if(e.rtx&&"number"!=typeof e.rtx.ssrc)throw new TypeError("missing encoding.rtx.ssrc");if(e.dtx&&"boolean"==typeof e.dtx||(e.dtx=!1),e.scalabilityMode&&"string"!=typeof e.scalabilityMode)throw new TypeError("invalid encoding.scalabilityMode")}function _l(e){if("object"!=typeof e)throw new TypeError("rtcp is not an object");if(e.cname&&"string"!=typeof e.cname)throw new TypeError("invalid rtcp.cname");e.reducedSize&&"boolean"==typeof e.reducedSize||(e.reducedSize=!0)}function bl(e){if("object"!=typeof e)throw new TypeError("numStreams is not an object");if("number"!=typeof e.OS)throw new TypeError("missing numStreams.OS");if("number"!=typeof e.MIS)throw new TypeError("missing numStreams.MIS")}function wl(e){return!!e&&/.+\/rtx$/i.test(e.mimeType)}function Sl(e,t,{strict:r=!1,modify:n=!1}={}){const i=e.mimeType.toLowerCase();if(i!==t.mimeType.toLowerCase())return!1;if(e.clockRate!==t.clockRate)return!1;if(e.channels!==t.channels)return!1;switch(i){case"video/h264":if(r){if((e.parameters["packetization-mode"]||0)!==(t.parameters["packetization-mode"]||0))return!1;if(!ll.isSameProfile(e.parameters,t.parameters))return!1;let r;try{r=ll.generateProfileLevelIdForAnswer(e.parameters,t.parameters)}catch(e){return!1}n&&(r?(e.parameters["profile-level-id"]=r,t.parameters["profile-level-id"]=r):(delete e.parameters["profile-level-id"],delete t.parameters["profile-level-id"]))}break;case"video/vp9":if(r){if((e.parameters["profile-id"]||0)!==(t.parameters["profile-id"]||0))return!1}}return!0}function Cl(e,t){return(!e.kind||!t.kind||e.kind===t.kind)&&e.uri===t.uri}function Rl(e,t){const r=[];for(const n of e.rtcpFeedback||[]){const e=(t.rtcpFeedback||[]).find((e=>e.type===n.type&&(e.parameter===n.parameter||!e.parameter&&!n.parameter)));e&&r.push(e)}return r}sl.validateRtpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(e.codecs&&!Array.isArray(e.codecs))throw new TypeError("caps.codecs is not an array");e.codecs||(e.codecs=[]);for(const t of e.codecs)ul(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)ml(t)},sl.validateRtpCodecCapability=ul,sl.validateRtcpFeedback=hl,sl.validateRtpHeaderExtension=ml,sl.validateRtpParameters=fl,sl.validateRtpCodecParameters=gl,sl.validateRtpHeaderExtensionParameters=vl,sl.validateRtpEncodingParameters=yl,sl.validateRtcpParameters=_l,sl.validateSctpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(!e.numStreams||"object"!=typeof e.numStreams)throw new TypeError("missing caps.numStreams");bl(e.numStreams)},sl.validateNumSctpStreams=bl,sl.validateSctpParameters=function(e){if("object"!=typeof e)throw new TypeError("params is not an object");if("number"!=typeof e.port)throw new TypeError("missing params.port");if("number"!=typeof e.OS)throw new TypeError("missing params.OS");if("number"!=typeof e.MIS)throw new TypeError("missing params.MIS");if("number"!=typeof e.maxMessageSize)throw new TypeError("missing params.maxMessageSize")},sl.validateSctpStreamParameters=function(e){if("object"!=typeof e)throw new TypeError("params is not an object");if("number"!=typeof e.streamId)throw new TypeError("missing params.streamId");let t=!1;if("boolean"==typeof e.ordered?t=!0:e.ordered=!0,e.maxPacketLifeTime&&"number"!=typeof e.maxPacketLifeTime)throw new TypeError("invalid params.maxPacketLifeTime");if(e.maxRetransmits&&"number"!=typeof e.maxRetransmits)throw new TypeError("invalid params.maxRetransmits");if(e.maxPacketLifeTime&&e.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(t&&e.ordered&&(e.maxPacketLifeTime||e.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(t||!e.maxPacketLifeTime&&!e.maxRetransmits||(e.ordered=!1),e.label&&"string"!=typeof e.label)throw new TypeError("invalid params.label");if(e.protocol&&"string"!=typeof e.protocol)throw new TypeError("invalid params.protocol")},sl.getExtendedRtpCapabilities=function(e,t){const r={codecs:[],headerExtensions:[]};for(const n of t.codecs||[]){if(wl(n))continue;const t=(e.codecs||[]).find((e=>Sl(e,n,{strict:!0,modify:!0})));if(!t)continue;const i={mimeType:t.mimeType,kind:t.kind,clockRate:t.clockRate,channels:t.channels,localPayloadType:t.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:t.parameters,remoteParameters:n.parameters,rtcpFeedback:Rl(t,n)};r.codecs.push(i)}for(const n of r.codecs){const r=e.codecs.find((e=>wl(e)&&e.parameters.apt===n.localPayloadType)),i=t.codecs.find((e=>wl(e)&&e.parameters.apt===n.remotePayloadType));r&&i&&(n.localRtxPayloadType=r.preferredPayloadType,n.remoteRtxPayloadType=i.preferredPayloadType)}for(const n of t.headerExtensions){const t=e.headerExtensions.find((e=>Cl(e,n)));if(!t)continue;const i={kind:n.kind,uri:n.uri,sendId:t.preferredId,recvId:n.preferredId,encrypt:t.preferredEncrypt,direction:"sendrecv"};switch(n.direction){case"sendrecv":i.direction="sendrecv";break;case"recvonly":i.direction="sendonly";break;case"sendonly":i.direction="recvonly";break;case"inactive":i.direction="inactive"}r.headerExtensions.push(i)}return r},sl.getRecvRtpCapabilities=function(e){const t={codecs:[],headerExtensions:[]};for(const r of e.codecs){const e={mimeType:r.mimeType,kind:r.kind,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(e),!r.remoteRtxPayloadType)continue;const n={mimeType:`${r.kind}/rtx`,kind:r.kind,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(const r of e.headerExtensions){if("sendrecv"!==r.direction&&"recvonly"!==r.direction)continue;const e={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt,direction:r.direction};t.headerExtensions.push(e)}return t},sl.getSendingRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const n of t.codecs){if(n.kind!==e)continue;const t={mimeType:n.mimeType,payloadType:n.localPayloadType,clockRate:n.clockRate,channels:n.channels,parameters:n.localParameters,rtcpFeedback:n.rtcpFeedback};if(r.codecs.push(t),n.localRtxPayloadType){const e={mimeType:`${n.kind}/rtx`,payloadType:n.localRtxPayloadType,clockRate:n.clockRate,parameters:{apt:n.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const n of t.headerExtensions){if(n.kind&&n.kind!==e||"sendrecv"!==n.direction&&"sendonly"!==n.direction)continue;const t={uri:n.uri,id:n.sendId,encrypt:n.encrypt,parameters:{}};r.headerExtensions.push(t)}return r},sl.getSendingRemoteRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const n of t.codecs){if(n.kind!==e)continue;const t={mimeType:n.mimeType,payloadType:n.localPayloadType,clockRate:n.clockRate,channels:n.channels,parameters:n.remoteParameters,rtcpFeedback:n.rtcpFeedback};if(r.codecs.push(t),n.localRtxPayloadType){const e={mimeType:`${n.kind}/rtx`,payloadType:n.localRtxPayloadType,clockRate:n.clockRate,parameters:{apt:n.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const n of t.headerExtensions){if(n.kind&&n.kind!==e||"sendrecv"!==n.direction&&"sendonly"!==n.direction)continue;const t={uri:n.uri,id:n.sendId,encrypt:n.encrypt,parameters:{}};r.headerExtensions.push(t)}if(r.headerExtensions.some((e=>"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"===e.uri)))for(const e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter((e=>"goog-remb"!==e.type));else if(r.headerExtensions.some((e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"===e.uri)))for(const e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter((e=>"transport-cc"!==e.type));else for(const e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter((e=>"transport-cc"!==e.type&&"goog-remb"!==e.type));return r},sl.reduceCodecs=function(e,t){const r=[];if(t){for(let n=0;n<e.length;++n)if(Sl(e[n],t)){r.push(e[n]),wl(e[n+1])&&r.push(e[n+1]);break}if(0===r.length)throw new TypeError("no matching codec found")}else r.push(e[0]),wl(e[1])&&r.push(e[1]);return r},sl.generateProbatorRtpParameters=function(e){fl(e=pl.clone(e,{}));const t={mid:"probator",codecs:[],headerExtensions:[],encodings:[{ssrc:1234}],rtcp:{cname:"probator"}};return t.codecs.push(e.codecs[0]),t.codecs[0].payloadType=127,t.headerExtensions=e.headerExtensions,t},sl.canSend=function(e,t){return t.codecs.some((t=>t.kind===e))},sl.canReceive=function(e,t){if(fl(e),0===e.codecs.length)return!1;const r=e.codecs[0];return t.codecs.some((e=>e.remotePayloadType===r.payloadType))};var Tl={},Pl={},kl={};Object.defineProperty(kl,"__esModule",{value:!0}),kl.Logger=void 0;const El=Ld,Dl="awaitqueue";kl.Logger=class{constructor(e){e?(this._debug=(0,El.default)(`${Dl}:${e}`),this._warn=(0,El.default)(`${Dl}:WARN:${e}`),this._error=(0,El.default)(`${Dl}:ERROR:${e}`)):(this._debug=(0,El.default)(Dl),this._warn=(0,El.default)(`${Dl}:WARN`),this._error=(0,El.default)(`${Dl}: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}},Object.defineProperty(Pl,"__esModule",{value:!0}),Pl.AwaitQueue=Pl.AwaitQueueRemovedTaskError=Pl.AwaitQueueStoppedError=void 0;const Ol=new kl.Logger;class Il extends Error{constructor(e){super(e??"AwaitQueue stopped"),this.name="AwaitQueueStoppedError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,Il)}}Pl.AwaitQueueStoppedError=Il;class xl extends Error{constructor(e){super(e??"AwaitQueue task removed"),this.name="AwaitQueueRemovedTaskError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,xl)}}Pl.AwaitQueueRemovedTaskError=xl;
|
|
1
|
+
this.whereby=this.whereby||{},this.whereby.react=function(e,t){"use strict";function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var n=r(t);function i(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}function s(e,t,r,n){return new(r||(r=Promise))((function(i,s){function a(e){try{c(n.next(e))}catch(e){s(e)}}function o(e){try{c(n.throw(e))}catch(e){s(e)}}function c(e){e.done?i(e.value):function(e){return e instanceof r?e:new r((function(t){t(e)}))}(e.value).then(a,o)}c((n=n.apply(e,t||[])).next())}))}function a(e,{delay:t=500,edges:r}={}){let n,i=0;return(...s)=>{i+=1,r&&1===i&&e(...s),clearTimeout(n),n=setTimeout((()=>{(!r||i>1)&&e(...s),n=void 0,i=0}),t)}}"function"==typeof SuppressedError&&SuppressedError;var o=e=>{var{muted:t,mirror:r=!1,stream:s,onResize:o,onSetAspectRatio:c}=e,d=i(e,["muted","mirror","stream","onResize","onSetAspectRatio"]);const l=n.useRef(null);return n.useEffect((()=>{if(!l.current)return;const e=new ResizeObserver(a((()=>{if(l.current&&(null==s?void 0:s.id)){o&&o({width:l.current.clientWidth,height:l.current.clientHeight,stream:s});const e=l.current.videoHeight,t=l.current.videoWidth;t&&e&&t+e>20&&c&&c({aspectRatio:t/e})}}),{delay:1e3,edges:!0}));return e.observe(l.current),()=>{e.disconnect()}}),[s]),n.useEffect((()=>{l.current&&(l.current.srcObject!==s&&(l.current.srcObject=s),l.current.muted!==t&&(l.current.muted=Boolean(t)))}),[t,s,l]),n.createElement("video",Object.assign({ref:l,autoPlay:!0,playsInline:!0},d,{style:Object.assign({transform:r?"scaleX(-1)":"none",width:"100%",height:"100%"},d.style)}))},c=(()=>"function"==typeof Symbol&&Symbol.observable||"@@observable")(),d=()=>Math.random().toString(36).substring(7).split("").join("."),l={INIT:`@@redux/INIT${d()}`,REPLACE:`@@redux/REPLACE${d()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${d()}`};function p(e){if("object"!=typeof e||null===e)return!1;let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function u(e){if(void 0===e)return"undefined";if(null===e)return"null";const t=typeof e;switch(t){case"boolean":case"string":case"number":case"symbol":case"function":return t}if(Array.isArray(e))return"array";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";const r=function(e){return"function"==typeof e.constructor?e.constructor.name:null}(e);switch(r){case"Symbol":case"Promise":case"WeakMap":case"WeakSet":case"Map":case"Set":return r}return Object.prototype.toString.call(e).slice(8,-1).toLowerCase().replace(/\s/g,"")}function h(e){let t=typeof e;return t=u(e),t}function m(e,t,r){if("function"!=typeof e)throw new Error(`Expected the root reducer to be a function. Instead, received: '${h(e)}'`);if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error("It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(`Expected the enhancer to be a function. Instead, received: '${h(r)}'`);return r(m)(e,t)}let n=e,i=t,s=new Map,a=s,o=0,d=!1;function u(){a===s&&(a=new Map,s.forEach(((e,t)=>{a.set(t,e)})))}function f(){if(d)throw new Error("You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return i}function g(e){if("function"!=typeof e)throw new Error(`Expected the listener to be a function. Instead, received: '${h(e)}'`);if(d)throw new Error("You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");let t=!0;u();const r=o++;return a.set(r,e),function(){if(t){if(d)throw new Error("You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");t=!1,u(),a.delete(r),s=null}}}function v(e){if(!p(e))throw new Error(`Actions must be plain objects. Instead, the actual type was: '${h(e)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);if(void 0===e.type)throw new Error('Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');if("string"!=typeof e.type)throw new Error(`Action "type" property must be a string. Instead, the actual type was: '${h(e.type)}'. Value was: '${e.type}' (stringified)`);if(d)throw new Error("Reducers may not dispatch actions.");try{d=!0,i=n(i,e)}finally{d=!1}return(s=a).forEach((e=>{e()})),e}v({type:l.INIT});return{dispatch:v,subscribe:g,getState:f,replaceReducer:function(e){if("function"!=typeof e)throw new Error(`Expected the nextReducer to be a function. Instead, received: '${h(e)}`);n=e,v({type:l.REPLACE})},[c]:function(){const e=g;return{subscribe(t){if("object"!=typeof t||null===t)throw new Error(`Expected the observer to be an object. Instead, received: '${h(t)}'`);function r(){const e=t;e.next&&e.next(f())}r();return{unsubscribe:e(r)}},[c](){return this}}}}}function f(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e);try{throw new Error(e)}catch(e){}}function g(e){const t=Object.keys(e),r={};for(let n=0;n<t.length;n++){const i=t[n];void 0===e[i]&&f(`No reducer provided for key "${i}"`),"function"==typeof e[i]&&(r[i]=e[i])}const n=Object.keys(r);let i,s;i={};try{!function(e){Object.keys(e).forEach((t=>{const r=e[t];if(void 0===r(void 0,{type:l.INIT}))throw new Error(`The slice reducer for key "${t}" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);if(void 0===r(void 0,{type:l.PROBE_UNKNOWN_ACTION()}))throw new Error(`The slice reducer for key "${t}" returned undefined when probed with a random type. Don't try to handle '${l.INIT}' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`)}))}(r)}catch(e){s=e}return function(e={},t){if(s)throw s;{const n=function(e,t,r,n){const i=Object.keys(t),s=r&&r.type===l.INIT?"preloadedState argument passed to createStore":"previous state received by the reducer";if(0===i.length)return"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";if(!p(e))return`The ${s} has unexpected type of "${h(e)}". Expected argument to be an object with the following keys: "${i.join('", "')}"`;const a=Object.keys(e).filter((e=>!t.hasOwnProperty(e)&&!n[e]));return a.forEach((e=>{n[e]=!0})),r&&r.type===l.REPLACE?void 0:a.length>0?`Unexpected ${a.length>1?"keys":"key"} "${a.join('", "')}" found in ${s}. Expected to find one of the known reducer keys instead: "${i.join('", "')}". Unexpected keys will be ignored.`:void 0}(e,r,t,i);n&&f(n)}let a=!1;const o={};for(let i=0;i<n.length;i++){const s=n[i],c=r[s],d=e[s],l=c(d,t);if(void 0===l){const e=t&&t.type;throw new Error(`When called with an action of type ${e?`"${String(e)}"`:"(unknown type)"}, the slice reducer for key "${s}" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`)}o[s]=l,a=a||l!==d}return a=a||n.length!==Object.keys(e).length,a?o:e}}function v(...e){return 0===e.length?e=>e:1===e.length?e[0]:e.reduce(((e,t)=>(...r)=>e(t(...r))))}function y(e){return p(e)&&"type"in e&&"string"==typeof e.type}var _=Symbol.for("immer-nothing"),b=Symbol.for("immer-draftable"),w=Symbol.for("immer-state"),S=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},"This object has been frozen and should not be mutated",function(e){return"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+e},"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.","Immer forbids circular references","The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},"Object.defineProperty() cannot be used on an Immer draft","Object.setPrototypeOf() cannot be used on an Immer draft","Immer only supports deleting array indices","Immer only supports setting array indices and the 'length' property",function(e){return`'original' expects a draft, got: ${e}`}];function C(e,...t){{const r=S[e],n="function"==typeof r?r.apply(null,t):r;throw new Error(`[Immer] ${n}`)}}var R=Object.getPrototypeOf;function T(e){return!!e&&!!e[w]}function P(e){return!!e&&(E(e)||Array.isArray(e)||!!e[b]||!!e.constructor?.[b]||M(e)||j(e))}var k=Object.prototype.constructor.toString();function E(e){if(!e||"object"!=typeof e)return!1;const t=R(e);if(null===t)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===k}function D(e,t){0===O(e)?Object.entries(e).forEach((([r,n])=>{t(r,n,e)})):e.forEach(((r,n)=>t(n,r,e)))}function O(e){const t=e[w];return t?t.type_:Array.isArray(e)?1:M(e)?2:j(e)?3:0}function I(e,t){return 2===O(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function x(e,t,r){const n=O(e);2===n?e.set(t,r):3===n?e.add(r):e[t]=r}function M(e){return e instanceof Map}function j(e){return e instanceof Set}function L(e){return e.copy_||e.base_}function A(e,t){if(M(e))return new Map(e);if(j(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);if(!t&&E(e)){if(!R(e)){const t=Object.create(null);return Object.assign(t,e)}return{...e}}const r=Object.getOwnPropertyDescriptors(e);delete r[w];let n=Reflect.ownKeys(r);for(let t=0;t<n.length;t++){const i=n[t],s=r[i];!1===s.writable&&(s.writable=!0,s.configurable=!0),(s.get||s.set)&&(r[i]={configurable:!0,writable:!0,enumerable:s.enumerable,value:e[i]})}return Object.create(R(e),r)}function N(e,t=!1){return B(e)||T(e)||!P(e)||(O(e)>1&&(e.set=e.add=e.clear=e.delete=F),Object.freeze(e),t&&D(e,((e,t)=>N(t,!0)))),e}function F(){C(2)}function B(e){return Object.isFrozen(e)}var U,z={};function V(e){const t=z[e];return t||C(0,e),t}function $(){return U}function G(e,t){t&&(V("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function q(e){W(e),e.drafts_.forEach(K),e.drafts_=null}function W(e){e===U&&(U=e.parent_)}function H(e){return U={drafts_:[],parent_:U,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function K(e){const t=e[w];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function J(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return void 0!==e&&e!==r?(r[w].modified_&&(q(t),C(4)),P(e)&&(e=Y(t,e),t.parent_||X(t,e)),t.patches_&&V("Patches").generateReplacementPatches_(r[w].base_,e,t.patches_,t.inversePatches_)):e=Y(t,r,[]),q(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==_?e:void 0}function Y(e,t,r){if(B(t))return t;const n=t[w];if(!n)return D(t,((i,s)=>Q(e,n,t,i,s,r))),t;if(n.scope_!==e)return t;if(!n.modified_)return X(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const t=n.copy_;let i=t,s=!1;3===n.type_&&(i=new Set(t),t.clear(),s=!0),D(i,((i,a)=>Q(e,n,t,i,a,r,s))),X(e,t,!1),r&&e.patches_&&V("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function Q(e,t,r,n,i,s,a){if(i===r&&C(5),T(i)){const a=Y(e,i,s&&t&&3!==t.type_&&!I(t.assigned_,n)?s.concat(n):void 0);if(x(r,n,a),!T(a))return;e.canAutoFreeze_=!1}else a&&r.add(i);if(P(i)&&!B(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Y(e,i),t&&t.scope_.parent_||X(e,i)}}function X(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&N(t,r)}var Z={get(e,t){if(t===w)return e;const r=L(e);if(!I(r,t))return function(e,t,r){const n=re(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}(e,r,t);const n=r[t];return e.finalized_||!P(n)?n:n===te(e.base_,t)?(ie(e),e.copy_[t]=se(n,e)):n},has:(e,t)=>t in L(e),ownKeys:e=>Reflect.ownKeys(L(e)),set(e,t,r){const n=re(L(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const n=te(L(e),t),a=n?.[w];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(((i=r)===(s=n)?0!==i||1/i==1/s:i!=i&&s!=s)&&(void 0!==r||I(e.base_,t)))return!0;ie(e),ne(e)}var i,s;return e.copy_[t]===r&&(void 0!==r||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty:(e,t)=>(void 0!==te(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,ie(e),ne(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0),getOwnPropertyDescriptor(e,t){const r=L(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:n.enumerable,value:r[t]}:n},defineProperty(){C(11)},getPrototypeOf:e=>R(e.base_),setPrototypeOf(){C(12)}},ee={};function te(e,t){const r=e[w];return(r?L(r):e)[t]}function re(e,t){if(!(t in e))return;let r=R(e);for(;r;){const e=Object.getOwnPropertyDescriptor(r,t);if(e)return e;r=R(r)}}function ne(e){e.modified_||(e.modified_=!0,e.parent_&&ne(e.parent_))}function ie(e){e.copy_||(e.copy_=A(e.base_,e.scope_.immer_.useStrictShallowCopy_))}D(Z,((e,t)=>{ee[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),ee.deleteProperty=function(e,t){return isNaN(parseInt(t))&&C(13),ee.set.call(this,e,t,void 0)},ee.set=function(e,t,r){return"length"!==t&&isNaN(parseInt(t))&&C(14),Z.set.call(this,e[0],t,r,e[0])};function se(e,t){const r=M(e)?V("MapSet").proxyMap_(e,t):j(e)?V("MapSet").proxySet_(e,t):function(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:$(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,s=Z;r&&(i=[n],s=ee);const{revoke:a,proxy:o}=Proxy.revocable(i,s);return n.draft_=o,n.revoke_=a,o}(e,t);return(t?t.scope_:$()).drafts_.push(r),r}function ae(e){return T(e)||C(10,e),oe(e)}function oe(e){if(!P(e)||B(e))return e;const t=e[w];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=A(e,t.scope_.immer_.useStrictShallowCopy_)}else r=A(e,!0);return D(r,((e,t)=>{x(r,e,oe(t))})),t&&(t.finalized_=!1),r}var ce=new class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(e,t,r)=>{if("function"==typeof e&&"function"!=typeof t){const r=t;t=e;const n=this;return function(e=r,...i){return n.produce(e,(e=>t.call(this,e,...i)))}}let n;if("function"!=typeof t&&C(6),void 0!==r&&"function"!=typeof r&&C(7),P(e)){const i=H(this),s=se(e,void 0);let a=!0;try{n=t(s),a=!1}finally{a?q(i):W(i)}return G(i,r),J(n,i)}if(!e||"object"!=typeof e){if(n=t(e),void 0===n&&(n=e),n===_&&(n=void 0),this.autoFreeze_&&N(n,!0),r){const t=[],i=[];V("Patches").generateReplacementPatches_(e,n,t,i),r(t,i)}return n}C(1,e)},this.produceWithPatches=(e,t)=>{if("function"==typeof e)return(t,...r)=>this.produceWithPatches(t,(t=>e(t,...r)));let r,n;return[this.produce(e,t,((e,t)=>{r=e,n=t})),r,n]},"boolean"==typeof e?.autoFreeze&&this.setAutoFreeze(e.autoFreeze),"boolean"==typeof e?.useStrictShallowCopy&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){P(e)||C(8),T(e)&&(e=ae(e));const t=H(this),r=se(e,void 0);return r[w].isManual_=!0,W(t),r}finishDraft(e,t){const r=e&&e[w];r&&r.isManual_||C(9);const{scope_:n}=r;return G(n,t),J(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const n=t[r];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}r>-1&&(t=t.slice(r+1));const n=V("Patches").applyPatches_;return T(e)?n(e,t):this.produce(e,(e=>n(e,t)))}},de=ce.produce;ce.produceWithPatches.bind(ce),ce.setAutoFreeze.bind(ce),ce.setUseStrictShallowCopy.bind(ce),ce.applyPatches.bind(ce),ce.createDraft.bind(ce),ce.finishDraft.bind(ce);var le=e=>{let t=!1;try{const r={};e(r)===r&&(t=!0)}catch{}if(t){let e;try{throw new Error}catch(t){({stack:e}=t)}console.warn("The result function returned its own inputs without modification. e.g\n`createSelector([state => state.todos], todos => todos)`\nThis could lead to inefficient memoization and unnecessary re-renders.\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.",{stack:e})}},pe=(e,t,r)=>{const{memoize:n,memoizeOptions:i}=t,{inputSelectorResults:s,inputSelectorResultsCopy:a}=e,o=n((()=>({})),...i);if(!(o.apply(null,s)===o.apply(null,a))){let e;try{throw new Error}catch(t){({stack:e}=t)}console.warn("An input selector returned a different result when passed same arguments.\nThis means your output selector will likely run more frequently than intended.\nAvoid returning a new reference inside your input selector, e.g.\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`",{arguments:r,firstInputs:s,secondInputs:a,stack:e})}},ue={inputStabilityCheck:"once",identityFunctionCheck:"once"};var he=e=>Array.isArray(e)?e:[e];function me(e){const t=Array.isArray(e[0])?e[0]:e;return function(e,t="expected all items to be functions, instead received the following types: "){if(!e.every((e=>"function"==typeof e))){const r=e.map((e=>"function"==typeof e?`function ${e.name||"unnamed"}()`:typeof e)).join(", ");throw new TypeError(`${t}[${r}]`)}}(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function fe(e,t){const r=[],{length:n}=e;for(let i=0;i<n;i++)r.push(e[i].apply(null,t));return r}var ge="undefined"!=typeof WeakRef?WeakRef:class{constructor(e){this.value=e}deref(){return this.value}},ve=0,ye=1;function _e(){return{s:ve,v:void 0,o:null,p:null}}function be(e,t={}){let r=_e();const{resultEqualityCheck:n}=t;let i,s=0;function a(){let t=r;const{length:a}=arguments;for(let e=0,r=a;e<r;e++){const r=arguments[e];if("function"==typeof r||"object"==typeof r&&null!==r){let e=t.o;null===e&&(t.o=e=new WeakMap);const n=e.get(r);void 0===n?(t=_e(),e.set(r,t)):t=n}else{let e=t.p;null===e&&(t.p=e=new Map);const n=e.get(r);void 0===n?(t=_e(),e.set(r,t)):t=n}}const o=t;let c;if(t.s===ye?c=t.v:(c=e.apply(null,arguments),s++),o.s=ye,n){const e=i?.deref()??i;null!=e&&n(e,c)&&(c=e,0!==s&&s--);i="object"==typeof c&&null!==c||"function"==typeof c?new ge(c):c}return o.v=c,c}return a.clearCache=()=>{r=_e(),a.resetResultsCount()},a.resultsCount=()=>s,a.resetResultsCount=()=>{s=0},a}function we(e,...t){const r="function"==typeof e?{memoize:e,memoizeOptions:t}:e;return(...e)=>{let t,n=0,i=0,s={},a=e.pop();"object"==typeof a&&(s=a,a=e.pop()),function(e,t="expected a function, instead received "+typeof e){if("function"!=typeof e)throw new TypeError(t)}(a,`createSelector expects an output function after the inputs, but received: [${typeof a}]`);const o={...r,...s},{memoize:c,memoizeOptions:d=[],argsMemoize:l=be,argsMemoizeOptions:p=[],devModeChecks:u={}}=o,h=he(d),m=he(p),f=me(e),g=c((function(){return n++,a.apply(null,arguments)}),...h);let v=!0;const y=l((function(){i++;const e=fe(f,arguments);{const{identityFunctionCheck:t,inputStabilityCheck:r}=((e,t)=>{const{identityFunctionCheck:r,inputStabilityCheck:n}={...ue,...t};return{identityFunctionCheck:{shouldRun:"always"===r||"once"===r&&e,run:le},inputStabilityCheck:{shouldRun:"always"===n||"once"===n&&e,run:pe}}})(v,u);if(t.shouldRun&&t.run(a),r.shouldRun){const t=fe(f,arguments);r.run({inputSelectorResults:e,inputSelectorResultsCopy:t},{memoize:c,memoizeOptions:h},arguments)}v&&(v=!1)}return t=g.apply(null,e),t}),...m);return Object.assign(y,{resultFunc:a,memoizedResultFunc:g,dependencies:f,dependencyRecomputations:()=>i,resetDependencyRecomputations:()=>{i=0},lastResult:()=>t,recomputations:()=>n,resetRecomputations:()=>{n=0},memoize:c,argsMemoize:l})}}var Se=we(be);function Ce(e){return({dispatch:t,getState:r})=>n=>i=>"function"==typeof i?i(t,r,e):n(i)}var Re=Ce(),Te=Ce;((...e)=>{const t=we(...e)})(be);var Pe="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?v:v.apply(null,arguments)},ke=e=>e&&"function"==typeof e.match;function Ee(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return{type:e,payload:n.payload,..."meta"in n&&{meta:n.meta},..."error"in n&&{error:n.error}}}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>y(t)&&t.type===e,r}function De(e){return"function"==typeof e&&"type"in e&&ke(e)}function Oe(e,t){let r=0;return{measureTime(e){const t=Date.now();try{return e()}finally{const e=Date.now();r+=e-t}},warnIfExceeded(){r>e&&console.warn(`${t} took ${r}ms, which is more than the warning threshold of ${e}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`)}}}function Ie(e,t){for(const r of e)if(t(r))return r}var xe=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...e){return super.concat.apply(this,e)}prepend(...t){return 1===t.length&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function Me(e){return P(e)?de(e,(()=>{})):e}function je(e,t,r){if(e.has(t)){let n=e.get(t);return r.update&&(n=r.update(n,t,e),e.set(t,n)),n}if(!r.insert)throw new Error("No insert provided for key not already in map");const n=r.insert(t,e);return e.set(t,n),n}function Le(e){return"object"!=typeof e||null==e||Object.isFrozen(e)}function Ae(e,t,r){const n=Ne(e,t,r);return{detectMutations:()=>Fe(e,t,n,r)}}function Ne(e,t=[],r,n="",i=new Set){const s={value:r};if(!e(r)&&!i.has(r)){i.add(r),s.children={};for(const i in r){const a=n?n+"."+i:i;t.length&&-1!==t.indexOf(a)||(s.children[i]=Ne(e,t,r[i],a))}}return s}function Fe(e,t=[],r,n,i=!1,s=""){const a=r?r.value:void 0,o=a===n;if(i&&!o&&!Number.isNaN(n))return{wasMutated:!0,path:s};if(e(a)||e(n))return{wasMutated:!1};const c={};for(let e in r.children)c[e]=!0;for(let e in n)c[e]=!0;const d=t.length>0;for(let i in c){const a=s?s+"."+i:i;if(d){if(t.some((e=>e instanceof RegExp?e.test(a):a===e)))continue}const c=Fe(e,t,r.children[i],n[i],o,a);if(c.wasMutated)return c}return{wasMutated:!1}}function Be(e){const t=typeof e;return null==e||"string"===t||"boolean"===t||"number"===t||Array.isArray(e)||p(e)}function Ue(e,t="",r=Be,n,i=[],s){let a;if(!r(e))return{keyPath:t||"<root>",value:e};if("object"!=typeof e||null===e)return!1;if(s?.has(e))return!1;const o=null!=n?n(e):Object.entries(e),c=i.length>0;for(const[e,d]of o){const o=t?t+"."+e:e;if(c){if(i.some((e=>e instanceof RegExp?e.test(o):o===e)))continue}if(!r(d))return{keyPath:o,value:d};if("object"==typeof d&&(a=Ue(d,o,r,n,i,s),a))return a}return s&&ze(e)&&s.add(e),!1}function ze(e){if(!Object.isFrozen(e))return!1;for(const t of Object.values(e))if("object"==typeof t&&null!==t&&!ze(t))return!1;return!0}function Ve(e){return"boolean"==typeof e}var $e=()=>function(e){const{thunk:t=!0,immutableCheck:r=!0,serializableCheck:n=!0,actionCreatorCheck:i=!0}=e??{};let s=new xe;if(t&&(Ve(t)?s.push(Re):s.push(Te(t.extraArgument))),r){let e={};Ve(r)||(e=r),s.unshift(function(e={}){{let t=function(e,t,n,i){return JSON.stringify(e,r(t,i),n)},r=function(e,t){let r=[],n=[];return t||(t=function(e,t){return r[0]===t?"[Circular ~]":"[Circular ~."+n.slice(0,r.indexOf(t)).join(".")+"]"}),function(i,s){if(r.length>0){var a=r.indexOf(this);~a?r.splice(a+1):r.push(this),~a?n.splice(a,1/0,i):n.push(i),~r.indexOf(s)&&(s=t.call(this,i,s))}else r.push(s);return null==e?s:e.call(this,i,s)}},{isImmutable:n=Le,ignoredPaths:i,warnAfter:s=32}=e;const a=Ae.bind(null,n,i);return({getState:e})=>{let r,n=e(),i=a(n);return o=>c=>{const d=Oe(s,"ImmutableStateInvariantMiddleware");d.measureTime((()=>{if(n=e(),r=i.detectMutations(),i=a(n),r.wasMutated)throw new Error(`A state mutation was detected between dispatches, in the path '${r.path||""}'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`)}));const l=o(c);return d.measureTime((()=>{if(n=e(),r=i.detectMutations(),i=a(n),r.wasMutated)throw new Error(`A state mutation was detected inside a dispatch, in the path: ${r.path||""}. Take a look at the reducer(s) handling the action ${t(c)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`)})),d.warnIfExceeded(),l}}}}(e))}if(n){let e={};Ve(n)||(e=n),s.push(function(e={}){{const{isSerializable:t=Be,getEntries:r,ignoredActions:n=[],ignoredActionPaths:i=["meta.arg","meta.baseQueryMeta"],ignoredPaths:s=[],warnAfter:a=32,ignoreState:o=!1,ignoreActions:c=!1,disableCache:d=!1}=e,l=!d&&WeakSet?new WeakSet:void 0;return e=>d=>p=>{if(!y(p))return d(p);const u=d(p),h=Oe(a,"SerializableStateInvariantMiddleware");return c||n.length&&-1!==n.indexOf(p.type)||h.measureTime((()=>{const e=Ue(p,"",t,r,i,l);if(e){const{keyPath:t,value:r}=e;console.error(`A non-serializable value was detected in an action, in the path: \`${t}\`. Value:`,r,"\nTake a look at the logic that dispatched this action: ",p,"\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)","\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)")}})),o||(h.measureTime((()=>{const n=Ue(e.getState(),"",t,r,s,l);if(n){const{keyPath:e,value:t}=n;console.error(`A non-serializable value was detected in the state, in the path: \`${e}\`. Value:`,t,`\nTake a look at the reducer(s) handling this action type: ${p.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`)}})),h.warnIfExceeded()),u}}}(e))}if(i){let e={};Ve(i)||(e=i),s.unshift(function(e={}){const{isActionCreator:t=De}=e;return()=>e=>r=>(t(r)&&console.warn(function(e){const t=e?`${e}`.split("/"):[],r=t[t.length-1]||"actionCreator";return`Detected an action creator with type "${e||"unknown"}" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \`dispatch(${r}())\` instead of \`dispatch(${r})\`. This is necessary even if the action has no payload.`}(r.type)),e(r))}(e))}return s},Ge=e=>t=>{setTimeout(t,e)},qe="undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame:Ge(10),We=e=>function(t){const{autoBatch:r=!0}=t??{};let n=new xe(e);return r&&n.push(((e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,s=!1,a=!1;const o=new Set,c="tick"===e.type?queueMicrotask:"raf"===e.type?qe:"callback"===e.type?e.queueNotification:Ge(e.timeout),d=()=>{a=!1,s&&(s=!1,o.forEach((e=>e())))};return Object.assign({},n,{subscribe(e){const t=n.subscribe((()=>i&&e()));return o.add(e),()=>{t(),o.delete(e)}},dispatch(e){try{return i=!e?.meta?.RTK_autoBatch,s=!i,s&&(a||(a=!0,c(d))),n.dispatch(e)}finally{i=!0}}})})("object"==typeof r?r:void 0)),n};function He(e){const t=$e(),{reducer:r,middleware:n,devTools:i=!0,preloadedState:s,enhancers:a}=e||{};let o,c;if("function"==typeof r)o=r;else{if(!p(r))throw new Error("`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers");o=g(r)}if(n&&"function"!=typeof n)throw new Error("`middleware` field must be a callback");if("function"==typeof n){if(c=n(t),!Array.isArray(c))throw new Error("when using a middleware builder function, an array of middleware must be returned")}else c=t();if(c.some((e=>"function"!=typeof e)))throw new Error("each middleware provided to configureStore must be a function");let d=v;i&&(d=Pe({trace:!0,..."object"==typeof i&&i}));const l=function(...e){return t=>(r,n)=>{const i=t(r,n);let s=()=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")};const a={getState:i.getState,dispatch:(e,...t)=>s(e,...t)},o=e.map((e=>e(a)));return s=v(...o)(i.dispatch),{...i,dispatch:s}}}(...c),u=We(l);if(a&&"function"!=typeof a)throw new Error("`enhancers` field must be a callback");let h="function"==typeof a?a(u):u();if(!Array.isArray(h))throw new Error("`enhancers` callback must return an array");if(h.some((e=>"function"!=typeof e)))throw new Error("each enhancer provided to configureStore must be a function");c.length&&!h.includes(l)&&console.error("middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`");return m(o,s,d(...h))}function Ke(e){const t={},r=[];let n;const i={addCase(e,s){if(r.length>0)throw new Error("`builder.addCase` should only be called before calling `builder.addMatcher`");if(n)throw new Error("`builder.addCase` should only be called before calling `builder.addDefaultCase`");const a="string"==typeof e?e:e.type;if(!a)throw new Error("`builder.addCase` cannot be called with an empty action type");if(a in t)throw new Error(`\`builder.addCase\` cannot be called with two reducers for the same action type '${a}'`);return t[a]=s,i},addMatcher(e,t){if(n)throw new Error("`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");return r.push({matcher:e,reducer:t}),i},addDefaultCase(e){if(n)throw new Error("`builder.addDefaultCase` can only be called once");return n=e,i}};return e(i),[t,r,n]}var Je=(e=21)=>{let t="",r=e;for(;r--;)t+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return t};function Ye(...e){return t=>e.some((e=>((e,t)=>ke(e)?e.match(t):e(t))(e,t)))}var Qe=["name","message","stack","code"],Xe=class{constructor(e,t){this.payload=e,this.meta=t}_type},Ze=class{constructor(e,t){this.payload=e,this.meta=t}_type},et=e=>{if("object"==typeof e&&null!==e){const t={};for(const r of Qe)"string"==typeof e[r]&&(t[r]=e[r]);return t}return{message:String(e)}},tt=(()=>{function e(e,t,r){const n=Ee(e+"/fulfilled",((e,t,r,n)=>({payload:e,meta:{...n||{},arg:r,requestId:t,requestStatus:"fulfilled"}}))),i=Ee(e+"/pending",((e,t,r)=>({payload:void 0,meta:{...r||{},arg:t,requestId:e,requestStatus:"pending"}}))),s=Ee(e+"/rejected",((e,t,n,i,s)=>({payload:i,error:(r&&r.serializeError||et)(e||"Rejected"),meta:{...s||{},arg:n,requestId:t,rejectedWithValue:!!i,requestStatus:"rejected",aborted:"AbortError"===e?.name,condition:"ConditionError"===e?.name}})));return Object.assign((function(e){return(a,o,c)=>{const d=r?.idGenerator?r.idGenerator(e):Je(),l=new AbortController;let p;function u(e){p=e,l.abort()}const h=async function(){let h;try{let s=r?.condition?.(e,{getState:o,extra:c});if(function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.then}(s)&&(s=await s),!1===s||l.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};const m=new Promise(((e,t)=>l.signal.addEventListener("abort",(()=>t({name:"AbortError",message:p||"Aborted"})))));a(i(d,e,r?.getPendingMeta?.({requestId:d,arg:e},{getState:o,extra:c}))),h=await Promise.race([m,Promise.resolve(t(e,{dispatch:a,getState:o,extra:c,requestId:d,signal:l.signal,abort:u,rejectWithValue:(e,t)=>new Xe(e,t),fulfillWithValue:(e,t)=>new Ze(e,t)})).then((t=>{if(t instanceof Xe)throw t;return t instanceof Ze?n(t.payload,d,e,t.meta):n(t,d,e)}))])}catch(t){h=t instanceof Xe?s(null,d,e,t.payload,t.meta):s(t,d,e)}return r&&!r.dispatchConditionRejection&&s.match(h)&&h.meta.condition||a(h),h}();return Object.assign(h,{abort:u,requestId:d,arg:e,unwrap:()=>h.then(rt)})}}),{pending:i,rejected:s,fulfilled:n,settled:Ye(s,n),typePrefix:e})}return e.withTypes=()=>e,e})();function rt(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}var nt=Symbol.for("rtk-slice-createasyncthunk");function it(e,t){return`${e}/${t}`}function st(e,t,r,n){function i(i,...s){let a=r.call(e,i);if(void 0===a){if(!n)throw new Error("selectState returned undefined for an uninjected slice reducer");a=e.getInitialState()}return t(a,...s)}return i.unwrapped=t,i}var at=function({creators:e}={}){const t=e?.asyncThunk?.[nt];return function(e){const{name:r,reducerPath:n=r}=e;if(!r)throw new Error("`name` is a required option for createSlice");const i=("function"==typeof e.reducers?e.reducers(function(){function e(e,t){return{_reducerDefinitionType:"asyncThunk",payloadCreator:e,...t}}return e.withTypes=()=>e,{reducer:e=>Object.assign({[e.name]:(...t)=>e(...t)}[e.name],{_reducerDefinitionType:"reducer"}),preparedReducer:(e,t)=>({_reducerDefinitionType:"reducerWithPrepare",prepare:e,reducer:t}),asyncThunk:e}}()):e.reducers)||{},s=Object.keys(i),a={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},o={addCase(e,t){const r="string"==typeof e?e:e.type;if(!r)throw new Error("`context.addCase` cannot be called with an empty action type");if(r in a.sliceCaseReducersByType)throw new Error("`context.addCase` cannot be called with two reducers for the same action type: "+r);return a.sliceCaseReducersByType[r]=t,o},addMatcher:(e,t)=>(a.sliceMatchers.push({matcher:e,reducer:t}),o),exposeAction:(e,t)=>(a.actionCreators[e]=t,o),exposeCaseReducer:(e,t)=>(a.sliceCaseReducersByName[e]=t,o)};function c(){if("object"==typeof e.extraReducers)throw new Error("The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");const[t={},r=[],n]="function"==typeof e.extraReducers?Ke(e.extraReducers):[e.extraReducers],i={...t,...a.sliceCaseReducersByType};return function(e,t){if("object"==typeof t)throw new Error("The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");let r,[n,i,s]=Ke(t);if("function"==typeof e)r=()=>Me(e());else{const t=Me(e);r=()=>t}function a(e=r(),t){let a=[n[t.type],...i.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===a.filter((e=>!!e)).length&&(a=[s]),a.reduce(((e,r)=>{if(r){if(T(e)){const n=r(e,t);return void 0===n?e:n}if(P(e))return de(e,(e=>r(e,t)));{const n=r(e,t);if(void 0===n){if(null===e)return e;throw new Error("A case reducer on a non-draftable value must not return undefined")}return n}}return e}),e)}return a.getInitialState=r,a}(e.initialState,(e=>{for(let t in i)e.addCase(t,i[t]);for(let t of a.sliceMatchers)e.addMatcher(t.matcher,t.reducer);for(let t of r)e.addMatcher(t.matcher,t.reducer);n&&e.addDefaultCase(n)}))}s.forEach((n=>{const s=i[n],a={reducerName:n,type:it(r,n),createNotation:"function"==typeof e.reducers};!function(e){return"asyncThunk"===e._reducerDefinitionType}(s)?function({type:e,reducerName:t,createNotation:r},n,i){let s,a;if("reducer"in n){if(r&&!function(e){return"reducerWithPrepare"===e._reducerDefinitionType}(n))throw new Error("Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.");s=n.reducer,a=n.prepare}else s=n;i.addCase(e,s).exposeCaseReducer(t,s).exposeAction(t,a?Ee(e,a):Ee(e))}(a,s,o):function({type:e,reducerName:t},r,n,i){if(!i)throw new Error("Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.");const{payloadCreator:s,fulfilled:a,pending:o,rejected:c,settled:d,options:l}=r,p=i(e,s,l);n.exposeAction(t,p),a&&n.addCase(p.fulfilled,a);o&&n.addCase(p.pending,o);c&&n.addCase(p.rejected,c);d&&n.addMatcher(p.settled,d);n.exposeCaseReducer(t,{fulfilled:a||ot,pending:o||ot,rejected:c||ot,settled:d||ot})}(a,s,o,t)}));const d=e=>e,l=new WeakMap;let p;const u={name:r,reducerPath:n,reducer:(e,t)=>(p||(p=c()),p(e,t)),actions:a.actionCreators,caseReducers:a.sliceCaseReducersByName,getInitialState:()=>(p||(p=c()),p.getInitialState()),getSelectors(t=d){const r=je(l,this,{insert:()=>new WeakMap});return je(r,t,{insert:()=>{const r={};for(const[n,i]of Object.entries(e.selectors??{}))r[n]=st(this,i,t,this!==u);return r}})},selectSlice(e){let t=e[this.reducerPath];if(void 0===t){if(this===u)throw new Error("selectSlice returned undefined for an uninjected slice reducer");t=this.getInitialState()}return t},get selectors(){return this.getSelectors(this.selectSlice)},injectInto(e,{reducerPath:t,...r}={}){const n=t??this.reducerPath;return e.inject({reducerPath:n,reducer:this.reducer},r),{...this,reducerPath:n}}};return u}}();function ot(){}var ct=(e,t)=>{if("function"!=typeof e)throw new Error(`${t} is not a function`)},dt=()=>{},lt=(e,t=dt)=>(e.catch(t),e),pt=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),ut=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},ht="listener",mt="completed",ft="cancelled",gt=`task-${ft}`,vt=`task-${mt}`,yt=`${ht}-${ft}`,_t=`${ht}-${mt}`,bt=class{constructor(e){this.code=e,this.message=`task ${ft} (reason: ${e})`}name="TaskAbortError";message},wt=e=>{if(e.aborted){const{reason:t}=e;throw new bt(t)}};function St(e,t){let r=dt;return new Promise(((n,i)=>{const s=()=>i(new bt(e.reason));e.aborted?s():(r=pt(e,s),t.finally((()=>r())).then(n,i))})).finally((()=>{r=dt}))}var Ct=e=>t=>lt(St(e,t).then((t=>(wt(e),t)))),Rt=e=>{const t=Ct(e);return e=>t(new Promise((t=>setTimeout(t,e))))},{assign:Tt}=Object,Pt={},kt="listenerMiddleware",Et=(e,t)=>(r,n)=>{ct(r,"taskExecutor");const i=new AbortController;var s;s=i,pt(e,(()=>ut(s,e.reason)));const a=(async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(e){return{status:e instanceof bt?"cancelled":"rejected",error:e}}finally{t?.()}})((async()=>{wt(e),wt(i.signal);const t=await r({pause:Ct(i.signal),delay:Rt(i.signal),signal:i.signal});return wt(i.signal),t}),(()=>ut(i,vt)));return n?.autoJoin&&t.push(a),{result:Ct(e)(a),cancel(){ut(i,gt)}}},Dt=(e,t)=>(r,n)=>lt((async(r,n)=>{wt(t);let i=()=>{};const s=[new Promise(((t,n)=>{let s=e({predicate:r,effect:(e,r)=>{r.unsubscribe(),t([e,r.getState(),r.getOriginalState()])}});i=()=>{s(),n()}}))];null!=n&&s.push(new Promise((e=>setTimeout(e,n,null))));try{const e=await St(t,Promise.race(s));return wt(t),e}finally{i()}})(r,n)),Ot=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:s}=e;if(t)i=Ee(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error("Creating or removing a listener requires one of the known fields for matching an action");return ct(s,"options.listener"),{predicate:i,type:t,effect:s}},It=e=>{e.pending.forEach((e=>{ut(e,yt)}))},xt=(e,t,r)=>{try{e(t,r)}catch(e){setTimeout((()=>{throw e}),0)}},Mt=Ee(`${kt}/add`),jt=Ee(`${kt}/removeAll`),Lt=Ee(`${kt}/remove`),At=(...e)=>{console.error(`${kt}/error`,...e)};const Nt=function(e={}){const t=new Map,{extra:r,onError:n=At}=e;ct(n,"onError");const i=e=>{let r=Ie(Array.from(t.values()),(t=>t.effect===e.effect));return r||(r=(e=>{const{type:t,predicate:r,effect:n}=Ot(e);return{id:Je(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error("Unsubscribe not initialized")}}})(e)),(e=>(e.unsubscribe=()=>t.delete(e.id),t.set(e.id,e),t=>{e.unsubscribe(),t?.cancelActive&&It(e)}))(r)},s=e=>{const{type:r,effect:n,predicate:i}=Ot(e),s=Ie(Array.from(t.values()),(e=>("string"==typeof r?e.type===r:e.predicate===i)&&e.effect===n));return s&&(s.unsubscribe(),e.cancelActive&&It(s)),!!s},a=async(e,s,a,o)=>{const c=new AbortController,d=Dt(i,c.signal),l=[];try{e.pending.add(c),await Promise.resolve(e.effect(s,Tt({},a,{getOriginalState:o,condition:(e,t)=>d(e,t).then(Boolean),take:d,delay:Rt(c.signal),pause:Ct(c.signal),extra:r,signal:c.signal,fork:Et(c.signal,l),unsubscribe:e.unsubscribe,subscribe:()=>{t.set(e.id,e)},cancelActiveListeners:()=>{e.pending.forEach(((e,t,r)=>{e!==c&&(ut(e,yt),r.delete(e))}))},cancel:()=>{ut(c,yt),e.pending.delete(c)},throwIfCancelled:()=>{wt(c.signal)}})))}catch(e){e instanceof bt||xt(n,e,{raisedBy:"effect"})}finally{await Promise.allSettled(l),ut(c,_t),e.pending.delete(c)}},o=(e=>()=>{e.forEach(It),e.clear()})(t);return{middleware:e=>r=>c=>{if(!y(c))return r(c);if(Mt.match(c))return i(c.payload);if(jt.match(c))return void o();if(Lt.match(c))return s(c.payload);let d=e.getState();const l=()=>{if(d===Pt)throw new Error(`${kt}: getOriginalState can only be called synchronously`);return d};let p;try{if(p=r(c),t.size>0){let r=e.getState();const i=Array.from(t.values());for(let t of i){let i=!1;try{i=t.predicate(c,r,d)}catch(e){i=!1,xt(n,e,{raisedBy:"predicate"})}i&&a(t,c,e,l)}}}finally{d=Pt}return p},startListening:i,stopListening:s,clearListeners:o}}(),Ft=Nt.startListening,Bt=(e,t)=>Ft({predicate:(t,r,n)=>{const i=e.map((e=>e(n))),s=e.map((e=>e(r)));return i.some(((e,t)=>e!==s[t]))},effect:(r,{dispatch:n,getState:i,extra:s})=>{const a=e.map((e=>e(i())));t({dispatch:n,getState:i,extra:s},...a)}}),Ut=at({name:"app",initialState:{wantsToJoin:!1,roomName:null,roomKey:null,roomUrl:null,displayName:null,sdkVersion:null,externalId:null},reducers:{doAppJoin:(e,t)=>{const r=new URL(t.payload.roomUrl);return Object.assign(Object.assign(Object.assign({},e),t.payload),{roomName:r.pathname,wantsToJoin:!0})},appLeft:e=>Object.assign(Object.assign({},e),{wantsToJoin:!1}),setRoomKey:(e,t)=>Object.assign(Object.assign({},e),{roomKey:t.payload})}}),{doAppJoin:zt,appLeft:Vt,setRoomKey:$t}=Ut.actions,Gt=e=>e.app.wantsToJoin,qt=e=>e.app.roomName,Wt=e=>e.app.roomKey,Ht=e=>e.app.displayName,Kt=e=>e.app.sdkVersion,Jt=e=>e.app.externalId;function Yt(e,t){return tt(e,t)}function Qt(e){return Ee(`signalConnection/event/${e}`)}const Xt={audioEnabled:Qt("audioEnabled"),chatMessage:Qt("chatMessage"),clientLeft:Qt("clientLeft"),clientMetadataReceived:Qt("clientMetadataReceived"),cloudRecordingStarted:Qt("cloudRecordingStarted"),cloudRecordingStopped:Qt("cloudRecordingStopped"),disconnect:Qt("disconnect"),knockerLeft:Qt("knockerLeft"),knockHandled:Qt("knockHandled"),newClient:Qt("newClient"),roomJoined:Qt("roomJoined"),roomKnocked:Qt("roomKnocked"),roomSessionEnded:Qt("roomSessionEnded"),screenshareStarted:Qt("screenshareStarted"),screenshareStopped:Qt("screenshareStopped"),streamingStopped:Qt("streamingStopped"),videoEnabled:Qt("videoEnabled")},Zt=at({name:"deviceCredentials",initialState:{isFetching:!1,data:null},reducers:{},extraReducers:e=>{e.addCase(er.pending,(e=>Object.assign(Object.assign({},e),{isFetching:!0}))),e.addCase(er.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{isFetching:!1,data:t.payload}))),e.addCase(er.rejected,(e=>Object.assign(Object.assign({},e),{isFetching:!0})))}}),er=Yt("deviceCredentials/doGetDeviceCredentials",((e,{extra:t})=>s(void 0,void 0,void 0,(function*(){try{return yield t.services.credentialsService.getCredentials()}catch(e){console.error(e)}})))),tr=e=>e.deviceCredentials;Bt([Se(Gt,tr,((e,t)=>!(!e||t.isFetching||t.data)))],(({dispatch:e},t)=>{t&&e(er())}));const rr=Object.create(null);rr.open="0",rr.close="1",rr.ping="2",rr.pong="3",rr.message="4",rr.upgrade="5",rr.noop="6";const nr=Object.create(null);Object.keys(rr).forEach((e=>{nr[rr[e]]=e}));const ir={type:"error",data:"parser error"},sr="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),ar="function"==typeof ArrayBuffer,or=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,cr=({type:e,data:t},r,n)=>sr&&t instanceof Blob?r?n(t):dr(t,n):ar&&(t instanceof ArrayBuffer||or(t))?r?n(t):dr(new Blob([t]),n):n(rr[e]+(t||"")),dr=(e,t)=>{const r=new FileReader;return r.onload=function(){const e=r.result.split(",")[1];t("b"+(e||""))},r.readAsDataURL(e)};function lr(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let pr;const ur="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",hr="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)hr[ur.charCodeAt(e)]=e;const mr="function"==typeof ArrayBuffer,fr=(e,t)=>{if("string"!=typeof e)return{type:"message",data:vr(e,t)};const r=e.charAt(0);if("b"===r)return{type:"message",data:gr(e.substring(1),t)};return nr[r]?e.length>1?{type:nr[r],data:e.substring(1)}:{type:nr[r]}:ir},gr=(e,t)=>{if(mr){const r=(e=>{let t,r,n,i,s,a=.75*e.length,o=e.length,c=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const d=new ArrayBuffer(a),l=new Uint8Array(d);for(t=0;t<o;t+=4)r=hr[e.charCodeAt(t)],n=hr[e.charCodeAt(t+1)],i=hr[e.charCodeAt(t+2)],s=hr[e.charCodeAt(t+3)],l[c++]=r<<2|n>>4,l[c++]=(15&n)<<4|i>>2,l[c++]=(3&i)<<6|63&s;return d})(e);return vr(r,t)}return{base64:!0,data:e}},vr=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer,yr=String.fromCharCode(30);function _r(){return new TransformStream({transform(e,t){!function(e,t){sr&&e.data instanceof Blob?e.data.arrayBuffer().then(lr).then(t):ar&&(e.data instanceof ArrayBuffer||or(e.data))?t(lr(e.data)):cr(e,!1,(e=>{pr||(pr=new TextEncoder),t(pr.encode(e))}))}(e,(r=>{const n=r.length;let i;if(n<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,n);else if(n<65536){i=new Uint8Array(3);const e=new DataView(i.buffer);e.setUint8(0,126),e.setUint16(1,n)}else{i=new Uint8Array(9);const e=new DataView(i.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(n))}e.data&&"string"!=typeof e.data&&(i[0]|=128),t.enqueue(i),t.enqueue(r)}))}})}let br;function wr(e){return e.reduce(((e,t)=>e+t.length),0)}function Sr(e,t){if(e[0].length===t)return e.shift();const r=new Uint8Array(t);let n=0;for(let i=0;i<t;i++)r[i]=e[0][n++],n===e[0].length&&(e.shift(),n=0);return e.length&&n<e[0].length&&(e[0]=e[0].slice(n)),r}function Cr(e){if(e)return function(e){for(var t in Cr.prototype)e[t]=Cr.prototype[t];return e}(e)}Cr.prototype.on=Cr.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},Cr.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},Cr.prototype.off=Cr.prototype.removeListener=Cr.prototype.removeAllListeners=Cr.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var i=0;i<n.length;i++)if((r=n[i])===t||r.fn===t){n.splice(i,1);break}return 0===n.length&&delete this._callbacks["$"+e],this},Cr.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),r=this._callbacks["$"+e],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(r){n=0;for(var i=(r=r.slice(0)).length;n<i;++n)r[n].apply(this,t)}return this},Cr.prototype.emitReserved=Cr.prototype.emit,Cr.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},Cr.prototype.hasListeners=function(e){return!!this.listeners(e).length};const Rr="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function Tr(e,...t){return t.reduce(((t,r)=>(e.hasOwnProperty(r)&&(t[r]=e[r]),t)),{})}const Pr=Rr.setTimeout,kr=Rr.clearTimeout;function Er(e,t){t.useNativeTimers?(e.setTimeoutFn=Pr.bind(Rr),e.clearTimeoutFn=kr.bind(Rr)):(e.setTimeoutFn=Rr.setTimeout.bind(Rr),e.clearTimeoutFn=Rr.clearTimeout.bind(Rr))}class Dr extends Error{constructor(e,t,r){super(e),this.description=t,this.context=r,this.type="TransportError"}}let Or=class extends Cr{constructor(e){super(),this.writable=!1,Er(this,e),this.opts=e,this.query=e.query,this.socket=e.socket}onError(e,t,r){return super.emitReserved("error",new Dr(e,t,r)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}send(e){"open"===this.readyState&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){const t=fr(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){const e=this.opts.hostname;return-1===e.indexOf(":")?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(443!==this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}_query(e){const t=function(e){let t="";for(let r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}(e);return t.length?"?"+t:""}};const Ir="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),xr=64,Mr={};let jr,Lr=0,Ar=0;function Nr(e){let t="";do{t=Ir[e%xr]+t,e=Math.floor(e/xr)}while(e>0);return t}function Fr(){const e=Nr(+new Date);return e!==jr?(Lr=0,jr=e):e+"."+Nr(Lr++)}for(;Ar<xr;Ar++)Mr[Ir[Ar]]=Ar;let Br=!1;try{Br="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}const Ur=Br;function zr(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||Ur))return new XMLHttpRequest}catch(e){}if(!t)try{return new(Rr[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}}function Vr(){}const $r=null!=new zr({xdomain:!1}).responseType;class Gr extends Cr{constructor(e,t){super(),Er(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=Tr(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const r=this.xhr=new zr(t);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&r.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var e;3===r.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(r)),4===r.readyState&&(200===r.status||1223===r.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=Gr.requestsCount++,Gr.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Vr,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete Gr.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(Gr.requestsCount=0,Gr.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",qr);else if("function"==typeof addEventListener){addEventListener("onpagehide"in Rr?"pagehide":"unload",qr,!1)}function qr(){for(let e in Gr.requests)Gr.requests.hasOwnProperty(e)&&Gr.requests[e].abort()}var Wr="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Hr=[],Kr=[],Jr="undefined"!=typeof Uint8Array?Uint8Array:Array,Yr=!1;function Qr(){Yr=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0;t<64;++t)Hr[t]=e[t],Kr[e.charCodeAt(t)]=t;Kr["-".charCodeAt(0)]=62,Kr["_".charCodeAt(0)]=63}function Xr(e,t,r){for(var n,i,s=[],a=t;a<r;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],s.push(Hr[(i=n)>>18&63]+Hr[i>>12&63]+Hr[i>>6&63]+Hr[63&i]);return s.join("")}function Zr(e){var t;Yr||Qr();for(var r=e.length,n=r%3,i="",s=[],a=16383,o=0,c=r-n;o<c;o+=a)s.push(Xr(e,o,o+a>c?c:o+a));return 1===n?(t=e[r-1],i+=Hr[t>>2],i+=Hr[t<<4&63],i+="=="):2===n&&(t=(e[r-2]<<8)+e[r-1],i+=Hr[t>>10],i+=Hr[t>>4&63],i+=Hr[t<<2&63],i+="="),s.push(i),s.join("")}function en(e,t,r,n,i){var s,a,o=8*i-n-1,c=(1<<o)-1,d=c>>1,l=-7,p=r?i-1:0,u=r?-1:1,h=e[t+p];for(p+=u,s=h&(1<<-l)-1,h>>=-l,l+=o;l>0;s=256*s+e[t+p],p+=u,l-=8);for(a=s&(1<<-l)-1,s>>=-l,l+=n;l>0;a=256*a+e[t+p],p+=u,l-=8);if(0===s)s=1-d;else{if(s===c)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,n),s-=d}return(h?-1:1)*a*Math.pow(2,s-n)}function tn(e,t,r,n,i,s){var a,o,c,d=8*s-i-1,l=(1<<d)-1,p=l>>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:s-1,m=n?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+p>=1?u/c:u*Math.pow(2,1-p))*c>=2&&(a++,c/=2),a+p>=l?(o=0,a=l):a+p>=1?(o=(t*c-1)*Math.pow(2,i),a+=p):(o=t*Math.pow(2,p-1)*Math.pow(2,i),a=0));i>=8;e[r+h]=255&o,h+=m,o/=256,i-=8);for(a=a<<i|o,d+=i;d>0;e[r+h]=255&a,h+=m,a/=256,d-=8);e[r+h-m]|=128*f}var rn={}.toString,nn=Array.isArray||function(e){return"[object Array]"==rn.call(e)};function sn(){return on.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function an(e,t){if(sn()<t)throw new RangeError("Invalid typed array length");return on.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=on.prototype:(null===e&&(e=new on(t)),e.length=t),e}function on(e,t,r){if(!(on.TYPED_ARRAY_SUPPORT||this instanceof on))return new on(e,t,r);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return ln(this,e)}return cn(this,e,t,r)}function cn(e,t,r,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);on.TYPED_ARRAY_SUPPORT?(e=t).__proto__=on.prototype:e=pn(e,t);return e}(e,t,r,n):"string"==typeof t?function(e,t,r){"string"==typeof r&&""!==r||(r="utf8");if(!on.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|mn(t,r);e=an(e,n);var i=e.write(t,r);i!==n&&(e=e.slice(0,i));return e}(e,t,r):function(e,t){if(hn(t)){var r=0|un(t.length);return 0===(e=an(e,r)).length||t.copy(e,0,0,r),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?an(e,0):pn(e,t);if("Buffer"===t.type&&nn(t.data))return pn(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function dn(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function ln(e,t){if(dn(t),e=an(e,t<0?0:0|un(t)),!on.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function pn(e,t){var r=t.length<0?0:0|un(t.length);e=an(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function un(e){if(e>=sn())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+sn().toString(16)+" bytes");return 0|e}function hn(e){return!(null==e||!e._isBuffer)}function mn(e,t){if(hn(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return zn(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Vn(e).length;default:if(n)return zn(e).length;t=(""+t).toLowerCase(),n=!0}}function fn(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return On(this,t,r);case"utf8":case"utf-8":return Pn(this,t,r);case"ascii":return En(this,t,r);case"latin1":case"binary":return Dn(this,t,r);case"base64":return Tn(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return In(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function gn(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function vn(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=on.from(t,n)),hn(t))return 0===t.length?-1:yn(e,t,r,n,i);if("number"==typeof t)return t&=255,on.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):yn(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function yn(e,t,r,n,i){var s,a=1,o=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,o/=2,c/=2,r/=2}function d(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var l=-1;for(s=r;s<o;s++)if(d(e,s)===d(t,-1===l?0:s-l)){if(-1===l&&(l=s),s-l+1===c)return l*a}else-1!==l&&(s-=s-l),l=-1}else for(r+c>o&&(r=o-c),s=r;s>=0;s--){for(var p=!0,u=0;u<c;u++)if(d(e,s+u)!==d(t,u)){p=!1;break}if(p)return s}return-1}function _n(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var s=t.length;if(s%2!=0)throw new TypeError("Invalid hex string");n>s/2&&(n=s/2);for(var a=0;a<n;++a){var o=parseInt(t.substr(2*a,2),16);if(isNaN(o))return a;e[r+a]=o}return a}function bn(e,t,r,n){return $n(zn(t,e.length-r),e,r,n)}function wn(e,t,r,n){return $n(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function Sn(e,t,r,n){return wn(e,t,r,n)}function Cn(e,t,r,n){return $n(Vn(t),e,r,n)}function Rn(e,t,r,n){return $n(function(e,t){for(var r,n,i,s=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(r=e.charCodeAt(a))>>8,i=r%256,s.push(i),s.push(n);return s}(t,e.length-r),e,r,n)}function Tn(e,t,r){return 0===t&&r===e.length?Zr(e):Zr(e.slice(t,r))}function Pn(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var s,a,o,c,d=e[i],l=null,p=d>239?4:d>223?3:d>191?2:1;if(i+p<=r)switch(p){case 1:d<128&&(l=d);break;case 2:128==(192&(s=e[i+1]))&&(c=(31&d)<<6|63&s)>127&&(l=c);break;case 3:s=e[i+1],a=e[i+2],128==(192&s)&&128==(192&a)&&(c=(15&d)<<12|(63&s)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:s=e[i+1],a=e[i+2],o=e[i+3],128==(192&s)&&128==(192&a)&&128==(192&o)&&(c=(15&d)<<18|(63&s)<<12|(63&a)<<6|63&o)>65535&&c<1114112&&(l=c)}null===l?(l=65533,p=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|1023&l),n.push(l),i+=p}return function(e){var t=e.length;if(t<=kn)return String.fromCharCode.apply(String,e);var r="",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=kn));return r}(n)}on.TYPED_ARRAY_SUPPORT=void 0===Wr.TYPED_ARRAY_SUPPORT||Wr.TYPED_ARRAY_SUPPORT,sn(),on.poolSize=8192,on._augment=function(e){return e.__proto__=on.prototype,e},on.from=function(e,t,r){return cn(null,e,t,r)},on.TYPED_ARRAY_SUPPORT&&(on.prototype.__proto__=Uint8Array.prototype,on.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&on[Symbol.species]),on.alloc=function(e,t,r){return function(e,t,r,n){return dn(t),t<=0?an(e,t):void 0!==r?"string"==typeof n?an(e,t).fill(r,n):an(e,t).fill(r):an(e,t)}(null,e,t,r)},on.allocUnsafe=function(e){return ln(null,e)},on.allocUnsafeSlow=function(e){return ln(null,e)},on.isBuffer=function(e){return null!=e&&(!!e._isBuffer||Gn(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&Gn(e.slice(0,0))}(e))},on.compare=function(e,t){if(!hn(e)||!hn(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var r=e.length,n=t.length,i=0,s=Math.min(r,n);i<s;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0},on.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},on.concat=function(e,t){if(!nn(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return on.alloc(0);var r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;var n=on.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){var s=e[r];if(!hn(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(n,i),i+=s.length}return n},on.byteLength=mn,on.prototype._isBuffer=!0,on.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)gn(this,t,t+1);return this},on.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)gn(this,t,t+3),gn(this,t+1,t+2);return this},on.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)gn(this,t,t+7),gn(this,t+1,t+6),gn(this,t+2,t+5),gn(this,t+3,t+4);return this},on.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?Pn(this,0,e):fn.apply(this,arguments)},on.prototype.equals=function(e){if(!hn(e))throw new TypeError("Argument must be a Buffer");return this===e||0===on.compare(this,e)},on.prototype.inspect=function(){var e="";return this.length>0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),"<Buffer "+e+">"},on.prototype.compare=function(e,t,r,n,i){if(!hn(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var s=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),o=Math.min(s,a),c=this.slice(n,i),d=e.slice(t,r),l=0;l<o;++l)if(c[l]!==d[l]){s=c[l],a=d[l];break}return s<a?-1:a<s?1:0},on.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},on.prototype.indexOf=function(e,t,r){return vn(this,e,t,r,!0)},on.prototype.lastIndexOf=function(e,t,r){return vn(this,e,t,r,!1)},on.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return _n(this,e,t,r);case"utf8":case"utf-8":return bn(this,e,t,r);case"ascii":return wn(this,e,t,r);case"latin1":case"binary":return Sn(this,e,t,r);case"base64":return Cn(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rn(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},on.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var kn=4096;function En(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(127&e[i]);return n}function Dn(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function On(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i="",s=t;s<r;++s)i+=Un(e[s]);return i}function In(e,t,r){for(var n=e.slice(t,r),i="",s=0;s<n.length;s+=2)i+=String.fromCharCode(n[s]+256*n[s+1]);return i}function xn(e,t,r){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function Mn(e,t,r,n,i,s){if(!hn(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<s)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}function jn(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,s=Math.min(e.length-r,2);i<s;++i)e[r+i]=(t&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function Ln(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,s=Math.min(e.length-r,4);i<s;++i)e[r+i]=t>>>8*(n?i:3-i)&255}function An(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Nn(e,t,r,n,i){return i||An(e,0,r,4),tn(e,t,r,n,23,4),r+4}function Fn(e,t,r,n,i){return i||An(e,0,r,8),tn(e,t,r,n,52,8),r+8}on.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),on.TYPED_ARRAY_SUPPORT)(r=this.subarray(e,t)).__proto__=on.prototype;else{var i=t-e;r=new on(i,void 0);for(var s=0;s<i;++s)r[s]=this[s+e]}return r},on.prototype.readUIntLE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n},on.prototype.readUIntBE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},on.prototype.readUInt8=function(e,t){return t||xn(e,1,this.length),this[e]},on.prototype.readUInt16LE=function(e,t){return t||xn(e,2,this.length),this[e]|this[e+1]<<8},on.prototype.readUInt16BE=function(e,t){return t||xn(e,2,this.length),this[e]<<8|this[e+1]},on.prototype.readUInt32LE=function(e,t){return t||xn(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},on.prototype.readUInt32BE=function(e,t){return t||xn(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},on.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*t)),n},on.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||xn(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return s>=(i*=128)&&(s-=Math.pow(2,8*t)),s},on.prototype.readInt8=function(e,t){return t||xn(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},on.prototype.readInt16LE=function(e,t){t||xn(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},on.prototype.readInt16BE=function(e,t){t||xn(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},on.prototype.readInt32LE=function(e,t){return t||xn(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},on.prototype.readInt32BE=function(e,t){return t||xn(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},on.prototype.readFloatLE=function(e,t){return t||xn(e,4,this.length),en(this,e,!0,23,4)},on.prototype.readFloatBE=function(e,t){return t||xn(e,4,this.length),en(this,e,!1,23,4)},on.prototype.readDoubleLE=function(e,t){return t||xn(e,8,this.length),en(this,e,!0,52,8)},on.prototype.readDoubleBE=function(e,t){return t||xn(e,8,this.length),en(this,e,!1,52,8)},on.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||Mn(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,s=0;for(this[t]=255&e;++s<r&&(i*=256);)this[t+s]=e/i&255;return t+r},on.prototype.writeUIntBE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||Mn(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},on.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,1,255,0),on.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},on.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,65535,0),on.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):jn(this,e,t,!0),t+2},on.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,65535,0),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):jn(this,e,t,!1),t+2},on.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,4294967295,0),on.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):Ln(this,e,t,!0),t+4},on.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,4294967295,0),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ln(this,e,t,!1),t+4},on.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);Mn(this,e,t,r,i-1,-i)}var s=0,a=1,o=0;for(this[t]=255&e;++s<r&&(a*=256);)e<0&&0===o&&0!==this[t+s-1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},on.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);Mn(this,e,t,r,i-1,-i)}var s=r-1,a=1,o=0;for(this[t+s]=255&e;--s>=0&&(a*=256);)e<0&&0===o&&0!==this[t+s+1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},on.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,1,127,-128),on.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},on.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,32767,-32768),on.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):jn(this,e,t,!0),t+2},on.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,2,32767,-32768),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):jn(this,e,t,!1),t+2},on.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,2147483647,-2147483648),on.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):Ln(this,e,t,!0),t+4},on.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||Mn(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),on.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ln(this,e,t,!1),t+4},on.prototype.writeFloatLE=function(e,t,r){return Nn(this,e,t,!0,r)},on.prototype.writeFloatBE=function(e,t,r){return Nn(this,e,t,!1,r)},on.prototype.writeDoubleLE=function(e,t,r){return Fn(this,e,t,!0,r)},on.prototype.writeDoubleBE=function(e,t,r){return Fn(this,e,t,!1,r)},on.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var i,s=n-r;if(this===e&&r<t&&t<n)for(i=s-1;i>=0;--i)e[i+t]=this[i+r];else if(s<1e3||!on.TYPED_ARRAY_SUPPORT)for(i=0;i<s;++i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+s),t);return s},on.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!on.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<r)throw new RangeError("Out of range index");if(r<=t)return this;var s;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(s=t;s<r;++s)this[s]=e;else{var a=hn(e)?e:zn(new on(e,n).toString()),o=a.length;for(s=0;s<r-t;++s)this[s+t]=a[s%o]}return this};var Bn=/[^+\/0-9A-Za-z-_]/g;function Un(e){return e<16?"0"+e.toString(16):e.toString(16)}function zn(e,t){var r;t=t||1/0;for(var n=e.length,i=null,s=[],a=0;a<n;++a){if((r=e.charCodeAt(a))>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function Vn(e){return function(e){var t,r,n,i,s,a;Yr||Qr();var o=e.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");s="="===e[o-2]?2:"="===e[o-1]?1:0,a=new Jr(3*o/4-s),n=s>0?o-4:o;var c=0;for(t=0,r=0;t<n;t+=4,r+=3)i=Kr[e.charCodeAt(t)]<<18|Kr[e.charCodeAt(t+1)]<<12|Kr[e.charCodeAt(t+2)]<<6|Kr[e.charCodeAt(t+3)],a[c++]=i>>16&255,a[c++]=i>>8&255,a[c++]=255&i;return 2===s?(i=Kr[e.charCodeAt(t)]<<2|Kr[e.charCodeAt(t+1)]>>4,a[c++]=255&i):1===s&&(i=Kr[e.charCodeAt(t)]<<10|Kr[e.charCodeAt(t+1)]<<4|Kr[e.charCodeAt(t+2)]>>2,a[c++]=i>>8&255,a[c++]=255&i),a}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(Bn,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function $n(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function Gn(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}const qn="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),Wn=Rr.WebSocket||Rr.MozWebSocket,Hn="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();const Kn={websocket:class extends Or{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,r=Hn?{}:Tr(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=Hn?new Wn(e,t,r):t?new Wn(e,t):new Wn(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],n=t===e.length-1;cr(r,this.supportsBinary,(e=>{try{this.ws.send(e)}catch(e){}n&&qn((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=Fr()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!Wn}},webtransport:class extends Or{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{this.onClose()})).catch((e=>{this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=function(e,t){br||(br=new TextDecoder);const r=[];let n=0,i=-1,s=!1;return new TransformStream({transform(a,o){for(r.push(a);;){if(0===n){if(wr(r)<1)break;const e=Sr(r,1);s=128==(128&e[0]),i=127&e[0],n=i<126?3:126===i?1:2}else if(1===n){if(wr(r)<2)break;const e=Sr(r,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),n=3}else if(2===n){if(wr(r)<8)break;const e=Sr(r,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){o.enqueue(ir);break}i=s*Math.pow(2,32)+t.getUint32(4),n=3}else{if(wr(r)<i)break;const e=Sr(r,i);o.enqueue(fr(s?e:br.decode(e),t)),n=0}if(0===i||i>e){o.enqueue(ir);break}}}})}(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=e.readable.pipeThrough(t).getReader(),n=_r();n.readable.pipeTo(e.writable),this.writer=n.writable.getWriter();const i=()=>{r.read().then((({done:e,value:t})=>{e||(this.onPacket(t),i())})).catch((e=>{}))};i();const s={type:"open"};this.query.sid&&(s.data=`{"sid":"${this.query.sid}"}`),this.writer.write(s).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],n=t===e.length-1;this.writer.write(r).then((()=>{n&&qn((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}},polling:class extends Or{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let r=location.port;r||(r=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||r!==e.port}const t=e&&e.forceBase64;this.supportsBinary=$r&&!t,this.opts.withCredentials&&(this.cookieJar=void 0)}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(e++,this.once("pollComplete",(function(){--e||t()}))),this.writable||(e++,this.once("drain",(function(){--e||t()})))}else t()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){((e,t)=>{const r=e.split(yr),n=[];for(let e=0;e<r.length;e++){const i=fr(r[e],t);if(n.push(i),"error"===i.type)break}return n})(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState&&this.poll())}doClose(){const e=()=>{this.write([{type:"close"}])};"open"===this.readyState?e():this.once("open",e)}write(e){this.writable=!1,((e,t)=>{const r=e.length,n=new Array(r);let i=0;e.forEach(((e,s)=>{cr(e,!1,(e=>{n[s]=e,++i===r&&t(n.join(yr))}))}))})(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=Fr()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new Gr(this.uri(),e)}doWrite(e,t){const r=this.request({method:"POST",data:e});r.on("success",t),r.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}},Jn=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Yn=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Qn(e){const t=e,r=e.indexOf("["),n=e.indexOf("]");-1!=r&&-1!=n&&(e=e.substring(0,r)+e.substring(r,n).replace(/:/g,";")+e.substring(n,e.length));let i=Jn.exec(e||""),s={},a=14;for(;a--;)s[Yn[a]]=i[a]||"";return-1!=r&&-1!=n&&(s.source=t,s.host=s.host.substring(1,s.host.length-1).replace(/;/g,":"),s.authority=s.authority.replace("[","").replace("]","").replace(/;/g,":"),s.ipv6uri=!0),s.pathNames=function(e,t){const r=/\/{2,9}/g,n=t.replace(r,"/").split("/");"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1);"/"==t.slice(-1)&&n.splice(n.length-1,1);return n}(0,s.path),s.queryKey=function(e,t){const r={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,n){t&&(r[t]=n)})),r}(0,s.query),s}let Xn=class e extends Cr{constructor(e,t={}){super(),this.binaryType="arraybuffer",this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=Qn(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=Qn(t.host).host),Er(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(e){let t={},r=e.split("&");for(let e=0,n=r.length;e<n;e++){let n=r[e].split("=");t[decodeURIComponent(n[0])]=decodeURIComponent(n[1])}return t}(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){const t=Object.assign({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);const r=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new Kn[e](r)}open(){let t;if(this.opts.rememberUpgrade&&e.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(e){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(t){let r=this.createTransport(t),n=!1;e.priorWebsocketSuccess=!1;const i=()=>{n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(t=>{if(!n)if("pong"===t.type&&"probe"===t.data){if(this.upgrading=!0,this.emitReserved("upgrading",r),!r)return;e.priorWebsocketSuccess="websocket"===r.name,this.transport.pause((()=>{n||"closed"!==this.readyState&&(l(),this.setTransport(r),r.send([{type:"upgrade"}]),this.emitReserved("upgrade",r),r=null,this.upgrading=!1,this.flush())}))}else{const e=new Error("probe error");e.transport=r.name,this.emitReserved("upgradeError",e)}})))};function s(){n||(n=!0,l(),r.close(),r=null)}const a=e=>{const t=new Error("probe error: "+e);t.transport=r.name,s(),this.emitReserved("upgradeError",t)};function o(){a("transport closed")}function c(){a("socket closed")}function d(e){r&&e.name!==r.name&&s()}const l=()=>{r.removeListener("open",i),r.removeListener("error",a),r.removeListener("close",o),this.off("close",c),this.off("upgrading",d)};r.once("open",i),r.once("error",a),r.once("close",o),this.once("close",c),this.once("upgrading",d),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==t?this.setTimeoutFn((()=>{n||r.open()}),200):r.open()}onOpen(){if(this.readyState="open",e.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){let e=0;const t=this.upgrades.length;for(;e<t;e++)this.probe(this.upgrades[e])}}onPacket(e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),this.resetPingTimeout(),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this.sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong");break;case"error":const t=new Error("server error");t.code=e.data,this.onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data)}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this.upgrades=this.filterUpgrades(e.upgrades),this.pingInterval=e.pingInterval,this.pingTimeout=e.pingTimeout,this.maxPayload=e.maxPayload,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}resetPingTimeout(){this.clearTimeoutFn(this.pingTimeoutTimer),this.pingTimeoutTimer=this.setTimeoutFn((()=>{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let r=0;r<this.writeBuffer.length;r++){const n=this.writeBuffer[r].data;if(n&&(e+="string"==typeof(t=n)?function(e){let t=0,r=0;for(let n=0,i=e.length;n<i;n++)t=e.charCodeAt(n),t<128?r+=1:t<2048?r+=2:t<55296||t>=57344?r+=3:(n++,r+=4);return r}(t):Math.ceil(1.33*(t.byteLength||t.size))),r>0&&e>this.maxPayload)return this.writeBuffer.slice(0,r);e+=2}var t;return this.writeBuffer}write(e,t,r){return this.sendPacket("message",e,t,r),this}send(e,t,r){return this.sendPacket("message",e,t,r),this}sendPacket(e,t,r,n){if("function"==typeof t&&(n=t,t=void 0),"function"==typeof r&&(n=r,r=null),"closing"===this.readyState||"closed"===this.readyState)return;(r=r||{}).compress=!1!==r.compress;const i={type:e,data:t,options:r};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),n&&this.once("flush",n),this.flush()}close(){const e=()=>{this.onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},r=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?r():e()})):this.upgrading?r():e()),this}onError(t){e.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let r=0;const n=e.length;for(;r<n;r++)~this.transports.indexOf(e[r])&&t.push(e[r]);return t}};Xn.protocol=4;const Zn="function"==typeof ArrayBuffer,ei=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,ti=Object.prototype.toString,ri="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===ti.call(Blob),ni="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===ti.call(File);function ii(e){return Zn&&(e instanceof ArrayBuffer||ei(e))||ri&&e instanceof Blob||ni&&e instanceof File}function si(e,t){if(!e||"object"!=typeof e)return!1;if(Array.isArray(e)){for(let t=0,r=e.length;t<r;t++)if(si(e[t]))return!0;return!1}if(ii(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return si(e.toJSON(),!0);for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&si(e[t]))return!0;return!1}function ai(e){const t=[],r=e.data,n=e;return n.data=oi(r,t),n.attachments=t.length,{packet:n,buffers:t}}function oi(e,t){if(!e)return e;if(ii(e)){const r={_placeholder:!0,num:t.length};return t.push(e),r}if(Array.isArray(e)){const r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=oi(e[n],t);return r}if("object"==typeof e&&!(e instanceof Date)){const r={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=oi(e[n],t));return r}return e}function ci(e,t){return e.data=di(e.data,t),delete e.attachments,e}function di(e,t){if(!e)return e;if(e&&!0===e._placeholder){if("number"==typeof e.num&&e.num>=0&&e.num<t.length)return t[e.num];throw new Error("illegal attachments")}if(Array.isArray(e))for(let r=0;r<e.length;r++)e[r]=di(e[r],t);else if("object"==typeof e)for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=di(e[r],t));return e}const li=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var pi;!function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(pi||(pi={}));function ui(e){return"[object Object]"===Object.prototype.toString.call(e)}class hi extends Cr{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const r=t.type===pi.BINARY_EVENT;r||t.type===pi.BINARY_ACK?(t.type=r?pi.EVENT:pi.ACK,this.reconstructor=new mi(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!ii(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const r={type:Number(e.charAt(0))};if(void 0===pi[r.type])throw new Error("unknown packet type "+r.type);if(r.type===pi.BINARY_EVENT||r.type===pi.BINARY_ACK){const n=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const i=e.substring(n,t);if(i!=Number(i)||"-"!==e.charAt(t))throw new Error("Illegal attachments");r.attachments=Number(i)}if("/"===e.charAt(t+1)){const n=t+1;for(;++t;){if(","===e.charAt(t))break;if(t===e.length)break}r.nsp=e.substring(n,t)}else r.nsp="/";const n=e.charAt(t+1);if(""!==n&&Number(n)==n){const n=t+1;for(;++t;){const r=e.charAt(t);if(null==r||Number(r)!=r){--t;break}if(t===e.length)break}r.id=Number(e.substring(n,t+1))}if(e.charAt(++t)){const n=this.tryParse(e.substr(t));if(!hi.isPayloadValid(r.type,n))throw new Error("invalid payload");r.data=n}return r}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case pi.CONNECT:return ui(t);case pi.DISCONNECT:return void 0===t;case pi.CONNECT_ERROR:return"string"==typeof t||ui(t);case pi.EVENT:case pi.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===li.indexOf(t[0]));case pi.ACK:case pi.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class mi{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=ci(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}var fi=Object.freeze({__proto__:null,Decoder:hi,Encoder:class{constructor(e){this.replacer=e}encode(e){return e.type!==pi.EVENT&&e.type!==pi.ACK||!si(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===pi.EVENT?pi.BINARY_EVENT:pi.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==pi.BINARY_EVENT&&e.type!==pi.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){const t=ai(e),r=this.encodeAsString(t.packet),n=t.buffers;return n.unshift(r),n}},get PacketType(){return pi},protocol:5});function gi(e,t,r){return e.on(t,r),function(){e.off(t,r)}}const vi=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class yi extends Cr{constructor(e,t,r){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,r&&r.auth&&(this.auth=r.auth),this._opts=Object.assign({},r),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[gi(e,"open",this.onopen.bind(this)),gi(e,"packet",this.onpacket.bind(this)),gi(e,"error",this.onerror.bind(this)),gi(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(vi.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const r={type:pi.EVENT,data:t,options:{}};if(r.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++,n=t.pop();this._registerAckCallback(e,n),r.id=e}const n=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return this.flags.volatile&&(!n||!this.connected)||(this.connected?(this.notifyOutgoingListeners(r),this.packet(r)):this.sendBuffer.push(r)),this.flags={},this}_registerAckCallback(e,t){var r;const n=null!==(r=this.flags.timeout)&&void 0!==r?r:this._opts.ackTimeout;if(void 0===n)return void(this.acks[e]=t);const i=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t<this.sendBuffer.length;t++)this.sendBuffer[t].id===e&&this.sendBuffer.splice(t,1);t.call(this,new Error("operation has timed out"))}),n);this.acks[e]=(...e)=>{this.io.clearTimeoutFn(i),t.apply(this,[null,...e])}}emitWithAck(e,...t){const r=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((n,i)=>{t.push(((e,t)=>r?e?i(e):n(t):n(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...n)=>{if(r!==this._queue[0])return;return null!==e?r.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(e)):(this._queue.shift(),t&&t(null,...n)),r.pending=!1,this._drainQueue()})),this._queue.push(r),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||0===this._queue.length)return;const t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:pi.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case pi.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case pi.EVENT:case pi.BINARY_EVENT:this.onevent(e);break;case pi.ACK:case pi.BINARY_ACK:this.onack(e);break;case pi.DISCONNECT:this.ondisconnect();break;case pi.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];null!=e.id&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const r of t)r.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let r=!1;return function(...n){r||(r=!0,t.packet({type:pi.ACK,id:e,data:n}))}}onack(e){const t=this.acks[e.id];"function"==typeof t&&(t.apply(this,e.data),delete this.acks[e.id])}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:pi.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){const t=this._anyOutgoingListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const t=this._anyOutgoingListeners.slice();for(const r of t)r.apply(this,e.data)}}}function _i(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}_i.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-r:e+r}return 0|Math.min(e,this.max)},_i.prototype.reset=function(){this.attempts=0},_i.prototype.setMin=function(e){this.ms=e},_i.prototype.setMax=function(e){this.max=e},_i.prototype.setJitter=function(e){this.jitter=e};class bi extends Cr{constructor(e,t){var r;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,Er(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(r=t.randomizationFactor)&&void 0!==r?r:.5),this.backoff=new _i({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const n=t.parser||fi;this.encoder=new n.Encoder,this.decoder=new n.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new Xn(this.uri,this.opts);const t=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const n=gi(t,"open",(function(){r.onopen(),e&&e()})),i=t=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},s=gi(t,"error",i);if(!1!==this._timeout){const e=this._timeout,r=this.setTimeoutFn((()=>{n(),i(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&r.unref(),this.subs.push((()=>{this.clearTimeoutFn(r)}))}return this.subs.push(n),this.subs.push(s),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(gi(e,"ping",this.onping.bind(this)),gi(e,"data",this.ondata.bind(this)),gi(e,"error",this.onerror.bind(this)),gi(e,"close",this.onclose.bind(this)),gi(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){qn((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let r=this.nsps[e];return r?this._autoConnect&&!r.active&&r.connect():(r=new yi(this,e,t),this.nsps[e]=r),r}_destroy(e){const t=Object.keys(this.nsps);for(const e of t){if(this.nsps[e].active)return}this._close()}_packet(e){const t=this.encoder.encode(e);for(let r=0;r<t.length;r++)this.engine.write(t[r],e.options)}cleanup(){this.subs.forEach((e=>e())),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn((()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):e.onreconnect()})))}),t);this.opts.autoUnref&&r.unref(),this.subs.push((()=>{this.clearTimeoutFn(r)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const wi={};function Si(e,t){"object"==typeof e&&(t=e,e=void 0);const r=function(e,t="",r){let n=e;r=r||"undefined"!=typeof location&&location,null==e&&(e=r.protocol+"//"+r.host),"string"==typeof e&&("/"===e.charAt(0)&&(e="/"===e.charAt(1)?r.protocol+e:r.host+e),/^(https?|wss?):\/\//.test(e)||(e=void 0!==r?r.protocol+"//"+e:"https://"+e),n=Qn(e)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";const i=-1!==n.host.indexOf(":")?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+i+":"+n.port+t,n.href=n.protocol+"://"+i+(r&&r.port===n.port?"":":"+n.port),n}(e,(t=t||{}).path||"/socket.io"),n=r.source,i=r.id,s=r.path,a=wi[i]&&s in wi[i].nsps;let o;return t.forceNew||t["force new connection"]||!1===t.multiplex||a?o=new bi(n,t):(wi[i]||(wi[i]=new bi(n,t)),o=wi[i]),r.query&&!t.query&&(t.query=r.queryKey),o.socket(r.path,t)}Object.assign(Si,{Manager:bi,Socket:yi,io:Si,connect:Si});let Ci=!0,Ri=!0;function Ti(e,t,r){const n=e.match(t);return n&&n.length>=r&&parseInt(n[r],10)}function Pi(e,t,r){if(!e.RTCPeerConnection)return;const n=e.RTCPeerConnection.prototype,i=n.addEventListener;n.addEventListener=function(e,n){if(e!==t)return i.apply(this,arguments);const s=e=>{const t=r(e);t&&(n.handleEvent?n.handleEvent(t):n(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(n,s),i.apply(this,[e,s])};const s=n.removeEventListener;n.removeEventListener=function(e,r){if(e!==t||!this._eventMap||!this._eventMap[t])return s.apply(this,arguments);if(!this._eventMap[t].has(r))return s.apply(this,arguments);const n=this._eventMap[t].get(r);return this._eventMap[t].delete(r),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,s.apply(this,[e,n])},Object.defineProperty(n,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function ki(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ci=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function Ei(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Ri=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function Di(){if("object"==typeof window){if(Ci)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function Oi(e,t){Ri&&console.warn(e+" is deprecated, please use "+t+" instead.")}function Ii(e){return"[object Object]"===Object.prototype.toString.call(e)}function xi(e){return Ii(e)?Object.keys(e).reduce((function(t,r){const n=Ii(e[r]),i=n?xi(e[r]):e[r],s=n&&!Object.keys(i).length;return void 0===i||s?t:Object.assign(t,{[r]:i})}),{}):e}function Mi(e,t,r){t&&!r.has(t.id)&&(r.set(t.id,t),Object.keys(t).forEach((n=>{n.endsWith("Id")?Mi(e,e.get(t[n]),r):n.endsWith("Ids")&&t[n].forEach((t=>{Mi(e,e.get(t),r)}))})))}function ji(e,t,r){const n=r?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;const s=[];return e.forEach((e=>{"track"===e.type&&e.trackIdentifier===t.id&&s.push(e)})),s.forEach((t=>{e.forEach((r=>{r.type===n&&r.trackId===t.id&&Mi(e,r,i)}))})),i}const Li=Di;function Ai(e,t){const r=e&&e.navigator;if(!r.mediaDevices)return;const n=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach((r=>{if("require"===r||"advanced"===r||"mediaSource"===r)return;const n="object"==typeof e[r]?e[r]:{ideal:e[r]};void 0!==n.exact&&"number"==typeof n.exact&&(n.min=n.max=n.exact);const i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==n.ideal){t.optional=t.optional||[];let e={};"number"==typeof n.ideal?(e[i("min",r)]=n.ideal,t.optional.push(e),e={},e[i("max",r)]=n.ideal,t.optional.push(e)):(e[i("",r)]=n.ideal,t.optional.push(e))}void 0!==n.exact&&"number"!=typeof n.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",r)]=n.exact):["min","max"].forEach((e=>{void 0!==n[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,r)]=n[e])}))})),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(t.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=n(e.audio)}if(e&&"object"==typeof e.video){let s=e.video.facingMode;s=s&&("object"==typeof s?s:{ideal:s});const a=t.version<66;if(s&&("user"===s.exact||"environment"===s.exact||"user"===s.ideal||"environment"===s.ideal)&&(!r.mediaDevices.getSupportedConstraints||!r.mediaDevices.getSupportedConstraints().facingMode||a)){let t;if(delete e.video.facingMode,"environment"===s.exact||"environment"===s.ideal?t=["back","rear"]:"user"!==s.exact&&"user"!==s.ideal||(t=["front"]),t)return r.mediaDevices.enumerateDevices().then((r=>{let a=(r=r.filter((e=>"videoinput"===e.kind))).find((e=>t.some((t=>e.label.toLowerCase().includes(t)))));return!a&&r.length&&t.includes("back")&&(a=r[r.length-1]),a&&(e.video.deviceId=s.exact?{exact:a.deviceId}:{ideal:a.deviceId}),e.video=n(e.video),Li("chrome: "+JSON.stringify(e)),i(e)}))}e.video=n(e.video)}return Li("chrome: "+JSON.stringify(e)),i(e)},s=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(r.getUserMedia=function(e,t,n){i(e,(e=>{r.webkitGetUserMedia(e,t,(e=>{n&&n(s(e))}))}))}.bind(r),r.mediaDevices.getUserMedia){const e=r.mediaDevices.getUserMedia.bind(r.mediaDevices);r.mediaDevices.getUserMedia=function(t){return i(t,(t=>e(t).then((e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach((e=>{e.stop()})),new DOMException("","NotFoundError");return e}),(e=>Promise.reject(s(e))))))}}}function Ni(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function Fi(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",(r=>{let n;n=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===r.track.id)):{track:r.track};const i=new Event("track");i.track=r.track,i.receiver=n,i.transceiver={receiver:n},i.streams=[t.stream],this.dispatchEvent(i)})),t.stream.getTracks().forEach((r=>{let n;n=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===r.id)):{track:r};const i=new Event("track");i.track=r,i.receiver=n,i.transceiver={receiver:n},i.streams=[t.stream],this.dispatchEvent(i)}))},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else Pi(e,"track",(e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e)))}function Bi(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const r=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){let i=r.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};const n=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){n.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach((e=>{this._senders.push(t(this,e))}))};const n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach((e=>{const t=this._senders.find((t=>t.track===e));t&&this._senders.splice(this._senders.indexOf(t),1)}))}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function Ui(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,r,n]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof e))return t.apply(this,[]);const i=function(e){const t={};return e.result().forEach((e=>{const r={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach((t=>{r[t]=e.stat(t)})),t[r.id]=r})),t},s=function(e){return new Map(Object.keys(e).map((t=>[t,e[t]])))};if(arguments.length>=2){const n=function(e){r(s(i(e)))};return t.apply(this,[n,e])}return new Promise(((e,r)=>{t.apply(this,[function(t){e(s(i(t)))},r])})).then(r,n)}}function zi(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>ji(t,e.track,!0)))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Pi(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>ji(t,e.track,!1)))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,r,n;return this.getSenders().forEach((r=>{r.track===e&&(t?n=!0:t=r)})),this.getReceivers().forEach((t=>(t.track===e&&(r?n=!0:r=t),t.track===e))),n||t&&r?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():r?r.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function Vi(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((e=>this._shimmedLocalStreams[e][0]))};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){if(!r)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const n=t.apply(this,arguments);return this._shimmedLocalStreams[r.id]?-1===this._shimmedLocalStreams[r.id].indexOf(n)&&this._shimmedLocalStreams[r.id].push(n):this._shimmedLocalStreams[r.id]=[r,n],n};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")}));const t=this.getSenders();r.apply(this,arguments);const n=this.getSenders().filter((e=>-1===t.indexOf(e)));this._shimmedLocalStreams[e.id]=[e].concat(n)};const n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],n.apply(this,arguments)};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach((t=>{const r=this._shimmedLocalStreams[t].indexOf(e);-1!==r&&this._shimmedLocalStreams[t].splice(r,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]})),i.apply(this,arguments)}}function $i(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return Vi(e);const r=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=r.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map((e=>this._reverseStreams[e.id]))};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[t.id]){const r=new e.MediaStream(t.getTracks());this._streams[t.id]=r,this._reverseStreams[r.id]=t,t=r}n.apply(this,[t])};const i=e.RTCPeerConnection.prototype.removeStream;function s(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const n=e._reverseStreams[t],i=e._streams[n.id];r=r.replace(new RegExp(i.id,"g"),n.id)})),new RTCSessionDescription({type:t.type,sdp:r})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,r){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const n=[].slice.call(arguments,1);if(1!==n.length||!n[0].getTracks().find((e=>e===t)))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find((e=>e.track===t)))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const i=this._streams[r.id];if(i)i.addTrack(t),Promise.resolve().then((()=>{this.dispatchEvent(new Event("negotiationneeded"))}));else{const n=new e.MediaStream([t]);this._streams[r.id]=n,this._reverseStreams[n.id]=r,this.addStream(n)}return this.getSenders().find((e=>e.track===t))},["createOffer","createAnswer"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],n={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?r.apply(this,[t=>{const r=s(this,t);e[0].apply(null,[r])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):r.apply(this,arguments).then((e=>s(this,e)))}};e.RTCPeerConnection.prototype[t]=n[t]}));const a=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const n=e._reverseStreams[t],i=e._streams[n.id];r=r.replace(new RegExp(n.id,"g"),i.id)})),new RTCSessionDescription({type:t.type,sdp:r})}(this,arguments[0]),a.apply(this,arguments)):a.apply(this,arguments)};const o=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=o.get.apply(this);return""===e.type?e:s(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach((r=>{this._streams[r].getTracks().find((t=>e.track===t))&&(t=this._streams[r])})),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function Gi(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],n={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=n[t]}))}function qi(e,t){Pi(e,"negotiationneeded",(e=>{const r=e.target;if(!(t.version<72||r.getConfiguration&&"plan-b"===r.getConfiguration().sdpSemantics)||"stable"===r.signalingState)return e}))}var Wi=Object.freeze({__proto__:null,fixNegotiationNeeded:qi,shimAddTrackRemoveTrack:$i,shimAddTrackRemoveTrackWithNative:Vi,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(r){return t(r).then((t=>{const n=r.video&&r.video.width,i=r.video&&r.video.height,s=r.video&&r.video.frameRate;return r.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:s||3}},n&&(r.video.mandatory.maxWidth=n),i&&(r.video.mandatory.maxHeight=i),e.navigator.mediaDevices.getUserMedia(r)}))}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))},shimGetSendersWithDtmf:Bi,shimGetStats:Ui,shimGetUserMedia:Ai,shimMediaStream:Ni,shimOnTrack:Fi,shimPeerConnection:Gi,shimSenderReceiverGetStats:zi});var Hi="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Ki(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Ji(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var r=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})})),r}var Yi={exports:{}};!function(e){var t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((function(e){return e.trim()}))},t.splitSections=function(e){return e.split("\nm=").map((function(e,t){return(t>0?"m="+e:e).trim()+"\r\n"}))},t.getDescription=function(e){var r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){var r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((function(e){return 0===e.indexOf(r)}))},t.parseCandidate=function(e){for(var t,r={foundation:(t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" "))[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]},n=8;n<t.length;n+=2)switch(t[n]){case"raddr":r.relatedAddress=t[n+1];break;case"rport":r.relatedPort=parseInt(t[n+1],10);break;case"tcptype":r.tcpType=t[n+1];break;case"ufrag":r.ufrag=t[n+1],r.usernameFragment=t[n+1];break;default:r[t[n]]=t[n+1]}return r},t.writeCandidate=function(e){var t=[];t.push(e.foundation),t.push(e.component),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);var r=e.type;return t.push("typ"),t.push(r),"host"!==r&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substr(14).split(" ")},t.parseRtpMap=function(e){var t=e.substr(9).split(" "),r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){var t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);var r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\r\n"},t.parseExtmap=function(e){var t=e.substr(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},t.parseFmtp=function(e){for(var t,r={},n=e.substr(e.indexOf(" ")+1).split(";"),i=0;i<n.length;i++)r[(t=n[i].trim().split("="))[0].trim()]=t[1];return r},t.writeFmtp=function(e){var t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){var n=[];Object.keys(e.parameters).forEach((function(t){e.parameters[t]?n.push(t+"="+e.parameters[t]):n.push(t)})),t+="a=fmtp:"+r+" "+n.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){var t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){var t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((function(e){t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){var t=e.indexOf(" "),r={ssrc:parseInt(e.substr(7,t-7),10)},n=e.indexOf(":",t);return n>-1?(r.attribute=e.substr(t+1,n-t-1),r.value=e.substr(n+1)):r.attribute=e.substr(t+1),r},t.parseSsrcGroup=function(e){var t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((function(e){return parseInt(e,10)}))}},t.getMid=function(e){var r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substr(6)},t.parseFingerprint=function(e){var t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1]}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){var r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((function(e){r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){var t=e.substr(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;var t=e.substr(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){var n=t.matchPrefix(e+r,"a=ice-ufrag:")[0],i=t.matchPrefix(e+r,"a=ice-pwd:")[0];return n&&i?{usernameFragment:n.substr(12),password:i.substr(10)}:null},t.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},t.parseRtpParameters=function(e){for(var r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=t.splitLines(e)[0].split(" "),i=3;i<n.length;i++){var s=n[i],a=t.matchPrefix(e,"a=rtpmap:"+s+" ")[0];if(a){var o=t.parseRtpMap(a),c=t.matchPrefix(e,"a=fmtp:"+s+" ");switch(o.parameters=c.length?t.parseFmtp(c[0]):{},o.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+s+" ").map(t.parseRtcpFb),r.codecs.push(o),o.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(o.name.toUpperCase())}}}return t.matchPrefix(e,"a=extmap:").forEach((function(e){r.headerExtensions.push(t.parseExtmap(e))})),r},t.writeRtpDescription=function(e,r){var n="";n+="m="+e+" ",n+=r.codecs.length>0?"9":"0",n+=" UDP/TLS/RTP/SAVPF ",n+=r.codecs.map((function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType})).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((function(e){n+=t.writeRtpMap(e),n+=t.writeFmtp(e),n+=t.writeRtcpFb(e)}));var i=0;return r.codecs.forEach((function(e){e.maxptime>i&&(i=e.maxptime)})),i>0&&(n+="a=maxptime:"+i+"\r\n"),n+="a=rtcp-mux\r\n",r.headerExtensions&&r.headerExtensions.forEach((function(e){n+=t.writeExtmap(e)})),n},t.parseRtpEncodingParameters=function(e){var r,n=[],i=t.parseRtpParameters(e),s=-1!==i.fecMechanisms.indexOf("RED"),a=-1!==i.fecMechanisms.indexOf("ULPFEC"),o=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute})),c=o.length>0&&o[0].ssrc,d=t.matchPrefix(e,"a=ssrc-group:FID").map((function(e){return e.substr(17).split(" ").map((function(e){return parseInt(e,10)}))}));d.length>0&&d[0].length>1&&d[0][0]===c&&(r=d[0][1]),i.codecs.forEach((function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var t={ssrc:c,codecPayloadType:parseInt(e.parameters.apt,10)};c&&r&&(t.rtx={ssrc:r}),n.push(t),s&&((t=JSON.parse(JSON.stringify(t))).fec={ssrc:c,mechanism:a?"red+ulpfec":"red"},n.push(t))}})),0===n.length&&c&&n.push({ssrc:c});var l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substr(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substr(5),10)*.95-16e3:void 0,n.forEach((function(e){e.maxBitrate=l}))),n},t.parseRtcpParameters=function(e){var r={},n=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute}))[0];n&&(r.cname=n.value,r.ssrc=n.ssrc);var i=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=i.length>0,r.compound=0===i.length;var s=t.matchPrefix(e,"a=rtcp-mux");return r.mux=s.length>0,r},t.parseMsid=function(e){var r,n=t.matchPrefix(e,"a=msid:");if(1===n.length)return{stream:(r=n[0].substr(7).split(" "))[0],track:r[1]};var i=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"msid"===e.attribute}));return i.length>0?{stream:(r=i[0].value.split(" "))[0],track:r[1]}:void 0},t.parseSctpDescription=function(e){var r,n=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");i.length>0&&(r=parseInt(i[0].substr(19),10)),isNaN(r)&&(r=65536);var s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substr(12),10),protocol:n.fmt,maxMessageSize:r};if(t.matchPrefix(e,"a=sctpmap:").length>0){var a=t.matchPrefix(e,"a=sctpmap:")[0].substr(10).split(" ");return{port:parseInt(a[0],10),protocol:a[1],maxMessageSize:r}}},t.writeSctpDescription=function(e,t){var r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(e,r,n){var i=void 0!==r?r:2;return"v=0\r\no="+(n||"thisisadapterortc")+" "+(e||t.generateSessionId())+" "+i+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.writeMediaSection=function(e,r,n,i){var s=t.writeRtpDescription(e.kind,r);if(s+=t.writeIceParameters(e.iceGatherer.getLocalParameters()),s+=t.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":"active"),s+="a=mid:"+e.mid+"\r\n",e.direction?s+="a="+e.direction+"\r\n":e.rtpSender&&e.rtpReceiver?s+="a=sendrecv\r\n":e.rtpSender?s+="a=sendonly\r\n":e.rtpReceiver?s+="a=recvonly\r\n":s+="a=inactive\r\n",e.rtpSender){var a="msid:"+i.id+" "+e.rtpSender.track.id+"\r\n";s+="a="+a,s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+a,e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+a,s+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+t.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+t.localCName+"\r\n"),s},t.getDirection=function(e,r){for(var n=t.splitLines(e),i=0;i<n.length;i++)switch(n[i]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[i].substr(2)}return r?t.getDirection(r):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substr(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){var r=t.splitLines(e)[0].substr(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){var r=t.matchPrefix(e,"o=")[0].substr(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;for(var r=t.splitLines(e),n=0;n<r.length;n++)if(r[n].length<2||"="!==r[n].charAt(1))return!1;return!0},e.exports=t}(Yi);var Qi=Yi.exports,Xi=Ki(Qi),Zi=Qi;function es(e,t,r,n,i){var s=Zi.writeRtpDescription(e.kind,t);if(s+=Zi.writeIceParameters(e.iceGatherer.getLocalParameters()),s+=Zi.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===r?"actpass":i||"active"),s+="a=mid:"+e.mid+"\r\n",e.rtpSender&&e.rtpReceiver?s+="a=sendrecv\r\n":e.rtpSender?s+="a=sendonly\r\n":e.rtpReceiver?s+="a=recvonly\r\n":s+="a=inactive\r\n",e.rtpSender){var a=e.rtpSender._initialTrackId||e.rtpSender.track.id;e.rtpSender._initialTrackId=a;var o="msid:"+(n?n.id:"-")+" "+a+"\r\n";s+="a="+o,s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+o,e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+o,s+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+Zi.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+Zi.localCName+"\r\n"),s}function ts(e,t){var r={codecs:[],headerExtensions:[],fecMechanisms:[]},n=function(e,t){e=parseInt(e,10);for(var r=0;r<t.length;r++)if(t[r].payloadType===e||t[r].preferredPayloadType===e)return t[r]},i=function(e,t,r,i){var s=n(e.parameters.apt,r),a=n(t.parameters.apt,i);return s&&a&&s.name.toLowerCase()===a.name.toLowerCase()};return e.codecs.forEach((function(n){for(var s=0;s<t.codecs.length;s++){var a=t.codecs[s];if(n.name.toLowerCase()===a.name.toLowerCase()&&n.clockRate===a.clockRate){if("rtx"===n.name.toLowerCase()&&n.parameters&&a.parameters.apt&&!i(n,a,e.codecs,t.codecs))continue;(a=JSON.parse(JSON.stringify(a))).numChannels=Math.min(n.numChannels,a.numChannels),r.codecs.push(a),a.rtcpFeedback=a.rtcpFeedback.filter((function(e){for(var t=0;t<n.rtcpFeedback.length;t++)if(n.rtcpFeedback[t].type===e.type&&n.rtcpFeedback[t].parameter===e.parameter)return!0;return!1}));break}}})),e.headerExtensions.forEach((function(e){for(var n=0;n<t.headerExtensions.length;n++){var i=t.headerExtensions[n];if(e.uri===i.uri){r.headerExtensions.push(i);break}}})),r}function rs(e,t,r){return-1!=={offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[t][e].indexOf(r)}function ns(e,t){var r=e.getRemoteCandidates().find((function(e){return t.foundation===e.foundation&&t.ip===e.ip&&t.port===e.port&&t.priority===e.priority&&t.protocol===e.protocol&&t.type===e.type}));return r||e.addRemoteCandidate(t),!r}function is(e,t){var r=new Error(t);return r.name=e,r.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[e],r}var ss=function(e,t){function r(t,r){r.addTrack(t),r.dispatchEvent(new e.MediaStreamTrackEvent("addtrack",{track:t}))}function n(t,r,n,i){var s=new Event("track");s.track=r,s.receiver=n,s.transceiver={receiver:n},s.streams=i,e.setTimeout((function(){t._dispatchEvent("track",s)}))}var i=function(r){var n=this,i=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach((function(e){n[e]=i[e].bind(i)})),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",r=JSON.parse(JSON.stringify(r||{})),this.usingBundle="max-bundle"===r.bundlePolicy,"negotiate"===r.rtcpMuxPolicy)throw is("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(r.rtcpMuxPolicy||(r.rtcpMuxPolicy="require"),r.iceTransportPolicy){case"all":case"relay":break;default:r.iceTransportPolicy="all"}switch(r.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:r.bundlePolicy="balanced"}if(r.iceServers=function(e,t){var r=!1;return(e=JSON.parse(JSON.stringify(e))).filter((function(e){if(e&&(e.urls||e.url)){var n=e.urls||e.url;e.url&&!e.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var i="string"==typeof n;return i&&(n=[n]),n=n.filter((function(e){return 0!==e.indexOf("turn:")||-1===e.indexOf("transport=udp")||-1!==e.indexOf("turn:[")||r?0===e.indexOf("stun:")&&t>=14393&&-1===e.indexOf("?transport=udp"):(r=!0,!0)})),delete e.url,e.urls=i?n[0]:n,!!n.length}}))}(r.iceServers||[],t),this._iceGatherers=[],r.iceCandidatePoolSize)for(var s=r.iceCandidatePoolSize;s>0;s--)this._iceGatherers.push(new e.RTCIceGatherer({iceServers:r.iceServers,gatherPolicy:r.iceTransportPolicy}));else r.iceCandidatePoolSize=0;this._config=r,this.transceivers=[],this._sdpSessionId=Zi.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(i.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(i.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),i.prototype.onicecandidate=null,i.prototype.onaddstream=null,i.prototype.ontrack=null,i.prototype.onremovestream=null,i.prototype.onsignalingstatechange=null,i.prototype.oniceconnectionstatechange=null,i.prototype.onconnectionstatechange=null,i.prototype.onicegatheringstatechange=null,i.prototype.onnegotiationneeded=null,i.prototype.ondatachannel=null,i.prototype._dispatchEvent=function(e,t){this._isClosed||(this.dispatchEvent(t),"function"==typeof this["on"+e]&&this["on"+e](t))},i.prototype._emitGatheringStateChange=function(){var e=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",e)},i.prototype.getConfiguration=function(){return this._config},i.prototype.getLocalStreams=function(){return this.localStreams},i.prototype.getRemoteStreams=function(){return this.remoteStreams},i.prototype._createTransceiver=function(e,t){var r=this.transceivers.length>0,n={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:e,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&r)n.iceTransport=this.transceivers[0].iceTransport,n.dtlsTransport=this.transceivers[0].dtlsTransport;else{var i=this._createIceAndDtlsTransports();n.iceTransport=i.iceTransport,n.dtlsTransport=i.dtlsTransport}return t||this.transceivers.push(n),n},i.prototype.addTrack=function(t,r){if(this._isClosed)throw is("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var n;if(this.transceivers.find((function(e){return e.track===t})))throw is("InvalidAccessError","Track already exists.");for(var i=0;i<this.transceivers.length;i++)this.transceivers[i].track||this.transceivers[i].kind!==t.kind||(n=this.transceivers[i]);return n||(n=this._createTransceiver(t.kind)),this._maybeFireNegotiationNeeded(),-1===this.localStreams.indexOf(r)&&this.localStreams.push(r),n.track=t,n.stream=r,n.rtpSender=new e.RTCRtpSender(t,n.dtlsTransport),n.rtpSender},i.prototype.addStream=function(e){var r=this;if(t>=15025)e.getTracks().forEach((function(t){r.addTrack(t,e)}));else{var n=e.clone();e.getTracks().forEach((function(e,t){var r=n.getTracks()[t];e.addEventListener("enabled",(function(e){r.enabled=e.enabled}))})),n.getTracks().forEach((function(e){r.addTrack(e,n)}))}},i.prototype.removeTrack=function(t){if(this._isClosed)throw is("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(t instanceof e.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var r=this.transceivers.find((function(e){return e.rtpSender===t}));if(!r)throw is("InvalidAccessError","Sender was not created by this connection.");var n=r.stream;r.rtpSender.stop(),r.rtpSender=null,r.track=null,r.stream=null,-1===this.transceivers.map((function(e){return e.stream})).indexOf(n)&&this.localStreams.indexOf(n)>-1&&this.localStreams.splice(this.localStreams.indexOf(n),1),this._maybeFireNegotiationNeeded()},i.prototype.removeStream=function(e){var t=this;e.getTracks().forEach((function(e){var r=t.getSenders().find((function(t){return t.track===e}));r&&t.removeTrack(r)}))},i.prototype.getSenders=function(){return this.transceivers.filter((function(e){return!!e.rtpSender})).map((function(e){return e.rtpSender}))},i.prototype.getReceivers=function(){return this.transceivers.filter((function(e){return!!e.rtpReceiver})).map((function(e){return e.rtpReceiver}))},i.prototype._createIceGatherer=function(t,r){var n=this;if(r&&t>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var i=new e.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(i,"state",{value:"new",writable:!0}),this.transceivers[t].bufferedCandidateEvents=[],this.transceivers[t].bufferCandidates=function(e){var r=!e.candidate||0===Object.keys(e.candidate).length;i.state=r?"completed":"gathering",null!==n.transceivers[t].bufferedCandidateEvents&&n.transceivers[t].bufferedCandidateEvents.push(e)},i.addEventListener("localcandidate",this.transceivers[t].bufferCandidates),i},i.prototype._gather=function(t,r){var n=this,i=this.transceivers[r].iceGatherer;if(!i.onlocalcandidate){var s=this.transceivers[r].bufferedCandidateEvents;this.transceivers[r].bufferedCandidateEvents=null,i.removeEventListener("localcandidate",this.transceivers[r].bufferCandidates),i.onlocalcandidate=function(e){if(!(n.usingBundle&&r>0)){var s=new Event("icecandidate");s.candidate={sdpMid:t,sdpMLineIndex:r};var a=e.candidate,o=!a||0===Object.keys(a).length;if(o)"new"!==i.state&&"gathering"!==i.state||(i.state="completed");else{"new"===i.state&&(i.state="gathering"),a.component=1,a.ufrag=i.getLocalParameters().usernameFragment;var c=Zi.writeCandidate(a);s.candidate=Object.assign(s.candidate,Zi.parseCandidate(c)),s.candidate.candidate=c,s.candidate.toJSON=function(){return{candidate:s.candidate.candidate,sdpMid:s.candidate.sdpMid,sdpMLineIndex:s.candidate.sdpMLineIndex,usernameFragment:s.candidate.usernameFragment}}}var d=Zi.getMediaSections(n._localDescription.sdp);d[s.candidate.sdpMLineIndex]+=o?"a=end-of-candidates\r\n":"a="+s.candidate.candidate+"\r\n",n._localDescription.sdp=Zi.getDescription(n._localDescription.sdp)+d.join("");var l=n.transceivers.every((function(e){return e.iceGatherer&&"completed"===e.iceGatherer.state}));"gathering"!==n.iceGatheringState&&(n.iceGatheringState="gathering",n._emitGatheringStateChange()),o||n._dispatchEvent("icecandidate",s),l&&(n._dispatchEvent("icecandidate",new Event("icecandidate")),n.iceGatheringState="complete",n._emitGatheringStateChange())}},e.setTimeout((function(){s.forEach((function(e){i.onlocalcandidate(e)}))}),0)}},i.prototype._createIceAndDtlsTransports=function(){var t=this,r=new e.RTCIceTransport(null);r.onicestatechange=function(){t._updateIceConnectionState(),t._updateConnectionState()};var n=new e.RTCDtlsTransport(r);return n.ondtlsstatechange=function(){t._updateConnectionState()},n.onerror=function(){Object.defineProperty(n,"state",{value:"failed",writable:!0}),t._updateConnectionState()},{iceTransport:r,dtlsTransport:n}},i.prototype._disposeIceAndDtlsTransports=function(e){var t=this.transceivers[e].iceGatherer;t&&(delete t.onlocalcandidate,delete this.transceivers[e].iceGatherer);var r=this.transceivers[e].iceTransport;r&&(delete r.onicestatechange,delete this.transceivers[e].iceTransport);var n=this.transceivers[e].dtlsTransport;n&&(delete n.ondtlsstatechange,delete n.onerror,delete this.transceivers[e].dtlsTransport)},i.prototype._transceive=function(e,r,n){var i=ts(e.localCapabilities,e.remoteCapabilities);r&&e.rtpSender&&(i.encodings=e.sendEncodingParameters,i.rtcp={cname:Zi.localCName,compound:e.rtcpParameters.compound},e.recvEncodingParameters.length&&(i.rtcp.ssrc=e.recvEncodingParameters[0].ssrc),e.rtpSender.send(i)),n&&e.rtpReceiver&&i.codecs.length>0&&("video"===e.kind&&e.recvEncodingParameters&&t<15019&&e.recvEncodingParameters.forEach((function(e){delete e.rtx})),e.recvEncodingParameters.length?i.encodings=e.recvEncodingParameters:i.encodings=[{}],i.rtcp={compound:e.rtcpParameters.compound},e.rtcpParameters.cname&&(i.rtcp.cname=e.rtcpParameters.cname),e.sendEncodingParameters.length&&(i.rtcp.ssrc=e.sendEncodingParameters[0].ssrc),e.rtpReceiver.receive(i))},i.prototype.setLocalDescription=function(e){var t,r,n=this;if(-1===["offer","answer"].indexOf(e.type))return Promise.reject(is("TypeError",'Unsupported type "'+e.type+'"'));if(!rs("setLocalDescription",e.type,n.signalingState)||n._isClosed)return Promise.reject(is("InvalidStateError","Can not set local "+e.type+" in state "+n.signalingState));if("offer"===e.type)t=Zi.splitSections(e.sdp),r=t.shift(),t.forEach((function(e,t){var r=Zi.parseRtpParameters(e);n.transceivers[t].localCapabilities=r})),n.transceivers.forEach((function(e,t){n._gather(e.mid,t)}));else if("answer"===e.type){t=Zi.splitSections(n._remoteDescription.sdp),r=t.shift();var i=Zi.matchPrefix(r,"a=ice-lite").length>0;t.forEach((function(e,t){var s=n.transceivers[t],a=s.iceGatherer,o=s.iceTransport,c=s.dtlsTransport,d=s.localCapabilities,l=s.remoteCapabilities;if(!(Zi.isRejected(e)&&0===Zi.matchPrefix(e,"a=bundle-only").length)&&!s.rejected){var p=Zi.getIceParameters(e,r),u=Zi.getDtlsParameters(e,r);i&&(u.role="server"),n.usingBundle&&0!==t||(n._gather(s.mid,t),"new"===o.state&&o.start(a,p,i?"controlling":"controlled"),"new"===c.state&&c.start(u));var h=ts(d,l);n._transceive(s,h.codecs.length>0,!1)}}))}return n._localDescription={type:e.type,sdp:e.sdp},"offer"===e.type?n._updateSignalingState("have-local-offer"):n._updateSignalingState("stable"),Promise.resolve()},i.prototype.setRemoteDescription=function(i){var s=this;if(-1===["offer","answer"].indexOf(i.type))return Promise.reject(is("TypeError",'Unsupported type "'+i.type+'"'));if(!rs("setRemoteDescription",i.type,s.signalingState)||s._isClosed)return Promise.reject(is("InvalidStateError","Can not set remote "+i.type+" in state "+s.signalingState));var a={};s.remoteStreams.forEach((function(e){a[e.id]=e}));var o=[],c=Zi.splitSections(i.sdp),d=c.shift(),l=Zi.matchPrefix(d,"a=ice-lite").length>0,p=Zi.matchPrefix(d,"a=group:BUNDLE ").length>0;s.usingBundle=p;var u=Zi.matchPrefix(d,"a=ice-options:")[0];return s.canTrickleIceCandidates=!!u&&u.substr(14).split(" ").indexOf("trickle")>=0,c.forEach((function(n,c){var u=Zi.splitLines(n),h=Zi.getKind(n),m=Zi.isRejected(n)&&0===Zi.matchPrefix(n,"a=bundle-only").length,f=u[0].substr(2).split(" ")[2],g=Zi.getDirection(n,d),v=Zi.parseMsid(n),y=Zi.getMid(n)||Zi.generateIdentifier();if(m||"application"===h&&("DTLS/SCTP"===f||"UDP/DTLS/SCTP"===f))s.transceivers[c]={mid:y,kind:h,protocol:f,rejected:!0};else{var _,b,w,S,C,R,T,P,k;!m&&s.transceivers[c]&&s.transceivers[c].rejected&&(s.transceivers[c]=s._createTransceiver(h,!0));var E,D,O=Zi.parseRtpParameters(n);m||(E=Zi.getIceParameters(n,d),(D=Zi.getDtlsParameters(n,d)).role="client"),T=Zi.parseRtpEncodingParameters(n);var I=Zi.parseRtcpParameters(n),x=Zi.matchPrefix(n,"a=end-of-candidates",d).length>0,M=Zi.matchPrefix(n,"a=candidate:").map((function(e){return Zi.parseCandidate(e)})).filter((function(e){return 1===e.component}));if(("offer"===i.type||"answer"===i.type)&&!m&&p&&c>0&&s.transceivers[c]&&(s._disposeIceAndDtlsTransports(c),s.transceivers[c].iceGatherer=s.transceivers[0].iceGatherer,s.transceivers[c].iceTransport=s.transceivers[0].iceTransport,s.transceivers[c].dtlsTransport=s.transceivers[0].dtlsTransport,s.transceivers[c].rtpSender&&s.transceivers[c].rtpSender.setTransport(s.transceivers[0].dtlsTransport),s.transceivers[c].rtpReceiver&&s.transceivers[c].rtpReceiver.setTransport(s.transceivers[0].dtlsTransport)),"offer"!==i.type||m){if("answer"===i.type&&!m){b=(_=s.transceivers[c]).iceGatherer,w=_.iceTransport,S=_.dtlsTransport,C=_.rtpReceiver,R=_.sendEncodingParameters,P=_.localCapabilities,s.transceivers[c].recvEncodingParameters=T,s.transceivers[c].remoteCapabilities=O,s.transceivers[c].rtcpParameters=I,M.length&&"new"===w.state&&(!l&&!x||p&&0!==c?M.forEach((function(e){ns(_.iceTransport,e)})):w.setRemoteCandidates(M)),p&&0!==c||("new"===w.state&&w.start(b,E,"controlling"),"new"===S.state&&S.start(D)),!ts(_.localCapabilities,_.remoteCapabilities).codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&_.sendEncodingParameters[0].rtx&&delete _.sendEncodingParameters[0].rtx,s._transceive(_,"sendrecv"===g||"recvonly"===g,"sendrecv"===g||"sendonly"===g),!C||"sendrecv"!==g&&"sendonly"!==g?delete _.rtpReceiver:(k=C.track,v?(a[v.stream]||(a[v.stream]=new e.MediaStream),r(k,a[v.stream]),o.push([k,C,a[v.stream]])):(a.default||(a.default=new e.MediaStream),r(k,a.default),o.push([k,C,a.default])))}}else{(_=s.transceivers[c]||s._createTransceiver(h)).mid=y,_.iceGatherer||(_.iceGatherer=s._createIceGatherer(c,p)),M.length&&"new"===_.iceTransport.state&&(!x||p&&0!==c?M.forEach((function(e){ns(_.iceTransport,e)})):_.iceTransport.setRemoteCandidates(M)),P=e.RTCRtpReceiver.getCapabilities(h),t<15019&&(P.codecs=P.codecs.filter((function(e){return"rtx"!==e.name}))),R=_.sendEncodingParameters||[{ssrc:1001*(2*c+2)}];var j,L=!1;if("sendrecv"===g||"sendonly"===g){if(L=!_.rtpReceiver,C=_.rtpReceiver||new e.RTCRtpReceiver(_.dtlsTransport,h),L)k=C.track,v&&"-"===v.stream||(v?(a[v.stream]||(a[v.stream]=new e.MediaStream,Object.defineProperty(a[v.stream],"id",{get:function(){return v.stream}})),Object.defineProperty(k,"id",{get:function(){return v.track}}),j=a[v.stream]):(a.default||(a.default=new e.MediaStream),j=a.default)),j&&(r(k,j),_.associatedRemoteMediaStreams.push(j)),o.push([k,C,j])}else _.rtpReceiver&&_.rtpReceiver.track&&(_.associatedRemoteMediaStreams.forEach((function(t){var r=t.getTracks().find((function(e){return e.id===_.rtpReceiver.track.id}));r&&function(t,r){r.removeTrack(t),r.dispatchEvent(new e.MediaStreamTrackEvent("removetrack",{track:t}))}(r,t)})),_.associatedRemoteMediaStreams=[]);_.localCapabilities=P,_.remoteCapabilities=O,_.rtpReceiver=C,_.rtcpParameters=I,_.sendEncodingParameters=R,_.recvEncodingParameters=T,s._transceive(s.transceivers[c],!1,L)}}})),void 0===s._dtlsRole&&(s._dtlsRole="offer"===i.type?"active":"passive"),s._remoteDescription={type:i.type,sdp:i.sdp},"offer"===i.type?s._updateSignalingState("have-remote-offer"):s._updateSignalingState("stable"),Object.keys(a).forEach((function(t){var r=a[t];if(r.getTracks().length){if(-1===s.remoteStreams.indexOf(r)){s.remoteStreams.push(r);var i=new Event("addstream");i.stream=r,e.setTimeout((function(){s._dispatchEvent("addstream",i)}))}o.forEach((function(e){var t=e[0],i=e[1];r.id===e[2].id&&n(s,t,i,[r])}))}})),o.forEach((function(e){e[2]||n(s,e[0],e[1],[])})),e.setTimeout((function(){s&&s.transceivers&&s.transceivers.forEach((function(e){e.iceTransport&&"new"===e.iceTransport.state&&e.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),e.iceTransport.addRemoteCandidate({}))}))}),4e3),Promise.resolve()},i.prototype.close=function(){this.transceivers.forEach((function(e){e.iceTransport&&e.iceTransport.stop(),e.dtlsTransport&&e.dtlsTransport.stop(),e.rtpSender&&e.rtpSender.stop(),e.rtpReceiver&&e.rtpReceiver.stop()})),this._isClosed=!0,this._updateSignalingState("closed")},i.prototype._updateSignalingState=function(e){this.signalingState=e;var t=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",t)},i.prototype._maybeFireNegotiationNeeded=function(){var t=this;"stable"===this.signalingState&&!0!==this.needNegotiation&&(this.needNegotiation=!0,e.setTimeout((function(){if(t.needNegotiation){t.needNegotiation=!1;var e=new Event("negotiationneeded");t._dispatchEvent("negotiationneeded",e)}}),0))},i.prototype._updateIceConnectionState=function(){var e,t={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&!e.rejected&&t[e.iceTransport.state]++})),e="new",t.failed>0?e="failed":t.checking>0?e="checking":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0?e="connected":t.completed>0&&(e="completed"),e!==this.iceConnectionState){this.iceConnectionState=e;var r=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",r)}},i.prototype._updateConnectionState=function(){var e,t={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&e.dtlsTransport&&!e.rejected&&(t[e.iceTransport.state]++,t[e.dtlsTransport.state]++)})),t.connected+=t.completed,e="new",t.failed>0?e="failed":t.connecting>0?e="connecting":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0&&(e="connected"),e!==this.connectionState){this.connectionState=e;var r=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",r)}},i.prototype.createOffer=function(){var r=this;if(r._isClosed)return Promise.reject(is("InvalidStateError","Can not call createOffer after close"));var n=r.transceivers.filter((function(e){return"audio"===e.kind})).length,i=r.transceivers.filter((function(e){return"video"===e.kind})).length,s=arguments[0];if(s){if(s.mandatory||s.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");void 0!==s.offerToReceiveAudio&&(n=!0===s.offerToReceiveAudio?1:!1===s.offerToReceiveAudio?0:s.offerToReceiveAudio),void 0!==s.offerToReceiveVideo&&(i=!0===s.offerToReceiveVideo?1:!1===s.offerToReceiveVideo?0:s.offerToReceiveVideo)}for(r.transceivers.forEach((function(e){"audio"===e.kind?--n<0&&(e.wantReceive=!1):"video"===e.kind&&--i<0&&(e.wantReceive=!1)}));n>0||i>0;)n>0&&(r._createTransceiver("audio"),n--),i>0&&(r._createTransceiver("video"),i--);var a=Zi.writeSessionBoilerplate(r._sdpSessionId,r._sdpSessionVersion++);r.transceivers.forEach((function(n,i){var s=n.track,a=n.kind,o=n.mid||Zi.generateIdentifier();n.mid=o,n.iceGatherer||(n.iceGatherer=r._createIceGatherer(i,r.usingBundle));var c=e.RTCRtpSender.getCapabilities(a);t<15019&&(c.codecs=c.codecs.filter((function(e){return"rtx"!==e.name}))),c.codecs.forEach((function(e){"H264"===e.name&&void 0===e.parameters["level-asymmetry-allowed"]&&(e.parameters["level-asymmetry-allowed"]="1"),n.remoteCapabilities&&n.remoteCapabilities.codecs&&n.remoteCapabilities.codecs.forEach((function(t){e.name.toLowerCase()===t.name.toLowerCase()&&e.clockRate===t.clockRate&&(e.preferredPayloadType=t.payloadType)}))})),c.headerExtensions.forEach((function(e){(n.remoteCapabilities&&n.remoteCapabilities.headerExtensions||[]).forEach((function(t){e.uri===t.uri&&(e.id=t.id)}))}));var d=n.sendEncodingParameters||[{ssrc:1001*(2*i+1)}];s&&t>=15019&&"video"===a&&!d[0].rtx&&(d[0].rtx={ssrc:d[0].ssrc+1}),n.wantReceive&&(n.rtpReceiver=new e.RTCRtpReceiver(n.dtlsTransport,a)),n.localCapabilities=c,n.sendEncodingParameters=d})),"max-compat"!==r._config.bundlePolicy&&(a+="a=group:BUNDLE "+r.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),a+="a=ice-options:trickle\r\n",r.transceivers.forEach((function(e,t){a+=es(e,e.localCapabilities,"offer",e.stream,r._dtlsRole),a+="a=rtcp-rsize\r\n",!e.iceGatherer||"new"===r.iceGatheringState||0!==t&&r.usingBundle||(e.iceGatherer.getLocalCandidates().forEach((function(e){e.component=1,a+="a="+Zi.writeCandidate(e)+"\r\n"})),"completed"===e.iceGatherer.state&&(a+="a=end-of-candidates\r\n"))}));var o=new e.RTCSessionDescription({type:"offer",sdp:a});return Promise.resolve(o)},i.prototype.createAnswer=function(){var r=this;if(r._isClosed)return Promise.reject(is("InvalidStateError","Can not call createAnswer after close"));if("have-remote-offer"!==r.signalingState&&"have-local-pranswer"!==r.signalingState)return Promise.reject(is("InvalidStateError","Can not call createAnswer in signalingState "+r.signalingState));var n=Zi.writeSessionBoilerplate(r._sdpSessionId,r._sdpSessionVersion++);r.usingBundle&&(n+="a=group:BUNDLE "+r.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),n+="a=ice-options:trickle\r\n";var i=Zi.getMediaSections(r._remoteDescription.sdp).length;r.transceivers.forEach((function(e,s){if(!(s+1>i)){if(e.rejected)return"application"===e.kind?"DTLS/SCTP"===e.protocol?n+="m=application 0 DTLS/SCTP 5000\r\n":n+="m=application 0 "+e.protocol+" webrtc-datachannel\r\n":"audio"===e.kind?n+="m=audio 0 UDP/TLS/RTP/SAVPF 0\r\na=rtpmap:0 PCMU/8000\r\n":"video"===e.kind&&(n+="m=video 0 UDP/TLS/RTP/SAVPF 120\r\na=rtpmap:120 VP8/90000\r\n"),void(n+="c=IN IP4 0.0.0.0\r\na=inactive\r\na=mid:"+e.mid+"\r\n");var a;if(e.stream)"audio"===e.kind?a=e.stream.getAudioTracks()[0]:"video"===e.kind&&(a=e.stream.getVideoTracks()[0]),a&&t>=15019&&"video"===e.kind&&!e.sendEncodingParameters[0].rtx&&(e.sendEncodingParameters[0].rtx={ssrc:e.sendEncodingParameters[0].ssrc+1});var o=ts(e.localCapabilities,e.remoteCapabilities);!o.codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&e.sendEncodingParameters[0].rtx&&delete e.sendEncodingParameters[0].rtx,n+=es(e,o,"answer",e.stream,r._dtlsRole),e.rtcpParameters&&e.rtcpParameters.reducedSize&&(n+="a=rtcp-rsize\r\n")}}));var s=new e.RTCSessionDescription({type:"answer",sdp:n});return Promise.resolve(s)},i.prototype.addIceCandidate=function(e){var t,r=this;return e&&void 0===e.sdpMLineIndex&&!e.sdpMid?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise((function(n,i){if(!r._remoteDescription)return i(is("InvalidStateError","Can not add ICE candidate without a remote description"));if(e&&""!==e.candidate){var s=e.sdpMLineIndex;if(e.sdpMid)for(var a=0;a<r.transceivers.length;a++)if(r.transceivers[a].mid===e.sdpMid){s=a;break}var o=r.transceivers[s];if(!o)return i(is("OperationError","Can not add ICE candidate"));if(o.rejected)return n();var c=Object.keys(e.candidate).length>0?Zi.parseCandidate(e.candidate):{};if("tcp"===c.protocol&&(0===c.port||9===c.port))return n();if(c.component&&1!==c.component)return n();if((0===s||s>0&&o.iceTransport!==r.transceivers[0].iceTransport)&&!ns(o.iceTransport,c))return i(is("OperationError","Can not add ICE candidate"));var d=e.candidate.trim();0===d.indexOf("a=")&&(d=d.substr(2)),(t=Zi.getMediaSections(r._remoteDescription.sdp))[s]+="a="+(c.type?d:"end-of-candidates")+"\r\n",r._remoteDescription.sdp=Zi.getDescription(r._remoteDescription.sdp)+t.join("")}else for(var l=0;l<r.transceivers.length&&(r.transceivers[l].rejected||(r.transceivers[l].iceTransport.addRemoteCandidate({}),(t=Zi.getMediaSections(r._remoteDescription.sdp))[l]+="a=end-of-candidates\r\n",r._remoteDescription.sdp=Zi.getDescription(r._remoteDescription.sdp)+t.join(""),!r.usingBundle));l++);n()}))},i.prototype.getStats=function(t){if(t&&t instanceof e.MediaStreamTrack){var r=null;if(this.transceivers.forEach((function(e){e.rtpSender&&e.rtpSender.track===t?r=e.rtpSender:e.rtpReceiver&&e.rtpReceiver.track===t&&(r=e.rtpReceiver)})),!r)throw is("InvalidAccessError","Invalid selector.");return r.getStats()}var n=[];return this.transceivers.forEach((function(e){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach((function(t){e[t]&&n.push(e[t].getStats())}))})),Promise.all(n).then((function(e){var t=new Map;return e.forEach((function(e){e.forEach((function(e){t.set(e.id,e)}))})),t}))};["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"].forEach((function(t){var r=e[t];if(r&&r.prototype&&r.prototype.getStats){var n=r.prototype.getStats;r.prototype.getStats=function(){return n.apply(this).then((function(e){var t=new Map;return Object.keys(e).forEach((function(r){var n;e[r].type={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[(n=e[r]).type]||n.type,t.set(r,e[r])})),t}))}}}));var s=["createOffer","createAnswer"];return s.forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[0]||"function"==typeof e[1]?t.apply(this,[arguments[2]]).then((function(t){"function"==typeof e[0]&&e[0].apply(null,[t])}),(function(t){"function"==typeof e[1]&&e[1].apply(null,[t])})):t.apply(this,arguments)}})),(s=["setLocalDescription","setRemoteDescription","addIceCandidate"]).forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[1]||"function"==typeof e[2]?t.apply(this,arguments).then((function(){"function"==typeof e[1]&&e[1].apply(null)}),(function(t){"function"==typeof e[2]&&e[2].apply(null,[t])})):t.apply(this,arguments)}})),["getStats"].forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[1]?t.apply(this,arguments).then((function(){"function"==typeof e[1]&&e[1].apply(null)})):t.apply(this,arguments)}})),i},as=Ki(ss);function os(e){const t=e&&e.navigator,r=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(e){return r(e).catch((e=>Promise.reject(function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString(){return this.name}}}(e))))}}function cs(e){"getDisplayMedia"in e.navigator&&e.navigator.mediaDevices&&(e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=e.navigator.getDisplayMedia.bind(e.navigator)))}function ds(e,t){if(e.RTCIceGatherer&&(e.RTCIceCandidate||(e.RTCIceCandidate=function(e){return e}),e.RTCSessionDescription||(e.RTCSessionDescription=function(e){return e}),t.version<15025)){const t=Object.getOwnPropertyDescriptor(e.MediaStreamTrack.prototype,"enabled");Object.defineProperty(e.MediaStreamTrack.prototype,"enabled",{set(e){t.set.call(this,e);const r=new Event("enabled");r.enabled=e,this.dispatchEvent(r)}})}e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)&&Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=new e.RTCDtmfSender(this):"video"===this.track.kind&&(this._dtmf=null)),this._dtmf}}),e.RTCDtmfSender&&!e.RTCDTMFSender&&(e.RTCDTMFSender=e.RTCDtmfSender);const r=as(e,t.version);e.RTCPeerConnection=function(e){return e&&e.iceServers&&(e.iceServers=function(e,t){let r=!1;return(e=JSON.parse(JSON.stringify(e))).filter((e=>{if(e&&(e.urls||e.url)){let t=e.urls||e.url;e.url&&!e.urls&&Oi("RTCIceServer.url","RTCIceServer.urls");const n="string"==typeof t;return n&&(t=[t]),t=t.filter((e=>{if(0===e.indexOf("stun:"))return!1;const t=e.startsWith("turn")&&!e.startsWith("turn:[")&&e.includes("transport=udp");return t&&!r?(r=!0,!0):t&&!r})),delete e.url,e.urls=n?t[0]:t,!!t.length}}))}(e.iceServers,t.version),Di("ICE servers after filtering:",e.iceServers)),new r(e)},e.RTCPeerConnection.prototype=r.prototype}function ls(e){e.RTCRtpSender&&!("replaceTrack"in e.RTCRtpSender.prototype)&&(e.RTCRtpSender.prototype.replaceTrack=e.RTCRtpSender.prototype.setTrack)}var ps=Object.freeze({__proto__:null,shimGetDisplayMedia:cs,shimGetUserMedia:os,shimPeerConnection:ds,shimReplaceTrack:ls});function us(e,t){const r=e&&e.navigator,n=e&&e.MediaStreamTrack;if(r.getUserMedia=function(e,t,n){Oi("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),r.mediaDevices.getUserMedia(e).then(t,n)},!(t.version>55&&"autoGainControl"in r.mediaDevices.getSupportedConstraints())){const e=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])},t=r.mediaDevices.getUserMedia.bind(r.mediaDevices);if(r.mediaDevices.getUserMedia=function(r){return"object"==typeof r&&"object"==typeof r.audio&&(r=JSON.parse(JSON.stringify(r)),e(r.audio,"autoGainControl","mozAutoGainControl"),e(r.audio,"noiseSuppression","mozNoiseSuppression")),t(r)},n&&n.prototype.getSettings){const t=n.prototype.getSettings;n.prototype.getSettings=function(){const r=t.apply(this,arguments);return e(r,"mozAutoGainControl","autoGainControl"),e(r,"mozNoiseSuppression","noiseSuppression"),r}}if(n&&n.prototype.applyConstraints){const t=n.prototype.applyConstraints;n.prototype.applyConstraints=function(r){return"audio"===this.kind&&"object"==typeof r&&(r=JSON.parse(JSON.stringify(r)),e(r,"autoGainControl","mozAutoGainControl"),e(r,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[r])}}}}function hs(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function ms(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const r=e.RTCPeerConnection.prototype[t],n={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=n[t]}));const r={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},n=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,i,s]=arguments;return n.apply(this,[e||null]).then((e=>{if(t.version<53&&!i)try{e.forEach((e=>{e.type=r[e.type]||e.type}))}catch(t){if("TypeError"!==t.name)throw t;e.forEach(((t,n)=>{e.set(n,Object.assign({},t,{type:r[t.type]||t.type}))}))}return e})).then(i,s)}}function fs(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function gs(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),Pi(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function vs(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){Oi("removeStream","removeTrack"),this.getSenders().forEach((t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)}))})}function ys(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function _s(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const e=arguments[1],r=e&&"sendEncodings"in e;r&&e.sendEncodings.forEach((e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));const n=t.apply(this,arguments);if(r){const{sender:t}=n,r=t.getParameters();(!("encodings"in r)||1===r.encodings.length&&0===Object.keys(r.encodings[0]).length)&&(r.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(r).then((()=>{delete t.sendEncodings})).catch((()=>{delete t.sendEncodings}))))}return n})}function bs(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function ws(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}function Ss(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>t.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):t.apply(this,arguments)}}var Cs=Object.freeze({__proto__:null,shimAddTransceiver:_s,shimCreateAnswer:Ss,shimCreateOffer:ws,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(r){if(!r||!r.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===r.video?r.video={mediaSource:t}:r.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(r)})},shimGetParameters:bs,shimGetUserMedia:us,shimOnTrack:hs,shimPeerConnection:ms,shimRTCDataChannel:ys,shimReceiverGetStats:gs,shimRemoveStream:vs,shimSenderGetStats:fs});function Rs(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach((r=>t.call(this,r,e))),e.getVideoTracks().forEach((r=>t.call(this,r,e)))},e.RTCPeerConnection.prototype.addTrack=function(e,...r){return r&&r.forEach((e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]})),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const r=e.getTracks();this.getSenders().forEach((e=>{r.includes(e.track)&&this.removeTrack(e)}))})}}function Ts(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach((e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)}))})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach((t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const r=new Event("addstream");r.stream=t,e.dispatchEvent(r)}))}),t.apply(e,arguments)}}}function Ps(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,r=t.createOffer,n=t.createAnswer,i=t.setLocalDescription,s=t.setRemoteDescription,a=t.addIceCandidate;t.createOffer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){const r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i};let o=function(e,t,r){const n=i.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n};t.setLocalDescription=o,o=function(e,t,r){const n=s.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n},t.setRemoteDescription=o,o=function(e,t,r){const n=a.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n},t.addIceCandidate=o}function ks(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,r=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>r(Es(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,r,n){t.mediaDevices.getUserMedia(e).then(r,n)}.bind(t))}function Es(e){return e&&void 0!==e.video?Object.assign({},e,{video:xi(e.video)}):e}function Ds(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,r){if(e&&e.iceServers){const t=[];for(let r=0;r<e.iceServers.length;r++){let n=e.iceServers[r];!n.hasOwnProperty("urls")&&n.hasOwnProperty("url")?(Oi("RTCIceServer.url","RTCIceServer.urls"),n=JSON.parse(JSON.stringify(n)),n.urls=n.url,delete n.url,t.push(n)):t.push(e.iceServers[r])}e.iceServers=t}return new t(e,r)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in t&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get:()=>t.generateCertificate})}function Os(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Is(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find((e=>"audio"===e.receiver.track.kind));!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio"),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const r=this.getTransceivers().find((e=>"video"===e.receiver.track.kind));!1===e.offerToReceiveVideo&&r?"sendrecv"===r.direction?r.setDirection?r.setDirection("sendonly"):r.direction="sendonly":"recvonly"===r.direction&&(r.setDirection?r.setDirection("inactive"):r.direction="inactive"):!0!==e.offerToReceiveVideo||r||this.addTransceiver("video")}return t.apply(this,arguments)}}function xs(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var Ms=Object.freeze({__proto__:null,shimAudioContext:xs,shimCallbacksAPI:Ps,shimConstraints:Es,shimCreateOfferLegacy:Is,shimGetUserMedia:ks,shimLocalStreamsAPI:Rs,shimRTCIceServerUrls:Ds,shimRemoteStreamsAPI:Ts,shimTrackEventTransceiver:Os});function js(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){const r=new t(e),n=Xi.parseCandidate(e.candidate),i=Object.assign(r,n);return i.toJSON=function(){return{candidate:i.candidate,sdpMid:i.sdpMid,sdpMLineIndex:i.sdpMLineIndex,usernameFragment:i.usernameFragment}},i}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,Pi(e,"icecandidate",(t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t)))}function Ls(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=Xi.splitSections(e.sdp);return t.shift(),t.some((e=>{const t=Xi.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")}))}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const r=parseInt(t[1],10);return r!=r?-1:r}(arguments[0]),r=function(e){let r=65536;return"firefox"===t.browser&&(r=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),r}(e),n=function(e,r){let n=65536;"firefox"===t.browser&&57===t.version&&(n=65535);const i=Xi.matchPrefix(e.sdp,"a=max-message-size:");return i.length>0?n=parseInt(i[0].substr(19),10):"firefox"===t.browser&&-1!==r&&(n=2147483637),n}(arguments[0],e);let i;i=0===r&&0===n?Number.POSITIVE_INFINITY:0===r||0===n?Math.max(r,n):Math.min(r,n);const s={};Object.defineProperty(s,"maxMessageSize",{get:()=>i}),this._sctp=s}return r.apply(this,arguments)}}function As(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const r=e.send;e.send=function(){const n=arguments[0],i=n.length||n.size||n.byteLength;if("open"===e.readyState&&t.sctp&&i>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return r.apply(e,arguments)}}const r=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=r.apply(this,arguments);return t(e,this),e},Pi(e,"datachannel",(e=>(t(e.channel,e.target),e)))}function Ns(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((e=>{const r=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const r=new Event("connectionstatechange",e);t.dispatchEvent(r)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),r.apply(this,arguments)}}))}function Fs(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t.version>=605)return;const r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){const r=t.sdp.split("\n").filter((e=>"a=extmap-allow-mixed"!==e.trim())).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:r}):t.sdp=r}return r.apply(this,arguments)}}function Bs(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const r=e.RTCPeerConnection.prototype.addIceCandidate;r&&0!==r.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():r.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}var Us=Object.freeze({__proto__:null,removeExtmapAllowMixed:Fs,shimAddIceCandidateNullOrEmpty:Bs,shimConnectionState:Ns,shimMaxMessageSize:Ls,shimRTCIceCandidate:js,shimSendThrowTypeError:As});const zs=function({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const r=Di,n=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator)return t.browser="Not a browser.",t;const{navigator:r}=e;if(r.mozGetUserMedia)t.browser="firefox",t.version=Ti(r.userAgent,/Firefox\/(\d+)\./,1);else if(r.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser="chrome",t.version=Ti(r.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(r.mediaDevices&&r.userAgent.match(/Edge\/(\d+).(\d+)$/))t.browser="edge",t.version=Ti(r.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!e.RTCPeerConnection||!r.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=Ti(r.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype}return t}(e),i={browserDetails:n,commonShim:Us,extractVersion:Ti,disableLog:ki,disableWarnings:Ei};switch(n.browser){case"chrome":if(!Wi||!Gi||!t.shimChrome)return r("Chrome shim is not included in this adapter release."),i;if(null===n.version)return r("Chrome shim can not determine version, not shimming."),i;r("adapter.js shimming chrome."),i.browserShim=Wi,Bs(e,n),Ai(e,n),Ni(e),Gi(e,n),Fi(e),$i(e,n),Bi(e),Ui(e),zi(e),qi(e,n),js(e),Ns(e),Ls(e,n),As(e),Fs(e,n);break;case"firefox":if(!Cs||!ms||!t.shimFirefox)return r("Firefox shim is not included in this adapter release."),i;r("adapter.js shimming firefox."),i.browserShim=Cs,Bs(e,n),us(e,n),ms(e,n),hs(e),vs(e),fs(e),gs(e),ys(e),_s(e),bs(e),ws(e),Ss(e),js(e),Ns(e),Ls(e,n),As(e);break;case"edge":if(!ps||!ds||!t.shimEdge)return r("MS edge shim is not included in this adapter release."),i;r("adapter.js shimming edge."),i.browserShim=ps,os(e),cs(e),ds(e,n),ls(e),Ls(e,n),As(e);break;case"safari":if(!Ms||!t.shimSafari)return r("Safari shim is not included in this adapter release."),i;r("adapter.js shimming safari."),i.browserShim=Ms,Bs(e,n),Ds(e),Is(e),Ps(e),Rs(e),Ts(e),Os(e),ks(e),xs(e),js(e),Ls(e,n),As(e),Fs(e,n);break;default:r("Unsupported browser!")}return i}({window:"undefined"==typeof window?void 0:window});class Vs{constructor(e,t){this._socket=Si(e,{path:"/protocol/socket.io/v4",randomizationFactor:.5,reconnectionDelay:250,reconnectionDelayMax:5e3,timeout:5e3,transports:["websocket"],withCredentials:!0,...t}),this._socket.io.on("reconnect",(()=>{this._socket.sendBuffer=[]})),this._socket.io.on("reconnect_attempt",(()=>{this._wasConnectedUsingWebsocket?(this._socket.io.opts.transports=["websocket"],"safari"!==zs.browserDetails.browser&&delete this._wasConnectedUsingWebsocket):this._socket.io.opts.transports=["websocket","polling"]})),this._socket.on("connect",(()=>{"websocket"===this.getTransport()&&(this._wasConnectedUsingWebsocket=!0)}))}connect(){this.isConnected()||this.isConnecting()||this._socket.open()}disconnect(){this._socket.disconnect()}disconnectOnConnect(){this._socket.once("connect",(()=>{this._socket.disconnect()}))}emit(){this._socket.emit.apply(this._socket,arguments)}emitIfConnected(e,t){this.isConnected()&&this.emit(e,t)}getTransport(){return this._socket&&this._socket.io&&this._socket.io.engine&&this._socket.io.engine.transport&&this._socket.io.engine.transport.name}getManager(){return this._socket.io}isConnecting(){return this._socket&&this._socket.connecting}isConnected(){return this._socket&&this._socket.connected}on(e,t){return this._socket.on(e,t),()=>{this._socket.off(e,t)}}once(e,t){this._socket.once(e,t)}off(e,t){this._socket.off(e,t)}}const $s=at({name:"signalConnection",initialState:{deviceIdentified:!1,isIdentifyingDevice:!1,status:"",socket:null},reducers:{socketConnecting:e=>Object.assign(Object.assign({},e),{status:"connecting"}),socketConnected:(e,t)=>Object.assign(Object.assign({},e),{socket:t.payload,status:"connected"}),socketDisconnected:e=>Object.assign(Object.assign({},e),{status:"disconnected"}),socketReconnecting:e=>Object.assign(Object.assign({},e),{status:"reconnect"}),deviceIdentifying:e=>Object.assign(Object.assign({},e),{isIdentifyingDevice:!0}),deviceIdentified:e=>Object.assign(Object.assign({},e),{deviceIdentified:!0,isIdentifyingDevice:!1})}}),{deviceIdentifying:Gs,deviceIdentified:qs,socketConnected:Ws,socketConnecting:Hs,socketDisconnected:Ks}=$s.actions,Js=()=>(e,t)=>{if(na(t()))return;e(Hs());const r=function(){const e=new URL("wss://signal.appearin.net").origin;return new Vs(e,{autoConnect:!1})}();r.on("connect",(()=>e(Ws(r)))),r.on("device_identified",(()=>e(qs()))),r.getManager().on("reconnect",(()=>e(Xs()))),function(e,t){e.on("room_joined",(e=>t(Xt.roomJoined(e)))),e.on("new_client",(e=>t(Xt.newClient(e)))),e.on("client_left",(e=>t(Xt.clientLeft(e)))),e.on("audio_enabled",(e=>t(Xt.audioEnabled(e)))),e.on("video_enabled",(e=>t(Xt.videoEnabled(e)))),e.on("client_metadata_received",(e=>t(Xt.clientMetadataReceived(e)))),e.on("chat_message",(e=>t(Xt.chatMessage(e)))),e.on("disconnect",(()=>t(Xt.disconnect()))),e.on("room_knocked",(e=>t(Xt.roomKnocked(e)))),e.on("room_session_ended",(e=>t(Xt.roomSessionEnded(e)))),e.on("knocker_left",(e=>t(Xt.knockerLeft(e)))),e.on("knock_handled",(e=>t(Xt.knockHandled(e)))),e.on("screenshare_started",(e=>t(Xt.screenshareStarted(e)))),e.on("screenshare_stopped",(e=>t(Xt.screenshareStopped(e)))),e.on("cloud_recording_started",(e=>t(Xt.cloudRecordingStarted(e)))),e.on("cloud_recording_stopped",(()=>t(Xt.cloudRecordingStopped()))),e.on("streaming_stopped",(()=>t(Xt.streamingStopped())))}(r,e),r.connect()},Ys=({deviceCredentials:e})=>(t,r)=>{const n=r(),i=na(n);i&&(i.emit("identify_device",{deviceCredentials:e}),t(Gs()))},Qs=()=>(e,t)=>{const r=ea(t()).socket;null==r||r.emit("leave_room"),null==r||r.disconnect(),e(Ks())},Xs=()=>(e,t)=>{const r=tr(t());e(Zs()),r.data&&e(Ys({deviceCredentials:r.data}))},{socketReconnecting:Zs}=$s.actions,ea=e=>e.signalConnection,ta=e=>e.signalConnection.deviceIdentified,ra=e=>e.signalConnection.status,na=e=>e.signalConnection.socket;Ft({actionCreator:Vt,effect:(e,{dispatch:t})=>{t(Qs())}});Bt([Se(Gt,ra,((e,t)=>!(!e||!["","reconnect"].includes(t))))],(({dispatch:e},t)=>{t&&e(Js())}));const ia=Se(tr,ra,ta,(e=>e.signalConnection.isIdentifyingDevice),((e,t,r,n)=>!(!e.data||"connected"!==t||r||n)));Bt([ia,tr],(({dispatch:e},t,r)=>{t&&r.data&&e(Ys({deviceCredentials:r.data}))}));const sa=at({name:"chat",initialState:{chatMessages:[]},reducers:{},extraReducers(e){e.addCase(Xt.chatMessage,((e,t)=>{const r={senderId:t.payload.senderId,timestamp:t.payload.timestamp,text:t.payload.text};return Object.assign(Object.assign({},e),{chatMessages:[...e.chatMessages,r]})}))}}),aa=e=>(t,r)=>{const n=r(),i=ea(n).socket;null==i||i.emit("chat_message",{text:e.text})},oa=at({name:"cloudRecording",initialState:{isRecording:!1,error:null,startedAt:void 0},reducers:{recordingRequestStarted:e=>Object.assign(Object.assign({},e),{status:"requested"})},extraReducers:e=>{e.addCase(Xt.cloudRecordingStopped,(e=>Object.assign(Object.assign({},e),{isRecording:!1,status:void 0}))),e.addCase(Xt.cloudRecordingStarted,((e,t)=>{const{payload:r}=t;return r.error?Object.assign(Object.assign({},e),{isRecording:!1,status:"error",error:r.error}):e})),e.addCase(Xt.newClient,((e,{payload:t})=>{var r;const{client:n}=t;return"recorder"===(null===(r=n.role)||void 0===r?void 0:r.roleName)?Object.assign(Object.assign({},e),{isRecording:!0,status:"recording",startedAt:n.startedCloudRecordingAt?new Date(n.startedCloudRecordingAt).getTime():(new Date).getTime()}):e}))}}),{recordingRequestStarted:ca}=oa.actions,da=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=pa(r);i&&["recording","requested"].includes(i)||(null==n||n.emit("start_recording",{recording:"cloud"}),e(ca()))},la=()=>(e,t)=>{const r=t(),n=ea(r).socket;null==n||n.emit("stop_recording")},pa=e=>e.cloudRecording.status,ua="safari"===zs.browserDetails.browser,ha=e=>e.split(/[^\d]/g).map((e=>parseInt(e,10)));function ma({devices:e,videoId:t,audioId:r,options:n,type:i="ideal"}){const s=e.filter((e=>"audioinput"===e.kind)),a=e.filter((e=>"videoinput"===e.kind)),o=!r||!s.some((e=>e.deviceId===r)),c=!t||!a.some((e=>e.deviceId===t)),d=function({disableAEC:e,disableAGC:t,hd:r,lax:n,lowDataMode:i,preferredDeviceIds:s,resolution:a,simulcast:o,widescreen:c}){let d=480,l=240,p=15;r&&(d=n||ua?720:{min:360,ideal:720}),o&&(!1===r?(d=360,l=270):l=360,p=30);const u={audio:{...s.audioId&&{deviceId:s.audioId}},video:{...s.videoId?{deviceId:s.videoId}:{facingMode:"user"},height:i?l:d,...i&&{frameRate:p}}};if(n)return u.audio.deviceId||(u.audio=!0),delete u.video.facingMode,u;if(a){const[e,t,r]=ha(a);e&&(u.video.width={exact:e}),t&&(u.video.height={exact:t}),r&&(u.video.frameRate={exact:r}),delete u.video.facingMode}else u.video.aspectRatio=c?16/9:4/3;return t&&(u.audio.autoGainControl=!1),e&&(u.audio.echoCancellation=!1),u}({preferredDeviceIds:{audioId:o?null:{[i]:r},videoId:c?null:{[i]:t}},...n});return!1!==r&&s.length||delete d.audio,!1!==t&&a.length||delete d.video,d}class fa extends Error{constructor(e){super(e.message),this.name="AssertionError",this.code="ERR_ASSERTION",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,Error.captureStackTrace&&Error.captureStackTrace(this,e.stackStartFn)}}function ga(...e){!function(e,t,r,n){if(!r){let i=!1;if(0===t)i=!0,n="No value argument passed to `assert.ok()`";else if(n instanceof Error)throw n;const s=new fa({actual:r,expected:!0,message:n,operator:"==",stackStartFn:e});throw s.generatedMessage=i,s}}(ga,e.length,...e)}const va=ga;va.notEqual=function e(t,r,n){if(arguments.length<2)throw new Error("'actual' and 'expected' arguments are required");t==r&&function(e){if(e.message instanceof Error)throw e.message;throw new fa(e)}({actual:t,expected:r,message:n,operator:"!=",stackStartFn:e})},va.ok=ga;var ya=Ki(va);const _a=/mobi/i.test(navigator.userAgent);class ba extends Error{constructor(...e){super(...e),this.name="nodevices"}}function wa(e){return e.audio||e.video?navigator.mediaDevices.getUserMedia(e).catch((t=>{const r=`${t}, ${JSON.stringify(e,null,2)}`;throw console.error(`getUserMedia ${r}`),t})):Promise.reject(new ba("No provided devices"))}function Sa(e,t,r,n){let i={deviceId:null};return t?(i.label=t.label,t.getSettings&&(i={...i,...t.getSettings()}),i.deviceId?i:(t.getCapabilities&&(i.deviceId=t.getCapabilities().deviceId),i.deviceId?i:(t.label&&r&&(i.deviceId=r.find((r=>t.label===r.label&&r.kind===e))?.deviceId),i.deviceId||(i.deviceId=t.getConstraints()?.deviceId?.exact,i.broken=1),i))):(n&&r&&(i.deviceId=r.find((t=>t.deviceId===n&&t.kind===e))?.deviceId),i)}function Ca(e,t){ya(!t||["audio","video"].includes(t),"only is invalid"),t&&"audio"!==t||e.getAudioTracks().forEach((e=>e.stop())),t&&"video"!==t||e.getVideoTracks().forEach((e=>e.stop()))}async function Ra(e,{replaceStream:t,fallback:r=!0}={}){let n,i,s,a;ya(e,"constraints is required");const o=!1===e.audioId?"video":!1===e.videoId&&"audio",c=_a||"video"!==o,d=ma(e),l=(e,t)=>(e.details={constraints:d,constraint:e.constraint||t?.constraint,newConstraints:i,fallback:r,stopTracks:c,...e!==n&&{error:String(n)}},e);c&&t&&Ca(t,o);try{a=await wa(d)}catch(i){if(n=i,!r)throw l(i);if("OverconstrainedError"===i.name)s={deviceId:{videoId:null,audioId:null},width:{lax:!0},height:{lax:!0},"":{videoId:null,audioId:null,lax:!0}}[i.constraint||""];else if("NotFoundError"===i.name){if(d.audio&&d.video){try{a=await wa(ma({...e,audioId:!1}))}catch(e){if("NotFoundError"!==e.name)throw l(e,i)}try{a||(a=await wa(ma({...e,videoId:!1})))}catch(e){throw l(e,i)}}}else if("NotAllowedError"===i.name||"NotReadableError"===i.name||"AbortError"===i.name)if(t&&!c)Ca(t,o),s=e;else if("NotAllowedError"!==i.name){try{a=await wa(ma({...e,options:{...e.options,lax:!0}}))}catch(e){console.warn("Tried getting stream again with laxer constraints, but failed: "+(""+e))}const t=(""+i).toLowerCase(),r={audio:"audioId",video:"videoId"}[/(video|audio)/.exec(t)?.[0]||o];if(!a&&r)try{a=await wa(ma({...e,[r]:null}))}catch(e){console.warn(`Re-tried ${r} with no constraints, but failed: ${""+e}`)}if(!a){const t=r?[r]:["videoId","audioId"];for(const r of t){try{a=await wa(ma({...e,[r]:!1}))}catch(e){console.warn(`Re-tried without ${r}, but failed: ${""+e}`)}if(a)break}}}}if(s){i=ma({...e,...s,options:{...e.options,lax:s.lax},...{audio:{videoId:!1},video:{audioId:!1}}[o]});try{a=await wa(i)}catch(e){throw l(e,n)}}if(!a)throw l(n);let p;return t&&(c||Ca(t,o),p=function(e,t,r){const n=[];return r&&"audio"!==r||(n.push(...e.getAudioTracks()),t.getAudioTracks().forEach((t=>{t.replacement=!0,e.addTrack(t)}))),r&&"video"!==r||(n.push(...e.getVideoTracks()),t.getVideoTracks().forEach((t=>{t.replacement=!0,e.addTrack(t)}))),n.forEach((t=>{t.replaced=!0,e.removeTrack(t)})),n}(t,a,o),a=t),{error:n&&l(n),stream:a,replacedTracks:p}}const Ta=at({name:"localMedia",initialState:{busyDeviceIds:[],cameraEnabled:!1,devices:[],isSettingCameraDevice:!1,isSettingMicrophoneDevice:!1,isTogglingCamera:!1,microphoneEnabled:!1,status:"",isSwitchingStream:!1},reducers:{deviceBusy:(e,t)=>e.busyDeviceIds.includes(t.payload.deviceId)?e:Object.assign(Object.assign({},e),{busyDeviceIds:[...e.busyDeviceIds,t.payload.deviceId]}),toggleCameraEnabled(e,t){var r;return Object.assign(Object.assign({},e),{cameraEnabled:null!==(r=t.payload.enabled)&&void 0!==r?r:!e.cameraEnabled})},setCurrentCameraDeviceId:(e,t)=>Object.assign(Object.assign({},e),{currentCameraDeviceId:t.payload.deviceId}),toggleMicrophoneEnabled(e,t){var r;return Object.assign(Object.assign({},e),{microphoneEnabled:null!==(r=t.payload.enabled)&&void 0!==r?r:!e.microphoneEnabled})},setCurrentMicrophoneDeviceId:(e,t)=>Object.assign(Object.assign({},e),{currentMicrophoneDeviceId:t.payload.deviceId}),setDevices:(e,t)=>Object.assign(Object.assign({},e),{devices:t.payload.devices}),setLocalMediaStream:(e,t)=>Object.assign(Object.assign({},e),{stream:t.payload.stream}),setLocalMediaOptions:(e,t)=>Object.assign(Object.assign({},e),{options:t.payload.options}),localMediaStopped:e=>Object.assign(Object.assign({},e),{status:"stopped",stream:void 0}),localStreamMetadataUpdated(e,t){const{audio:r,video:n}=t.payload;return Object.assign(Object.assign({},e),{currentCameraDeviceId:n.deviceId,currentMicrophoneDeviceId:r.deviceId,busyDeviceIds:e.busyDeviceIds.filter((e=>e!==r.deviceId&&e!==n.deviceId))})}},extraReducers:e=>{e.addCase(zt,((e,t)=>Object.assign(Object.assign({},e),{options:t.payload.localMediaOptions}))),e.addCase(Na.pending,((e,t)=>{const{audio:r,video:n}=t.meta.arg;return Object.assign(Object.assign({},e),{isSettingCameraDevice:n,isSettingMicrophoneDevice:r})})),e.addCase(Na.fulfilled,((e,t)=>{const{audio:r,video:n}=t.meta.arg;return Object.assign(Object.assign({},e),{isSettingCameraDevice:!n&&e.isSettingCameraDevice,isSettingMicrophoneDevice:!r&&e.isSettingMicrophoneDevice})})),e.addCase(Na.rejected,((e,t)=>{const{audio:r,video:n}=t.meta.arg;return Object.assign(Object.assign({},e),{isSettingCameraDevice:!n&&e.isSettingCameraDevice,isSettingMicrophoneDevice:!r&&e.isSettingMicrophoneDevice,cameraDeviceError:n?t.error:e.cameraDeviceError,microphoneDeviceError:r?t.error:e.microphoneDeviceError})})),e.addCase(La.pending,(e=>Object.assign(Object.assign({},e),{isTogglingCamera:!0}))),e.addCase(La.fulfilled,(e=>Object.assign(Object.assign({},e),{isTogglingCamera:!1}))),e.addCase(Fa.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{devices:t.payload.devices}))),e.addCase(Ua.pending,(e=>Object.assign(Object.assign({},e),{status:"starting"}))),e.addCase(Ua.fulfilled,((e,{payload:{stream:t,onDeviceChange:r}})=>{let n,i,s=!1,a=!1;const o=t.getAudioTracks()[0],c=t.getVideoTracks()[0];return o&&(i=o.getSettings().deviceId,a=o.enabled),c&&(s=c.enabled,n=c.getSettings().deviceId),Object.assign(Object.assign({},e),{stream:t,status:"started",currentCameraDeviceId:n,currentMicrophoneDeviceId:i,cameraEnabled:s,microphoneEnabled:a,onDeviceChange:r})})),e.addCase(Ua.rejected,((e,t)=>Object.assign(Object.assign({},e),{status:"error",startError:t.error}))),e.addCase(Ba.pending,(e=>Object.assign(Object.assign({},e),{isSwitchingStream:!0}))),e.addCase(Ba.fulfilled,(e=>Object.assign(Object.assign({},e),{isSwitchingStream:!1}))),e.addCase(Ba.rejected,(e=>Object.assign(Object.assign({},e),{isSwitchingStream:!1})))}}),{deviceBusy:Pa,setCurrentCameraDeviceId:ka,setCurrentMicrophoneDeviceId:Ea,toggleCameraEnabled:Da,toggleMicrophoneEnabled:Oa,setLocalMediaOptions:Ia,setLocalMediaStream:xa,localMediaStopped:Ma,localStreamMetadataUpdated:ja}=Ta.actions,La=Yt("localMedia/doToggleCamera",((e,{getState:t,rejectWithValue:r})=>s(void 0,void 0,void 0,(function*(){const e=t(),n=Xa(e);if(!n)return;let i=n.getVideoTracks()[0];const s=qa(e),a=Ja(e);try{if(s)if(i)i.enabled=!0;else{const t=eo(e),r=$a(e);yield Ra(Object.assign(Object.assign({},t),{audioId:!1,videoId:r,type:"exact"}),{replaceStream:n}),i=n.getVideoTracks()[0]}else{if(!i)return;i.enabled=!1,a&&(i.stop(),n.removeTrack(i))}n.dispatchEvent(new CustomEvent("stopresumevideo",{detail:{track:i,enable:s}}))}catch(e){return r(e)}})))),Aa=Yt("localMedia/doToggleMicrophone",((e,{getState:t})=>{var r;const n=t(),i=Xa(n);if(!i)return;const s=Wa(n),a=null===(r=i.getAudioTracks())||void 0===r?void 0:r[0];a&&(a.enabled=s)})),Na=Yt("localMedia/reactSetDevice",(({audio:e,video:t},{getState:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){try{const n=r(),i=Xa(n);if(!i)throw new Error("No stream");const s=!!e&&Ga(n),a=!!t&&$a(n),o=eo(n),{replacedTracks:c}=yield Ra(Object.assign(Object.assign({},o),{audioId:s,videoId:a,type:"exact"}),{replaceStream:i}),d=Wa(n);i.getAudioTracks().forEach((e=>e.enabled=d));const l=qa(n);return i.getVideoTracks().forEach((e=>e.enabled=l)),{replacedTracks:c}}catch(e){return n(e)}})))),Fa=Yt("localMedia/doUpdateDeviceList",((e,{getState:t,dispatch:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){var e,i;const s=t();let a=[],o=[];const c=Xa(s),d=Va(s);try{a=yield navigator.mediaDevices.enumerateDevices(),o=Ha(s);if(!(c&&!Za(s)&&a&&o&&o.find((e=>e.deviceId))))return{devices:a};const{changedDevices:l}=function({oldDevices:e,newDevices:t,currentAudioId:r,currentVideoId:n,currentSpeakerId:i}){const s=function(e,t){const[r,n]=[e,t].map((e=>e.filter((e=>e.kind&&e.deviceId)).reduce(((e,t)=>({...e,[t.kind]:{...e[t.kind],[t.deviceId]:t}})),{}))),i={};return e.forEach((e=>{e.kind&&e.deviceId&&(i[e.kind]||(i[e.kind]={added:{},removed:{},changed:{}}),n[e.kind]&&n[e.kind][e.deviceId]||(i[e.kind].removed[e.deviceId]=e))})),t.forEach((e=>{e.kind&&e.deviceId&&(i[e.kind]||(i[e.kind]={added:{},removed:{},changed:{}}),r[e.kind]&&r[e.kind][e.deviceId]?r[e.kind][e.deviceId].label&&r[e.kind][e.deviceId].label!==e.label&&(i[e.kind].changed[e.deviceId]=e):i[e.kind].added[e.deviceId]=e)})),i}(e,t),a={},o={};return[["audioinput",r],["videoinput",n],["audiooutput",i]].forEach((([e,r])=>{const n=s[e];if(n){if(r){if(n.removed[r]&&(a[e]={deviceId:null},"audiooutput"===e)){const r=t.find((e=>"audiooutput"===e.kind));a[e]={deviceId:r?.deviceId}}n.changed[r]&&(a[e]={deviceId:r})}if(Object.keys(n.added).length){const[t]=Object.keys(n.added).slice(0,1),r=n.added[t];o[e]={deviceId:r.deviceId,label:r.label,kind:r.kind}}}})),{addedDevices:o,changedDevices:a}}({oldDevices:o,newDevices:a,currentAudioId:Ga(s),currentVideoId:$a(s)});let p=null===(e=l.audioinput)||void 0===e?void 0:e.deviceId,u=null===(i=l.videoinput)||void 0===i?void 0:i.deviceId;function h(e,t){const r=t?e.findIndex((e=>e.deviceId===t)):0;return(e[(r+1)%e.length]||{}).deviceId}if(void 0!==u){const m=Ha(s).filter((e=>"videoinput"===e.kind)),f=$a(s);let g=h(m.filter((e=>!d.includes(e.deviceId))),f);g&&f!==g||(g=h(m,f)),f!==g&&(u=g)}if(void 0!==p){const v=Ha(s).filter((e=>"audioinput"===e.kind)),y=Ga(s);let _=h(v.filter((e=>!d.includes(e.deviceId))),y);_&&y!==_||(_=h(v,y)),y!==_&&(p=_)}return void 0===p&&void 0===u||r(Ba({audioId:p,videoId:u})),{devices:a}}catch(b){return n(b)}})))),Ba=Yt("localMedia/doSwitchLocalStream",(({audioId:e,videoId:t},{dispatch:r,getState:n,rejectWithValue:i})=>s(void 0,void 0,void 0,(function*(){const s=n(),a=Xa(s),o=eo(s),c=!(!t||e)||!(t||!e);if(a)try{const{replacedTracks:n}=yield Ra(Object.assign(Object.assign({},o),{audioId:void 0!==e&&e,videoId:void 0!==t&&t,type:"exact"}),{replaceStream:a}),i=e||t;return c&&i&&r(Pa({deviceId:i})),{replacedTracks:n}}catch(n){console.error(n);const s=e||t;return c&&s&&r(Pa({deviceId:s})),i(n)}})))),Ua=Yt("localMedia/doStartLocalMedia",((e,{getState:t,dispatch:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){const i=a((()=>{r(Fa())}),{delay:500});if(navigator.mediaDevices&&navigator.mediaDevices.addEventListener("devicechange",i),"getTracks"in e)return Promise.resolve({stream:e,onDeviceChange:i});if(!e.audio&&!e.video)return{stream:new MediaStream,onDeviceChange:i};r(Ia({options:e}));try{yield r(Fa());const n=t(),s=eo(n),{stream:a}=yield Ra(Object.assign(Object.assign({},s),{audioId:e.audio,videoId:e.video}));return{stream:a,onDeviceChange:i}}catch(e){return n(e)}})))),za=()=>(e,t)=>{const r=Xa(t()),n=Ya(t()).onDeviceChange;null==r||r.getTracks().forEach((e=>{e.stop()})),navigator.mediaDevices&&n&&navigator.mediaDevices.removeEventListener("devicechange",n),e(Ma())},Va=e=>e.localMedia.busyDeviceIds,$a=e=>e.localMedia.currentCameraDeviceId,Ga=e=>e.localMedia.currentMicrophoneDeviceId,qa=e=>e.localMedia.cameraEnabled,Wa=e=>e.localMedia.microphoneEnabled,Ha=e=>e.localMedia.devices,Ka=e=>e.localMedia.options,Ja=Se(Ka,(e=>!!e)),Ya=e=>e.localMedia,Qa=e=>e.localMedia.status,Xa=e=>e.localMedia.stream,Za=e=>e.localMedia.isSwitchingStream,eo=Se(Ha,(e=>({devices:e,options:{disableAEC:!1,disableAGC:!1,hd:!0,lax:!1,lowDataMode:!1,simulcast:!0,widescreen:!0}}))),to=Se(Qa,(e=>"starting"===e)),ro=Se(Ha,Va,((e,t)=>e.filter((e=>"videoinput"===e.kind)).filter((e=>!t.includes(e.deviceId))))),no=Se(Ha,Va,((e,t)=>e.filter((e=>"audioinput"===e.kind)).filter((e=>!t.includes(e.deviceId))))),io=Se(Ha,(e=>e.filter((e=>"audiooutput"===e.kind))));Bt([Se(Gt,Qa,Ka,((e,t,r)=>{if(e&&""===t&&r)return r}))],(({dispatch:e},t)=>{t&&e(Ua(t))}));Bt([Se(Gt,Qa,Ka,((e,t,r)=>!e&&""!==t&&!!r))],(({dispatch:e},t)=>{t&&e(za())})),Ft({predicate:(e,t,r)=>{const n=Wa(r),i=Wa(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(Aa())}}),Ft({predicate:(e,t,r)=>{if(t.localMedia.isTogglingCamera)return!1;const n=qa(r),i=qa(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(La())}}),Ft({predicate:(e,t,r)=>{const n=$a(r),i=$a(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(Na({audio:!1,video:!0}))}}),Ft({predicate:(e,t,r)=>{const n=Ga(r),i=Ga(t);return"started"===Qa(r)&&n!==i},effect:(e,{dispatch:t})=>{t(Na({audio:!0,video:!1}))}}),Ft({matcher:Ye(Ua.fulfilled,Fa.fulfilled,Ba.fulfilled,Ba.rejected),effect:(e,{dispatch:t,getState:r})=>{const n=r(),i=Xa(n),s=Ha(n);if(!i)return;const a=function({audioTrack:e,videoTrack:t,devices:r,stoppedVideoTrack:n,lastAudioId:i,lastVideoId:s}){const a=e=>"live"===e?.readyState?e:null;return t=a(t)||n,e=a(e),{video:Sa("videoinput",t,r,s),audio:Sa("audioinput",e,r,i)}}({audioTrack:i.getAudioTracks()[0],videoTrack:i.getVideoTracks()[0],devices:s});t(ja(a))}});const so={displayName:"",id:"",isAudioEnabled:!0,isVideoEnabled:!0,isLocalParticipant:!0,stream:void 0,isScreenSharing:!1,roleName:""},ao=Yt("localParticipant/doEnableAudio",((e,{getState:t})=>s(void 0,void 0,void 0,(function*(){const r=t(),n=ea(r).socket;return null==n||n.emit("enable_audio",{enabled:e.enabled}),e.enabled})))),oo=Yt("localParticipant/doEnableVideo",((e,{getState:t})=>s(void 0,void 0,void 0,(function*(){const r=t(),n=ea(r).socket;return null==n||n.emit("enable_video",{enabled:e.enabled}),e.enabled})))),co=Yt("localParticipant/doSetDisplayName",((e,{getState:t})=>s(void 0,void 0,void 0,(function*(){const r=t(),n=ea(r).socket;return null==n||n.emit("send_client_metadata",{type:"UserData",payload:e}),e.displayName})))),lo=at({name:"localParticipant",initialState:so,reducers:{doSetLocalParticipant:(e,t)=>Object.assign(Object.assign({},e),t.payload)},extraReducers:e=>{e.addCase(zt,((e,t)=>Object.assign(Object.assign({},e),{displayName:t.payload.displayName}))),e.addCase(ao.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{isAudioEnabled:t.payload}))),e.addCase(oo.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{isVideoEnabled:t.payload}))),e.addCase(co.fulfilled,((e,t)=>Object.assign(Object.assign({},e),{displayName:t.payload}))),e.addCase(Xt.roomJoined,((e,t)=>{var r,n;const i=null===(n=null===(r=t.payload)||void 0===r?void 0:r.room)||void 0===n?void 0:n.clients.find((e=>{var r;return e.id===(null===(r=t.payload)||void 0===r?void 0:r.selfId)}));return Object.assign(Object.assign({},e),{id:t.payload.selfId,roleName:(null==i?void 0:i.role.roleName)||""})}))}});lo.actions;const po=e=>e.localParticipant,uo=e=>e.localParticipant.id;Ft({actionCreator:Da,effect:({payload:e},{dispatch:t,getState:r})=>{const{enabled:n}=e,{isVideoEnabled:i}=po(r());t(oo({enabled:n||!i}))}}),Ft({actionCreator:Oa,effect:({payload:e},{dispatch:t,getState:r})=>{const{enabled:n}=e,{isAudioEnabled:i}=po(r());t(ao({enabled:n||!i}))}});const ho=at({name:"localScreenshare",initialState:{status:"",stream:null,error:null},reducers:{stopScreenshare:(e,t)=>Object.assign(Object.assign({},e),{status:"",stream:null})},extraReducers:e=>{e.addCase(fo.pending,(e=>Object.assign(Object.assign({},e),{status:"starting"}))),e.addCase(fo.fulfilled,((e,{payload:{stream:t}})=>Object.assign(Object.assign({},e),{status:"active",stream:t}))),e.addCase(fo.rejected,((e,{payload:t})=>Object.assign(Object.assign({},e),{error:t,status:"",stream:null})))}}),{stopScreenshare:mo}=ho.actions,fo=Yt("localScreenshare/doStartScreenshare",((e,{dispatch:t,getState:r,rejectWithValue:n})=>s(void 0,void 0,void 0,(function*(){var e;try{const n=r(),i=vo(n);if(i)return{stream:i};const s=yield navigator.mediaDevices.getDisplayMedia(),a=()=>{t(go())};return"oninactive"in s?s.addEventListener("inactive",a):null===(e=s.getVideoTracks()[0])||void 0===e||e.addEventListener("ended",a),{stream:s}}catch(e){return n(e)}})))),go=()=>(e,t)=>{const r=t(),n=vo(r);n&&(n.getTracks().forEach((e=>e.stop())),e(mo({stream:n})))},vo=e=>e.localScreenshare.stream;Ft({actionCreator:Ma,effect:(e,{getState:t})=>{const r=t(),n=vo(r);n&&(null==n||n.getTracks().forEach((e=>{e.stop()})))}});const yo=at({initialState:{data:null,isFetching:!1,error:null},name:"organization",reducers:{},extraReducers:e=>{e.addCase(_o.pending,(e=>Object.assign(Object.assign({},e),{isFetching:!0}))),e.addCase(_o.fulfilled,((e,t)=>t.payload?Object.assign(Object.assign({},e),{isFetching:!1,data:t.payload}):Object.assign(Object.assign({},e),{isFetching:!0}))),e.addCase(_o.rejected,(e=>Object.assign(Object.assign({},e),{isFetching:!1,error:!0})))}}),_o=Yt("organization/doOrganizationFetch",((e,{extra:t,getState:r})=>s(void 0,void 0,void 0,(function*(){try{const e=r().app.roomUrl,n=yield t.services.fetchOrganizationFromRoomUrl(e||"");if(!n)throw new Error("Invalid room url");return n}catch(e){console.error(e)}})))),bo=e=>{var t;return null===(t=e.organization.data)||void 0===t?void 0:t.organizationId};function wo(e){return Ee(`rtcConnection/event/${e}`)}Bt([Se(Gt,(e=>e.organization),tr,((e,t,r)=>!(!e||t.data||t.isFetching||t.error||r.isFetching)))],(({dispatch:e},t)=>{t&&e(_o())}));const So={rtcManagerCreated:wo("rtcManagerCreated"),rtcManagerDestroyed:wo("rtcManagerDestroyed"),streamAdded:wo("streamAdded")},Co=["recorder","streamer"];function Ro(e,t=!1){const{streams:r}=e,n=i(e,["streams"]);return Object.assign(Object.assign({},n),{stream:null,streams:r.map((e=>({id:e,state:t?"new_accept":"to_accept"}))),isLocalParticipant:!1,presentationStream:null,newJoiner:t})}function To(e,t){const r=e.remoteParticipants.findIndex((e=>e.id===t));return{index:r,participant:e.remoteParticipants[r]}}function Po(e,t,r){const{participant:n,index:i}=To(e,t);return n?Object.assign(Object.assign({},e),{remoteParticipants:[...e.remoteParticipants.slice(0,i),Object.assign(Object.assign({},n),r),...e.remoteParticipants.slice(i+1)]}):(console.error(`Did not find client for update ${t}`),e)}function ko(e,t,r,n){const{participant:i}=To(e,t);if(!i)return console.error(`No client ${t} found to update stream ${r} ${n}`),e;const s=i.streams.findIndex((e=>e.id===r)),a=[...i.streams];return a[s]=Object.assign(Object.assign({},a[s]),{state:n}),Po(e,t,{streams:a})}function Eo(e,t,r){const{participant:n}=To(e,t);return!n||n.streams.find((e=>e.id===r))?(console.warn(`No participant ${t} or stream ${r} already exists`),e):Po(e,t,{streams:[...n.streams,{id:r,state:"to_accept"}]})}const Do=at({name:"remoteParticipants",initialState:{remoteParticipants:[]},reducers:{streamStatusUpdated:(e,t)=>{let r=e;for(const{clientId:e,streamId:n,state:i}of t.payload)r=ko(r,e,n,i);return r},participantStreamAdded:(e,t)=>{const{clientId:r,stream:n}=t.payload;return Po(e,r,{stream:n})},participantStreamIdAdded:(e,t)=>{const{clientId:r,streamId:n}=t.payload;return Eo(e,r,n)}},extraReducers:e=>{e.addCase(Xt.roomJoined,((e,t)=>{var r;if(!(null===(r=t.payload)||void 0===r?void 0:r.room))return e;const n=t.payload.selfId,{clients:i}=t.payload.room;return Object.assign(Object.assign({},e),{remoteParticipants:i.filter((e=>e.id!==n)).filter((e=>!Co.includes(e.role.roleName))).map((e=>Ro(e)))})})),e.addCase(So.streamAdded,((e,t)=>function(e,t){const{clientId:r,stream:n,streamType:i}=t;let{streamId:s}=t;const{participant:a}=To(e,r);if(!a)return console.error(`Did not find client ${r} for adding stream`),e;const o=e.remoteParticipants;s||(s=n.id);const c=o.find((e=>e.id===r));if(!c)return e;const d=c.streams.find((e=>e.id===s));return c.stream&&(c.stream.id===s||c.stream.inboundId===s)||!c.stream&&"webcam"===i||!c.stream&&!i&&!d?Po(e,r,{stream:n}):Po(e,r,{presentationStream:n})}(e,t.payload))),e.addCase(Xt.newClient,((e,t)=>{const{client:r}=t.payload;return Co.includes(r.role.roleName)?e:function(e,t){const{participant:r}=To(e,t.id);return r?(console.warn(`Client already existing ${t.id}. Ignoring`),e):Object.assign(Object.assign({},e),{remoteParticipants:[...e.remoteParticipants,t]})}(e,Ro(r,!0))})),e.addCase(Xt.clientLeft,((e,t)=>{const{clientId:r}=t.payload;return function(e,t){return Object.assign(Object.assign({},e),{remoteParticipants:e.remoteParticipants.filter((e=>e.id!==t))})}(e,r)})),e.addCase(Xt.audioEnabled,((e,t)=>{const{clientId:r,isAudioEnabled:n}=t.payload;return Po(e,r,{isAudioEnabled:n})})),e.addCase(Xt.videoEnabled,((e,t)=>{const{clientId:r,isVideoEnabled:n}=t.payload;return Po(e,r,{isVideoEnabled:n})})),e.addCase(Xt.clientMetadataReceived,((e,t)=>{const{clientId:r,displayName:n}=t.payload.payload;return Po(e,r,{displayName:n})})),e.addCase(Xt.screenshareStarted,((e,t)=>{const{clientId:r,streamId:n}=t.payload;return Eo(e,r,n)})),e.addCase(Xt.screenshareStopped,((e,t)=>{const{clientId:r,streamId:n}=t.payload;return function(e,t,r){var n,i;const{participant:s}=To(e,t);if(!s)return console.error(`No participant ${t} found to remove stream ${r}`),e;const a=s.stream&&s.stream.id,o=(null===(n=s.presentationStream)||void 0===n?void 0:n.inboundId)||(null===(i=s.presentationStream)||void 0===i?void 0:i.id),c=s.streams.findIndex((e=>e.id===r));return Po(e,t,Object.assign(Object.assign({streams:s.streams.filter(((e,t)=>t!==c))},a===r&&{stream:null}),o===r&&{presentationStream:null}))}(e,r,n)}))}}),{participantStreamAdded:Oo,participantStreamIdAdded:Io,streamStatusUpdated:xo}=Do.actions,Mo=e=>e.remoteParticipants.remoteParticipants,jo=Se(vo,Mo,((e,t)=>{const r=[];e&&r.push({id:e.id,participantId:"local",hasAudioTrack:e.getAudioTracks().length>0,stream:e,isLocal:!0});for(const e of t)e.presentationStream&&r.push({id:e.presentationStream.id,participantId:e.id,hasAudioTrack:e.presentationStream.getAudioTracks().length>0,stream:e.presentationStream,isLocal:!1});return r})),Lo=at({initialState:{session:null,status:"initializing",error:null},name:"roomConnection",reducers:{connectionStatusChanged:(e,t)=>Object.assign(Object.assign({},e),{status:t.payload})},extraReducers:e=>{e.addCase(Xt.roomJoined,((e,t)=>{var r,n;const{error:i,isLocked:s}=t.payload;return"room_locked"===i&&s?Object.assign(Object.assign({},e),{status:"room_locked"}):Object.assign(Object.assign({},e),{status:"connected",session:null!==(n=null===(r=t.payload.room)||void 0===r?void 0:r.session)&&void 0!==n?n:null})})),e.addCase(Xt.newClient,((e,t)=>{var r,n;return Object.assign(Object.assign({},e),{session:null!==(n=null===(r=t.payload.room)||void 0===r?void 0:r.session)&&void 0!==n?n:null})})),e.addCase(Xt.roomSessionEnded,((e,t)=>{var r;return(null===(r=e.session)||void 0===r?void 0:r.id)!==t.payload.roomSessionId?e:Object.assign(Object.assign({},e),{session:null})})),e.addCase(Zs,(e=>Object.assign(Object.assign({},e),{status:"reconnect"})))}}),{connectionStatusChanged:Ao}=Lo.actions,No=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=qt(r),s=Wt(r),a=Ht(r),o=Kt(r),c=Jt(r),d=bo(r);null==n||n.emit("knock_room",{avatarUrl:null,config:{isAudioEnabled:!0,isVideoEnabled:!0},deviceCapabilities:{canScreenshare:!0},displayName:a,isCoLocated:!1,isDevicePermissionDenied:!1,kickFromOtherRooms:!1,organizationId:d,roomKey:s,roomName:i,selfId:"",userAgent:`browser-sdk:${o||"unknown"}`,externalId:c}),e(Ao("knocking"))},Fo=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=qt(r),s=Wt(r),a=Ht(r),o=Kt(r),c=Jt(r),d=bo(r),l=qa(t()),p=Wa(t()),u=uo(t());null==n||n.emit("join_room",{avatarUrl:null,config:{isAudioEnabled:p,isVideoEnabled:l},deviceCapabilities:{canScreenshare:!0},displayName:a,isCoLocated:!1,isDevicePermissionDenied:!1,kickFromOtherRooms:!1,organizationId:d,roomKey:s,roomName:i,selfId:u,userAgent:`browser-sdk:${o||"unknown"}`,externalId:c}),e(Ao("connecting"))},Bo=e=>e.roomConnection.status;Bt([Se([bo,Bo,ta,Qa],((e,t,r,n)=>!!("started"===n&&r&&e&&["initializing","reconnect"].includes(t))))],(({dispatch:e},t)=>{t&&e(Fo())})),Ft({actionCreator:Xt.knockHandled,effect:({payload:e},{dispatch:t,getState:r})=>{const{clientId:n,resolution:i}=e,s=r();n===uo(s)&&("accepted"===i?(t($t(e.metadata.roomKey)),t(Fo())):"rejected"===i&&t(Ao("knock_rejected")))}});const Uo="client_connection_status_changed",zo="stream_added",Vo="rtc_manager_created",$o="rtc_manager_destroyed",Go="local_stream_track_added",qo="local_stream_track_removed",Wo="connecting",Ho="connection_failed",Ko="connection_successful",Jo="connection_disconnected",Yo="fetch_mediaserver_config",Qo="start_screenshare",Xo="stop_screenshare",Zo="mediaserver_config",ec="room_joined",tc="ice_candidate",rc="ice_endofcandidates",nc="ready_to_receive_offer",ic="sdp_answer",sc="sdp_offer",ac="camera",oc="screen_share";class cc{constructor(e,t){ya.notEqual(e,void 0,"id is required"),ya.notEqual(t,void 0,"type is required"),this.id=""+e,this.type=t,this.isEnabled=!0,this.hasSupportForAutoSuperSize=!1,this.isAudioEnabled=!0,this.isVideoEnabled=!0,this.status=Wo}setup(e){return this.stream=e,this.streamId=e.id,this.setVideoEnabled(this.isVideoEnabled&&e.getVideoTracks().length>0),this.setAudioEnabled(this.isAudioEnabled&&e.getAudioTracks().length>0),this}setStatus(e){return this.status=e,this}setVideoEnabled(e){this.isVideoEnabled=e,this.stream&&this.stream.getVideoTracks().forEach((t=>{t.enabled=e}))}setAudioEnabled(e){this.isAudioEnabled=e,this.stream&&this.stream.getAudioTracks().forEach((t=>{t.enabled=e}))}static getCameraId(){return"0"}static getTypeFromId(e){ya.notEqual(e,void 0,"id is required");return"0"===""+e?ac:oc}}var dc="connection_blocked_by_network",lc="microphone_not_working",pc="microphone_stopped_working",uc="dominant_speaker",hc={},mc={},fc={exports:{}},gc=fc.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(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.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(e){return null!=e.address?"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(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"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"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%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(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%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(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{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(e){return null!=e.maxMessageSize?"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(e){return e.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(e){return"imageattr:%s %s %s"+(e.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(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(gc).forEach((function(e){gc[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}));var vc=fc.exports;!function(e){var t=function(e){return String(Number(e))===e?Number(e):e},r=function(e,r,n){var i=e.name&&e.names;e.push&&!r[e.push]?r[e.push]=[]:i&&!r[e.name]&&(r[e.name]={});var s=e.push?{}:i?r[e.name]:r;!function(e,r,n,i){if(i&&!n)r[i]=t(e[1]);else for(var s=0;s<n.length;s+=1)null!=e[s+1]&&(r[n[s]]=t(e[s+1]))}(n.match(e.reg),s,e.names,e.name),e.push&&r[e.push].push(s)},n=vc,i=RegExp.prototype.test.bind(/^([a-z])=(.*)/);e.parse=function(e){var t={},s=[],a=t;return e.split(/(\r\n|\r|\n)/).filter(i).forEach((function(e){var t=e[0],i=e.slice(2);"m"===t&&(s.push({rtp:[],fmtp:[]}),a=s[s.length-1]);for(var o=0;o<(n[t]||[]).length;o+=1){var c=n[t][o];if(c.reg.test(i))return r(c,a,i)}})),t.media=s,t};var s=function(e,r){var n=r.split(/=(.+)/,2);return 2===n.length?e[n[0]]=t(n[1]):1===n.length&&r.length>1&&(e[n[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(s,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return e.toString().split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var r=[],n=e.split(" ").map(t),i=0;i<n.length;i+=3)r.push({component:n[i],ip:n[i+1],port:n[i+2]});return r},e.parseImageAttributes=function(e){return e.split(" ").map((function(e){return e.substring(1,e.length-1).split(",").reduce(s,{})}))},e.parseSimulcastStreamList=function(e){return e.split(";").map((function(e){return e.split(",").map((function(e){var r,n=!1;return"~"!==e[0]?r=t(e):(r=t(e.substring(1,e.length)),n=!0),{scid:r,paused:n}}))}))}}(mc);var yc=vc,_c=/%[sdv%]/g,bc=function(e){var t=1,r=arguments,n=r.length;return e.replace(_c,(function(e){if(t>=n)return e;var i=r[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}}))},wc=function(e,t,r){var n=[e+"="+(t.format instanceof Function?t.format(t.push?r:r[t.name]):t.format)];if(t.names)for(var i=0;i<t.names.length;i+=1){var s=t.names[i];t.name?n.push(r[t.name][s]):n.push(r[t.names[i]])}else n.push(r[t.name]);return bc.apply(null,n)},Sc=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Cc=["i","c","b","a"],Rc=mc,Tc=function(e,t){t=t||{},null==e.version&&(e.version=0),null==e.name&&(e.name=" "),e.media.forEach((function(e){null==e.payloads&&(e.payloads="")}));var r=t.outerOrder||Sc,n=t.innerOrder||Cc,i=[];return r.forEach((function(t){yc[t].forEach((function(r){r.name in e&&null!=e[r.name]?i.push(wc(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach((function(e){i.push(wc(t,r,e))}))}))})),e.media.forEach((function(e){i.push(wc("m",yc.m[0],e)),n.forEach((function(t){yc[t].forEach((function(r){r.name in e&&null!=e[r.name]?i.push(wc(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach((function(e){i.push(wc(t,r,e))}))}))}))})),i.join("\r\n")+"\r\n"},Pc=hc.write=Tc,kc=hc.parse=Rc.parse;hc.parseParams=Rc.parseParams,hc.parseFmtpConfig=Rc.parseFmtpConfig,hc.parsePayloads=Rc.parsePayloads,hc.parseRemoteCandidates=Rc.parseRemoteCandidates,hc.parseImageAttributes=Rc.parseImageAttributes,hc.parseSimulcastStreamList=Rc.parseSimulcastStreamList;const Ec=zs.browserDetails.browser,Dc=zs.browserDetails.version;function Oc(e,t){let r=e.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/),n=t.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);r||(r=e.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/),n=t.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/));for(let e=1;e<r.length;e++)t=t.replace(new RegExp(n[e],"g"),r[e]);return t}function Ic(e){return"firefox"!==Ec?e:Xi.splitLines(e.trim()).map((e=>e.startsWith("a=msid-semantic:")?"a=msid-semantic: WMS *":e)).join("\r\n")+"\r\n"}function xc(e,t,r=console){const n=e.getSenders().find((e=>e.track&&"video"===e.track.kind));if(!n)return Promise.resolve();const i=n.getParameters();return i.encodings&&0===i.encodings.length?Promise.resolve():(i.encodings||(i.encodings=[{}]),0===t?delete i.encodings[0].maxBitrate:i.encodings[0].maxBitrate=1e3*t,n.setParameters(i).catch((e=>{r.error("setParameters err: ",e)})))}const Mc=400;class jc{constructor({peerConnectionId:e,bandwidth:t,maximumTurnBandwidth:r,deprioritizeH264Encoding:n,logger:i=console}){this.peerConnectionId=e,this.relayCandidateSeen=!1,this.pc=null,this.wasEverConnected=!1,this.connectionStatus=null,this.stats={totalSent:0,totalRecv:0},this.bandwidth=t||0,this.maximumTurnBandwidth=r,this.pending=[],this.isOperationPending=!1,this.streamIds=[],this.streams=[],this.earlyIceCandidates=[],this.afterConnected=new Promise((e=>{this.registerConnected=e})),this.offerOptions={offerToReceiveAudio:!0,offerToReceiveVideo:!0},this._deprioritizeH264Encoding=n,this._logger=i}setAndGetPeerConnection({clientId:e,constraints:t,peerConnectionConfig:r,shouldAddLocalVideo:n}){return this.peerConnectionConfig=r,this.shouldAddLocalVideo=n,this.clientId=e,this.pc=new RTCPeerConnection(r,t),this.signalingState=this.pc.signalingState,this.pc.addEventListener("signalingstatechange",(()=>{if(this.signalingState!==this.pc.signalingState&&(this.signalingState=this.pc.signalingState,"stable"===this.pc.signalingState)){this.isOperationPending=!1;const e=this.pending.shift();e&&e.apply()}})),this.pc}addStream(e){this.streamIds.push(e.id),this.streams.push(e),RTCPeerConnection.prototype.addTrack?(e.getAudioTracks().forEach((t=>{this.pc.addTrack(t,e)})),e.getVideoTracks().forEach((t=>{this.pc.addTrack(t,e)}))):this.pc.addStream(e)}addTrack(e,t){t||(t=this.streams[0]),t.addTrack(e),this.pc.addTrack(e,t)}removeTrack(e){this.streams[0].removeTrack(e);const t=this.pc.getSenders().find((t=>t.track===e));t&&this.pc.removeTrack(t)}removeStream(e){for(let t=0;t<this.streamIds.length;t++)this.streamIds[t]===e.id&&(this.streamIds.splice(t,1),this.streams.splice(t,1));this.pc&&(this.pc.removeTrack?e.getTracks().forEach((e=>{const t=this.pc.getSenders().find((t=>t.track===e));t&&this.pc.removeTrack(t)})):this.pc.removeStream&&this.pc.removeStream(e))}_setRemoteDescription(e){return this._deprioritizeH264Encoding&&(e.sdp=function(e){return Xi.splitSections(e).map((e=>{if("video"!==Xi.getKind(e))return e;const t=Xi.matchPrefix(e,"a=rtpmap:").map((e=>Xi.parseRtpMap(e))).filter((e=>/h264/i.test(e.name))).map((e=>""+e.payloadType));if(!t.length)return e;const r=Xi.matchPrefix(e,"m=video")[0],n=/(\s\d+)+$/i.exec(r)[0],i=[...n.split(" ").filter((e=>e&&!t.includes(e))),...t].join(" "),s=r.replace(n," "+i);return e.replace(r,s)})).join("")}(e.sdp)),this.srdComplete=this.pc.setRemoteDescription(e),this.srdComplete.then((()=>{this.earlyIceCandidates.forEach((e=>this.pc.addIceCandidate(e))),this.earlyIceCandidates=[]}))}handleOffer(e){if(!this.canModifyPeerConnection())return new Promise((t=>{this.pending.push((()=>this.handleOffer(e).then(t)))}));this.isOperationPending=!0;let t=e.sdp;t=function(e){return"safari"!==Ec&&("firefox"!==Ec||Dc>=63||60===Dc)?e:Xi.splitLines(e.trim()).filter((e=>!e.startsWith("a=extmap:")||"urn:ietf:params:rtp-hdrext:sdes:mid"!==Xi.parseExtmap(e).uri)).join("\r\n")+"\r\n"}(t),t=Ic(t);const r={type:e.type,sdp:t};let n;return this._setRemoteDescription(r).then((()=>this.pc.createAnswer())).then((e=>(n=e,this.pc.setLocalDescription(e)))).then((()=>xc(this.pc,this.bandwidth))).then((()=>n))}handleAnswer(e){if(this.pendingOffer){const t=this.pendingOffer;return delete this.pendingOffer,this.pc.setLocalDescription(t).then((()=>this.handleAnswer(e)))}let t=e.sdp;t=Ic(t);const r={type:e.type,sdp:t};return this._setRemoteDescription(r).then((()=>xc(this.pc,this.bandwidth)),(e=>{this._logger.warn("Could not set remote description from remote answer: ",e)}))}addIceCandidate(e){this.srdComplete?this.srdComplete.then((()=>{"closed"!==this.pc.signalingState&&("safari"===zs.browserDetails.browser&&e&&""===e.candidate||this.pc.addIceCandidate(e).catch((t=>{this._logger.warn("Failed to add ICE candidate ('%s'): %s",e?e.candidate:null,t)})))})):this.earlyIceCandidates.push(e)}canModifyPeerConnection(){return"stable"===this.pc.signalingState&&!this.isOperationPending}close(){const e=this.pc;if(e){e.oniceconnectionstatechange=null,e.onicecandidate=null,e.ontrack=null;try{e.close()}catch(e){console.warn("failures during close of session",e)}}}hasConnectedPeerConnection(){return this.pc&&"connected"===this.pc.connectionState}replaceTrack(e,t){const r=this.pc;if(!r)return!1;const n=r.getSenders();function i(r){const i=e=>e&&`id:${e.id},kind:${e.kind},state:${e.readyState}`;this._logger.warn(`${r}. newTrack:${i(t)}, oldTrack:${i(e)}, sender tracks: ${JSON.stringify(n.map((e=>`s ${i(e.track)}`)))}, sender first codecs: ${JSON.stringify(n.map((e=>(e.getParameters().codecs||[])[0])))}`)}if(n.length||i("No senders!"),e||(e=(n.find((e=>e.track&&e.track.kind===t.kind))||{}).track)||i("No sender with same kind! Add new track then."),window.RTCRtpSender&&window.RTCRtpSender.prototype.replaceTrack){if(e){const r=()=>{for(let r=0;r<n.length;r++){const s=n[r],a=s.track;if(s||a||i("One of the tracks is null!"),a.id===t.id)return Promise.resolve(t);if(a.id===e.id)return n[r].replaceTrack(t)}return null};let s=r();if(s)return s;let a=null,o=null;s=new Promise(((e,t)=>{a=e,o=t}));let c=0,d=setInterval((async()=>{const e=r();if(!e)return void(3<++c&&(clearInterval(d),d=null,i("No sender track to replace"),o("No sender track to replace")));clearInterval(d),d=null;const t=await e;a(t)}),1e3);return s}const s=this.streams.find((e=>e.getTracks().find((e=>e.id===t.id))))||this.streams[0];return s?r.addTrack(t,s):(i("No stream?"),Promise.reject(new Error("replaceTrack: No stream?")))}if(!this.canModifyPeerConnection())return void this.pending.push((()=>{this.replaceTrack(e,t)}));this.isOperationPending=!0;const s=r.onnegotiationneeded;return r.onnegotiationneeded=null,this.removeTrack(e),this.addTrack(t),setTimeout((()=>{r.onnegotiationneeded=s}),0),"offer"===r.localDescription.type?r.createOffer().then((e=>(e.sdp=Oc(r.localDescription.sdp,e.sdp),r.setLocalDescription(e)))).then((()=>this._setRemoteDescription(r.remoteDescription))):this._setRemoteDescription(r.remoteDescription).then((()=>r.createAnswer())).then((e=>(e.sdp=Oc(r.localDescription.sdp,e.sdp),r.setLocalDescription(e))))}maybeRestrictRelayBandwidth(){var e;-1!==this.maximumTurnBandwidth&&(this.pc.getStats&&(e=this.pc,e.getStats(null).then((e=>{let t,r;return e.forEach((n=>{if("transport"===n.type&&n.selectedCandidatePairId){const i=e.get(n.selectedCandidatePairId);if(!i)return;return t=e.get(i.localCandidateId).candidateType,void(r=e.get(i.remoteCandidateId).candidateType)}"candidate-pair"===n.type&&n.selected&&(t=e.get(n.localCandidateId).candidateType,r=e.get(n.remoteCandidateId).candidateType)})),"relay"===t||"relayed"===t||"relay"===r||"relayed"===r}))).then((e=>{e&&0===this.bandwidth&&this.changeBandwidth(this.maximumTurnBandwidth)})))}changeBandwidth(e){e!==this.bandwidth&&(this.canModifyPeerConnection()?(this.bandwidth=e,this.pc.localDescription&&""!==this.pc.localDescription.type&&xc(this.pc,this.bandwidth)):this.pending.push((()=>this.changeBandwidth(e))))}}function Lc(){throw new Error("setTimeout has not been defined")}function Ac(){throw new Error("clearTimeout has not been defined")}var Nc=Lc,Fc=Ac;function Bc(e){if(Nc===setTimeout)return setTimeout(e,0);if((Nc===Lc||!Nc)&&setTimeout)return Nc=setTimeout,setTimeout(e,0);try{return Nc(e,0)}catch(t){try{return Nc.call(null,e,0)}catch(t){return Nc.call(this,e,0)}}}"function"==typeof Wr.setTimeout&&(Nc=setTimeout),"function"==typeof Wr.clearTimeout&&(Fc=clearTimeout);var Uc,zc=[],Vc=!1,$c=-1;function Gc(){Vc&&Uc&&(Vc=!1,Uc.length?zc=Uc.concat(zc):$c=-1,zc.length&&qc())}function qc(){if(!Vc){var e=Bc(Gc);Vc=!0;for(var t=zc.length;t;){for(Uc=zc,zc=[];++$c<t;)Uc&&Uc[$c].run();$c=-1,t=zc.length}Uc=null,Vc=!1,function(e){if(Fc===clearTimeout)return clearTimeout(e);if((Fc===Ac||!Fc)&&clearTimeout)return Fc=clearTimeout,clearTimeout(e);try{return Fc(e)}catch(t){try{return Fc.call(null,e)}catch(t){return Fc.call(this,e)}}}(e)}}function Wc(e,t){this.fun=e,this.array=t}Wc.prototype.run=function(){this.fun.apply(null,this.array)};function Hc(){}var Kc=Hc,Jc=Hc,Yc=Hc,Qc=Hc,Xc=Hc,Zc=Hc,ed=Hc;var td=Wr.performance||{},rd=td.now||td.mozNow||td.msNow||td.oNow||td.webkitNow||function(){return(new Date).getTime()};var nd=new Date;var id={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];zc.push(new Wc(e,t)),1!==zc.length||Vc||Bc(qc)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:Kc,addListener:Jc,once:Yc,off:Qc,removeListener:Xc,removeAllListeners:Zc,emit:ed,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*rd.call(td),r=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(r-=e[0],(n-=e[1])<0&&(r--,n+=1e9)),[r,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-nd)/1e3}};function sd(e){return{id:e.id,tracks:e.getTracks().map((function(e){return{id:e.id,kind:e.kind,label:e.label,enabled:e.enabled,muted:e.muted,readyState:e.readyState}}))}}var ad=function(e,t,r){var n=0,i=!!window.mozRTCPeerConnection,s=!!window.RTCIceGatherer;if(r.forEach((function(r){if(window[r+"RTCPeerConnection"]&&("webkit"!==r||!s)){var a=window[r+"RTCPeerConnection"],o=function(r,o){var c=new a(r,o),d="PC_"+n++;c.__rtcStatsId=d,r||(r={nullConfig:!0}),((r=JSON.parse(JSON.stringify(r)))&&r.iceServers||[]).forEach((function(e){delete e.credential})),r.browserType=i?"moz":s?"edge":"webkit",e("create",d,r),o&&e("constraints",d,o),c.addEventListener("icecandidate",(function(t){e("onicecandidate",d,t.candidate)})),c.addEventListener("addstream",(function(t){e("onaddstream",d,t.stream.id+" "+t.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),c.addEventListener("track",(function(t){e("ontrack",d,t.track.kind+":"+t.track.id+" "+t.streams.map((function(e){return"stream:"+e.id})))})),c.addEventListener("removestream",(function(t){e("onremovestream",d,t.stream.id+" "+t.stream.getTracks().map((function(e){return e.kind+":"+e.id})))})),c.addEventListener("signalingstatechange",(function(){e("onsignalingstatechange",d,c.signalingState)})),c.addEventListener("iceconnectionstatechange",(function(){e("oniceconnectionstatechange",d,c.iceConnectionState)})),c.addEventListener("icegatheringstatechange",(function(){e("onicegatheringstatechange",d,c.iceGatheringState)})),c.addEventListener("connectionstatechange",(function(){e("onconnectionstatechange",d,c.connectionState)})),c.addEventListener("negotiationneeded",(function(){e("onnegotiationneeded",d,void 0)})),c.addEventListener("datachannel",(function(t){e("ondatachannel",d,[t.channel.id,t.channel.label])}));var l={},p=function(){c.getStats(null).then((function(t){var r=function(e){if(!e.entries)return e;var t={};return e.forEach((function(e,r){t[r]=e})),t}(t),n=JSON.parse(JSON.stringify(r));e("getstats",d,function(e,t){t=JSON.parse(JSON.stringify(t)),Object.keys(t).forEach((function(r){var n=t[r];delete n.id,e[r]&&Object.keys(n).forEach((function(i){n[i]===e[r][i]&&delete t[r][i],(0===Object.keys(n).length||1===Object.keys(n).length&&n.timestamp)&&delete t[r]}))}));var r=-1/0;return Object.keys(t).forEach((function(e){var n=t[e];n.timestamp>r&&(r=n.timestamp)})),Object.keys(t).forEach((function(e){var n=t[e];n.timestamp===r&&(n.timestamp=0)})),t.timestamp=r,t}(l,r)),l=n}))};if(!s&&t)var u=window.setInterval((function(){"closed"!==c.signalingState?p():window.clearInterval(u)}),t);return s||c.addEventListener("connectionstatechange",(function(){"connected"!==c.connectionState&&"failed"!==c.connectionState||p()})),c};["createDataChannel","close"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){return e(t,this.__rtcStatsId,arguments),r.apply(this,arguments)})})),["addStream","removeStream"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=arguments[0],i=n.getTracks().map((function(e){return e.kind+":"+e.id})).join(",");return e(t,this.__rtcStatsId,n.id+" "+i),r.apply(this,arguments)})})),["addTrack"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=arguments[0],i=[].slice.call(arguments,1);return e(t,this.__rtcStatsId,n.kind+":"+n.id+" "+(i.map((function(e){return"stream:"+e.id})).join(";")||"-")),r.apply(this,arguments)})})),["removeTrack"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=arguments[0].track;return e(t,this.__rtcStatsId,n?n.kind+":"+n.id:"null"),r.apply(this,arguments)})})),["createOffer","createAnswer"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n,i=this.__rtcStatsId,s=arguments;return 1===arguments.length&&"object"==typeof arguments[0]?n=arguments[0]:3===arguments.length&&"object"==typeof arguments[2]&&(n=arguments[2]),e(t,this.__rtcStatsId,n),r.apply(this,n?[n]:void 0).then((function(r){if(e(t+"OnSuccess",i,r),!(s.length>0&&"function"==typeof s[0]))return r;s[0].apply(null,[r])}),(function(r){if(e(t+"OnFailure",i,r.toString()),!(s.length>1&&"function"==typeof s[1]))throw r;s[1].apply(null,[r])}))})})),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){var r=a.prototype[t];r&&(a.prototype[t]=function(){var n=this.__rtcStatsId,i=arguments;return e(t,this.__rtcStatsId,i[0]),r.apply(this,[i[0]]).then((function(){e(t+"OnSuccess",n,void 0),i.length>=2&&"function"==typeof i[1]&&i[1].apply(null,[])}),(function(r){if(e(t+"OnFailure",n,r.toString()),!(i.length>=3&&"function"==typeof i[2]))throw r;i[2].apply(null,[r])}))})})),a.generateCertificate&&Object.defineProperty(o,"generateCertificate",{get:function(){return arguments.length?a.generateCertificate.apply(null,arguments):a.generateCertificate}}),window[r+"RTCPeerConnection"]=o,window[r+"RTCPeerConnection"].prototype=a.prototype}})),r.forEach((function(t){var r=t+(t.length?"GetUserMedia":"getUserMedia");if(navigator[r]){var n=navigator[r].bind(navigator);navigator[r]=function(){e("getUserMedia",null,arguments[0]);var t=arguments[1],r=arguments[2];n(arguments[0],(function(r){e("getUserMediaOnSuccess",null,sd(r)),t&&t(r)}),(function(t){e("getUserMediaOnFailure",null,t.name),r&&r(t)}))}.bind(navigator)}})),navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var a=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(){return e("navigator.mediaDevices.getUserMedia",null,arguments[0]),a.apply(navigator.mediaDevices,arguments).then((function(t){return e("navigator.mediaDevices.getUserMediaOnSuccess",null,sd(t)),t}),(function(t){return e("navigator.mediaDevices.getUserMediaOnFailure",null,t.name),Promise.reject(t)}))}.bind(navigator.mediaDevices)}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var o=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getDisplayMedia=function(){return e("navigator.mediaDevices.getDisplayMedia",null,arguments[0]),o.apply(navigator.mediaDevices,arguments).then((function(t){return e("navigator.mediaDevices.getDisplayMediaOnSuccess",null,sd(t)),t}),(function(t){return e("navigator.mediaDevices.getDisplayMediaOnFailure",null,t.name),Promise.reject(t)}))}.bind(navigator.mediaDevices)}},od=Ki(ad);let cd;const dd=new Uint8Array(16);function ld(){if(!cd&&(cd="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!cd))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return cd(dd)}const pd=[];for(let e=0;e<256;++e)pd.push((e+256).toString(16).slice(1));var ud={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function hd(e,t,r){if(ud.randomUUID&&!t&&!e)return ud.randomUUID();const n=(e=e||{}).random||(e.rng||ld)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=n[e];return t}return function(e,t=0){return pd[e[t+0]]+pd[e[t+1]]+pd[e[t+2]]+pd[e[t+3]]+"-"+pd[e[t+4]]+pd[e[t+5]]+"-"+pd[e[t+6]]+pd[e[t+7]]+"-"+pd[e[t+8]]+pd[e[t+9]]+"-"+pd[e[t+10]]+pd[e[t+11]]+pd[e[t+12]]+pd[e[t+13]]+pd[e[t+14]]+pd[e[t+15]]}(n)}const md={id:hd(),connectionNumber:0};const fd=function(e,t=console){const r=[];let n,i,s,a,o,c,d,l=0,p=!1;const u={connected:!1,trace:(...e)=>{if(e.push(Date.now()),"customEvent"===e[0]&&"roomSessionId"===e[2].type){const t=c&&c[2].value.roomSessionId,r=e[2].value.roomSessionId;if(c=e,p&&r&&r!==t&&n)return void n.close();r&&(p=!0)}else"customEvent"===e[0]&&"clientId"===e[2].type?s=e:"customEvent"===e[0]&&"organizationId"===e[2].type?i=e:"customEvent"===e[0]&&"displayName"===e[2].type?a=e:"customEvent"===e[0]&&"userRole"===e[2].type&&(o=e);n.readyState===WebSocket.OPEN?(l=0,n.send(JSON.stringify(e))):"getstats"===e[0]||"customEvent"===e[0]&&"insightsStats"===e[2].type||r.push(e),n.readyState===WebSocket.CLOSED&&d&&setTimeout((()=>{n.readyState===WebSocket.CLOSED&&d&&u.connect()}),1e3*l)},close:()=>{d=!1,n&&n.close()},connect:()=>{d=!0,l+=1,n&&n.close(),u.connected=!0,n=new WebSocket(e+window.location.pathname,"1.0"),n.onerror=e=>{u.connected=!1,t.warn("[RTCSTATS] WebSocket error",e)},n.onclose=e=>{u.connected=!1,t.info(`[RTCSTATS] Closed ${e.code}`)},n.onopen=()=>{for(md.connectionNumber++,n.send(JSON.stringify(["clientInfo",null,md])),i&&n.send(JSON.stringify(i)),s&&n.send(JSON.stringify(s)),c&&n.send(JSON.stringify(c)),a&&n.send(JSON.stringify(a)),o&&n.send(JSON.stringify(o));r.length;)n.send(JSON.stringify(r.shift()))}}};return u.connect(),u}("wss://rtcstats.srv.whereby.com");od(fd.trace,1e4,[""]);const gd={sendEvent:(e,t)=>{fd.trace("customEvent",null,{type:e,value:t})},sendAudioMuted:e=>{gd.sendEvent("audio_muted",{muted:e})},sendVideoMuted:e=>{gd.sendEvent("video_muted",{muted:e})},server:fd},vd=cc.getCameraId(),yd=zs.browserDetails.browser,_d=zs.browserDetails.version;"firefox"===yd&&zs.browserShim.shimGetDisplayMedia(window,"screen");let bd=!1;"chrome"===yd&&window.document.addEventListener("beforeunload",(()=>{bd=!0}));class wd{constructor({selfId:e,room:t,emitter:r,serverSocket:n,webrtcProvider:i,features:s,logger:a=console}){ya.ok(e,"selfId is required"),ya.ok(t,"room is required"),ya.ok(r&&r.emit,"emitter is required"),ya.ok(n instanceof Vs,"serverSocket is required"),ya.ok(i,"webrtcProvider is required");const{name:o,session:c,iceServers:d,sfuServer:l,mediaserverConfigTtlSeconds:p}=t;this._selfId=e,this._roomName=o,this._roomSessionId=c&&c.id,this.peerConnections={},this.localStreams={},this.enabledLocalStreamIds=[],this._socketListenerDeregisterFunctions=[],this._localStreamDeregisterFunction=null,this._emitter=r,this._serverSocket=n,this._webrtcProvider=i,this._features=s||{},this._logger=a,this.offerOptions={offerToReceiveAudio:!0,offerToReceiveVideo:!0},this._pendingActionsForConnectedPeerConnections=[],this._audioTrackOnEnded=()=>{gd.sendEvent("audio_ended",{unloading:bd}),this._emit(pc,{})},this._updateAndScheduleMediaServersRefresh({sfuServer:l,iceServers:d.iceServers||[],mediaserverConfigTtlSeconds:p})}numberOfPeerconnections(){return Object.keys(this.peerConnections).length}numberOfRemotePeers(){return Object.values(this.peerConnections).filter((e=>e.clientId!==this._selfId)).length}_setConnectionStatus(e,t,r){const n=e.connectionStatus;n!==t&&e.peerConnectionId!==this._selfId&&(n===Jo&&t===Wo||(e.connectionStatus=t,setTimeout((()=>{this._emit(Uo,{streamIds:e.streamIds,clientId:r,status:t,previous:n})}),0)))}_setJitterBufferTarget(e){try{e.getReceivers().forEach((e=>{e.jitterBufferTarget=Mc,e.playoutDelayHint=.4}))}catch(e){this._logger.error("Error during setting jitter buffer target:",e)}}_emitServerEvent(e,t,r){this._serverSocket.emit(e,t,r)}_emit(e,t){this._emitter.emit(e,t)}isInitializedWith({selfId:e,roomName:t,isSfu:r}){return this._selfId===e&&this._roomName===t&&r===!!this._sfuServer}supportsScreenShareAudio(){return!0}_addEnabledLocalStreamId(e){this.enabledLocalStreamIds.push(e)}_deleteEnabledLocalStreamId(e){const t=this.enabledLocalStreamIds.indexOf(e);-1!==t&&this.enabledLocalStreamIds.splice(t,1)}_getSession(e){return e in this.peerConnections?this.peerConnections[e]:null}_getOrCreateSession(e,t){let r=this.peerConnections[e];if(void 0===r){const n="safari"===yd&&_d>=14&&this._features.deprioritizeH264OnSafari;this.peerConnections[e]=r=new jc({peerConnectionId:e,bandwidth:t,maximumTurnBandwidth:this._features.unlimitedBandwidthWhenUsingRelayP2POn?-1:1280,deprioritizeH264Encoding:n})}return r}_getLocalCameraStream(){return this.localStreams[vd]}_getNonLocalCameraStreamIds(){return Object.keys(this.localStreams).filter((e=>e!==vd))}_isScreensharingLocally(){return this._getNonLocalCameraStreamIds().length>0}_getFirstLocalNonCameraStream(){const e=this._getNonLocalCameraStreamIds();return 0===e.length?null:this.localStreams[e[0]]}_transformIncomingSdp(e){return{type:e.type,sdp:e.sdpU}}_transformOutgoingSdp(e){return{type:e.type,sdpU:e.sdp}}_createSession({clientId:e,initialBandwidth:t,isOfferer:r,peerConnectionId:n,shouldAddLocalVideo:i}){if(!n)throw new Error("peerConnectionId is missing");if(!e)throw new Error("clientId is missing");const s=this._getOrCreateSession(n,t),a={optional:[]};"chrome"===yd&&a.optional.push({googCpuOveruseDetection:!0}),a.optional.push({rtcStatsRoomSessionId:this._roomSessionId}),a.optional.push({rtcStatsClientId:this._selfId}),a.optional.push({rtcStatsPeerId:n}),a.optional.push({rtcStatsConferenceId:this._roomName});const o={iceServers:this._iceServers};if(this._features.turnServerOverrideHost){const e=this._features.turnServerOverrideHost,t=e.indexOf(":")>0?"":":443",r=":"+e+t;o.iceServers=o.iceServers.map((e=>{const t=Object.assign({},e);return t.url&&(t.url=t.url.replace(/:[^?]*/,r)),t.urls&&(t.urls=t.urls.map((e=>e.replace(/:[^?]*/,r)))),t}))}if(this._features.useOnlyTURN){o.iceTransportPolicy="relay";const e={onlyudp:/^turn:.*transport=udp$/,onlytcp:/^turn:.*transport=tcp$/,onlytls:/^turns:.*transport=tcp$/}[this._features.useOnlyTURN];e&&(o.iceServers=o.iceServers.filter((t=>t.url&&t.url.match(e))))}"chrome"===yd&&(o.sdpSemantics="unified-plan");const c=s.setAndGetPeerConnection({constraints:a,peerConnectionConfig:o,shouldAddLocalVideo:i,clientId:e});c.ontrack=t=>{const r=t.streams[0];"default"===r.id&&0===r.getAudioTracks().length||-1===s.streamIds.indexOf(r.id)&&(s.streamIds.push(r.id),this._emit(zo,{clientId:e,stream:r}),s.connectionStatus===Ko&&setTimeout((()=>{this._emit(Uo,{streamIds:s.streamIds,clientId:e,status:s.connectionStatus,previous:Wo})}),0))},c.oniceconnectionstatechange=()=>{let t;const r=s.connectionStatus;switch(c.iceConnectionState){case"checking":t=Wo;break;case"connected":case"completed":t=Ko,s.wasEverConnected||(this._pendingActionsForConnectedPeerConnections.forEach((e=>{"function"==typeof e&&e()})),this._pendingActionsForConnectedPeerConnections=[]),!s.wasEverConnected&&(c.iceConnectionState.match(/connected|completed/)||"chrome"===yd&&c.localDescription&&"answer"===c.localDescription.type)&&(s.wasEverConnected=!0,"false"!==this._features.bandwidth&&this.maybeRestrictRelayBandwidth(s)),s.registerConnected();break;case"disconnected":t=Jo,setTimeout((()=>{"disconnected"===c.iceConnectionState&&this._maybeRestartIce(e,s)}),2e3);break;case"failed":t=Ho,r!==t&&this._maybeRestartIce(e,s),null!==s.relayCandidateSeen||s.wasEverConnected||this._emit(dc);break;default:return}this._setConnectionStatus(s,t,e)},c.onconnectionstate=()=>{switch(c.connectionState){case"connected":setTimeout((()=>{(function(e){if("chrome"!==zs.browserDetails.browser||zs.browserDetails.browser<58||"closed"===e.signalingState)return Promise.resolve(!1);const t=e.getSenders().some((e=>e.track&&"audio"===e.track.kind)),r=e.getReceivers().some((e=>e.track&&"audio"===e.track.kind));return e.getStats(null).then((e=>{let n=!1;return e.forEach((e=>{"outbound-rtp"!==e.type||"audio"!==e.kind&&"audio"!==e.mediaType||!t?"inbound-rtp"!==e.type||"audio"!==e.kind&&"audio"!==e.mediaType||!r||0===e.bytesReceived&&(n="inbound"):0===e.bytesSent&&(n="outbound")})),n}))})(s.pc).then((t=>{!1!==t&&this._emit(lc,{failureDirection:t,clientId:e})}))}),3e3),s.registerConnected();break;case"failed":const t=Ho;null!==s.relayCandidateSeen||s.wasEverConnected||this._emit(dc),this._setConnectionStatus(s,t,e)}};const d=this.localStreams[vd];return i&&d&&s.addStream(d),i&&Object.keys(this.localStreams).forEach((e=>{if(e===vd)return;const t=this.localStreams[e];r?s.addStream(t):s.afterConnected.then((()=>{this._emitServerEvent(Qo,{receiverId:s.clientId,streamId:t.id,hasAudioTrack:!!t.getAudioTracks().length}),this._withForcedRenegotiation(s,(()=>s.addStream(t)))}))})),s}_cleanup(e){const t=this._getSession(e);t?(t.close(),delete this.peerConnections[e]):this._logger.warn("No RTCPeerConnection in RTCManager.disconnect()",e)}_forEachPeerConnection(e){Object.keys(this.peerConnections).forEach((t=>{const r=this.peerConnections[t];e(r)}))}_addStreamToPeerConnections(e){this._forEachPeerConnection((t=>{this._withForcedRenegotiation(t,(()=>t.addStream(e)))}))}_addTrackToPeerConnections(e,t){this._forEachPeerConnection((r=>{this._withForcedRenegotiation(r,(()=>r.addTrack(e,t)))}))}_replaceTrackToPeerConnections(e,t){const r=[];return this._forEachPeerConnection((n=>{if(!n.hasConnectedPeerConnection()){this._logger.log("Session doesn't have a connected PeerConnection, adding pending action!");const i=this._pendingActionsForConnectedPeerConnections;if(!i)return void this._logger.warn("No pending action is created to repalce track, because the pending actions array is null");const s=new Promise(((r,s)=>{i.push((()=>{const i=n.replaceTrack(e,t);if(!i)return this._logger.error("replaceTrack returned false!"),void s("ReplaceTrack returned false");i.then((e=>r(e))).catch((e=>s(e)))}))}));return void r.push(s)}const i=n.replaceTrack(e,t);i?r.push(i):this._logger.error("replaceTrack returned false!")})),Promise.all(r)}_removeStreamFromPeerConnections(e){this._forEachPeerConnection((t=>{this._withForcedRenegotiation(t,(()=>t.removeStream(e)))}))}_removeTrackFromPeerConnections(e){this._forEachPeerConnection((t=>{this._withForcedRenegotiation(t,(()=>t.removeTrack(e)))}))}_addLocalStream(e,t){this._addEnabledLocalStreamId(e),this.localStreams[e]=t}_removeLocalStream(e){delete this.localStreams[e],this._deleteEnabledLocalStreamId(e)}maybeRestrictRelayBandwidth(e){e.maybeRestrictRelayBandwidth()}addNewStream(e,t){if(t!==this.localStreams[e]){if(this._addLocalStream(e,t),e===vd){this._addStreamToPeerConnections(t);const[e]=t.getAudioTracks();e&&this._startMonitoringAudioTrack(e),this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null);const r=e=>{const{enable:t,track:r}=e.detail;this._handleStopOrResumeVideo({enable:t,track:r})};return t.addEventListener("stopresumevideo",r),void(this._localStreamDeregisterFunction=()=>{t.removeEventListener("stopresumevideo",r)})}this._shareScreen(e,t)}}removeStream(e,t){this._removeLocalStream(e,t)}replaceTrack(e,t){return e&&"audio"===e.kind&&this._stopMonitoringAudioTrack(e),t&&"audio"===t.kind&&this._startMonitoringAudioTrack(t),this._replaceTrackToPeerConnections(e,t)}accept({clientId:e,shouldAddLocalVideo:t}){return this.acceptNewStream({streamId:e,clientId:e,shouldAddLocalVideo:t})}disconnectAll(){Object.keys(this.peerConnections).forEach((e=>{this.disconnect(e)})),this.peerConnections={},this._socketListenerDeregisterFunctions.forEach((e=>{e()})),this._socketListenerDeregisterFunctions=[],this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null)}stopOrResumeAudio(){}stopOrResumeVideo(){}_handleStopOrResumeVideo(){}fixChromeAudio(e){if("chrome"!==yd)return;const t=this._getLocalCameraStream(),r=t.getAudioTracks()[0];return r&&"ended"===r.readyState?navigator.mediaDevices.getUserMedia({audio:e}).then((e=>{const n=e.getAudioTracks()[0];return n.enabled=r.enabled,t.removeTrack(r),t.addTrack(n),this.replaceTrack(r,n)})):void 0}_updateAndScheduleMediaServersRefresh({iceServers:e,sfuServer:t,mediaserverConfigTtlSeconds:r}){this._iceServers=e,this._sfuServer=t,this._mediaserverConfigTtlSeconds=r,this._clearMediaServersRefresh(),r&&(this._fetchMediaServersTimer=setTimeout((()=>this._emitServerEvent(Yo)),1e3*r))}_clearMediaServersRefresh(){this._fetchMediaServersTimer&&(clearTimeout(this._fetchMediaServersTimer),this._fetchMediaServersTimer=null)}setupSocketListeners(){this._socketListenerDeregisterFunctions=[()=>this._clearMediaServersRefresh(),this._serverSocket.on(Zo,(e=>{e.error?this._logger.warn("FETCH_MEDIASERVER_CONFIG failed:",e.error):this._updateAndScheduleMediaServersRefresh(e)})),this._serverSocket.on(nc,(e=>{this._connect(e.clientId)})),this._serverSocket.on(tc,(e=>{const t=this._getSession(e.clientId);t?t.addIceCandidate(e.message):this._logger.warn("No RTCPeerConnection on ICE_CANDIDATE",e)})),this._serverSocket.on(rc,(e=>{const t=this._getSession(e.clientId);t?t.addIceCandidate(null):this._logger.warn("No RTCPeerConnection on ICE_END_OF_CANDIDATES",e)})),this._serverSocket.on(sc,(e=>{const t=this._getSession(e.clientId);if(!t)return void this._logger.warn("No RTCPeerConnection on SDP_OFFER",e);const r=this._transformIncomingSdp(e.message,t.pc);t.handleOffer(r).then((t=>{this._emitServerEvent(ic,{receiverId:e.clientId,message:this._transformOutgoingSdp(t)})}))})),this._serverSocket.on(ic,(e=>{const t=this._getSession(e.clientId);if(!t)return void this._logger.warn("No RTCPeerConnection on SDP_ANSWER",e);const r=this._transformIncomingSdp(e.message,t.pc);t.handleAnswer(r)}))]}sendAudioMutedStats(e){gd.sendEvent("audio_muted",{muted:e})}sendVideoMutedStats(e){gd.sendEvent("video_muted",{muted:e})}sendStatsCustomEvent(e,t){gd.sendEvent(e,t)}rtcStatsDisconnect(){gd.server.close()}rtcStatsReconnect(){gd.server.connected||gd.server.connect()}_startMonitoringAudioTrack(e){e.addEventListener("ended",this._audioTrackOnEnded)}_stopMonitoringAudioTrack(e){e.removeEventListener("ended",this._audioTrackOnEnded)}setRoomSessionId(e){this._roomSessionId=e}}const Sd=57600,Cd=2.6041666666666665,Rd=921600,Td=1.0850694444444444;const Pd=cc.getCameraId(),kd=zs.browserDetails.browser;class Ed extends wd{_connect(e){this.rtcStatsReconnect();let t=this._getSession(e),r=t&&t.bandwidth||0;return t?(this._logger.warn("Replacing peer session",e),this._cleanup(e)):r=this._changeBandwidthForAllClients(!0),t=this._createP2pSession(e,r,!0,!0),this._negotiatePeerConnection(e,t),Promise.resolve(t)}_maybeRestartIce(e,t){const r=t.pc;"disconnected"!==r.iceConnectionState&&"failed"!==r.iceConnectionState||"offer"===r.localDescription.type&&(t.wasEverConnected=!1,t.relayCandidateSeen=!1,this._negotiatePeerConnection(e,t,Object.assign({},this.offerOptions,{iceRestart:!0})))}_setCodecPreferences(e,t,r,n){try{e.getTransceivers().filter((e=>"audio"===e?.sender?.track?.kind)).forEach((e=>{if(void 0===RTCRtpSender.getCapabilities)return;const t=RTCRtpSender.getCapabilities("audio");for(let e=0;e<t.codecs.length;e++)if(n&&"audio/red"===t.codecs[e].mimeType.toLowerCase()){t.codecs.unshift(t.codecs.splice(e,1)[0]);break}void 0!==e.setCodecPreferences&&e.setCodecPreferences(t.codecs)}));e.getTransceivers().filter((e=>"video"===e?.sender?.track?.kind)).forEach((e=>{if(void 0===RTCRtpSender.getCapabilities)return;const n=RTCRtpSender.getCapabilities("video");for(let e=0;e<n.codecs.length;e++){if(t&&"video/vp9"===n.codecs[e].mimeType.toLowerCase()){n.codecs.unshift(n.codecs.splice(e,1)[0]);break}if(r&&"video/av1"===n.codecs[e].mimeType.toLowerCase()){n.codecs.unshift(n.codecs.splice(e,1)[0]);break}}void 0!==e.setCodecPreferences&&e.setCodecPreferences(n.codecs)}))}catch(e){this._logger.error("Error during setting setCodecPreferences:",e)}}_negotiatePeerConnection(e,t,r){if(!t)return void this._logger.warn("No RTCPeerConnection in negotiatePeerConnection()",e);const n=t.pc;if(!t.canModifyPeerConnection())return void t.pending.push((()=>{this._negotiatePeerConnection(e,t,r)}));t.isOperationPending=!0;const{vp9On:i,av1On:s,redOn:a}=this._features;(i||s||a)&&this._setCodecPreferences(n,i,s,a),n.createOffer(r||this.offerOptions).then((r=>{(i||a)&&"firefox"===kd&&(r.sdp=function(e,t,r){try{const n=kc(e);if(Array.isArray(n?.media)){const e=n.media.find((e=>"audio"===e.type));if(Array.isArray(e?.rtp)){const t=e.rtp;for(let n=0;n<t.length;n++)if(r&&"red"===t[n].codec){const r=e.payloads.split(" "),i=r.indexOf(""+t[n].payload);i&&-1!==i&&i>=0&&(r.unshift(r.splice(i,1)[0]),e.payloads=r.join(" "))}}const i=n.media.find((e=>"video"===e.type));if(Array.isArray(i?.rtp)){const e=i.rtp;for(let r=0;r<e.length;r++)if(t&&"VP9"===e[r].codec){const t=i.payloads.split(" "),n=t.indexOf(""+e[r].payload);n&&-1!==n&&n>=0&&(t.unshift(t.splice(n,1)[0]),i.payloads=t.join(" "))}}}return Pc(n)}catch(e){console.log("setCodecPreferenceSDP error:",e)}}(r.sdp,i,a)),this._emitServerEvent(sc,{receiverId:e,message:this._transformOutgoingSdp(r)}),"chrome"===kd&&n.getSenders().filter((e=>e.track&&"video"===e.track.kind)).length>=2?t.pendingOffer=r:n.setLocalDescription(r).catch((e=>{this._logger.warn("RTCPeerConnection.setLocalDescription() failed with local offer",e)}))})).catch((e=>{this._logger.warn("RTCPeerConnection.createOffer() failed to create local offer",e)}))}_withForcedRenegotiation(e,t){const r=e.pc,n=r.onnegotationneeded;r.onnegotiationneeded=null,t(),this._negotiatePeerConnection(e.clientId,e),setTimeout((()=>r.onnegotiationneeded=n),0)}_changeBandwidthForAllClients(e){let t=this.numberOfPeerconnections();if(e&&(t+=1),0===t)return 0;t>7&&(t=7);let r=this._features.bandwidth?parseInt(this._features.bandwidth,10):{1:this._features.cap2pBitrate?1e3:0,2:this._features.highP2PBandwidth?768:384,3:this._features.highP2PBandwidth?512:256,4:192,5:128,6:128,7:64}[t];if(void 0===r)return 0;if(this._features.adjustBitratesFromResolution){const e=this._getLocalCameraStream();if(e){const t=e&&e.getVideoTracks()[0];if(t){const{width:e,height:n,frameRate:i}=t.getSettings();if(e&&n&&i){const t=Math.round(function(e,t,r){let n=e*t;n<Sd&&(n=Sd),n>Rd&&(n=Rd);let i=Cd;n>Rd?i=Td:n>Sd&&(i+=-17582143775720163e-22*(n-Sd));let s=e*t*i;return r<=15?s*=.7:r<=24&&(s*=.9),s}(e,n,i)/1e3);r=Math.min(t,r||t)}}}}return this._features.higherP2PBitrates&&(r*=1.5),this._forEachPeerConnection((e=>{e.changeBandwidth(r)})),r}_createP2pSession(e,t,r,n){const i=this._createSession({peerConnectionId:e,clientId:e,initialBandwidth:t,shouldAddLocalVideo:r,isOfferer:n}),s=i.pc;this._features.increaseIncomingMediaBufferOn&&this._setJitterBufferTarget(s);const a=this.localStreams[Pd];return r&&a&&!a.getVideoTracks().length&&this._stoppedVideoTrack&&s.addTrack(this._stoppedVideoTrack,a),s.onicecandidate=t=>{t.candidate?(i.relayCandidateSeen=i.relayCandidateSeen||"relay"===t.candidate.type,this._emitServerEvent(tc,{receiverId:e,message:t.candidate})):this._emitServerEvent(rc,{receiverId:e})},s.onnegotiationneeded=()=>{"new"!==s.iceConnectionState&&i.connectionStatus&&this._negotiatePeerConnection(e,i)},i}acceptNewStream({streamId:e,clientId:t,shouldAddLocalVideo:r}){let n=this._getSession(t);if(n&&e!==t)return n;let i=n&&n.bandwidth||0;return n?(this._logger.warn("Replacing peer session",t),this._cleanup(t)):i=this._changeBandwidthForAllClients(!0),n=this._createP2pSession(t,i,r),this._emitServerEvent(nc,{receiverId:t}),n}disconnect(e){this._cleanup(e),this._changeBandwidthForAllClients(!1);0===this.numberOfPeerconnections()&&setTimeout((()=>{0===this.numberOfPeerconnections()&&this.rtcStatsDisconnect()}),6e4)}updateStreamResolution(){}stopOrResumeAudio(){}_handleStopOrResumeVideo({enable:e,track:t}){e?this._stoppedVideoTrack?(this._replaceTrackToPeerConnections(this._stoppedVideoTrack,t),delete this._stoppedVideoTrack):this._addTrackToPeerConnections(t):this._stoppedVideoTrack=t}stopOrResumeVideo(e,t){if(["chrome","safari"].includes(kd))if(!1===t)setTimeout((()=>{e.getVideoTracks().forEach((r=>{!1===r.enabled&&(r.stop(),e.removeTrack(r),this._emit(qo,{stream:e,track:r}),this._handleStopOrResumeVideo({enable:t,track:r}))}))}),5e3);else if(0===e.getVideoTracks().length){const r=this._webrtcProvider.getMediaConstraints().video;if(!r)return;navigator.mediaDevices.getUserMedia({video:r}).then((r=>{const n=r.getVideoTracks()[0];e.addTrack(n),this._emit(Go,{streamId:e.id,tracks:[n],screenShare:!1}),this._handleStopOrResumeVideo({enable:t,track:n})}))}}_shareScreen(e,t){this._emitServerEvent(Qo,{streamId:e,hasAudioTrack:!!t.getAudioTracks().length}),this._addStreamToPeerConnections(t)}removeStream(e,t,r){super.removeStream(e,t),this._removeStreamFromPeerConnections(t),this._emitServerEvent(Xo,{streamId:e,requestedByClientId:r})}}var Dd,Od,Id={},xd={exports:{}};function Md(){if(Od)return Dd;Od=1;var e=1e3,t=60*e,r=60*t,n=24*r,i=7*n,s=365.25*n;function a(e,t,r,n){var i=t>=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}return Dd=function(o,c){c=c||{};var d=typeof o;if("string"===d&&o.length>0)return function(a){if((a=String(a)).length>100)return;var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(a);if(!o)return;var c=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*s;case"weeks":case"week":case"w":return c*i;case"days":case"day":case"d":return c*n;case"hours":case"hour":case"hrs":case"hr":case"h":return c*r;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(o);if("number"===d&&isFinite(o))return c.long?function(i){var s=Math.abs(i);if(s>=n)return a(i,s,n,"day");if(s>=r)return a(i,s,r,"hour");if(s>=t)return a(i,s,t,"minute");if(s>=e)return a(i,s,e,"second");return i+" ms"}(o):function(i){var s=Math.abs(i);if(s>=n)return Math.round(i/n)+"d";if(s>=r)return Math.round(i/r)+"h";if(s>=t)return Math.round(i/t)+"m";if(s>=e)return Math.round(i/e)+"s";return i+"ms"}(o);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(o))}}var jd=function(e){function t(e){let n,i,s,a=null;function o(...e){if(!o.enabled)return;const r=o,i=Number(new Date),s=i-(n||i);r.diff=s,r.prev=n,r.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,i)=>{if("%%"===n)return"%";a++;const s=t.formatters[i];if("function"==typeof s){const t=e[a];n=s.call(r,t),e.splice(a,1),a--}return n})),t.formatArgs.call(r,e);(r.log||t.log).apply(r,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==a?a:(i!==t.namespaces&&(i=t.namespaces,s=t.enabled(e)),s),set:e=>{a=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,r){const n=t(this.namespace+(void 0===r?":":r)+e);return n.log=this.log,n}function n(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},t.disable=function(){const e=[...t.names.map(n),...t.skips.map(n).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let r;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),i=n.length;for(r=0;r<i;r++)n[r]&&("-"===(e=n[r].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.slice(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){if("*"===e[e.length-1])return!0;let r,n;for(r=0,n=t.skips.length;r<n;r++)if(t.skips[r].test(e))return!1;for(r=0,n=t.names.length;r<n;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=Md(),t.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach((r=>{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t<e.length;t++)r=(r<<5)-r+e.charCodeAt(t),r|=0;return t.colors[Math.abs(r)%t.colors.length]},t.enable(t.load()),t};!function(e,t){t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let n=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(i=n))})),t.splice(i,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==id&&"env"in id&&(e=id.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!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`."))}})(),t.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"],t.log=console.debug||console.log||(()=>{}),e.exports=jd(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(xd,xd.exports);var Ld=xd.exports,Ad={},Nd={exports:{}};!function(e,t){!function(r,n){var i="function",s="undefined",a="object",o="string",c="major",d="model",l="name",p="type",u="vendor",h="version",m="architecture",f="console",g="mobile",v="tablet",y="smarttv",_="wearable",b="embedded",w="Amazon",S="Apple",C="ASUS",R="BlackBerry",T="Browser",P="Chrome",k="Firefox",E="Google",D="Huawei",O="LG",I="Microsoft",x="Motorola",M="Opera",j="Samsung",L="Sharp",A="Sony",N="Xiaomi",F="Zebra",B="Facebook",U="Chromium OS",z="Mac OS",V=function(e){for(var t={},r=0;r<e.length;r++)t[e[r].toUpperCase()]=e[r];return t},$=function(e,t){return typeof e===o&&-1!==G(t).indexOf(G(e))},G=function(e){return e.toLowerCase()},q=function(e,t){if(typeof e===o)return e=e.replace(/^\s\s*/,""),typeof t===s?e:e.substring(0,500)},W=function(e,t){for(var r,s,o,c,d,l,p=0;p<t.length&&!d;){var u=t[p],h=t[p+1];for(r=s=0;r<u.length&&!d&&u[r];)if(d=u[r++].exec(e))for(o=0;o<h.length;o++)l=d[++s],typeof(c=h[o])===a&&c.length>0?2===c.length?typeof c[1]==i?this[c[0]]=c[1].call(this,l):this[c[0]]=c[1]:3===c.length?typeof c[1]!==i||c[1].exec&&c[1].test?this[c[0]]=l?l.replace(c[1],c[2]):n:this[c[0]]=l?c[1].call(this,l,c[2]):n:4===c.length&&(this[c[0]]=l?c[3].call(this,l.replace(c[1],c[2])):n):this[c]=l||n;p+=2}},H=function(e,t){for(var r in t)if(typeof t[r]===a&&t[r].length>0){for(var i=0;i<t[r].length;i++)if($(t[r][i],e))return"?"===r?n:r}else if($(t[r],e))return"?"===r?n:r;return e},K={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},J={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[l,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[l,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[l,h],[/opios[\/ ]+([\w\.]+)/i],[h,[l,M+" Mini"]],[/\bopr\/([\w\.]+)/i],[h,[l,M]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[h,[l,"Baidu"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[l,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[l,"UC"+T]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[h,[l,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[l,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[l,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[h,[l,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[h,[l,"Smart Lenovo "+T]],[/(avast|avg)\/([\w\.]+)/i],[[l,/(.+)/,"$1 Secure "+T],h],[/\bfocus\/([\w\.]+)/i],[h,[l,k+" Focus"]],[/\bopt\/([\w\.]+)/i],[h,[l,M+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[l,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[l,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[l,M+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[l,"MIUI "+T]],[/fxios\/([-\w\.]+)/i],[h,[l,k]],[/\bqihu|(qi?ho?o?|360)browser/i],[[l,"360 "+T]],[/(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i],[[l,/(.+)/,"$1 "+T],h],[/samsungbrowser\/([\w\.]+)/i],[h,[l,j+" Internet"]],[/(comodo_dragon)\/([\w\.]+)/i],[[l,/_/g," "],h],[/metasr[\/ ]?([\d\.]+)/i],[h,[l,"Sogou Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[l,"Sogou Mobile"],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i],[l,h],[/(lbbrowser)/i,/\[(linkedin)app\]/i],[l],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[l,B],h],[/(Klarna)\/([\w\.]+)/i,/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i],[l,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[l,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[h,[l,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[l,P+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[l,P+" WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[l,"Android "+T]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[l,h],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[h,[l,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[h,l],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[l,[h,H,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[l,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[l,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[l,k+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[l,h],[/(cobalt)\/([\w\.]+)/i],[l,[h,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[m,"amd64"]],[/(ia32(?=;))/i],[[m,G]],[/((?:i[346]|x)86)[;\)]/i],[[m,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[m,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[m,"armhf"]],[/windows (ce|mobile); ppc;/i],[[m,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[m,/ower/,"",G]],[/(sun4\w)[;\)]/i],[[m,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[m,G]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[d,[u,j],[p,v]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[d,[u,j],[p,g]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[d,[u,S],[p,g]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[d,[u,S],[p,v]],[/(macintosh);/i],[d,[u,S]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[d,[u,L],[p,g]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[d,[u,D],[p,v]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[d,[u,D],[p,g]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[d,/_/g," "],[u,N],[p,g]],[/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[d,/_/g," "],[u,N],[p,v]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[d,[u,"OPPO"],[p,g]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[d,[u,"Vivo"],[p,g]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[d,[u,"Realme"],[p,g]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[d,[u,x],[p,g]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[d,[u,x],[p,v]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[d,[u,O],[p,v]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[d,[u,O],[p,g]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[d,[u,"Lenovo"],[p,v]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[d,/_/g," "],[u,"Nokia"],[p,g]],[/(pixel c)\b/i],[d,[u,E],[p,v]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[d,[u,E],[p,g]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[d,[u,A],[p,g]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[d,"Xperia Tablet"],[u,A],[p,v]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[d,[u,"OnePlus"],[p,g]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[d,[u,w],[p,v]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[d,/(.+)/g,"Fire Phone $1"],[u,w],[p,g]],[/(playbook);[-\w\),; ]+(rim)/i],[d,u,[p,v]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[d,[u,R],[p,g]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[d,[u,C],[p,v]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[d,[u,C],[p,g]],[/(nexus 9)/i],[d,[u,"HTC"],[p,v]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[u,[d,/_/g," "],[p,g]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[d,[u,"Acer"],[p,v]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[d,[u,"Meizu"],[p,g]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[d,[u,"Ulefone"],[p,g]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[u,d,[p,g]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[u,d,[p,v]],[/(surface duo)/i],[d,[u,I],[p,v]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[d,[u,"Fairphone"],[p,g]],[/(u304aa)/i],[d,[u,"AT&T"],[p,g]],[/\bsie-(\w*)/i],[d,[u,"Siemens"],[p,g]],[/\b(rct\w+) b/i],[d,[u,"RCA"],[p,v]],[/\b(venue[\d ]{2,7}) b/i],[d,[u,"Dell"],[p,v]],[/\b(q(?:mv|ta)\w+) b/i],[d,[u,"Verizon"],[p,v]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[d,[u,"Barnes & Noble"],[p,v]],[/\b(tm\d{3}\w+) b/i],[d,[u,"NuVision"],[p,v]],[/\b(k88) b/i],[d,[u,"ZTE"],[p,v]],[/\b(nx\d{3}j) b/i],[d,[u,"ZTE"],[p,g]],[/\b(gen\d{3}) b.+49h/i],[d,[u,"Swiss"],[p,g]],[/\b(zur\d{3}) b/i],[d,[u,"Swiss"],[p,v]],[/\b((zeki)?tb.*\b) b/i],[d,[u,"Zeki"],[p,v]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[u,"Dragon Touch"],d,[p,v]],[/\b(ns-?\w{0,9}) b/i],[d,[u,"Insignia"],[p,v]],[/\b((nxa|next)-?\w{0,9}) b/i],[d,[u,"NextBook"],[p,v]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[u,"Voice"],d,[p,g]],[/\b(lvtel\-)?(v1[12]) b/i],[[u,"LvTel"],d,[p,g]],[/\b(ph-1) /i],[d,[u,"Essential"],[p,g]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[d,[u,"Envizen"],[p,v]],[/\b(trio[-\w\. ]+) b/i],[d,[u,"MachSpeed"],[p,v]],[/\btu_(1491) b/i],[d,[u,"Rotor"],[p,v]],[/(shield[\w ]+) b/i],[d,[u,"Nvidia"],[p,v]],[/(sprint) (\w+)/i],[u,d,[p,g]],[/(kin\.[onetw]{3})/i],[[d,/\./g," "],[u,I],[p,g]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[d,[u,F],[p,v]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[d,[u,F],[p,g]],[/smart-tv.+(samsung)/i],[u,[p,y]],[/hbbtv.+maple;(\d+)/i],[[d,/^/,"SmartTV"],[u,j],[p,y]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[u,O],[p,y]],[/(apple) ?tv/i],[u,[d,S+" TV"],[p,y]],[/crkey/i],[[d,P+"cast"],[u,E],[p,y]],[/droid.+aft(\w+)( bui|\))/i],[d,[u,w],[p,y]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[d,[u,L],[p,y]],[/(bravia[\w ]+)( bui|\))/i],[d,[u,A],[p,y]],[/(mitv-\w{5}) bui/i],[d,[u,N],[p,y]],[/Hbbtv.*(technisat) (.*);/i],[u,d,[p,y]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[u,q],[d,q],[p,y]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[p,y]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[u,d,[p,f]],[/droid.+; (shield) bui/i],[d,[u,"Nvidia"],[p,f]],[/(playstation [345portablevi]+)/i],[d,[u,A],[p,f]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[d,[u,I],[p,f]],[/((pebble))app/i],[u,d,[p,_]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[d,[u,S],[p,_]],[/droid.+; (glass) \d/i],[d,[u,E],[p,_]],[/droid.+; (wt63?0{2,3})\)/i],[d,[u,F],[p,_]],[/(quest( 2| pro)?)/i],[d,[u,B],[p,_]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[u,[p,b]],[/(aeobc)\b/i],[d,[u,w],[p,b]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],[d,[p,g]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[d,[p,v]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[p,v]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[p,g]],[/(android[-\w\. ]{0,9});.+buil/i],[d,[u,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[l,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[l,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[l,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,l]],os:[[/microsoft (windows) (vista|xp)/i],[l,h],[/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i],[l,[h,H,K]],[/windows nt 6\.2; (arm)/i,/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[h,H,K],[l,"Windows"]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[l,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[l,z],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[h,l],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[l,h],[/\(bb(10);/i],[h,[l,R]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[l,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[l,k+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[l,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[h,[l,"watchOS"]],[/crkey\/([\d\.]+)/i],[h,[l,P+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[l,U],h],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[l,h],[/(sunos) ?([\w\.\d]*)/i],[[l,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[l,h]]},Y=function(e,t){if(typeof e===a&&(t=e,e=n),!(this instanceof Y))return new Y(e,t).getResult();var f=typeof r!==s&&r.navigator?r.navigator:n,y=e||(f&&f.userAgent?f.userAgent:""),_=f&&f.userAgentData?f.userAgentData:n,b=t?function(e,t){var r={};for(var n in e)t[n]&&t[n].length%2==0?r[n]=t[n].concat(e[n]):r[n]=e[n];return r}(J,t):J,w=f&&f.userAgent==y;return this.getBrowser=function(){var e={};return e[l]=n,e[h]=n,W.call(e,y,b.browser),e[c]=function(e){return typeof e===o?e.replace(/[^\d\.]/g,"").split(".")[0]:n}(e[h]),w&&f&&f.brave&&typeof f.brave.isBrave==i&&(e[l]="Brave"),e},this.getCPU=function(){var e={};return e[m]=n,W.call(e,y,b.cpu),e},this.getDevice=function(){var e={};return e[u]=n,e[d]=n,e[p]=n,W.call(e,y,b.device),w&&!e[p]&&_&&_.mobile&&(e[p]=g),w&&"Macintosh"==e[d]&&f&&typeof f.standalone!==s&&f.maxTouchPoints&&f.maxTouchPoints>2&&(e[d]="iPad",e[p]=v),e},this.getEngine=function(){var e={};return e[l]=n,e[h]=n,W.call(e,y,b.engine),e},this.getOS=function(){var e={};return e[l]=n,e[h]=n,W.call(e,y,b.os),w&&!e[l]&&_&&"Unknown"!=_.platform&&(e[l]=_.platform.replace(/chrome os/i,U).replace(/macos/i,z)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return y},this.setUA=function(e){return y=typeof e===o&&e.length>500?q(e,500):e,this},this.setUA(y),this};Y.VERSION="1.0.37",Y.BROWSER=V([l,h,c]),Y.CPU=V([m]),Y.DEVICE=V([d,u,p,f,g,y,v,_,b]),Y.ENGINE=Y.OS=V([l,h]),e.exports&&(t=e.exports=Y),t.UAParser=Y;var Q=typeof r!==s&&(r.jQuery||r.Zepto);if(Q&&!Q.ua){var X=new Y;Q.ua=X.getResult(),Q.ua.get=function(){return X.getUA()},Q.ua.set=function(e){X.setUA(e);var t=X.getResult();for(var r in t)Q.ua[r]=t[r]}}}("object"==typeof window?window:Hi)}(Nd,Nd.exports);var Fd=Nd.exports,Bd={},Ud=Hi&&Hi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Bd,"__esModule",{value:!0}),Bd.Logger=void 0;const zd=Ud(Ld),Vd="mediasoup-client";Bd.Logger=class{constructor(e){e?(this._debug=(0,zd.default)(`${Vd}:${e}`),this._warn=(0,zd.default)(`${Vd}:WARN:${e}`),this._error=(0,zd.default)(`${Vd}:ERROR:${e}`)):(this._debug=(0,zd.default)(Vd),this._warn=(0,zd.default)(`${Vd}:WARN`),this._error=(0,zd.default)(`${Vd}: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}};var $d={};function Gd(){}function qd(){qd.init.call(this)}function Wd(e){return void 0===e._maxListeners?qd.defaultMaxListeners:e._maxListeners}function Hd(e,t,r,n){var i,s,a,o;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((s=e._events)?(s.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),s=e._events),a=s[t]):(s=e._events=new Gd,e._eventsCount=0),a){if("function"==typeof a?a=s[t]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),!a.warned&&(i=Wd(e))&&i>0&&a.length>i){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,o=c,"function"==typeof console.warn?console.warn(o):console.log(o)}}else a=s[t]=r,++e._eventsCount;return e}function Kd(e,t,r){var n=!1;function i(){e.removeListener(t,i),n||(n=!0,r.apply(e,arguments))}return i.listener=r,i}function Jd(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function Yd(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}Gd.prototype=Object.create(null),qd.EventEmitter=qd,qd.usingDomains=!1,qd.prototype.domain=void 0,qd.prototype._events=void 0,qd.prototype._maxListeners=void 0,qd.defaultMaxListeners=10,qd.init=function(){this.domain=null,qd.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new Gd,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},qd.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},qd.prototype.getMaxListeners=function(){return Wd(this)},qd.prototype.emit=function(e){var t,r,n,i,s,a,o,c="error"===e;if(a=this._events)c=c&&null==a.error;else if(!c)return!1;if(o=this.domain,c){if(t=arguments[1],!o){if(t instanceof Error)throw t;var d=new Error('Uncaught, unspecified "error" event. ('+t+")");throw d.context=t,d}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=o,t.domainThrown=!1,o.emit("error",t),!1}if(!(r=a[e]))return!1;var l="function"==typeof r;switch(n=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var n=e.length,i=Yd(e,n),s=0;s<n;++s)i[s].call(r)}(r,l,this);break;case 2:!function(e,t,r,n){if(t)e.call(r,n);else for(var i=e.length,s=Yd(e,i),a=0;a<i;++a)s[a].call(r,n)}(r,l,this,arguments[1]);break;case 3:!function(e,t,r,n,i){if(t)e.call(r,n,i);else for(var s=e.length,a=Yd(e,s),o=0;o<s;++o)a[o].call(r,n,i)}(r,l,this,arguments[1],arguments[2]);break;case 4:!function(e,t,r,n,i,s){if(t)e.call(r,n,i,s);else for(var a=e.length,o=Yd(e,a),c=0;c<a;++c)o[c].call(r,n,i,s)}(r,l,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(n-1),s=1;s<n;s++)i[s-1]=arguments[s];!function(e,t,r,n){if(t)e.apply(r,n);else for(var i=e.length,s=Yd(e,i),a=0;a<i;++a)s[a].apply(r,n)}(r,l,this,i)}return!0},qd.prototype.addListener=function(e,t){return Hd(this,e,t,!1)},qd.prototype.on=qd.prototype.addListener,qd.prototype.prependListener=function(e,t){return Hd(this,e,t,!0)},qd.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,Kd(this,e,t)),this},qd.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,Kd(this,e,t)),this},qd.prototype.removeListener=function(e,t){var r,n,i,s,a;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(n=this._events))return this;if(!(r=n[e]))return this;if(r===t||r.listener&&r.listener===t)0==--this._eventsCount?this._events=new Gd:(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,s=r.length;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=r[s].listener,i=s;break}if(i<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new Gd,this;delete n[e]}else!function(e,t){for(var r=t,n=r+1,i=e.length;n<i;r+=1,n+=1)e[r]=e[n];e.pop()}(r,i);n.removeListener&&this.emit("removeListener",e,a||t)}return this},qd.prototype.off=function(e,t){return this.removeListener(e,t)},qd.prototype.removeAllListeners=function(e){var t,r;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=new Gd,this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=new Gd:delete r[e]),this;if(0===arguments.length){for(var n,i=Object.keys(r),s=0;s<i.length;++s)"removeListener"!==(n=i[s])&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events=new Gd,this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(t)do{this.removeListener(e,t[t.length-1])}while(t[0]);return this},qd.prototype.listeners=function(e){var t,r,n=this._events;return r=n&&(t=n[e])?"function"==typeof t?[t.listener||t]:function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(t):[],r},qd.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):Jd.call(e,t)},qd.prototype.listenerCount=Jd,qd.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var Qd=Ji(Object.freeze({__proto__:null,EventEmitter:qd,default:qd}));Object.defineProperty($d,"__esModule",{value:!0}),$d.EnhancedEventEmitter=void 0;const Xd=Qd,Zd=new Bd.Logger("EnhancedEventEmitter");class el extends Xd.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){const r=super.listenerCount(e);try{return super.emit(e,...t)}catch(t){return Zd.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,t),Boolean(r)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}}$d.EnhancedEventEmitter=el;var tl={};Object.defineProperty(tl,"__esModule",{value:!0}),tl.InvalidStateError=tl.UnsupportedError=void 0;class rl extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,rl):this.stack=new Error(e).stack}}tl.UnsupportedError=rl;class nl extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,nl):this.stack=new Error(e).stack}}tl.InvalidStateError=nl;var il={};Object.defineProperty(il,"__esModule",{value:!0}),il.generateRandomNumber=il.clone=void 0,il.clone=function(e,t){return void 0===e?t:JSON.parse(JSON.stringify(e))},il.generateRandomNumber=function(){return Math.round(1e7*Math.random())};var sl={},al={};!function(e){const t=Ld("h264-profile-level-id");t.log=console.info.bind(console);e.ProfileConstrainedBaseline=1,e.ProfileBaseline=2,e.ProfileMain=3,e.ProfileConstrainedHigh=4,e.ProfileHigh=5;const r=0,n=10;e.Level1_b=r,e.Level1=n,e.Level1_1=11,e.Level1_2=12,e.Level1_3=13,e.Level2=20,e.Level2_1=21,e.Level2_2=22,e.Level3=30,e.Level3_1=31,e.Level3_2=32,e.Level4=40,e.Level4_1=41,e.Level4_2=42,e.Level5=50,e.Level5_1=51,e.Level5_2=52;class i{constructor(e,t){this.profile=e,this.level=t}}e.ProfileLevelId=i;const s=new i(1,31);class a{constructor(e){this._mask=~d("x",e),this._maskedValue=d("1",e)}isMatch(e){return this._maskedValue===(e&this._mask)}}class o{constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}}const c=[new o(66,new a("x1xx0000"),1),new o(77,new a("1xxx0000"),1),new o(88,new a("11xx0000"),1),new o(66,new a("x0xx0000"),2),new o(88,new a("10xx0000"),2),new o(77,new a("0x0x0000"),3),new o(100,new a("00000000"),5),new o(100,new a("00001100"),4)];function d(e,t){return(t[0]===e)<<7|(t[1]===e)<<6|(t[2]===e)<<5|(t[3]===e)<<4|(t[4]===e)<<3|(t[5]===e)<<2|(t[6]===e)<<1|(t[7]===e)<<0}function l(e={}){const t=e["level-asymmetry-allowed"];return 1===t||"1"===t}e.parseProfileLevelId=function(e){if("string"!=typeof e||6!==e.length)return null;const s=parseInt(e,16);if(0===s)return null;const a=255&s,o=s>>8&255,d=s>>16&255;let l;switch(a){case 11:l=0!=(16&o)?r:11;break;case n:case 12:case 13:case 20:case 21:case 22:case 30:case 31:case 32:case 40:case 41:case 42:case 50:case 51:case 52:l=a;break;default:return t("parseProfileLevelId() | unrecognized level_idc:%s",a),null}for(const e of c)if(d===e.profile_idc&&e.profile_iop.isMatch(o))return new i(e.profile,l);return t("parseProfileLevelId() | unrecognized profile_idc/profile_iop combination"),null},e.profileLevelIdToString=function(e){if(e.level==r)switch(e.profile){case 1:return"42f00b";case 2:return"42100b";case 3:return"4d100b";default:return t("profileLevelIdToString() | Level 1_b not is allowed for profile:%s",e.profile),null}let n;switch(e.profile){case 1:n="42e0";break;case 2:n="4200";break;case 3:n="4d00";break;case 4:n="640c";break;case 5:n="6400";break;default:return t("profileLevelIdToString() | unrecognized profile:%s",e.profile),null}let i=e.level.toString(16);return 1===i.length&&(i=`0${i}`),`${n}${i}`},e.parseSdpProfileLevelId=function(t={}){const r=t["profile-level-id"];return r?e.parseProfileLevelId(r):s},e.isSameProfile=function(t={},r={}){const n=e.parseSdpProfileLevelId(t),i=e.parseSdpProfileLevelId(r);return Boolean(n&&i&&n.profile===i.profile)},e.generateProfileLevelIdForAnswer=function(s={},a={}){if(!s["profile-level-id"]&&!a["profile-level-id"])return t("generateProfileLevelIdForAnswer() | no profile-level-id in local and remote params"),null;const o=e.parseSdpProfileLevelId(s),c=e.parseSdpProfileLevelId(a);if(!o)throw new TypeError("invalid local_profile_level_id");if(!c)throw new TypeError("invalid remote_profile_level_id");if(o.profile!==c.profile)throw new TypeError("H264 Profile mismatch");const d=l(s)&&l(a),p=o.level,u=c.level,h=function(e,t){return e===r?t!==n&&t!==r:t===r?e!==n:e<t}(m=p,f=u)?m:f;var m,f;const g=d?p:h;return t("generateProfileLevelIdForAnswer() | result: [profile:%s, level:%s]",o.profile,g),e.profileLevelIdToString(new i(o.profile,g))}}(al);var ol=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),cl=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),dl=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ol(t,e,r);return cl(t,e),t};Object.defineProperty(sl,"__esModule",{value:!0}),sl.canReceive=sl.canSend=sl.generateProbatorRtpParameters=sl.reduceCodecs=sl.getSendingRemoteRtpParameters=sl.getSendingRtpParameters=sl.getRecvRtpCapabilities=sl.getExtendedRtpCapabilities=sl.validateSctpStreamParameters=sl.validateSctpParameters=sl.validateNumSctpStreams=sl.validateSctpCapabilities=sl.validateRtcpParameters=sl.validateRtpEncodingParameters=sl.validateRtpHeaderExtensionParameters=sl.validateRtpCodecParameters=sl.validateRtpParameters=sl.validateRtpHeaderExtension=sl.validateRtcpFeedback=sl.validateRtpCodecCapability=sl.validateRtpCapabilities=void 0;const ll=dl(al),pl=dl(il);function ul(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if(e.kind=r[1].toLowerCase(),e.preferredPayloadType&&"number"!=typeof e.preferredPayloadType)throw new TypeError("invalid codec.preferredPayloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===e.kind?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError(`invalid codec parameter [key:${t}s, value:${r}]`);if("apt"===t&&"number"!=typeof r)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const t of e.rtcpFeedback)hl(t)}function hl(e){if("object"!=typeof e)throw new TypeError("fb is not an object");if(!e.type||"string"!=typeof e.type)throw new TypeError("missing fb.type");e.parameter&&"string"==typeof e.parameter||(e.parameter="")}function ml(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if("audio"!==e.kind&&"video"!==e.kind)throw new TypeError("invalid ext.kind");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.preferredId)throw new TypeError("missing ext.preferredId");if(e.preferredEncrypt&&"boolean"!=typeof e.preferredEncrypt)throw new TypeError("invalid ext.preferredEncrypt");if(e.preferredEncrypt||(e.preferredEncrypt=!1),e.direction&&"string"!=typeof e.direction)throw new TypeError("invalid ext.direction");e.direction||(e.direction="sendrecv")}function fl(e){if("object"!=typeof e)throw new TypeError("params is not an object");if(e.mid&&"string"!=typeof e.mid)throw new TypeError("params.mid is not a string");if(!Array.isArray(e.codecs))throw new TypeError("missing params.codecs");for(const t of e.codecs)gl(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("params.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)vl(t);if(e.encodings&&!Array.isArray(e.encodings))throw new TypeError("params.encodings is not an array");e.encodings||(e.encodings=[]);for(const t of e.encodings)yl(t);if(e.rtcp&&"object"!=typeof e.rtcp)throw new TypeError("params.rtcp is not an object");e.rtcp||(e.rtcp={}),_l(e.rtcp)}function gl(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if("number"!=typeof e.payloadType)throw new TypeError("missing codec.payloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===r[1].toLowerCase()?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError(`invalid codec parameter [key:${t}s, value:${r}]`);if("apt"===t&&"number"!=typeof r)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const t of e.rtcpFeedback)hl(t)}function vl(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.id)throw new TypeError("missing ext.id");if(e.encrypt&&"boolean"!=typeof e.encrypt)throw new TypeError("invalid ext.encrypt");e.encrypt||(e.encrypt=!1),e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError("invalid header extension parameter")}}function yl(e){if("object"!=typeof e)throw new TypeError("encoding is not an object");if(e.ssrc&&"number"!=typeof e.ssrc)throw new TypeError("invalid encoding.ssrc");if(e.rid&&"string"!=typeof e.rid)throw new TypeError("invalid encoding.rid");if(e.rtx&&"object"!=typeof e.rtx)throw new TypeError("invalid encoding.rtx");if(e.rtx&&"number"!=typeof e.rtx.ssrc)throw new TypeError("missing encoding.rtx.ssrc");if(e.dtx&&"boolean"==typeof e.dtx||(e.dtx=!1),e.scalabilityMode&&"string"!=typeof e.scalabilityMode)throw new TypeError("invalid encoding.scalabilityMode")}function _l(e){if("object"!=typeof e)throw new TypeError("rtcp is not an object");if(e.cname&&"string"!=typeof e.cname)throw new TypeError("invalid rtcp.cname");e.reducedSize&&"boolean"==typeof e.reducedSize||(e.reducedSize=!0)}function bl(e){if("object"!=typeof e)throw new TypeError("numStreams is not an object");if("number"!=typeof e.OS)throw new TypeError("missing numStreams.OS");if("number"!=typeof e.MIS)throw new TypeError("missing numStreams.MIS")}function wl(e){return!!e&&/.+\/rtx$/i.test(e.mimeType)}function Sl(e,t,{strict:r=!1,modify:n=!1}={}){const i=e.mimeType.toLowerCase();if(i!==t.mimeType.toLowerCase())return!1;if(e.clockRate!==t.clockRate)return!1;if(e.channels!==t.channels)return!1;switch(i){case"video/h264":if(r){if((e.parameters["packetization-mode"]||0)!==(t.parameters["packetization-mode"]||0))return!1;if(!ll.isSameProfile(e.parameters,t.parameters))return!1;let r;try{r=ll.generateProfileLevelIdForAnswer(e.parameters,t.parameters)}catch(e){return!1}n&&(r?(e.parameters["profile-level-id"]=r,t.parameters["profile-level-id"]=r):(delete e.parameters["profile-level-id"],delete t.parameters["profile-level-id"]))}break;case"video/vp9":if(r){if((e.parameters["profile-id"]||0)!==(t.parameters["profile-id"]||0))return!1}}return!0}function Cl(e,t){return(!e.kind||!t.kind||e.kind===t.kind)&&e.uri===t.uri}function Rl(e,t){const r=[];for(const n of e.rtcpFeedback||[]){const e=(t.rtcpFeedback||[]).find((e=>e.type===n.type&&(e.parameter===n.parameter||!e.parameter&&!n.parameter)));e&&r.push(e)}return r}sl.validateRtpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(e.codecs&&!Array.isArray(e.codecs))throw new TypeError("caps.codecs is not an array");e.codecs||(e.codecs=[]);for(const t of e.codecs)ul(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)ml(t)},sl.validateRtpCodecCapability=ul,sl.validateRtcpFeedback=hl,sl.validateRtpHeaderExtension=ml,sl.validateRtpParameters=fl,sl.validateRtpCodecParameters=gl,sl.validateRtpHeaderExtensionParameters=vl,sl.validateRtpEncodingParameters=yl,sl.validateRtcpParameters=_l,sl.validateSctpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(!e.numStreams||"object"!=typeof e.numStreams)throw new TypeError("missing caps.numStreams");bl(e.numStreams)},sl.validateNumSctpStreams=bl,sl.validateSctpParameters=function(e){if("object"!=typeof e)throw new TypeError("params is not an object");if("number"!=typeof e.port)throw new TypeError("missing params.port");if("number"!=typeof e.OS)throw new TypeError("missing params.OS");if("number"!=typeof e.MIS)throw new TypeError("missing params.MIS");if("number"!=typeof e.maxMessageSize)throw new TypeError("missing params.maxMessageSize")},sl.validateSctpStreamParameters=function(e){if("object"!=typeof e)throw new TypeError("params is not an object");if("number"!=typeof e.streamId)throw new TypeError("missing params.streamId");let t=!1;if("boolean"==typeof e.ordered?t=!0:e.ordered=!0,e.maxPacketLifeTime&&"number"!=typeof e.maxPacketLifeTime)throw new TypeError("invalid params.maxPacketLifeTime");if(e.maxRetransmits&&"number"!=typeof e.maxRetransmits)throw new TypeError("invalid params.maxRetransmits");if(e.maxPacketLifeTime&&e.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(t&&e.ordered&&(e.maxPacketLifeTime||e.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(t||!e.maxPacketLifeTime&&!e.maxRetransmits||(e.ordered=!1),e.label&&"string"!=typeof e.label)throw new TypeError("invalid params.label");if(e.protocol&&"string"!=typeof e.protocol)throw new TypeError("invalid params.protocol")},sl.getExtendedRtpCapabilities=function(e,t){const r={codecs:[],headerExtensions:[]};for(const n of t.codecs||[]){if(wl(n))continue;const t=(e.codecs||[]).find((e=>Sl(e,n,{strict:!0,modify:!0})));if(!t)continue;const i={mimeType:t.mimeType,kind:t.kind,clockRate:t.clockRate,channels:t.channels,localPayloadType:t.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:t.parameters,remoteParameters:n.parameters,rtcpFeedback:Rl(t,n)};r.codecs.push(i)}for(const n of r.codecs){const r=e.codecs.find((e=>wl(e)&&e.parameters.apt===n.localPayloadType)),i=t.codecs.find((e=>wl(e)&&e.parameters.apt===n.remotePayloadType));r&&i&&(n.localRtxPayloadType=r.preferredPayloadType,n.remoteRtxPayloadType=i.preferredPayloadType)}for(const n of t.headerExtensions){const t=e.headerExtensions.find((e=>Cl(e,n)));if(!t)continue;const i={kind:n.kind,uri:n.uri,sendId:t.preferredId,recvId:n.preferredId,encrypt:t.preferredEncrypt,direction:"sendrecv"};switch(n.direction){case"sendrecv":i.direction="sendrecv";break;case"recvonly":i.direction="sendonly";break;case"sendonly":i.direction="recvonly";break;case"inactive":i.direction="inactive"}r.headerExtensions.push(i)}return r},sl.getRecvRtpCapabilities=function(e){const t={codecs:[],headerExtensions:[]};for(const r of e.codecs){const e={mimeType:r.mimeType,kind:r.kind,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(e),!r.remoteRtxPayloadType)continue;const n={mimeType:`${r.kind}/rtx`,kind:r.kind,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(const r of e.headerExtensions){if("sendrecv"!==r.direction&&"recvonly"!==r.direction)continue;const e={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt,direction:r.direction};t.headerExtensions.push(e)}return t},sl.getSendingRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const n of t.codecs){if(n.kind!==e)continue;const t={mimeType:n.mimeType,payloadType:n.localPayloadType,clockRate:n.clockRate,channels:n.channels,parameters:n.localParameters,rtcpFeedback:n.rtcpFeedback};if(r.codecs.push(t),n.localRtxPayloadType){const e={mimeType:`${n.kind}/rtx`,payloadType:n.localRtxPayloadType,clockRate:n.clockRate,parameters:{apt:n.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const n of t.headerExtensions){if(n.kind&&n.kind!==e||"sendrecv"!==n.direction&&"sendonly"!==n.direction)continue;const t={uri:n.uri,id:n.sendId,encrypt:n.encrypt,parameters:{}};r.headerExtensions.push(t)}return r},sl.getSendingRemoteRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const n of t.codecs){if(n.kind!==e)continue;const t={mimeType:n.mimeType,payloadType:n.localPayloadType,clockRate:n.clockRate,channels:n.channels,parameters:n.remoteParameters,rtcpFeedback:n.rtcpFeedback};if(r.codecs.push(t),n.localRtxPayloadType){const e={mimeType:`${n.kind}/rtx`,payloadType:n.localRtxPayloadType,clockRate:n.clockRate,parameters:{apt:n.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const n of t.headerExtensions){if(n.kind&&n.kind!==e||"sendrecv"!==n.direction&&"sendonly"!==n.direction)continue;const t={uri:n.uri,id:n.sendId,encrypt:n.encrypt,parameters:{}};r.headerExtensions.push(t)}if(r.headerExtensions.some((e=>"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"===e.uri)))for(const e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter((e=>"goog-remb"!==e.type));else if(r.headerExtensions.some((e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"===e.uri)))for(const e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter((e=>"transport-cc"!==e.type));else for(const e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter((e=>"transport-cc"!==e.type&&"goog-remb"!==e.type));return r},sl.reduceCodecs=function(e,t){const r=[];if(t){for(let n=0;n<e.length;++n)if(Sl(e[n],t)){r.push(e[n]),wl(e[n+1])&&r.push(e[n+1]);break}if(0===r.length)throw new TypeError("no matching codec found")}else r.push(e[0]),wl(e[1])&&r.push(e[1]);return r},sl.generateProbatorRtpParameters=function(e){fl(e=pl.clone(e,{}));const t={mid:"probator",codecs:[],headerExtensions:[],encodings:[{ssrc:1234}],rtcp:{cname:"probator"}};return t.codecs.push(e.codecs[0]),t.codecs[0].payloadType=127,t.headerExtensions=e.headerExtensions,t},sl.canSend=function(e,t){return t.codecs.some((t=>t.kind===e))},sl.canReceive=function(e,t){if(fl(e),0===e.codecs.length)return!1;const r=e.codecs[0];return t.codecs.some((e=>e.remotePayloadType===r.payloadType))};var Tl={},Pl={},kl={};Object.defineProperty(kl,"__esModule",{value:!0}),kl.Logger=void 0;const El=Ld,Dl="awaitqueue";kl.Logger=class{constructor(e){e?(this._debug=(0,El.default)(`${Dl}:${e}`),this._warn=(0,El.default)(`${Dl}:WARN:${e}`),this._error=(0,El.default)(`${Dl}:ERROR:${e}`)):(this._debug=(0,El.default)(Dl),this._warn=(0,El.default)(`${Dl}:WARN`),this._error=(0,El.default)(`${Dl}: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}},Object.defineProperty(Pl,"__esModule",{value:!0}),Pl.AwaitQueue=Pl.AwaitQueueRemovedTaskError=Pl.AwaitQueueStoppedError=void 0;const Ol=new kl.Logger;class Il extends Error{constructor(e){super(e??"AwaitQueue stopped"),this.name="AwaitQueueStoppedError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,Il)}}Pl.AwaitQueueStoppedError=Il;class xl extends Error{constructor(e){super(e??"AwaitQueue task removed"),this.name="AwaitQueueRemovedTaskError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,xl)}}Pl.AwaitQueueRemovedTaskError=xl;
|
|
2
2
|
/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
3
|
-
let Ml;Pl.AwaitQueue=class{constructor(){this.pendingTasks=new Map,this.nextTaskId=0,this.stopping=!1}get size(){return this.pendingTasks.size}async push(e,t){if(t=t??e.name,Ol.debug(`push() [name:${t}]`),"function"!=typeof e)throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch(e){}return new Promise(((r,n)=>{const i={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:e=>{if(i.completed)return;i.completed=!0,this.pendingTasks.delete(i.id),Ol.debug(`resolving task [name:${i.name}]`),r(e);const[t]=this.pendingTasks.values();t&&!t.executedAt&&this.execute(t)},reject:e=>{if(!i.completed&&(i.completed=!0,this.pendingTasks.delete(i.id),Ol.debug(`rejecting task [name:${i.name}]: %s`,String(e)),n(e),!this.stopping)){const[e]=this.pendingTasks.values();e&&!e.executedAt&&this.execute(e)}}};this.pendingTasks.set(i.id,i),1===this.pendingTasks.size&&this.execute(i)}))}stop(){Ol.debug("stop()"),this.stopping=!0;for(const e of this.pendingTasks.values())Ol.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Il);this.stopping=!1}remove(e){Ol.debug(`remove() [taskIdx:${e}]`);const t=Array.from(this.pendingTasks.values())[e];t?t.reject(new xl):Ol.debug(`stop() | no task with given idx [taskIdx:${e}]`)}dump(){const e=Date.now();let t=0;return Array.from(this.pendingTasks.values()).map((r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0})))}async execute(e){if(Ol.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{const t=await e.task();e.resolve(t)}catch(t){e.reject(t)}}};var jl="function"==typeof queueMicrotask?queueMicrotask.bind("undefined"!=typeof window?window:Ki):e=>(Ml||(Ml=Promise.resolve())).then(e).catch((e=>setTimeout((()=>{throw e}),0))),Ll={};Object.defineProperty(Ll,"__esModule",{value:!0}),Ll.Producer=void 0;const Al=$d,Nl=tl,Fl=new Bd.Logger("Producer");class Bl extends Al.EnhancedEventEmitter{constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:s,disableTrackOnPause:a,zeroRtpOnPause:o,appData:c}){super(),this._closed=!1,this._observer=new Al.EnhancedEventEmitter,Fl.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=!!a&&!n.enabled,this._maxSpatialLayer=void 0,this._stopTracks=s,this._disableTrackOnPause=a,this._zeroRtpOnPause=o,this._appData=c||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Fl.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(Fl.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Nl.InvalidStateError("closed");return new Promise(((e,t)=>{this.safeEmit("@getstats",e,t)}))}pause(){Fl.debug("pause()"),this._closed?Fl.error("pause() | Producer closed"):(this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise(((e,t)=>{this.safeEmit("@pause",e,t)})).catch((()=>{})),this._observer.safeEmit("pause"))}resume(){Fl.debug("resume()"),this._closed?Fl.error("resume() | Producer closed"):(this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise(((e,t)=>{this.safeEmit("@resume",e,t)})).catch((()=>{})),this._observer.safeEmit("resume"))}async replaceTrack({track:e}){if(Fl.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch(e){}throw new Nl.InvalidStateError("closed")}if(e&&"ended"===e.readyState)throw new Nl.InvalidStateError("track ended");e!==this._track?(await new Promise(((t,r)=>{this.safeEmit("@replacetrack",e,t,r)})),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()):Fl.debug("replaceTrack() | same track, ignored")}async setMaxSpatialLayer(e){if(this._closed)throw new Nl.InvalidStateError("closed");if("video"!==this._kind)throw new Nl.UnsupportedError("not a video Producer");if("number"!=typeof e)throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise(((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)})).catch((()=>{})),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Nl.InvalidStateError("closed");if("object"!=typeof e)throw new TypeError("invalid params");await new Promise(((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)}))}onTrackEnded(){Fl.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(e){}}}Ll.Producer=Bl;var Ul={};Object.defineProperty(Ul,"__esModule",{value:!0}),Ul.Consumer=void 0;const zl=$d,Vl=tl,$l=new Bd.Logger("Consumer");class ql extends zl.EnhancedEventEmitter{constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:s,appData:a}){super(),this._closed=!1,this._observer=new zl.EnhancedEventEmitter,$l.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=s,this._paused=!i.enabled,this._appData=a||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||($l.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||($l.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Vl.InvalidStateError("closed");return new Promise(((e,t)=>{this.safeEmit("@getstats",e,t)}))}pause(){$l.debug("pause()"),this._closed?$l.error("pause() | Consumer closed"):this._paused?$l.debug("pause() | Consumer is already paused"):(this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause"))}resume(){$l.debug("resume()"),this._closed?$l.error("resume() | Consumer closed"):this._paused?(this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")):$l.debug("resume() | Consumer is already resumed")}onTrackEnded(){$l.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(e){}}}Ul.Consumer=ql;var Gl={};Object.defineProperty(Gl,"__esModule",{value:!0}),Gl.DataProducer=void 0;const Wl=$d,Kl=tl,Jl=new Bd.Logger("DataProducer");class Hl extends Wl.EnhancedEventEmitter{constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),this._closed=!1,this._observer=new Wl.EnhancedEventEmitter,Jl.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=n||{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Jl.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(Jl.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(Jl.debug("send()"),this._closed)throw new Kl.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",(()=>{this._closed||(Jl.debug('DataChannel "open" event'),this.safeEmit("open"))})),this._dataChannel.addEventListener("error",(e=>{if(this._closed)return;let{error:t}=e;t||(t=new Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?Jl.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):Jl.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)})),this._dataChannel.addEventListener("close",(()=>{this._closed||(Jl.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))})),this._dataChannel.addEventListener("message",(()=>{this._closed||Jl.warn('DataChannel "message" event in a DataProducer, message discarded')})),this._dataChannel.addEventListener("bufferedamountlow",(()=>{this._closed||this.safeEmit("bufferedamountlow")}))}}Gl.DataProducer=Hl;var Yl={};Object.defineProperty(Yl,"__esModule",{value:!0}),Yl.DataConsumer=void 0;const Ql=$d,Xl=new Bd.Logger("DataConsumer");class Zl extends Ql.EnhancedEventEmitter{constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),this._closed=!1,this._observer=new Ql.EnhancedEventEmitter,Xl.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=n,this._appData=i||{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Xl.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(Xl.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",(()=>{this._closed||(Xl.debug('DataChannel "open" event'),this.safeEmit("open"))})),this._dataChannel.addEventListener("error",(e=>{if(this._closed)return;let{error:t}=e;t||(t=new Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?Xl.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):Xl.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)})),this._dataChannel.addEventListener("close",(()=>{this._closed||(Xl.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)}))}}Yl.DataConsumer=Zl;var ep=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),tp=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),rp=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ep(t,e,r);return tp(t,e),t},np=Ki&&Ki.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Tl,"__esModule",{value:!0}),Tl.Transport=void 0;const ip=Pl,sp=np(jl),ap=Bd,op=$d,cp=tl,dp=rp(il),lp=rp(sl),pp=Ll,up=Ul,hp=Gl,mp=Yl,fp=new ap.Logger("Transport");class gp{constructor(e){this.consumerOptions=e,this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}class vp extends op.EnhancedEventEmitter{constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,appData:l,handlerFactory:p,extendedRtpCapabilities:u,canProduceByKind:h}){super(),this._closed=!1,this._iceGatheringState="new",this._connectionState="new",this._producers=new Map,this._consumers=new Map,this._dataProducers=new Map,this._dataConsumers=new Map,this._probatorConsumerCreated=!1,this._awaitQueue=new ip.AwaitQueue,this._pendingConsumerTasks=[],this._consumerCreationInProgress=!1,this._pendingPauseConsumers=new Map,this._consumerPauseInProgress=!1,this._pendingResumeConsumers=new Map,this._consumerResumeInProgress=!1,this._pendingCloseConsumers=new Map,this._consumerCloseInProgress=!1,this._observer=new op.EnhancedEventEmitter,fp.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._extendedRtpCapabilities=u,this._canProduceByKind=h,this._maxSctpMessageSize=s?s.maxMessageSize:null,delete(c=dp.clone(c,{})).iceServers,delete c.iceTransportPolicy,delete c.bundlePolicy,delete c.rtcpMuxPolicy,delete c.sdpSemantics,this._handler=p(),this._handler.run({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:u}),this._appData=l||{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){fp.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(const e of this._producers.values())e.transportClosed();this._producers.clear();for(const e of this._consumers.values())e.transportClosed();this._consumers.clear();for(const e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(const e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close")}}async getStats(){if(this._closed)throw new cp.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(fp.debug("restartIce()"),this._closed)throw new cp.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push((async()=>await this._handler.restartIce(e)),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(fp.debug("updateIceServers()"),this._closed)throw new cp.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push((async()=>this._handler.updateIceServers(e)),"transport.updateIceServers()")}async produce({track:e,encodings:t,codecOptions:r,codec:n,stopTracks:i=!0,disableTrackOnPause:s=!0,zeroRtpOnPause:a=!1,appData:o={}}={}){if(fp.debug("produce() [track:%o]",e),this._closed)throw new cp.InvalidStateError("closed");if(!e)throw new TypeError("missing track");if("send"!==this._direction)throw new cp.UnsupportedError("not a sending Transport");if(!this._canProduceByKind[e.kind])throw new cp.UnsupportedError(`cannot produce ${e.kind}`);if("ended"===e.readyState)throw new cp.InvalidStateError("track ended");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("produce"))throw new TypeError('no "produce" listener set into this transport');if(o&&"object"!=typeof o)throw new TypeError("if given, appData must be an object");return this._awaitQueue.push((async()=>{let c;if(t&&!Array.isArray(t))throw TypeError("encodings must be an array");t&&0===t.length?c=void 0:t&&(c=t.map((e=>{const t={active:!0};return!1===e.active&&(t.active=!1),"boolean"==typeof e.dtx&&(t.dtx=e.dtx),"string"==typeof e.scalabilityMode&&(t.scalabilityMode=e.scalabilityMode),"number"==typeof e.scaleResolutionDownBy&&(t.scaleResolutionDownBy=e.scaleResolutionDownBy),"number"==typeof e.maxBitrate&&(t.maxBitrate=e.maxBitrate),"number"==typeof e.maxFramerate&&(t.maxFramerate=e.maxFramerate),"boolean"==typeof e.adaptivePtime&&(t.adaptivePtime=e.adaptivePtime),"string"==typeof e.priority&&(t.priority=e.priority),"string"==typeof e.networkPriority&&(t.networkPriority=e.networkPriority),t})));const{localId:d,rtpParameters:l,rtpSender:p}=await this._handler.send({track:e,encodings:c,codecOptions:r,codec:n});try{lp.validateRtpParameters(l);const{id:t}=await new Promise(((t,r)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:l,appData:o},t,r)})),r=new pp.Producer({id:t,localId:d,rtpSender:p,track:e,rtpParameters:l,stopTracks:i,disableTrackOnPause:s,zeroRtpOnPause:a,appData:o});return this._producers.set(r.id,r),this.handleProducer(r),this._observer.safeEmit("newproducer",r),r}catch(e){throw this._handler.stopSending(d).catch((()=>{})),e}}),"transport.produce()").catch((t=>{if(i)try{e.stop()}catch(e){}throw t}))}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,appData:s={}}){if(fp.debug("consume()"),n=dp.clone(n,void 0),this._closed)throw new cp.InvalidStateError("closed");if("recv"!==this._direction)throw new cp.UnsupportedError("not a receiving Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing producerId");if("audio"!==r&&"video"!==r)throw new TypeError(`invalid kind '${r}'`);if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(s&&"object"!=typeof s)throw new TypeError("if given, appData must be an object");if(!lp.canReceive(n,this._extendedRtpCapabilities))throw new cp.UnsupportedError("cannot consume this Producer");const a=new gp({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,appData:s});return this._pendingConsumerTasks.push(a),(0,sp.default)((()=>{this._closed||!1===this._consumerCreationInProgress&&this.createPendingConsumers()})),a.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:n="",protocol:i="",appData:s={}}={}){if(fp.debug("produceData()"),this._closed)throw new cp.InvalidStateError("closed");if("send"!==this._direction)throw new cp.UnsupportedError("not a sending Transport");if(!this._maxSctpMessageSize)throw new cp.UnsupportedError("SCTP not enabled by remote Transport");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("producedata"))throw new TypeError('no "producedata" listener set into this transport');if(s&&"object"!=typeof s)throw new TypeError("if given, appData must be an object");return(t||r)&&(e=!1),this._awaitQueue.push((async()=>{const{dataChannel:a,sctpStreamParameters:o}=await this._handler.sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i});lp.validateSctpStreamParameters(o);const{id:c}=await new Promise(((e,t)=>{this.safeEmit("producedata",{sctpStreamParameters:o,label:n,protocol:i,appData:s},e,t)})),d=new hp.DataProducer({id:c,dataChannel:a,sctpStreamParameters:o,appData:s});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d}),"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:n="",protocol:i="",appData:s={}}){if(fp.debug("consumeData()"),r=dp.clone(r,void 0),this._closed)throw new cp.InvalidStateError("closed");if("recv"!==this._direction)throw new cp.UnsupportedError("not a receiving Transport");if(!this._maxSctpMessageSize)throw new cp.UnsupportedError("SCTP not enabled by remote Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing dataProducerId");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(s&&"object"!=typeof s)throw new TypeError("if given, appData must be an object");return lp.validateSctpStreamParameters(r),this._awaitQueue.push((async()=>{const{dataChannel:a}=await this._handler.receiveDataChannel({sctpStreamParameters:r,label:n,protocol:i}),o=new mp.DataConsumer({id:e,dataProducerId:t,dataChannel:a,sctpStreamParameters:r,appData:s});return this._dataConsumers.set(o.id,o),this.handleDataConsumer(o),this._observer.safeEmit("newdataconsumer",o),o}),"transport.consumeData()")}async createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingConsumerTasks.length)return void fp.debug("createPendingConsumers() | there is no Consumer to be created");const e=[...this._pendingConsumerTasks];let t;this._pendingConsumerTasks=[];const r=[];for(const t of e){const{id:e,kind:n,rtpParameters:i,streamId:s}=t.consumerOptions;r.push({trackId:e,kind:n,rtpParameters:i,streamId:s})}try{const n=await this._handler.receive(r);for(let r=0;r<n.length;++r){const i=e[r],s=n[r],{id:a,producerId:o,kind:c,rtpParameters:d,appData:l}=i.consumerOptions,{localId:p,rtpReceiver:u,track:h}=s,m=new up.Consumer({id:a,localId:p,producerId:o,rtpReceiver:u,track:h,rtpParameters:d,appData:l});this._consumers.set(m.id,m),this.handleConsumer(m),this._probatorConsumerCreated||t||"video"!==c||(t=m),this._observer.safeEmit("newconsumer",m),i.resolve(m)}}catch(t){for(const r of e)r.reject(t)}if(t)try{const e=lp.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:e}]),fp.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(e){fp.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",e)}}),"transport.createPendingConsumers()").then((()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()})).catch((()=>{}))}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingPauseConsumers.size)return void fp.debug("pausePendingConsumers() | there is no Consumer to be paused");const e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{const t=e.map((e=>e.localId));await this._handler.pauseReceiving(t)}catch(e){fp.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(0===this._pendingResumeConsumers.size)return void fp.debug("resumePendingConsumers() | there is no Consumer to be resumed");const e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{const t=e.map((e=>e.localId));await this._handler.resumeReceiving(t)}catch(e){fp.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()=>{if(0===this._pendingCloseConsumers.size)return void fp.debug("closePendingConsumers() | there is no Consumer to be closed");const e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map((e=>e.localId)))}catch(e){fp.error("closePendingConsumers() | failed to close Consumers:",e)}}),"transport.closePendingConsumers").then((()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()})).catch((()=>{}))}handleHandler(){const e=this._handler;e.on("@connect",(({dtlsParameters:e},t,r)=>{this._closed?r(new cp.InvalidStateError("closed")):this.safeEmit("connect",{dtlsParameters:e},t,r)})),e.on("@icegatheringstatechange",(e=>{e!==this._iceGatheringState&&(fp.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))})),e.on("@connectionstatechange",(e=>{e!==this._connectionState&&(fp.debug("connection state changed to %s",e),this._connectionState=e,this._closed||this.safeEmit("connectionstatechange",e))}))}handleProducer(e){e.on("@close",(()=>{this._producers.delete(e.id),this._closed||this._awaitQueue.push((async()=>await this._handler.stopSending(e.localId)),"producer @close event").catch((e=>fp.warn("producer.close() failed:%o",e)))})),e.on("@pause",((t,r)=>{this._awaitQueue.push((async()=>await this._handler.pauseSending(e.localId)),"producer @pause event").then(t).catch(r)})),e.on("@resume",((t,r)=>{this._awaitQueue.push((async()=>await this._handler.resumeSending(e.localId)),"producer @resume event").then(t).catch(r)})),e.on("@replacetrack",((t,r,n)=>{this._awaitQueue.push((async()=>await this._handler.replaceTrack(e.localId,t)),"producer @replacetrack event").then(r).catch(n)})),e.on("@setmaxspatiallayer",((t,r,n)=>{this._awaitQueue.push((async()=>await this._handler.setMaxSpatialLayer(e.localId,t)),"producer @setmaxspatiallayer event").then(r).catch(n)})),e.on("@setrtpencodingparameters",((t,r,n)=>{this._awaitQueue.push((async()=>await this._handler.setRtpEncodingParameters(e.localId,t)),"producer @setrtpencodingparameters event").then(r).catch(n)})),e.on("@getstats",((t,r)=>{if(this._closed)return r(new cp.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)}))}handleConsumer(e){e.on("@close",(()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),this._closed||(this._pendingCloseConsumers.set(e.id,e),!1===this._consumerCloseInProgress&&this.closePendingConsumers())})),e.on("@pause",(()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),(0,sp.default)((()=>{this._closed||!1===this._consumerPauseInProgress&&this.pausePendingConsumers()}))})),e.on("@resume",(()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),(0,sp.default)((()=>{this._closed||!1===this._consumerResumeInProgress&&this.resumePendingConsumers()}))})),e.on("@getstats",((t,r)=>{if(this._closed)return r(new cp.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)}))}handleDataProducer(e){e.on("@close",(()=>{this._dataProducers.delete(e.id)}))}handleDataConsumer(e){e.on("@close",(()=>{this._dataConsumers.delete(e.id)}))}}Tl.Transport=vp;var yp={},_p={},bp=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),wp=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Sp=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&bp(t,e,r);return wp(t,e),t};Object.defineProperty(_p,"__esModule",{value:!0}),_p.applyCodecParameters=_p.getCname=_p.extractDtlsParameters=_p.extractRtpCapabilities=void 0;const Cp=Sp(hc);_p.extractRtpCapabilities=function({sdpObject:e}){const t=new Map,r=[];let n=!1,i=!1;for(const s of e.media){const e=s.type;switch(e){case"audio":if(n)continue;n=!0;break;case"video":if(i)continue;i=!0;break;default:continue}for(const r of s.rtp){const n={kind:e,mimeType:`${e}/${r.codec}`,preferredPayloadType:r.payload,clockRate:r.rate,channels:r.encoding,parameters:{},rtcpFeedback:[]};t.set(n.preferredPayloadType,n)}for(const e of s.fmtp||[]){const r=Cp.parseParams(e.config),n=t.get(e.payload);n&&(r&&r.hasOwnProperty("profile-level-id")&&(r["profile-level-id"]=String(r["profile-level-id"])),n.parameters=r)}for(const r of s.rtcpFb||[]){const n={type:r.type,parameter:r.subtype};if(n.parameter||delete n.parameter,"*"!==r.payload){const e=t.get(r.payload);if(!e)continue;e.rtcpFeedback.push(n)}else for(const r of t.values())r.kind!==e||/.+\/rtx$/i.test(r.mimeType)||r.rtcpFeedback.push(n)}for(const t of s.ext||[]){if(t["encrypt-uri"])continue;const n={kind:e,uri:t.uri,preferredId:t.value};r.push(n)}}return{codecs:Array.from(t.values()),headerExtensions:r}},_p.extractDtlsParameters=function({sdpObject:e}){let t,r=e.setup,n=e.fingerprint;if(!r||!n){const t=(e.media||[]).find((e=>0!==e.port));t&&(r??(r=t.setup),n??(n=t.fingerprint))}if(!r)throw new Error("no a=setup found at SDP session or media level");if(!n)throw new Error("no a=fingerprint found at SDP session or media level");switch(r){case"active":t="client";break;case"passive":t="server";break;case"actpass":t="auto"}return{role:t,fingerprints:[{algorithm:n.type,value:n.hash}]}},_p.getCname=function({offerMediaObject:e}){const t=(e.ssrcs||[]).find((e=>"cname"===e.attribute));return t?t.value:""},_p.applyCodecParameters=function({offerRtpParameters:e,answerMediaObject:t}){for(const r of e.codecs){const e=r.mimeType.toLowerCase();if("audio/opus"!==e)continue;if(!(t.rtp||[]).find((e=>e.payload===r.payloadType)))continue;t.fmtp=t.fmtp||[];let n=t.fmtp.find((e=>e.payload===r.payloadType));n||(n={payload:r.payloadType,config:""},t.fmtp.push(n));const i=Cp.parseParams(n.config);switch(e){case"audio/opus":{const e=r.parameters["sprop-stereo"];void 0!==e&&(i.stereo=e?1:0);break}}n.config="";for(const e of Object.keys(i))n.config&&(n.config+=";"),n.config+=`${e}=${i[e]}`}};var Rp={};Object.defineProperty(Rp,"__esModule",{value:!0}),Rp.addLegacySimulcast=Rp.getRtpEncodings=void 0,Rp.getRtpEncodings=function({offerMediaObject:e}){const t=new Set;for(const r of e.ssrcs||[]){const e=r.id;t.add(e)}if(0===t.size)throw new Error("no a=ssrc lines found");const r=new Map;for(const n of e.ssrcGroups||[]){if("FID"!==n.semantics)continue;let[e,i]=n.ssrcs.split(/\s+/);e=Number(e),i=Number(i),t.has(e)&&(t.delete(e),t.delete(i),r.set(e,i))}for(const e of t)r.set(e,null);const n=[];for(const[e,t]of r){const r={ssrc:e};t&&(r.rtx={ssrc:t}),n.push(r)}return n},Rp.addLegacySimulcast=function({offerMediaObject:e,numStreams:t}){if(t<=1)throw new TypeError("numStreams must be greater than 1");const r=(e.ssrcs||[]).find((e=>"msid"===e.attribute));if(!r)throw new Error("a=ssrc line with msid information not found");const[n,i]=r.value.split(" "),s=r.id;let a;(e.ssrcGroups||[]).some((e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===s&&(a=Number(t[1]),!0)}));const o=e.ssrcs.find((e=>"cname"===e.attribute));if(!o)throw new Error("a=ssrc line with cname information not found");const c=o.value,d=[],l=[];for(let e=0;e<t;++e)d.push(s+e),a&&l.push(a+e);e.ssrcGroups=[],e.ssrcs=[],e.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let t=0;t<d.length;++t){const r=d[t];e.ssrcs.push({id:r,attribute:"cname",value:c}),e.ssrcs.push({id:r,attribute:"msid",value:`${n} ${i}`})}for(let t=0;t<l.length;++t){const r=d[t],s=l[t];e.ssrcs.push({id:s,attribute:"cname",value:c}),e.ssrcs.push({id:s,attribute:"msid",value:`${n} ${i}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${r} ${s}`})}};var Tp={};Object.defineProperty(Tp,"__esModule",{value:!0}),Tp.addNackSuppportForOpus=void 0,Tp.addNackSuppportForOpus=function(e){for(const t of e.codecs||[])"audio/opus"!==t.mimeType.toLowerCase()&&"audio/multiopus"!==t.mimeType.toLowerCase()||t.rtcpFeedback?.some((e=>"nack"===e.type&&!e.parameter))||(t.rtcpFeedback||(t.rtcpFeedback=[]),t.rtcpFeedback.push({type:"nack"}))};var Pp={};Object.defineProperty(Pp,"__esModule",{value:!0}),Pp.HandlerInterface=void 0;const kp=$d;class Ep extends kp.EnhancedEventEmitter{constructor(){super()}}Pp.HandlerInterface=Ep;var Dp={},Op={},Ip=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),xp=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Mp=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Ip(t,e,r);return xp(t,e),t};Object.defineProperty(Op,"__esModule",{value:!0}),Op.OfferMediaSection=Op.AnswerMediaSection=Op.MediaSection=void 0;const jp=Mp(hc),Lp=Mp(il);class Ap{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:n=!1}){if(this._mediaObject={},this._planB=n,e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(const e of t){const t={component:1};t.foundation=e.foundation,t.ip=e.ip,t.port=e.port,t.priority=e.priority,t.transport=e.protocol,t.type=e.type,e.tcpType&&(t.tcptype=e.tcpType),this._mediaObject.candidates.push(t)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return 0===this._mediaObject.port}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause(),delete this._mediaObject.ext,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}close(){this.disable(),this._mediaObject.port=0}}Op.MediaSection=Ap;Op.AnswerMediaSection=class extends Ap{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,planB:s=!1,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:d,extmapAllowMixed:l=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:s}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(const e of c.codecs){const t={payload:e.payloadType,codec:Np(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);const r=Lp.clone(e.parameters,{});let n=Lp.clone(e.rtcpFeedback,[]);if(d){const{opusStereo:t,opusFec:i,opusDtx:s,opusMaxPlaybackRate:a,opusMaxAverageBitrate:c,opusPtime:l,opusNack:p,videoGoogleStartBitrate:u,videoGoogleMaxBitrate:h,videoGoogleMinBitrate:m}=d,f=o.codecs.find((t=>t.payloadType===e.payloadType));switch(e.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":void 0!==t&&(f.parameters["sprop-stereo"]=t?1:0,r.stereo=t?1:0),void 0!==i&&(f.parameters.useinbandfec=i?1:0,r.useinbandfec=i?1:0),void 0!==s&&(f.parameters.usedtx=s?1:0,r.usedtx=s?1:0),void 0!==a&&(r.maxplaybackrate=a),void 0!==c&&(r.maxaveragebitrate=c),void 0!==l&&(f.parameters.ptime=l,r.ptime=l),p||(f.rtcpFeedback=f.rtcpFeedback.filter((e=>"nack"!==e.type||e.parameter)),n=n.filter((e=>"nack"!==e.type||e.parameter)));break;case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":void 0!==u&&(r["x-google-start-bitrate"]=u),void 0!==h&&(r["x-google-max-bitrate"]=h),void 0!==m&&(r["x-google-min-bitrate"]=m)}}const i={payload:e.payloadType,config:""};for(const e of Object.keys(r))i.config&&(i.config+=";"),i.config+=`${e}=${r[e]}`;i.config&&this._mediaObject.fmtp.push(i);for(const t of n)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}this._mediaObject.payloads=c.codecs.map((e=>e.payloadType)).join(" "),this._mediaObject.ext=[];for(const e of c.headerExtensions){(a.ext||[]).some((t=>t.uri===e.uri))&&this._mediaObject.ext.push({uri:e.uri,value:e.id})}if(l&&"extmap-allow-mixed"===a.extmapAllowMixed&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(const e of a.rids||[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(const e of a.rids||[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize",this._planB&&"video"===this._mediaObject.type&&(this._mediaObject.xGoogleFlag="conference");break;case"application":"number"==typeof a.sctpPort?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=n.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize})}}setDtlsRole(e){switch(e){case"client":this._mediaObject.setup="active";break;case"server":this._mediaObject.setup="passive";break;case"auto":this._mediaObject.setup="actpass"}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast||!this._mediaObject.simulcast.list1)return;const t={};for(const r of e)r.rid&&(t[r.rid]=r);const r=this._mediaObject.simulcast.list1,n=jp.parseSimulcastStreamList(r);for(const e of n)for(const r of e)r.paused=!t[r.scid]?.active;this._mediaObject.simulcast.list1=n.map((e=>e.map((e=>`${e.paused?"~":""}${e.scid}`)).join(","))).join(";")}};function Np(e){const t=new RegExp("^(audio|video)/(.+)","i").exec(e.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}Op.OfferMediaSection=class extends Ap{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,planB:s=!1,mid:a,kind:o,offerRtpParameters:c,streamId:d,trackId:l,oldDataChannelSpec:p=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:s}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.protocol=n?"UDP/DTLS/SCTP":"UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._planB||(this._mediaObject.msid=`${d||"-"} ${l}`);for(const e of c.codecs){const t={payload:e.payloadType,codec:Np(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);const r={payload:e.payloadType,config:""};for(const t of Object.keys(e.parameters))r.config&&(r.config+=";"),r.config+=`${t}=${e.parameters[t]}`;r.config&&this._mediaObject.fmtp.push(r);for(const t of e.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}this._mediaObject.payloads=c.codecs.map((e=>e.payloadType)).join(" "),this._mediaObject.ext=[];for(const e of c.headerExtensions)this._mediaObject.ext.push({uri:e.uri,value:e.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";const e=c.encodings[0],t=e.ssrc,r=e.rtx&&e.rtx.ssrc?e.rtx.ssrc:void 0;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],c.rtcp.cname&&this._mediaObject.ssrcs.push({id:t,attribute:"cname",value:c.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:t,attribute:"msid",value:`${d||"-"} ${l}`}),r&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:r,attribute:"cname",value:c.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:r,attribute:"msid",value:`${d||"-"} ${l}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`}));break}case"application":p?(this._mediaObject.payloads=n.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize}):(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize)}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}planBReceive({offerRtpParameters:e,streamId:t,trackId:r}){const n=e.encodings[0],i=n.ssrc,s=n.rtx&&n.rtx.ssrc?n.rtx.ssrc:void 0,a=this._mediaObject.payloads.split(" ");for(const t of e.codecs){if(a.includes(String(t.payloadType)))continue;const e={payload:t.payloadType,codec:Np(t),rate:t.clockRate};t.channels>1&&(e.encoding=t.channels),this._mediaObject.rtp.push(e);const r={payload:t.payloadType,config:""};for(const e of Object.keys(t.parameters))r.config&&(r.config+=";"),r.config+=`${e}=${t.parameters[e]}`;r.config&&this._mediaObject.fmtp.push(r);for(const e of t.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:t.payloadType,type:e.type,subtype:e.parameter})}this._mediaObject.payloads+=` ${e.codecs.filter((e=>!this._mediaObject.payloads.includes(e.payloadType))).map((e=>e.payloadType)).join(" ")}`,this._mediaObject.payloads=this._mediaObject.payloads.trim(),e.rtcp.cname&&this._mediaObject.ssrcs.push({id:i,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:i,attribute:"msid",value:`${t||"-"} ${r}`}),s&&(e.rtcp.cname&&this._mediaObject.ssrcs.push({id:s,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:s,attribute:"msid",value:`${t||"-"} ${r}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${i} ${s}`}))}planBStopReceiving({offerRtpParameters:e}){const t=e.encodings[0],r=t.ssrc,n=t.rtx&&t.rtx.ssrc?t.rtx.ssrc:void 0;this._mediaObject.ssrcs=this._mediaObject.ssrcs.filter((e=>e.id!==r&&e.id!==n)),n&&(this._mediaObject.ssrcGroups=this._mediaObject.ssrcGroups.filter((e=>e.ssrcs!==`${r} ${n}`)))}};var Fp=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Bp=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Up=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Fp(t,e,r);return Bp(t,e),t};Object.defineProperty(Dp,"__esModule",{value:!0}),Dp.RemoteSdp=void 0;const zp=Up(hc),Vp=Op,$p=new Bd.Logger("RemoteSdp");Dp.RemoteSdp=class{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,planB:s=!1}){if(this._mediaSections=[],this._midToIndex=new Map,this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=n,this._plainRtpParameters=i,this._planB=s,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:1e4,sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},e&&e.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};const e=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[e-1].algorithm,hash:r.fingerprints[e-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){$p.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(const t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){$p.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(const t of this._mediaSections)t.setDtlsRole(e)}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){const t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i,extmapAllowMixed:s=!1}){const a=new Vp.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i,extmapAllowMixed:s});t?this._replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this._replaceMediaSection(a):this._addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}){const s=this._midToIndex.get(e);let a;if(void 0!==s&&(a=this._mediaSections[s]),a)a.planBReceive({offerRtpParameters:r,streamId:n,trackId:i}),this._replaceMediaSection(a);else{a=new Vp.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i});const s=this._mediaSections.find((e=>e.closed));s?this._replaceMediaSection(a,s.mid):this._addMediaSection(a)}}pauseMediaSection(e){this._findMediaSection(e).pause()}resumeSendingMediaSection(e){this._findMediaSection(e).resume()}resumeReceivingMediaSection(e){this._findMediaSection(e).resume()}disableMediaSection(e){this._findMediaSection(e).disable()}closeMediaSection(e){const t=this._findMediaSection(e);return e===this._firstMid?($p.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this._regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){const r=this._findMediaSection(e);r.muxSimulcastStreams(t),this._replaceMediaSection(r)}planBStopReceiving({mid:e,offerRtpParameters:t}){const r=this._findMediaSection(e);r.planBStopReceiving({offerRtpParameters:t}),this._replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){const t=new Vp.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this._addMediaSection(t)}receiveSctpAssociation({oldDataChannelSpec:e=!1}={}){const t=new Vp.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application",oldDataChannelSpec:e});this._addMediaSection(t)}getSdp(){return this._sdpObject.origin.sessionVersion++,zp.write(this._sdpObject)}_addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this._regenerateBundleMids()}_replaceMediaSection(e,t){if("string"==typeof t){const r=this._midToIndex.get(t);if(void 0===r)throw new Error(`no media section found for reuseMid '${t}'`);const n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this._regenerateBundleMids()}else{const t=this._midToIndex.get(e.mid);if(void 0===t)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[t]=e,this._sdpObject.media[t]=e.getObject()}}_findMediaSection(e){const t=this._midToIndex.get(e);if(void 0===t)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}_regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter((e=>!e.closed)).map((e=>e.mid)).join(" "))}};var qp={};Object.defineProperty(qp,"__esModule",{value:!0}),qp.parse=void 0;const Gp=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");qp.parse=function(e){const t=Gp.exec(e||"");return t?{spatialLayers:Number(t[1]),temporalLayers:Number(t[2])}:{spatialLayers:1,temporalLayers:1}};var Wp=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Kp=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Jp=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Wp(t,e,r);return Kp(t,e),t};Object.defineProperty(yp,"__esModule",{value:!0}),yp.Chrome111=void 0;const Hp=Jp(hc),Yp=Bd,Qp=Jp(il),Xp=Jp(sl),Zp=Jp(_p),eu=Jp(Rp),tu=Jp(Tp),ru=tl,nu=Pp,iu=Dp,su=qp,au=new Yp.Logger("Chrome111"),ou={OS:1024,MIS:1024};class cu extends nu.HandlerInterface{static createFactory(){return()=>new cu}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome111"}close(){if(au.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){au.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Hp.parse(t.sdp),n=Zp.extractRtpCapabilities({sdpObject:r});return tu.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return au.debug("getNativeSctpCapabilities()"),{numStreams:ou}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),au.debug("run()"),this._direction=e,this._remoteSdp=new iu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:Xp.getSendingRtpParameters("audio",d),video:Xp.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Xp.getSendingRemoteRtpParameters("audio",d),video:Xp.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):(au.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",(()=>{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")}})))}async updateIceServers(e){this.assertNotClosed(),au.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),au.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});au.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();au.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){if(this.assertNotClosed(),this.assertSendDirection(),au.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1){t.forEach(((e,t)=>{e.rid=`r${t}`}));let e=1,r=1;for(const e of t){const t=e.scalabilityMode?(0,su.parse)(e.scalabilityMode).temporalLayers:3;t>r&&(r=t)}for(const n of t)n.rid="r"+e++,n.scalabilityMode=`L1T${r}`}const i=Qp.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=Xp.reduceCodecs(i.codecs,n);const s=Qp.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=Xp.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t}),c=await this._pc.createOffer();let d=Hp.parse(c.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d}),au.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l=o.mid;i.mid=l,d=Hp.parse(this._pc.localDescription.sdp);const p=d.media[a.idx];if(i.rtcp.cname=Zp.getCname({offerMediaObject:p}),t)if(1===t.length){const e=eu.getRtpEncodings({offerMediaObject:p});Object.assign(e[0],t[0]),i.encodings=e}else i.encodings=t;else i.encodings=eu.getRtpEncodings({offerMediaObject:p});this._remoteSdp.send({offerMediaObject:p,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const u={type:"answer",sdp:this._remoteSdp.getSdp()};return au.debug("send() | calling pc.setRemoteDescription() [answer:%o]",u),await this._pc.setRemoteDescription(u),this._mapMidTransceiver.set(l,o),{localId:l,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),au.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();au.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),au.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();au.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),au.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();au.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?au.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):au.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),au.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();au.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),au.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();au.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};au.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ou.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Hp.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),au.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;au.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Hp.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Zp.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Hp.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),au.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){au.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();au.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){au.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();au.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){au.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();au.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};au.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Hp.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}au.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Hp.parse(this._pc.localDescription.sdp));const r=Zp.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new ru.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}yp.Chrome111=cu;var du={},lu=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),pu=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),uu=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&lu(t,e,r);return pu(t,e),t};Object.defineProperty(du,"__esModule",{value:!0}),du.Chrome74=void 0;const hu=uu(hc),mu=Bd,fu=uu(il),gu=uu(sl),vu=uu(_p),yu=uu(Rp),_u=uu(Tp),bu=tl,wu=Pp,Su=Dp,Cu=qp,Ru=new mu.Logger("Chrome74"),Tu={OS:1024,MIS:1024};class Pu extends wu.HandlerInterface{static createFactory(){return()=>new Pu}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome74"}close(){if(Ru.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Ru.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=hu.parse(t.sdp),n=vu.extractRtpCapabilities({sdpObject:r});return _u.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Ru.debug("getNativeSctpCapabilities()"),{numStreams:Tu}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){Ru.debug("run()"),this._direction=e,this._remoteSdp=new Su.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:gu.getSendingRtpParameters("audio",d),video:gu.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:gu.getSendingRemoteRtpParameters("audio",d),video:gu.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):(Ru.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",(()=>{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")}})))}async updateIceServers(e){this.assertNotClosed(),Ru.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),Ru.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Ru.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Ru.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const i=fu.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=gu.reduceCodecs(i.codecs,n);const s=fu.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=gu.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});let c,d=await this._pc.createOffer(),l=hu.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let p=!1;const u=(0,Cu.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&u.spatialLayers>1&&"video/vp9"===i.codecs[0].mimeType.toLowerCase()&&(Ru.debug("send() | enabling legacy simulcast for VP9 SVC"),p=!0,l=hu.parse(d.sdp),c=l.media[a.idx],yu.addLegacySimulcast({offerMediaObject:c,numStreams:u.spatialLayers}),d={type:"offer",sdp:hu.write(l)}),Ru.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);const h=o.mid;if(i.mid=h,l=hu.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=vu.getCname({offerMediaObject:c}),t)if(1===t.length){let e=yu.getRtpEncodings({offerMediaObject:c});Object.assign(e[0],t[0]),p&&(e=[e[0]]),i.encodings=e}else i.encodings=t;else i.encodings=yu.getRtpEncodings({offerMediaObject:c});if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${u.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const m={type:"answer",sdp:this._remoteSdp.getSdp()};return Ru.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),Ru.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Ru.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Ru.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();Ru.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Ru.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Ru.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Ru.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Ru.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Ru.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Tu.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=hu.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Ru.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Ru.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=hu.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));vu.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:hu.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Ru.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Ru.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Ru.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Ru.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Ru.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Ru.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Ru.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Ru.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=hu.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Ru.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=hu.parse(this._pc.localDescription.sdp));const r=vu.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new bu.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}du.Chrome74=Pu;var ku={},Eu=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Du=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Ou=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Eu(t,e,r);return Du(t,e),t};Object.defineProperty(ku,"__esModule",{value:!0}),ku.Chrome70=void 0;const Iu=Ou(hc),xu=Bd,Mu=Ou(il),ju=Ou(sl),Lu=Ou(_p),Au=Ou(Rp),Nu=Pp,Fu=Dp,Bu=qp,Uu=new xu.Logger("Chrome70"),zu={OS:1024,MIS:1024};class Vu extends Nu.HandlerInterface{static createFactory(){return()=>new Vu}constructor(){super(),this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome70"}close(){if(Uu.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){Uu.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Iu.parse(t.sdp);return Lu.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Uu.debug("getNativeSctpCapabilities()"),{numStreams:zu}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){Uu.debug("run()"),this._direction=e,this._remoteSdp=new Fu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:ju.getSendingRtpParameters("audio",d),video:ju.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:ju.getSendingRemoteRtpParameters("audio",d),video:ju.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Uu.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){Uu.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(Uu.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Uu.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Uu.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),Uu.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);const i=Mu.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=ju.reduceCodecs(i.codecs,n);const s=Mu.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=ju.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});let c,d=await this._pc.createOffer(),l=Iu.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),t&&t.length>1&&(Uu.debug("send() | enabling legacy simulcast"),l=Iu.parse(d.sdp),c=l.media[a.idx],Au.addLegacySimulcast({offerMediaObject:c,numStreams:t.length}),d={type:"offer",sdp:Iu.write(l)});let p=!1;const u=(0,Bu.parse)((t||[{}])[0].scalabilityMode);if(t&&1===t.length&&u.spatialLayers>1&&"video/vp9"===i.codecs[0].mimeType.toLowerCase()&&(Uu.debug("send() | enabling legacy simulcast for VP9 SVC"),p=!0,l=Iu.parse(d.sdp),c=l.media[a.idx],Au.addLegacySimulcast({offerMediaObject:c,numStreams:u.spatialLayers}),d={type:"offer",sdp:Iu.write(l)}),Uu.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),t){Uu.debug("send() | applying given encodings");const e=o.sender.getParameters();for(let r=0;r<(e.encodings||[]).length;++r){const n=e.encodings[r],i=t[r];if(!i)break;e.encodings[r]=Object.assign(n,i)}await o.sender.setParameters(e)}const h=o.mid;if(i.mid=h,l=Iu.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=Lu.getCname({offerMediaObject:c}),i.encodings=Au.getRtpEncodings({offerMediaObject:c}),t)for(let e=0;e<i.encodings.length;++e)t[e]&&Object.assign(i.encodings[e],t[e]);if(p&&(i.encodings=[i.encodings[0]]),i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r});const m={type:"answer",sdp:this._remoteSdp.getSdp()};return Uu.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){this.assertSendDirection(),Uu.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Uu.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?Uu.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Uu.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),Uu.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Uu.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),Uu.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Uu.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};Uu.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%zu.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Iu.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Uu.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Uu.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Iu.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Lu.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Iu.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Uu.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){Uu.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Uu.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};Uu.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Iu.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Uu.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Iu.parse(this._pc.localDescription.sdp));const r=Lu.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}ku.Chrome70=Vu;var $u={},qu={};Object.defineProperty(qu,"__esModule",{value:!0}),qu.addLegacySimulcast=qu.getRtpEncodings=void 0,qu.getRtpEncodings=function({offerMediaObject:e,track:t}){const r=new Set;for(const n of e.ssrcs||[]){if("msid"!==n.attribute)continue;if(n.value.split(" ")[1]===t.id){const e=n.id;r.add(e)}}if(0===r.size)throw new Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);const n=new Map;for(const t of e.ssrcGroups||[]){if("FID"!==t.semantics)continue;let[e,i]=t.ssrcs.split(/\s+/);e=Number(e),i=Number(i),r.has(e)&&(r.delete(e),r.delete(i),n.set(e,i))}for(const e of r)n.set(e,null);const i=[];for(const[e,t]of n){const r={ssrc:e};t&&(r.rtx={ssrc:t}),i.push(r)}return i},qu.addLegacySimulcast=function({offerMediaObject:e,track:t,numStreams:r}){if(r<=1)throw new TypeError("numStreams must be greater than 1");let n,i,s;if(!(e.ssrcs||[]).find((e=>{if("msid"!==e.attribute)return!1;return e.value.split(" ")[1]===t.id&&(n=e.id,s=e.value.split(" ")[0],!0)})))throw new Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);(e.ssrcGroups||[]).some((e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===n&&(i=Number(t[1]),!0)}));const a=e.ssrcs.find((e=>"cname"===e.attribute&&e.id===n));if(!a)throw new Error(`a=ssrc line with cname information not found [track.id:${t.id}]`);const o=a.value,c=[],d=[];for(let e=0;e<r;++e)c.push(n+e),i&&d.push(i+e);e.ssrcGroups=e.ssrcGroups||[],e.ssrcs=e.ssrcs||[],e.ssrcGroups.push({semantics:"SIM",ssrcs:c.join(" ")});for(let r=0;r<c.length;++r){const n=c[r];e.ssrcs.push({id:n,attribute:"cname",value:o}),e.ssrcs.push({id:n,attribute:"msid",value:`${s} ${t.id}`})}for(let r=0;r<d.length;++r){const n=c[r],i=d[r];e.ssrcs.push({id:i,attribute:"cname",value:o}),e.ssrcs.push({id:i,attribute:"msid",value:`${s} ${t.id}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${n} ${i}`})}};var Gu=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Wu=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Ku=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Gu(t,e,r);return Wu(t,e),t};Object.defineProperty($u,"__esModule",{value:!0}),$u.Chrome67=void 0;const Ju=Ku(hc),Hu=Bd,Yu=Ku(il),Qu=Ku(sl),Xu=Ku(_p),Zu=Ku(qu),eh=Pp,th=Dp,rh=new Hu.Logger("Chrome67"),nh={OS:1024,MIS:1024};class ih extends eh.HandlerInterface{static createFactory(){return()=>new ih}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome67"}close(){if(rh.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){rh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=Ju.parse(t.sdp);return Xu.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return rh.debug("getNativeSctpCapabilities()"),{numStreams:nh}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){rh.debug("run()"),this._direction=e,this._remoteSdp=new th.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:Qu.getSendingRtpParameters("audio",d),video:Qu.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Qu.getSendingRemoteRtpParameters("audio",d),video:Qu.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(rh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){rh.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(rh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});rh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();rh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),rh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&rh.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let i,s=await this._pc.createOffer(),a=Ju.parse(s.sdp);const o=Yu.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=Qu.reduceCodecs(o.codecs);const c=Yu.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=Qu.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(rh.debug("send() | enabling simulcast"),a=Ju.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),Zu.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:Ju.write(a)}),rh.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=Ju.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=Xu.getCname({offerMediaObject:i}),o.encodings=Zu.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&"video/vp8"===o.codecs[0].mimeType.toLowerCase())for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);this._nextSendLocalId++;const p=this._pc.getSenders().find((t=>t.track===e));return this._mapSendLocalIdRtpSender.set(l,p),{localId:l,rtpParameters:o,rtpSender:p}}async stopSending(e){this.assertSendDirection(),rh.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");this._pc.removeTrack(t),t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);const r=await this._pc.createOffer();rh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void rh.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?rh.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):rh.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.track;await r.replaceTrack(t),n&&this._sendStream.removeTrack(n),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),rh.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(n)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),rh.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.setParameters(n)}async getSenderStats(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};rh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%nh.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Ju.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),rh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const t of e){const{trackId:e,kind:r,rtpParameters:n,streamId:i}=t;rh.debug("receive() [trackId:%s, kind:%s]",e,r);const s=r;this._remoteSdp.receive({mid:s,kind:r,offerRtpParameters:n,streamId:i||n.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let n=await this._pc.createAnswer();const i=Ju.parse(n.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,s=i.media.find((e=>String(e.mid)===n));Xu.applyCodecParameters({offerRtpParameters:r,answerMediaObject:s})}n={type:"answer",sdp:Ju.write(i)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:i}),rh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(const r of e){const{kind:e,trackId:n,rtpParameters:i}=r,s=n,a=e,o=this._pc.getReceivers().find((e=>e.track&&e.track.id===s));if(!o)throw new Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(s,{mid:a,rtpParameters:i,rtpReceiver:o}),t.push({localId:s,track:o.track,rtpReceiver:o})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){rh.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();rh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();const{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw new Error("associated RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};rh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Ju.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}rh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Ju.parse(this._pc.localDescription.sdp));const r=Xu.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}$u.Chrome67=ih;var sh={},ah=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),oh=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),ch=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ah(t,e,r);return oh(t,e),t};Object.defineProperty(sh,"__esModule",{value:!0}),sh.Chrome55=void 0;const dh=ch(hc),lh=Bd,ph=tl,uh=ch(il),hh=ch(sl),mh=ch(_p),fh=ch(qu),gh=Pp,vh=Dp,yh=new lh.Logger("Chrome55"),_h={OS:1024,MIS:1024};class bh extends gh.HandlerInterface{static createFactory(){return()=>new bh}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome55"}close(){if(yh.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){yh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=dh.parse(t.sdp);return mh.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return yh.debug("getNativeSctpCapabilities()"),{numStreams:_h}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){yh.debug("run()"),this._direction=e,this._remoteSdp=new vh.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:hh.getSendingRtpParameters("audio",d),video:hh.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:hh.getSendingRemoteRtpParameters("audio",d),video:hh.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(yh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){yh.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(yh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});yh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();yh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),yh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&yh.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let i,s=await this._pc.createOffer(),a=dh.parse(s.sdp);const o=uh.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=hh.reduceCodecs(o.codecs);const c=uh.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=hh.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(yh.debug("send() | enabling simulcast"),a=dh.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),fh.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:dh.write(a)}),yh.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=dh.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=mh.getCname({offerMediaObject:i}),o.encodings=fh.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&"video/vp8"===o.codecs[0].mimeType.toLowerCase())for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(l,e),{localId:l,rtpParameters:o}}async stopSending(e){this.assertSendDirection(),yh.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdTrack.get(e);if(!t)throw new Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);const r=await this._pc.createOffer();yh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void yh.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new ph.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new ph.UnsupportedError(" not implemented")}async setRtpEncodingParameters(e,t){throw new ph.UnsupportedError("not supported")}async getSenderStats(e){throw new ph.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};yh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_h.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=dh.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),yh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const t of e){const{trackId:e,kind:r,rtpParameters:n,streamId:i}=t;yh.debug("receive() [trackId:%s, kind:%s]",e,r);const s=r;this._remoteSdp.receive({mid:s,kind:r,offerRtpParameters:n,streamId:i||n.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let n=await this._pc.createAnswer();const i=dh.parse(n.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,s=i.media.find((e=>String(e.mid)===n));mh.applyCodecParameters({offerRtpParameters:r,answerMediaObject:s})}n={type:"answer",sdp:dh.write(i)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:i}),yh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(const r of e){const{kind:e,trackId:n,rtpParameters:i}=r,s=e,a=n,o=r.streamId||i.rtcp.cname,c=this._pc.getRemoteStreams().find((e=>e.id===o)).getTrackById(a);if(!c)throw new Error("remote track not found");this._mapRecvLocalIdInfo.set(a,{mid:s,rtpParameters:i}),t.push({localId:a,track:c})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){yh.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();yh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new ph.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};yh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=dh.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}yh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=dh.parse(this._pc.localDescription.sdp));const r=mh.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}sh.Chrome55=bh;var wh={},Sh=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Ch=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Rh=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Sh(t,e,r);return Ch(t,e),t};Object.defineProperty(wh,"__esModule",{value:!0}),wh.Firefox60=void 0;const Th=Rh(hc),Ph=Bd,kh=tl,Eh=Rh(il),Dh=Rh(sl),Oh=Rh(_p),Ih=Rh(Rp),xh=Pp,Mh=Dp,jh=qp,Lh=new Ph.Logger("Firefox60"),Ah={OS:16,MIS:2048};class Nh extends xh.HandlerInterface{static createFactory(){return()=>new Nh}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Firefox60"}close(){if(Lh.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Lh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),t=document.createElement("canvas");t.getContext("2d");const r=t.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"});const n=e.addTransceiver(r,{direction:"sendrecv"}),i=n.sender.getParameters(),s=[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}];i.encodings=s,await n.sender.setParameters(i);const a=await e.createOffer();try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}const o=Th.parse(a.sdp);return Oh.extractRtpCapabilities({sdpObject:o})}catch(n){try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}throw n}}async getNativeSctpCapabilities(){return Lh.debug("getNativeSctpCapabilities()"),{numStreams:Ah}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),Lh.debug("run()"),this._direction=e,this._remoteSdp=new Mh.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:Dh.getSendingRtpParameters("audio",d),video:Dh.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Dh.getSendingRemoteRtpParameters("audio",d),video:Dh.getSendingRemoteRtpParameters("video",d)},this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Lh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){throw this.assertNotClosed(),new kh.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),Lh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Lh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Lh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&(t=Eh.clone(t,[])).length>1&&(t.forEach(((e,t)=>{e.rid=`r${t}`})),t.reverse());const i=Eh.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=Dh.reduceCodecs(i.codecs,n);const s=Eh.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=Dh.reduceCodecs(s.codecs,n);const a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});if(t){const e=a.sender.getParameters();e.encodings=t,await a.sender.setParameters(e)}const o=await this._pc.createOffer();let c=Th.parse(o.sdp);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:c});const d=(0,jh.parse)((t||[{}])[0].scalabilityMode);Lh.debug("send() | calling pc.setLocalDescription() [offer:%o]",o),await this._pc.setLocalDescription(o);const l=a.mid;i.mid=l,c=Th.parse(this._pc.localDescription.sdp);const p=c.media[c.media.length-1];if(i.rtcp.cname=Oh.getCname({offerMediaObject:p}),t)if(1===t.length){const e=Ih.getRtpEncodings({offerMediaObject:p});Object.assign(e[0],t[0]),i.encodings=e}else i.encodings=t.reverse();else i.encodings=Ih.getRtpEncodings({offerMediaObject:p});if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${d.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:p,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const u={type:"answer",sdp:this._remoteSdp.getSdp()};return Lh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",u),await this._pc.setRemoteDescription(u),this._mapMidTransceiver.set(l,a),{localId:l,rtpParameters:i,rtpSender:a.sender}}async stopSending(e){if(this.assertSendDirection(),Lh.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);const r=await this._pc.createOffer();Lh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Lh.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();Lh.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Lh.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Lh.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");const n=r.sender.getParameters();t=n.encodings.length-1-t,n.encodings.forEach(((e,r)=>{e.active=r>=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Lh.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Lh.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Lh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ah.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Th.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),Lh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Lh.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Th.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,a=r.get(e),o=s.media.find((e=>String(e.mid)===a));Oh.applyCodecParameters({offerRtpParameters:n,answerMediaObject:o}),i={type:"answer",sdp:Th.write(s)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:s}),Lh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Lh.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Lh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Lh.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Lh.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Lh.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Lh.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Lh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Th.parse(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}Lh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Th.parse(this._pc.localDescription.sdp));const r=Oh.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new kh.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}wh.Firefox60=Nh;var Fh={},Bh=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Uh=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),zh=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Bh(t,e,r);return Uh(t,e),t};Object.defineProperty(Fh,"__esModule",{value:!0}),Fh.Safari12=void 0;const Vh=zh(hc),$h=Bd,qh=zh(il),Gh=zh(sl),Wh=zh(_p),Kh=zh(Rp),Jh=zh(Tp),Hh=tl,Yh=Pp,Qh=Dp,Xh=qp,Zh=new $h.Logger("Safari12"),em={OS:1024,MIS:1024};class tm extends Yh.HandlerInterface{static createFactory(){return()=>new tm}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari12"}close(){if(Zh.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Zh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Vh.parse(t.sdp),n=Wh.extractRtpCapabilities({sdpObject:r});return Jh.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Zh.debug("getNativeSctpCapabilities()"),{numStreams:em}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),Zh.debug("run()"),this._direction=e,this._remoteSdp=new Qh.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:Gh.getSendingRtpParameters("audio",d),video:Gh.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Gh.getSendingRemoteRtpParameters("audio",d),video:Gh.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Zh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){this.assertNotClosed(),Zh.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),Zh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Zh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Zh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);const i=qh.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=Gh.reduceCodecs(i.codecs,n);const s=qh.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=Gh.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});let c,d=await this._pc.createOffer(),l=Vh.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});const p=(0,Xh.parse)((t||[{}])[0].scalabilityMode);t&&t.length>1&&(Zh.debug("send() | enabling legacy simulcast"),l=Vh.parse(d.sdp),c=l.media[a.idx],Kh.addLegacySimulcast({offerMediaObject:c,numStreams:t.length}),d={type:"offer",sdp:Vh.write(l)}),Zh.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);const u=o.mid;if(i.mid=u,l=Vh.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=Wh.getCname({offerMediaObject:c}),i.encodings=Kh.getRtpEncodings({offerMediaObject:c}),t)for(let e=0;e<i.encodings.length;++e)t[e]&&Object.assign(i.encodings[e],t[e]);if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${p.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r});const h={type:"answer",sdp:this._remoteSdp.getSdp()};return Zh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",h),await this._pc.setRemoteDescription(h),this._mapMidTransceiver.set(u,o),{localId:u,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;Zh.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Zh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Zh.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();Zh.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Zh.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Zh.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Zh.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Zh.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Zh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%em.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Vh.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Zh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Zh.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Vh.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Wh.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Vh.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Zh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Zh.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Zh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Zh.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Zh.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Zh.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Zh.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Zh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Vh.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Zh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Vh.parse(this._pc.localDescription.sdp));const r=Wh.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Hh.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}Fh.Safari12=tm;var rm={},nm=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),im=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),sm=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&nm(t,e,r);return im(t,e),t};Object.defineProperty(rm,"__esModule",{value:!0}),rm.Safari11=void 0;const am=sm(hc),om=Bd,cm=sm(il),dm=sm(sl),lm=sm(_p),pm=sm(qu),um=Pp,hm=Dp,mm=new om.Logger("Safari11"),fm={OS:1024,MIS:1024};class gm extends um.HandlerInterface{static createFactory(){return()=>new gm}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari11"}close(){if(mm.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){mm.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=am.parse(t.sdp);return lm.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return mm.debug("getNativeSctpCapabilities()"),{numStreams:fm}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){mm.debug("run()"),this._direction=e,this._remoteSdp=new hm.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:dm.getSendingRtpParameters("audio",d),video:dm.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:dm.getSendingRemoteRtpParameters("audio",d),video:dm.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(mm.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){mm.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(mm.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});mm.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();mm.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),mm.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&mm.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let i,s=await this._pc.createOffer(),a=am.parse(s.sdp);const o=cm.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=dm.reduceCodecs(o.codecs);const c=cm.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=dm.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(mm.debug("send() | enabling simulcast"),a=am.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),pm.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:am.write(a)}),mm.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=am.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=lm.getCname({offerMediaObject:i}),o.encodings=pm.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&"video/vp8"===o.codecs[0].mimeType.toLowerCase())for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);this._nextSendLocalId++;const p=this._pc.getSenders().find((t=>t.track===e));return this._mapSendLocalIdRtpSender.set(l,p),{localId:l,rtpParameters:o,rtpSender:p}}async stopSending(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);const r=await this._pc.createOffer();mm.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void mm.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?mm.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):mm.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.track;await r.replaceTrack(t),n&&this._sendStream.removeTrack(n),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),mm.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(n)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),mm.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.setParameters(n)}async getSenderStats(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};mm.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%fm.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=am.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),mm.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const t of e){const{trackId:e,kind:r,rtpParameters:n,streamId:i}=t;mm.debug("receive() [trackId:%s, kind:%s]",e,r);const s=r;this._remoteSdp.receive({mid:s,kind:r,offerRtpParameters:n,streamId:i||n.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let n=await this._pc.createAnswer();const i=am.parse(n.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,s=i.media.find((e=>String(e.mid)===n));lm.applyCodecParameters({offerRtpParameters:r,answerMediaObject:s})}n={type:"answer",sdp:am.write(i)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:i}),mm.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(const r of e){const{kind:e,trackId:n,rtpParameters:i}=r,s=e,a=n,o=this._pc.getReceivers().find((e=>e.track&&e.track.id===a));if(!o)throw new Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(a,{mid:s,rtpParameters:i,rtpReceiver:o}),t.push({localId:a,track:o.track,rtpReceiver:o})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){mm.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();mm.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw new Error("associated RTCRtpReceiver not found");return t.getStats()}async pauseReceiving(e){}async resumeReceiving(e){}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};mm.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=am.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}mm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=am.parse(this._pc.localDescription.sdp));const r=lm.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}rm.Safari11=gm;var vm={},ym={},_m=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),bm=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),wm=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&_m(t,e,r);return bm(t,e),t};Object.defineProperty(ym,"__esModule",{value:!0}),ym.mangleRtpParameters=ym.getCapabilities=void 0;const Sm=wm(il);ym.getCapabilities=function(){const e=RTCRtpReceiver.getCapabilities(),t=Sm.clone(e,{});for(const e of t.codecs){if(e.channels=e.numChannels,delete e.numChannels,e.mimeType=e.mimeType||`${e.kind}/${e.name}`,e.parameters){const t=e.parameters;t.apt&&(t.apt=Number(t.apt)),t["packetization-mode"]&&(t["packetization-mode"]=Number(t["packetization-mode"]))}for(const t of e.rtcpFeedback||[])t.parameter||(t.parameter="")}return t},ym.mangleRtpParameters=function(e){const t=Sm.clone(e,{});t.mid&&(t.muxId=t.mid,delete t.mid);for(const e of t.codecs)e.channels&&(e.numChannels=e.channels,delete e.channels),e.mimeType&&!e.name&&(e.name=e.mimeType.split("/")[1]),delete e.mimeType;return t};var Cm=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Rm=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Tm=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Cm(t,e,r);return Rm(t,e),t};Object.defineProperty(vm,"__esModule",{value:!0}),vm.Edge11=void 0;const Pm=Bd,km=tl,Em=Tm(il),Dm=Tm(sl),Om=Tm(ym),Im=Pp,xm=new Pm.Logger("Edge11");class Mm extends Im.HandlerInterface{static createFactory(){return()=>new Mm}constructor(){super(),this._rtpSenders=new Map,this._rtpReceivers=new Map,this._nextSendLocalId=0,this._transportReady=!1}get name(){return"Edge11"}close(){xm.debug("close()");try{this._iceGatherer.close()}catch(e){}try{this._iceTransport.stop()}catch(e){}try{this._dtlsTransport.stop()}catch(e){}for(const e of this._rtpSenders.values())try{e.stop()}catch(e){}for(const e of this._rtpReceivers.values())try{e.stop()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){return xm.debug("getNativeRtpCapabilities()"),Om.getCapabilities()}async getNativeSctpCapabilities(){return xm.debug("getNativeSctpCapabilities()"),{numStreams:{OS:0,MIS:0}}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){xm.debug("run()"),this._sendingRtpParametersByKind={audio:Dm.getSendingRtpParameters("audio",d),video:Dm.getSendingRtpParameters("video",d)},this._remoteIceParameters=t,this._remoteIceCandidates=r,this._remoteDtlsParameters=n,this._cname=`CNAME-${Em.generateRandomNumber()}`,this.setIceGatherer({iceServers:s,iceTransportPolicy:a}),this.setIceTransport(),this.setDtlsTransport()}async updateIceServers(e){throw new km.UnsupportedError("not supported")}async restartIce(e){if(xm.debug("restartIce()"),this._remoteIceParameters=e,this._transportReady){xm.debug("restartIce() | calling iceTransport.start()"),this._iceTransport.start(this._iceGatherer,e,"controlling");for(const e of this._remoteIceCandidates)this._iceTransport.addRemoteCandidate(e);this._iceTransport.addRemoteCandidate({})}}async getTransportStats(){return this._iceTransport.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){xm.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),xm.debug("send() | calling new RTCRtpSender()");const i=new RTCRtpSender(e,this._dtlsTransport),s=Em.clone(this._sendingRtpParametersByKind[e.kind],{});s.codecs=Dm.reduceCodecs(s.codecs,n);const a=s.codecs.some((e=>/.+\/rtx$/i.test(e.mimeType)));t||(t=[{}]);for(const e of t)e.ssrc=Em.generateRandomNumber(),a&&(e.rtx={ssrc:Em.generateRandomNumber()});s.encodings=t,s.rtcp={cname:this._cname,reducedSize:!0,mux:!0};const o=Om.mangleRtpParameters(s);xm.debug("send() | calling rtpSender.send() [params:%o]",o),await i.send(o);const c=String(this._nextSendLocalId);return this._nextSendLocalId++,this._rtpSenders.set(c,i),{localId:c,rtpParameters:s,rtpSender:i}}async stopSending(e){xm.debug("stopSending() [localId:%s]",e);const t=this._rtpSenders.get(e);if(!t)throw new Error("RTCRtpSender not found");this._rtpSenders.delete(e);try{xm.debug("stopSending() | calling rtpSender.stop()"),t.stop()}catch(e){throw xm.warn("stopSending() | rtpSender.stop() failed:%o",e),e}}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){t?xm.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):xm.debug("replaceTrack() [localId:%s, no track]",e);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");r.setTrack(t)}async setMaxSpatialLayer(e,t){xm.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(n)}async setRtpEncodingParameters(e,t){xm.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.setParameters(n)}async getSenderStats(e){const t=this._rtpSenders.get(e);if(!t)throw new Error("RTCRtpSender not found");return t.getStats()}async sendDataChannel(e){throw new km.UnsupportedError("not implemented")}async receive(e){const t=[];for(const t of e){const{trackId:e,kind:r}=t;xm.debug("receive() [trackId:%s, kind:%s]",e,r)}this._transportReady||await this.setupTransport({localDtlsRole:"server"});for(const r of e){const{trackId:e,kind:n,rtpParameters:i}=r;xm.debug("receive() | calling new RTCRtpReceiver()");const s=new RTCRtpReceiver(this._dtlsTransport,n);s.addEventListener("error",(e=>{xm.error('rtpReceiver "error" event [event:%o]',e)}));const a=Om.mangleRtpParameters(i);xm.debug("receive() | calling rtpReceiver.receive() [params:%o]",a),await s.receive(a);const o=e;this._rtpReceivers.set(o,s),t.push({localId:o,track:s.track,rtpReceiver:s})}return t}async stopReceiving(e){for(const t of e){xm.debug("stopReceiving() [localId:%s]",t);const e=this._rtpReceivers.get(t);if(!e)throw new Error("RTCRtpReceiver not found");this._rtpReceivers.delete(t);try{xm.debug("stopReceiving() | calling rtpReceiver.stop()"),e.stop()}catch(e){xm.warn("stopReceiving() | rtpReceiver.stop() failed:%o",e)}}}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){const t=this._rtpReceivers.get(e);if(!t)throw new Error("RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel(e){throw new km.UnsupportedError("not implemented")}setIceGatherer({iceServers:e,iceTransportPolicy:t}){const r=new RTCIceGatherer({iceServers:e||[],gatherPolicy:t||"all"});r.addEventListener("error",(e=>{xm.error('iceGatherer "error" event [event:%o]',e)}));try{r.gather()}catch(e){xm.debug("setIceGatherer() | iceGatherer.gather() failed: %s",e.toString())}this._iceGatherer=r}setIceTransport(){const e=new RTCIceTransport(this._iceGatherer);e.addEventListener("statechange",(()=>{switch(e.state){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")}})),e.addEventListener("icestatechange",(()=>{switch(e.state){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")}})),e.addEventListener("candidatepairchange",(e=>{xm.debug('iceTransport "candidatepairchange" event [pair:%o]',e.pair)})),this._iceTransport=e}setDtlsTransport(){const e=new RTCDtlsTransport(this._iceTransport);e.addEventListener("statechange",(()=>{xm.debug('dtlsTransport "statechange" event [state:%s]',e.state)})),e.addEventListener("dtlsstatechange",(()=>{xm.debug('dtlsTransport "dtlsstatechange" event [state:%s]',e.state),"closed"===e.state&&this.emit("@connectionstatechange","closed")})),e.addEventListener("error",(e=>{xm.error('dtlsTransport "error" event [event:%o]',e)})),this._dtlsTransport=e}async setupTransport({localDtlsRole:e}){xm.debug("setupTransport()");const t=this._dtlsTransport.getLocalParameters();t.role=e,await new Promise(((e,r)=>{this.safeEmit("@connect",{dtlsParameters:t},e,r)})),this._iceTransport.start(this._iceGatherer,this._remoteIceParameters,"controlling");for(const e of this._remoteIceCandidates)this._iceTransport.addRemoteCandidate(e);this._iceTransport.addRemoteCandidate({}),this._remoteDtlsParameters.fingerprints=this._remoteDtlsParameters.fingerprints.filter((e=>"sha-256"===e.algorithm||"sha-384"===e.algorithm||"sha-512"===e.algorithm)),this._dtlsTransport.start(this._remoteDtlsParameters),this._transportReady=!0}}vm.Edge11=Mm;var jm={},Lm=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Am=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Nm=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Lm(t,e,r);return Am(t,e),t};Object.defineProperty(jm,"__esModule",{value:!0}),jm.ReactNativeUnifiedPlan=void 0;const Fm=Nm(hc),Bm=Bd,Um=Nm(il),zm=Nm(sl),Vm=Nm(_p),$m=Nm(Rp),qm=Nm(Tp),Gm=tl,Wm=Pp,Km=Dp,Jm=qp,Hm=new Bm.Logger("ReactNativeUnifiedPlan"),Ym={OS:1024,MIS:1024};class Qm extends Wm.HandlerInterface{static createFactory(){return()=>new Qm}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNativeUnifiedPlan"}close(){if(Hm.debug("close()"),!this._closed){if(this._closed=!0,this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Hm.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Fm.parse(t.sdp),n=Vm.extractRtpCapabilities({sdpObject:r});return qm.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Hm.debug("getNativeSctpCapabilities()"),{numStreams:Ym}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),Hm.debug("run()"),this._direction=e,this._remoteSdp=new Km.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:zm.getSendingRtpParameters("audio",d),video:zm.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:zm.getSendingRemoteRtpParameters("audio",d),video:zm.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Hm.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){this.assertNotClosed(),Hm.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),Hm.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Hm.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Hm.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Hm.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Hm.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const i=Um.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=zm.reduceCodecs(i.codecs,n);const s=Um.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=zm.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});let c,d=await this._pc.createOffer(),l=Fm.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let p=!1;const u=(0,Jm.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&u.spatialLayers>1&&"video/vp9"===i.codecs[0].mimeType.toLowerCase()&&(Hm.debug("send() | enabling legacy simulcast for VP9 SVC"),p=!0,l=Fm.parse(d.sdp),c=l.media[a.idx],$m.addLegacySimulcast({offerMediaObject:c,numStreams:u.spatialLayers}),d={type:"offer",sdp:Fm.write(l)}),Hm.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let h=o.mid??void 0;if(h||Hm.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),i.mid=h,l=Fm.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=Vm.getCname({offerMediaObject:c}),t)if(1===t.length){let e=$m.getRtpEncodings({offerMediaObject:c});Object.assign(e[0],t[0]),p&&(e=[e[0]]),i.encodings=e}else i.encodings=t;else i.encodings=$m.getRtpEncodings({offerMediaObject:c});if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${u.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const m={type:"answer",sdp:this._remoteSdp.getSdp()};return Hm.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m),h||(h=o.mid,i.mid=h),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;Hm.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Hm.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Hm.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Hm.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Hm.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();Hm.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Hm.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Hm.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Hm.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Hm.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Hm.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Hm.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Hm.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ym.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Fm.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Hm.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Hm.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Hm.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Hm.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Fm.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Vm.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Fm.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Hm.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Hm.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Hm.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Hm.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Hm.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Hm.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Hm.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Hm.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Hm.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Hm.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Hm.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Hm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Fm.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Hm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Fm.parse(this._pc.localDescription.sdp));const r=Vm.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Gm.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}jm.ReactNativeUnifiedPlan=Qm;var Xm={},Zm=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),ef=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),tf=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Zm(t,e,r);return ef(t,e),t};Object.defineProperty(Xm,"__esModule",{value:!0}),Xm.ReactNative=void 0;const rf=tf(hc),nf=Bd,sf=tl,af=tf(il),of=tf(sl),cf=tf(_p),df=tf(qu),lf=Pp,pf=Dp,uf=new nf.Logger("ReactNative"),hf={OS:1024,MIS:1024};class mf extends lf.HandlerInterface{static createFactory(){return()=>new mf}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNative"}close(){if(uf.debug("close()"),this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){uf.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=rf.parse(t.sdp);return cf.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return uf.debug("getNativeSctpCapabilities()"),{numStreams:hf}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){uf.debug("run()"),this._direction=e,this._remoteSdp=new pf.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:of.getSendingRtpParameters("audio",d),video:of.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:of.getSendingRemoteRtpParameters("audio",d),video:of.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(uf.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){uf.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(uf.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});uf.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();uf.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),uf.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&uf.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let i,s=await this._pc.createOffer(),a=rf.parse(s.sdp);const o=af.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=of.reduceCodecs(o.codecs);const c=af.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=of.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(uf.debug("send() | enabling simulcast"),a=rf.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),df.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:rf.write(a)}),uf.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=rf.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=cf.getCname({offerMediaObject:i}),o.encodings=df.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&("video/vp8"===o.codecs[0].mimeType.toLowerCase()||"video/h264"===o.codecs[0].mimeType.toLowerCase()))for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(l,e),{localId:l,rtpParameters:o}}async stopSending(e){this.assertSendDirection(),uf.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdTrack.get(e);if(!t)throw new Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);const r=await this._pc.createOffer();uf.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void uf.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new sf.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new sf.UnsupportedError("not implemented")}async setRtpEncodingParameters(e,t){throw new sf.UnsupportedError("not implemented")}async getSenderStats(e){throw new sf.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};uf.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%hf.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=rf.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),uf.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i}=t;uf.debug("receive() [trackId:%s, kind:%s]",e,n);const s=n;let a=t.streamId||i.rtcp.cname;uf.debug("receive() | forcing a random remote streamId to avoid well known bug in react-native-webrtc"),a+=`-hack-${af.generateRandomNumber()}`,r.set(e,a),this._remoteSdp.receive({mid:s,kind:n,offerRtpParameters:i,streamId:a,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=rf.parse(i.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,i=s.media.find((e=>String(e.mid)===n));cf.applyCodecParameters({offerRtpParameters:r,answerMediaObject:i})}i={type:"answer",sdp:rf.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),uf.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{kind:e,trackId:i,rtpParameters:s}=n,a=i,o=e,c=r.get(i),d=this._pc.getRemoteStreams().find((e=>e.id===c)).getTrackById(a);if(!d)throw new Error("remote track not found");this._mapRecvLocalIdInfo.set(a,{mid:o,rtpParameters:s}),t.push({localId:a,track:d})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){uf.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();uf.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new sf.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};uf.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=rf.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}uf.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=rf.parse(this._pc.localDescription.sdp));const r=cf.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}Xm.ReactNative=mf;var ff=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),gf=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),vf=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ff(t,e,r);return gf(t,e),t};Object.defineProperty(Ad,"__esModule",{value:!0}),Ad.Device=Ad.detectDevice=void 0;const yf=Fd,_f=Bd,bf=$d,wf=tl,Sf=vf(il),Cf=vf(sl),Rf=Tl,Tf=yp,Pf=du,kf=ku,Ef=$u,Df=sh,Of=wh,If=Fh,xf=rm,Mf=vm,jf=jm,Lf=Xm,Af=new _f.Logger("Device");function Nf(){if("object"==typeof navigator&&"ReactNative"===navigator.product)return Af.debug("detectDevice() | React-Native detected"),"undefined"==typeof RTCPeerConnection?void Af.warn("detectDevice() | unsupported react-native-webrtc without RTCPeerConnection, forgot to call registerGlobals()?"):"undefined"!=typeof RTCRtpTransceiver?(Af.debug("detectDevice() | ReactNative UnifiedPlan handler chosen"),"ReactNativeUnifiedPlan"):(Af.debug("detectDevice() | ReactNative PlanB handler chosen"),"ReactNative");if("object"!=typeof navigator||"string"!=typeof navigator.userAgent)Af.warn("detectDevice() | unknown device");else{const e=navigator.userAgent,t=new yf.UAParser(e);Af.debug("detectDevice() | browser detected [ua:%s, parsed:%o]",e,t.getResult());const r=t.getBrowser(),n=r.name?.toLowerCase()??"",i=parseInt(r.major??"0"),s=t.getEngine(),a=s.name?.toLowerCase()??"",o=t.getOS(),c=o.name?.toLowerCase()??"",d=parseFloat(o.version??"0"),l="ios"===c,p=["chrome","chromium","mobile chrome","chrome webview","chrome headless"].includes(n),u=["firefox","mobile firefox","mobile focus"].includes(n),h=["safari","mobile safari"].includes(n),m=["edge"].includes(n);if((p||m)&&!l&&i>=111)return"Chrome111";if(p&&!l&&i>=74||m&&!l&&i>=88)return"Chrome74";if(p&&!l&&i>=70)return"Chrome70";if(p&&!l&&i>=67)return"Chrome67";if(p&&!l&&i>=55)return"Chrome55";if(u&&!l&&i>=60)return"Firefox60";if(u&&l&&d>=14.3)return"Safari12";if(h&&i>=12&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if(h&&i>=11)return"Safari11";if(m&&!l&&i>=11&&i<=18)return"Edge11";if("webkit"===a&&l&&d>=14.3&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if("blink"===a){const t=e.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);if(t){const e=Number(t[1]);return e>=111?"Chrome111":e>=74?"Chrome74":e>=70?"Chrome70":e>=67?"Chrome67":"Chrome55"}return"Chrome111"}Af.warn("detectDevice() | browser not supported [name:%s, version:%s]",n,i)}}Ad.detectDevice=Nf;Ad.Device=class{constructor({handlerName:e,handlerFactory:t,Handler:r}={}){if(this._loaded=!1,this._observer=new bf.EnhancedEventEmitter,Af.debug("constructor()"),r){if(Af.warn("constructor() | Handler option is DEPRECATED, use handlerName or handlerFactory instead"),"string"!=typeof r)throw new TypeError("non string Handler option no longer supported, use handlerFactory instead");e=r}if(e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)Af.debug("constructor() | handler given: %s",e);else{if(!(e=Nf()))throw new wf.UnsupportedError("device not supported");Af.debug("constructor() | detected handler: %s",e)}switch(e){case"Chrome111":this._handlerFactory=Tf.Chrome111.createFactory();break;case"Chrome74":this._handlerFactory=Pf.Chrome74.createFactory();break;case"Chrome70":this._handlerFactory=kf.Chrome70.createFactory();break;case"Chrome67":this._handlerFactory=Ef.Chrome67.createFactory();break;case"Chrome55":this._handlerFactory=Df.Chrome55.createFactory();break;case"Firefox60":this._handlerFactory=Of.Firefox60.createFactory();break;case"Safari12":this._handlerFactory=If.Safari12.createFactory();break;case"Safari11":this._handlerFactory=xf.Safari11.createFactory();break;case"Edge11":this._handlerFactory=Mf.Edge11.createFactory();break;case"ReactNativeUnifiedPlan":this._handlerFactory=jf.ReactNativeUnifiedPlan.createFactory();break;case"ReactNative":this._handlerFactory=Lf.ReactNative.createFactory();break;default:throw new TypeError(`unknown handlerName "${e}"`)}}const n=this._handlerFactory();this._handlerName=n.name,n.close(),this._extendedRtpCapabilities=void 0,this._recvRtpCapabilities=void 0,this._canProduceByKind={audio:!1,video:!1},this._sctpCapabilities=void 0}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new wf.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new wf.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e}){let t;Af.debug("load() [routerRtpCapabilities:%o]",e),e=Sf.clone(e,void 0);try{if(this._loaded)throw new wf.InvalidStateError("already loaded");Cf.validateRtpCapabilities(e),t=this._handlerFactory();const r=await t.getNativeRtpCapabilities();Af.debug("load() | got native RTP capabilities:%o",r),Cf.validateRtpCapabilities(r),this._extendedRtpCapabilities=Cf.getExtendedRtpCapabilities(r,e),Af.debug("load() | got extended RTP capabilities:%o",this._extendedRtpCapabilities),this._canProduceByKind.audio=Cf.canSend("audio",this._extendedRtpCapabilities),this._canProduceByKind.video=Cf.canSend("video",this._extendedRtpCapabilities),this._recvRtpCapabilities=Cf.getRecvRtpCapabilities(this._extendedRtpCapabilities),Cf.validateRtpCapabilities(this._recvRtpCapabilities),Af.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._sctpCapabilities=await t.getNativeSctpCapabilities(),Af.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),Cf.validateSctpCapabilities(this._sctpCapabilities),Af.debug("load() succeeded"),this._loaded=!0,t.close()}catch(e){throw t&&t.close(),e}}canProduce(e){if(!this._loaded)throw new wf.InvalidStateError("not loaded");if("audio"!==e&&"video"!==e)throw new TypeError(`invalid kind "${e}"`);return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d}){return Af.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d}){return Af.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,appData:l}){if(!this._loaded)throw new wf.InvalidStateError("not loaded");if("string"!=typeof t)throw new TypeError("missing id");if("object"!=typeof r)throw new TypeError("missing iceParameters");if(!Array.isArray(n))throw new TypeError("missing iceCandidates");if("object"!=typeof i)throw new TypeError("missing dtlsParameters");if(s&&"object"!=typeof s)throw new TypeError("wrong sctpParameters");if(l&&"object"!=typeof l)throw new TypeError("if given, appData must be an object");const p=new Rf.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,appData:l,handlerFactory:this._handlerFactory,extendedRtpCapabilities:this._extendedRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",p),p}};var Ff={},Bf={};Object.defineProperty(Bf,"__esModule",{value:!0});var Uf={};Object.defineProperty(Uf,"__esModule",{value:!0}),function(e){var t=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=Ki&&Ki.__exportStar||function(e,r){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(r,n)||t(r,e,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(Ad,e),r(Tl,e),r(Ll,e),r(Ul,e),r(Gl,e),r(Yl,e),r(Bf,e),r(Uf,e),r(Pp,e),r(tl,e)}(Ff),function(e){var t=Ki&&Ki.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=Ki&&Ki.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=Ki&&Ki.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=Ki&&Ki.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.debug=e.parseScalabilityMode=e.detectDevice=e.Device=e.version=e.types=void 0;const s=i(Ld);e.debug=s.default;const a=Ad;Object.defineProperty(e,"Device",{enumerable:!0,get:function(){return a.Device}}),Object.defineProperty(e,"detectDevice",{enumerable:!0,get:function(){return a.detectDevice}});const o=n(Ff);e.types=o,e.version="3.6.100";var c=qp;Object.defineProperty(e,"parseScalabilityMode",{enumerable:!0,get:function(){return c.parse}})}(Id);class zf{static parse(e){let t;try{t=JSON.parse(e)}catch(e){return}if("object"==typeof t&&!Array.isArray(t))return t.request?zf._handleRequest(t):t.response?zf._handleResponse(t):t.message?zf._handleMessage(t):void 0}static _handleRequest(e){const t={request:!0};if("string"==typeof e.method&&"number"==typeof e.id)return t.id=e.id,t.method=e.method,t.data=e.data||{},t}static _handleResponse(e){const t={response:!0};if("number"==typeof e.id)return t.id=e.id,e.ok?(t.ok=!0,t.data=e.data||{}):(t.ok=!1,t.errorCode=e.errorCode,t.errorReason=e.errorReason),t}static _handleMessage(e){const t={message:!0};if("string"==typeof e.method)return t.method=e.method,t.data=e.data||{},t}static createRequest(e,t){return{request:!0,id:Math.round(1e7*Math.random()),method:e,data:t||{}}}static createSuccessResponse(e,t){return{response:!0,id:e.id,ok:!0,data:t||{}}}static createErrorResponse(e,t,r){return{response:!0,id:e.id,errorCode:t,errorReason:r}}static createMessage(e,t){return{message:!0,method:e,data:t||{}}}}class Vf extends Gd{constructor(e,t,r="whereby-sfu#v4"){super(),this.wsUrl=e,this.logger=t,this.protocol=r,this.sents=new Map,this._setupSocket()}_setupSocket(){this.socket=new WebSocket(this.wsUrl,this.protocol),this.socket.onopen=this._onOpen.bind(this),this.socket.onmessage=this._onMessage.bind(this),this.socket.onclose=this._onClose.bind(this),this.socket.onerror=this._onError.bind(this)}_tearDown(){this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket=null,this.sents.forEach((e=>e.close())),this.emit("close")}close(){this.socket?.close()}_onOpen(){this.logger.log("VegaConnectionManager: Connected"),this.emit("open")}_onMessage(e){const t=zf.parse(e.data);this.logger.log("VegaConnectionManager: Received message",t),t?.response?this._handleResponse(t):t?.message&&this.emit("message",t)}_onClose(){this.logger.log("VegaConnectionManager: Disconnected"),this._tearDown()}_onError(e){this.logger.log("VegaConnectionManager: Error",e)}_handleResponse(e){const t=this.sents.get(e.id);if(e.ok)t.resolve(e.data);else{const r=new Error(e.errorReason);t.reject(r)}}send(e){try{this.socket.send(JSON.stringify(e))}catch(e){}}message(e,t={}){const r=zf.createMessage(e,t);this.send(r)}request(e,t={},r=1500*(15+.1*this.sents.size)){const n=zf.createRequest(e,t);return this.send(n),new Promise(((e,t)=>{const i={id:n.id,method:n.method,resolve:t=>{this.sents.delete(n.id)&&(clearTimeout(i.timer),e(t))},reject:e=>{this.sents.delete(n.id)&&(clearTimeout(i.timer),t(e))},timer:setTimeout((()=>{this.sents.delete(n.id)&&t(new Error("request timeout"))}),r),close:()=>{clearTimeout(i.timer),t(new Error("transport closed"))}};this.sents.set(n.id,i)}))}}const $f={codecOptions:{opusDtx:!0,opusFec:!0},encodings:[{dtx:!0}]},qf={codecOptions:{videoGoogleStartBitrate:500},encodings:[{scaleResolutionDownBy:4,maxBitrate:15e4},{scaleResolutionDownBy:2,maxBitrate:5e5},{scaleResolutionDownBy:1,maxBitrate:1e6}]},Gf={codecOptions:{videoGoogleStartBitrate:500},encodings:[{scaleResolutionDownBy:2,maxBitrate:15e4},{scaleResolutionDownBy:1,maxBitrate:5e5}]},Wf={codecOptions:{videoGoogleStartBitrate:500},encodings:[{scalabilityMode:"L3T2_KEY"}]},Kf={encodings:[{}]},Jf={encodings:[{scaleResolutionDownBy:2,dtx:!0,maxBitrate:5e5},{scaleResolutionDownBy:1,dtx:!0,maxBitrate:15e5}]},Hf={encodings:[{dtx:!0}]},Yf=(e,t,r)=>{const{lowDataModeEnabled:n,simulcastScreenshareOn:i,vp9On:s}=r;return"audio"===e?$f:t?s?Hf:i?Jf:Kf:s?Wf:n?Gf:qf},Qf=()=>{let e=Id.detectDevice()||(/applecoremedia|applewebkit|safari/i.test(navigator.userAgent)?"Safari12":void 0);return/iphone|ipad/i.test(navigator.userAgent)&&(e="Safari12"),e};var Xf=Object.freeze({__proto__:null,KalmanFilter:class{constructor({R:e=.01,Q:t=2,A:r=1.1,B:n=1,C:i=1.2}={R:.01,Q:2,A:1.1,B:1,C:1.2}){this.R=e,this.Q=t,this.A=r,this.C=i,this.B=n,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{const r=this.predict(t),n=this.uncertainty(),i=n*this.C*(1/(this.C*n*this.C+this.Q));this.x=r+i*(e-this.C*r),this.cov=n-i*this.C*n}return this.x}predict(e=0){return this.A*this.x+this.B*e}uncertainty(){return this.A*this.cov*this.A+this.R}lastMeasurement(){return this.x}setMeasurementNoise(e){this.Q=e}setProcessNoise(e){this.R=e}},calculateStd:e=>{const t=e.reduce(((e,t)=>e+t),0)/e.length;return e.reduce(((e,r)=>e.concat((r-t)**2)),[]).reduce(((e,t)=>e+t),0)/e.length},createACFCalculator:()=>{let e=-1,t=0,r=0;return n=>{const i=n.reduce(((e,t)=>e+t),0)/n.length;if(e=e<0?i:.95*e+.05*i,++r<2)return t=i,0;const s=(i-e)*(t-e);return t=i,s}},standardDeviation:e=>{const t=e.reduce(((e,t)=>e+t),0)/e.length;return{mean:t,SD:Math.sqrt(e.reduce(((e,r)=>e+(r-t)**2),0)/e.length)}},variance:(e,t=!1)=>{const r=e.reduce(((e,t)=>e+t),0)/e.length;return e.reduce(((e,t)=>e.concat((t-r)**2)),[]).reduce(((e,t)=>e+t),0)/(e.length-(t?0:1))}});const Zf={minDecibels:-80,maxDecibels:-10,smoothingTimeConstant:.8,aggSize:1,sampleRate:10,reportRate:2,bins:32,bands:[[0,1,2,3],[4,5,6,7]],separateTrack:{autoGainControl:!1,noiseSupression:!1},binFormula:"bin",scoreFormula:"300 * bands[1].avg / Math.max(bands[1].avg + bands[0].avg, 0.01)",outFormula:"score"};const eg=zs.browserDetails.browser;let tg=!1;const rg=hd(),ng=hd();"chrome"===eg&&window.document.addEventListener("beforeunload",(()=>tg=!0));class ig{constructor({selfId:e,room:t,emitter:r,serverSocket:n,webrtcProvider:i,features:s,eventClaim:a,logger:o=console}){ya.ok(e,"selfId is required"),ya.ok(t,"room is required"),ya.ok(r&&r.emit,"emitter is required"),ya.ok(n instanceof Vs,"serverSocket is required"),ya.ok(i,"webrtcProvider is required");const{session:c,iceServers:d,sfuServer:l,mediaserverConfigTtlSeconds:p}=t;this._selfId=e,this._room=t,this._roomSessionId=c?.id,this._emitter=r,this._serverSocket=n,this._webrtcProvider=i,this._features=s||{},this._eventClaim=a,this._logger=o,this._vegaConnection=null,this._micAnalyser=null,this._micAnalyserDebugger=null,this._mediasoupDevice=new Id.Device({handlerName:Qf()}),this._routerRtpCapabilities=null,this._sendTransport=null,this._receiveTransport=null,this._clientStates=new Map,this._streamIdToVideoConsumerId=new Map,this._consumers=new Map,this._dataConsumers=new Map,this._localStreamDeregisterFunction=null,this._micTrack=null,this._webcamTrack=null,this._screenVideoTrack=null,this._screenAudioTrack=null,this._micProducer=null,this._micProducerPromise=null,this._micPaused=!1,this._micScoreProducer=null,this._micScoreProducerPromise=null,this._webcamProducer=null,this._webcamProducerPromise=null,this._webcamPaused=!1,this._screenVideoProducer=null,this._screenVideoProducerPromise=null,this._screenAudioProducer=null,this._screenAudioProducerPromise=null,this._sndTransportIceRestartPromise=null,this._rcvTransportIceRestartPromise=null,this._colocation=null,this._stopCameraTimeout=null,this._audioTrackOnEnded=()=>{gd.sendEvent("audio_ended",{unloading:tg}),this._emitToPWA(pc,{})},this._updateAndScheduleMediaServersRefresh({sfuServer:l,iceServers:d.iceServers||[],mediaserverConfigTtlSeconds:p}),this._socketListenerDeregisterFunctions=[],this._reconnect=!0,this._reconnectTimeOut=null}_updateAndScheduleMediaServersRefresh({iceServers:e,sfuServer:t,mediaserverConfigTtlSeconds:r}){this._iceServers=e,this._sfuServer=t,this._mediaserverConfigTtlSeconds=r,this._sendTransport?.updateIceServers({iceServers:this._iceServers}),this._receiveTransport?.updateIceServers({iceServers:this._iceServers}),this._clearMediaServersRefresh(),r&&(this._fetchMediaServersTimer=setTimeout((()=>this._emitToSignal(Yo)),1e3*r))}_clearMediaServersRefresh(){this._fetchMediaServersTimer&&(clearTimeout(this._fetchMediaServersTimer),this._fetchMediaServersTimer=null)}setupSocketListeners(){this._socketListenerDeregisterFunctions.push((()=>this._clearMediaServersRefresh()),this._serverSocket.on(Zo,(e=>{e.error?this._logger.warn("FETCH_MEDIASERVER_CONFIG failed:",e.error):this._updateAndScheduleMediaServersRefresh(e)})),this._serverSocket.on(ec,(()=>{this._screenVideoTrack&&this._emitScreenshareStarted()}))),this._connect()}_emitScreenshareStarted(){this._emitToSignal(Qo,{streamId:ng,hasAudioTrack:Boolean(this._screenAudioTrack)})}_connect(){const e=`wss://${this._features.sfuServerOverrideHost||[this._sfuServer.url]}?${new URLSearchParams({clientId:this._selfId,organizationId:this._room.organizationId,roomName:this._room.name,eventClaim:this._room.isClaimed?this._eventClaim:null,lowBw:!0}).toString()}`;this._vegaConnection=new Vf(e,this._logger),this._vegaConnection.on("open",(()=>this._join())),this._vegaConnection.on("close",(()=>this._onClose())),this._vegaConnection.on("message",(e=>this._onMessage(e)))}_onClose(){this._logger.debug("_onClose()"),this._sendTransport?.close(),this._receiveTransport?.close(),this._sendTransport=null,this._receiveTransport=null,this._streamIdToVideoConsumerId.clear(),this._reconnect&&(this._reconnectTimeOut=setTimeout((()=>this._connect()),1e3))}async _join(){this._logger.debug("join()");try{const{routerRtpCapabilities:e}=await this._vegaConnection.request("getCapabilities");this._routerRtpCapabilities||(((e,t)=>{const{vp9On:r,h264On:n}=t;if(r){const{preferredPayloadType:t}=e.codecs.find((e=>"video/vp9"===e.mimeType.toLowerCase())),{preferredPayloadType:r}=e.codecs.find((e=>"video/rtx"===e.mimeType.toLowerCase()&&e.parameters.apt===t));e.codecs=e.codecs.filter((e=>"audio"===e.kind||e.preferredPayloadType===t||e.preferredPayloadType===r))}else if(n){const{preferredPayloadType:t}=e.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase())),{preferredPayloadType:r}=e.codecs.find((e=>"video/rtx"===e.mimeType.toLowerCase()&&e.parameters.apt===t));e.codecs=e.codecs.filter((e=>"audio"===e.kind||e.preferredPayloadType===t||e.preferredPayloadType===r))}})(e,this._features),this._routerRtpCapabilities=e,await this._mediasoupDevice.load({routerRtpCapabilities:e})),this._vegaConnection.message("setCapabilities",{rtpCapabilities:this._mediasoupDevice.rtpCapabilities}),this._colocation&&this._vegaConnection.message("setColocation",{colocation:this._colocation}),await Promise.all([this._createTransport(!0),this._createTransport(!1)]);const t=[];!this._micTrack||this._micProducer||this._micProducerPromise||t.push(this._internalSendMic()),!this._webcamTrack||this._webcamProducer||this._webcamProducerPromise||t.push(this._internalSendWebcam()),!this._screenVideoTrack||this._screenVideoProducer||this._screenVideoProducerPromise||t.push(this._internalSendScreenVideo()),!this._screenAudioTrack||this._screenAudioProducer||this._screenAudioProducerPromise||t.push(this._internalSendScreenAudio()),await Promise.all(t)}catch(e){this._logger.error("_join() [error:%o]",e)}}async _createTransport(e){const t=e?"createSendTransport":"createRecvTransport",r=await this._vegaConnection.request("createTransport",{producing:e,consuming:!e,enableTcp:!0,enableUdp:!0,preferUdp:!0,sctpParameters:{enableSctp:!0,numSctpStreams:{OS:1024,MIS:1024},maxSctpMessageSize:262144,sctpSendBufferSize:262144}});r.iceServers=this._iceServers,((e,t)=>{if(!t.useOnlyTURN)return;e.iceTransportPolicy="relay";const r={onlyudp:/^turn:.*transport=udp$/,onlytcp:/^turn:.*transport=tcp$/,onlytls:/^turns:.*transport=tcp$/}[t.useOnlyTURN];r&&(e.iceServers=e.iceServers.filter((e=>e.url&&e.url.match(r))))})(r,this._features);const n=this._mediasoupDevice[t](r),i=async t=>{if(this._logger.debug(`Transport ConnectionStateChanged ${t}`),"disconnected"===t||"failed"===t)if(e){if(this._sndTransportIceRestartPromise)return;this._sndTransportIceRestartPromise=this._restartIce(n).finally((()=>{this._sndTransportIceRestartPromise=null}))}else{if(this._rcvTransportIceRestartPromise)return;this._rcvTransportIceRestartPromise=this._restartIce(n).finally((()=>{this._rcvTransportIceRestartPromise=null}))}};n.on("connect",(({dtlsParameters:e},t)=>{this._vegaConnection?.message("connectTransport",{transportId:n.id,dtlsParameters:e}),t()})).on("connectionstatechange",i),n.observer.once("close",(()=>{n.removeListener(i)})),e?(n.on("produce",(async({kind:e,rtpParameters:t,appData:r},i,s)=>{try{const{paused:s}=r,{id:a}=await(this._vegaConnection?.request("produce",{transportId:n.id,kind:e,rtpParameters:t,paused:s,appData:r}));i({id:a})}catch(e){s(e)}})),n.on("producedata",(async({appData:e,sctpStreamParameters:t},r,i)=>{try{const{id:i}=await(this._vegaConnection?.request("produceData",{transportId:n.id,sctpStreamParameters:t,appData:e}));r({id:i})}catch(e){i(e)}})),this._sendTransport=n):this._receiveTransport=n}async _restartIce(e,t=0){if(!e||!("closed"in e)||!("connectionState"in e))return void this._logger.debug("_restartIce: No transport or property closed or connectionState!");if(e.closed)return void this._logger.debug("_restartIce: Transport is closed!");if("disconnected"!==e.connectionState&&"failed"!==e.connectionState)return void this._logger.debug("_restartIce: Connection is healthy ICE restart no loneger needed!");const{iceRestartStarted:r}=e.appData,n=Date.now();if(Number.isFinite(r)&&n-r<3500)return;if(e.appData.iceRestartStarted=n,5<=t)return void this._logger.debug("_restartIce: Reached restart ICE maximum retry count!");if(!this._vegaConnection)return void this._logger.debug("_restartIce: Connection is undefined");const{iceParameters:i}=await this._vegaConnection.request("restartIce",{transportId:e.id});this._logger.debug("_restartIce: ICE restart iceParameters received from SFU: ",i);const s=await e.restartIce({iceParameters:i}).then((()=>null)).catch((e=>e));if(s)switch(this._logger.error(`_restartIce: ICE restart failed: ${s}`),s.message){case"missing transportId":case"no such transport":break;default:await new Promise((e=>{setTimeout((()=>{e()}),Math.min(3500*2**t,6e4))})),await this._restartIce(e,t+1)}else await new Promise((e=>{setTimeout((()=>{e()}),6e4*Math.min(8,t+1))})),"failed"!==e.connectionState&&"disconnected"!==e.connectionState||await this._restartIce(e,t+1)}async _internalSendMic(){this._logger.debug("_internalSendMic()"),this._micProducerPromise=(async()=>{try{if(!this._micTrack||!this._sendTransport||this._micProducer)return void(this._micProducerPromise=null);const e=this._micPaused,t=await this._sendTransport.produce({track:this._micTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("audio",!1,this._features),appData:{streamId:rg,sourceClientId:this._selfId,screenShare:!1,source:"mic",paused:e}});e?t.pause():t.resume(),this._micProducer=t,t.observer.once("close",(()=>{this._logger.debug('micProducer "close" event'),t.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[t.id]}),this._micProducer=null,this._micProducerPromise=null})),this._micTrack!==this._micProducer.track&&await this._replaceMicTrack(),this._micPaused!==this._micProducer.paused&&this._pauseResumeMic()}catch(e){this._logger.error("micProducer failed:%o",e)}finally{this._micProducerPromise=null,this._micTrack||(this._stopProducer(this._micProducer),this._micProducer=null)}})()}async _internalSetupMicScore(){this._logger.debug("_internalSetupMicScore()"),this._micScoreProducerPromise=(async()=>{try{if(!this._micProducer||!this._colocation||this._micScoreProducer)return void(this._micScoreProducerPromise=null);const e=await this._sendTransport.produceData({ordered:!1,maxPacketLifeTime:3e3,label:"micscore",appData:{producerId:this._micProducer.id,clientId:this._selfId}});this._micScoreProducer=e,e.observer.once("close",(()=>{this._logger.debug('micScoreProducer "close" event'),e.appData.localClosed&&this._vegaConnection?.message("closeDataProducers",{dataProducerIds:[e.id]}),this._micScoreProducer=null,this._micScoreProducerPromise=null}))}catch(e){this._logger.error("micScoreProducer failed:%o",e)}finally{this._micScoreProducerPromise=null,this._micProducer&&this._colocation||this._stopMicScoreProducer()}})()}_stopMicScoreProducer(){this._stopProducer(this._micScoreProducer),this._micScoreProducer=null}async _replaceMicTrack(){this._logger.debug("_replaceMicTrack()"),this._micTrack&&this._micProducer&&!this._micProducer.closed&&this._micProducer.track!==this._micTrack&&(await this._micProducer.replaceTrack({track:this._micTrack}),this._micAnalyser?.setTrack(this._micTrack),await this._replaceMicTrack())}_pauseResumeMic(){this._logger.debug("_pauseResumeMic()"),this._micProducer&&!this._micProducer.closed&&this._micPaused!==this._micProducer.paused&&(this._micPaused?(this._micProducer.pause(),this._vegaConnection?.message("pauseProducers",{producerIds:[this._micProducer.id]})):(this._micProducer.resume(),this._vegaConnection?.message("resumeProducers",{producerIds:[this._micProducer.id]})),this._pauseResumeMic())}async _sendMic(e){return this._logger.debug("_sendMic() [track:%o]",e),this._micTrack=e,this._micProducer?await this._replaceMicTrack():this._micProducerPromise?void 0:this._sendTransport?await this._internalSendMic():void 0}_sendMicScore(e){if(!isNaN(e)&&isFinite(e))if(this._micScoreProducer){if(this._micScoreProducer.closed)return void this._stopMicScoreProducer();try{this._micScoreProducer.send(JSON.stringify({score:e}))}catch(e){console.error("_sendMicScore failed [error:%o]",e)}}else!this._micScoreProducerPromise&&this._micProducer&&this._colocation&&0!==e&&this._internalSetupMicScore()}async _internalSendWebcam(){this._logger.debug("_internalSendWebcam()"),this._webcamProducerPromise=(async()=>{try{if(!this._webcamTrack||!this._sendTransport||this._webcamProducer)return void(this._webcamProducerPromise=null);const e=this._webcamPaused,t=await this._sendTransport.produce({track:this._webcamTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("video",!1,this._features),appData:{streamId:rg,sourceClientId:this._selfId,screenShare:!1,source:"webcam",paused:e}});e?t.pause():t.resume(),this._webcamProducer=t,t.observer.once("close",(()=>{this._logger.debug('webcamProducer "close" event'),t.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[t.id]}),this._webcamProducer=null,this._webcamProducerPromise=null})),this._webcamTrack!==this._webcamProducer.track&&await this._replaceWebcamTrack(),this._webcamPaused!==this._webcamProducer.paused&&this._pauseResumeWebcam()}catch(e){this._logger.error("webcamProducer failed:%o",e)}finally{this._webcamProducerPromise=null,this._webcamTrack||(await this._stopProducer(this._webcamProducer),this._webcamProducer=null)}})()}async _replaceWebcamTrack(){this._logger.debug("_replaceWebcamTrack()"),this._webcamTrack&&this._webcamProducer&&!this._webcamProducer.closed&&this._webcamProducer.track!==this._webcamTrack&&(await this._webcamProducer.replaceTrack({track:this._webcamTrack}),await this._replaceWebcamTrack())}_pauseResumeWebcam(){this._logger.debug("_pauseResumeWebcam()"),this._webcamProducer&&!this._webcamProducer.closed&&this._webcamPaused!==this._webcamProducer.paused&&(this._webcamPaused?(this._webcamProducer.pause(),this._vegaConnection?.message("pauseProducers",{producerIds:[this._webcamProducer.id]})):(this._webcamProducer.resume(),this._vegaConnection?.message("resumeProducers",{producerIds:[this._webcamProducer.id]})),this._pauseResumeWebcam())}async _sendWebcam(e){return this._logger.debug("_sendWebcam() [track:%o]",e),this._webcamTrack=e,this._webcamProducer?await this._replaceWebcamTrack():this._webcamProducerPromise?void 0:this._sendTransport?await this._internalSendWebcam():void 0}async _internalSendScreenVideo(){this._logger.debug("_internalSendScreenVideo()"),this._screenVideoProducerPromise=(async()=>{try{if(!this._screenVideoTrack||!this._sendTransport||this._screenVideoProducer)return void(this._screenVideoProducerPromise=null);const e=await this._sendTransport.produce({track:this._screenVideoTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("video",!0,this._features),appData:{streamId:ng,sourceClientId:this._selfId,screenShare:!0,source:"screenvideo",paused:!1}});this._screenVideoProducer=e,e.observer.once("close",(()=>{this._logger.debug('screenVideoProducer "close" event'),e.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[e.id]}),this._screenVideoProducer=null,this._screenVideoProducerPromise=null})),this._screenVideoTrack!==this._screenVideoProducer.track&&await this._replaceScreenVideoTrack()}catch(e){this._logger.error("screenVideoProducer failed:%o",e)}finally{this._screenVideoProducerPromise=null,this._screenVideoTrack||(await this._stopProducer(this._screenVideoProducer),this._screenVideoProducer=null)}})()}async _replaceScreenVideoTrack(){this._logger.debug("_replaceScreenVideoTrack()"),this._screenVideoTrack&&this._screenVideoProducer&&!this._screenVideoProducer.closed&&this._screenVideoProducer.track!==this._screenVideoTrack&&(await this._screenVideoProducer.replaceTrack({track:this._screenVideoTrack}),await this._replaceScreenVideoTrack())}async _sendScreenVideo(e){return this._logger.debug("_sendScreenVideo() [track:%o]",e),this._screenVideoTrack=e,this._screenVideoProducer?await this._replaceScreenVideoTrack():this._screenVideoProducerPromise?void 0:this._sendTransport?await this._internalSendScreenVideo():void 0}async _internalSendScreenAudio(){this._logger.debug("_internalSendScreenAudio()"),this._screenAudioProducerPromise=(async()=>{try{if(!this._screenAudioTrack||!this._sendTransport||this._screenAudioProducer)return void(this._screenAudioProducerPromise=null);const e=await this._sendTransport.produce({track:this._screenAudioTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("video",!0,this._features),appData:{streamId:ng,sourceClientId:this._selfId,screenShare:!0,source:"screenaudio",paused:!1}});this._screenAudioProducer=e,e.observer.once("close",(()=>{this._logger.debug('screenAudioProducer "close" event'),e.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[e.id]}),this._screenAudioProducer=null,this._screenAudioProducerPromise=null})),this._screenAudioTrack!==this._screenAudioProducer.track&&await this._replaceScreenAudioTrack()}catch(e){this._logger.error("screenAudioProducer failed:%o",e)}finally{this._screenAudioProducerPromise=null,this._screenAudioTrack||(await this._stopProducer(this._screenAudioProducer),this._screenAudioProducer=null)}})()}async _replaceScreenAudioTrack(){this._logger.debug("_replaceScreenAudioTrack()"),this._screenAudioTrack&&this._screenAudioProducer&&!this._screenAudioProducer.closed&&this._screenAudioProducer.track!==this._screenAudioTrack&&(await this._screenAudioProducer.replaceTrack({track:this._screenAudioTrack}),await this._replaceScreenAudioTrack())}async _sendScreenAudio(e){return this._logger.debug("_sendScreenAudio() [track:%o]",e),this._screenAudioTrack=e,this._screenAudioProducer?await this._replaceScreenAudioTrack():this._screenAudioProducerPromise?void 0:this._sendTransport?await this._internalSendScreenAudio():void 0}_stopProducer(e){this._logger.debug("_stopProducer()"),e&&!e.closed&&(e.appData.localClosed=!0,e.close())}isInitializedWith({selfId:e,roomName:t,isSfu:r}){return this._selfId===e&&this._room.name===t&&Boolean(r)}setEventClaim(e){this._eventClaim=e,this._vegaConnection?.message("eventClaim",{eventClaim:e})}setColocation(e){this._colocation=e,this._vegaConnection?.message("setColocation",{colocation:e}),e||!this._micScoreProducer||this._micScoreProducerPromise||this._stopMicScoreProducer(),this._syncMicAnalyser(),gd.sendEvent("colocation_changed",{colocation:e})}setRoomSessionId(e){this._roomSessionId=e}disconnect(e,t,r){if(this._logger.debug("disconnect() [clientIdOrStreamId:%s, eventClaim:%s]",e,r),this._clientStates.has(e)){const t=this._clientStates.get(e);t.hasAcceptedWebcamStream=!1,t.hasAcceptedScreenStream=!1,this._syncIncomingStreamsWithPWA(e)}r&&(this._eventClaim=r,this._vegaConnection?.message("eventClaim",{eventClaim:r}))}replaceTrack(e,t){e&&"audio"===e.kind&&this._stopMonitoringAudioTrack(e),"audio"===t.kind&&(this._startMonitoringAudioTrack(t),this._micTrack=t,this._replaceMicTrack()),"video"===t.kind&&(this._webcamTrack=t,this._replaceWebcamTrack())}removeStream(e,t,r){this._logger.debug("removeStream() [streamId:%s, requestedByClientId:%s]",e,r),this._emitToSignal(Xo,{streamId:ng,requestedByClientId:r}),this._stopProducer(this._screenVideoProducer),this._screenVideoProducer=null,this._screenVideoTrack=null,this._stopProducer(this._screenAudioProducer),this._screenAudioProducer=null,this._screenAudioTrack=null}_onMicAnalyserScoreUpdated(e){this._micAnalyserDebugger?.onScoreUpdated?.(e),this._sendMicScore(this._micPaused?0:e.out)}addNewStream(e,t,r,n){if("0"===e){this._micPaused=r,this._webcamPaused=n;const e=t.getVideoTracks()[0],i=t.getAudioTracks()[0];e&&this._sendWebcam(e),i&&(this._sendMic(i),this._syncMicAnalyser(),this._startMonitoringAudioTrack(i)),this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null);const s=e=>{const{enable:t,track:r}=e.detail;this._webcamPaused=!t,this._pauseResumeWebcam(),this._handleStopOrResumeVideo({enable:t,track:r})};t.addEventListener("stopresumevideo",s),this._localStreamDeregisterFunction=()=>{t.removeEventListener("stopresumevideo",s)}}else{const e=t.getVideoTracks()[0],r=t.getAudioTracks()[0];e&&this._sendScreenVideo(e),r&&this._sendScreenAudio(r),this._emitScreenshareStarted()}}_syncMicAnalyser(){if(!this._micTrack||!this._colocation||this._micAnalyser)return this._micAnalyser&&!this._colocation?(this._micAnalyser.close(),void(this._micAnalyser=null)):void 0;this._micAnalyser=function({micTrack:e,params:t,onScoreUpdated:r}){const n=new AudioContext;let i=null,s=null,a=null,o=!1;const c=async e=>{if(a&&o&&a.stop(),o=!1,e&&t.separateTrack)try{e=(await navigator.mediaDevices.getUserMedia({audio:{deviceId:a?.getSettings().deviceId,...t.separateTrack},video:!1})).getAudioTracks()[0],o=!0}catch(e){console.warn("unable to fetch new track for colocation speaker analysis, using current",e)}if(a=e,s&&(s.disconnect(),s=null),e){const t=new MediaStream([e]);s=n.createMediaStreamSource(t),s.connect(i)}};let d;const l=e=>{if(clearInterval(d),t={...Zf,...e},!i||i.fftSize!==2*t.bins){let e=null;i&&(e=a,c(null)),i=n.createAnalyser(),i.fftSize=2*t.bins,e&&c(e)}const s=new Uint8Array(i.frequencyBinCount),o=[];i.minDecibels=t.minDecibels,i.maxDecibels=t.maxDecibels,i.smoothingTimeConstant=t.smoothingTimeConstant;const l=t.initScript&&new Function("f","setTrack","lastTrack",t.initScript.join("\n")),p=t.scoreScript&&new Function("bins","g","f",t.scoreScript.join("\n")),u=t.scoreFormula&&new Function("bands",`return ${t.scoreFormula}`),h=t.outFormula&&new Function("score","avg","max","scores",`return ${t.outFormula}`),m=t.binFormula&&new Function("bin","index",`return ${t.binFormula}`);let f=0;const g=l&&l(Xf,c,a);d=setInterval((()=>{i.getByteFrequencyData(s);let e=0;if(u){const r=t.bands.map((e=>{const t=e.map((e=>m(s[e]/255,e)));return{avg:t.reduce(((e,t)=>e+t),0)/e.length,min:t.reduce(((e,t)=>Math.min(e,t/255)),Number.MAX_VALUE),max:t.reduce(((e,t)=>Math.max(e,t/255)),0)}}));e=u(r)||0}else p&&(e=p(s,g,Xf),isNaN(e)&&(e=0));if(o.push(e),o.length>t.aggSize&&o.shift(),f++,f>=t.reportRate){f=0;const t=o.reduce(((e,t)=>Math.max(e,t)),0),n=o.reduce(((e,t)=>e+t),0)/o.length,i=h(e,n,t,o);r({bins:s,score:e,max:t,avg:n,out:i})}}),1e3/t.sampleRate)};return l(t),c(e),{setParams:l,setTrack:c,close(){c(null),clearInterval(d),n.close()}}}({micTrack:this._micTrack,onScoreUpdated:this._onMicAnalyserScoreUpdated.bind(this)})}stopOrResumeAudio(e,t){this._logger.debug("stopOrResumeAudio() [enabled:%s]",t),this._micPaused=!t,this._pauseResumeMic()}_handleStopOrResumeVideo({enable:e,track:t}){e?this._sendWebcam(t):this._webcamProducer&&!this._webcamProducer.closed&&this._webcamProducer.track===t&&(this._stopProducer(this._webcamProducer),this._webcamProducer=null,this._webcamTrack=null)}stopOrResumeVideo(e,t){if(this._logger.debug("stopOrResumeVideo() [enable:%s]",t),this._webcamPaused=!t,this._pauseResumeWebcam(),["chrome","safari"].includes(eg))if(t){if(0===e.getVideoTracks().length){const r=this._webrtcProvider.getMediaConstraints().video;navigator.mediaDevices.getUserMedia({video:r}).then((r=>{const n=r.getVideoTracks()[0];e.addTrack(n),this._emitToPWA(qo,{streamId:e.id,tracks:[n],screenShare:!1}),this._handleStopOrResumeVideo({enable:t,track:n})}))}}else clearTimeout(this._stopCameraTimeout),this._stopCameraTimeout=setTimeout((()=>{e.getVideoTracks().forEach((r=>{!1===r.enabled&&(r.stop(),e.removeTrack(r),this._emitToPWA(Go,{stream:e,track:r}),this._handleStopOrResumeVideo({enable:t,track:r}))}))}),5e3)}supportsScreenShareAudio(){return!0}acceptNewStream({streamId:e,clientId:t}){this._logger.debug("acceptNewStream()",{streamId:e,clientId:t}),this.rtcStatsReconnect();const r=this._getOrCreateClientState(t);e!==t?(r.hasAcceptedScreenStream=!0,r.hasEmittedScreenStream=!1):(r.hasAcceptedWebcamStream=!0,r.hasEmittedWebcamStream=!1),this._syncIncomingStreamsWithPWA(t)}updateStreamResolution(e,t,{width:r,height:n}){this._logger.debug("updateStreamResolution()",{streamId:e,width:r,height:n});const i=this._streamIdToVideoConsumerId.get(e),s=this._consumers.get(i);if(!s)return;let a=0;this._consumers.forEach((e=>{e._closed||e._paused||"webcam"!==e._appData?.source&&"screenvideo"!==e._appData?.source||a++}));let o=2;/T3/.test(s._rtpParameters?.encodings?.[0]?.scalabilityMode||"")&&(o=3);const c=Math.max(r,n);let d=c>=480?c>=960?2:1:0,l=o-1;c<100&&(l=Math.max(o-2,0)),a>8&&0===d&&(l=Math.max(o-2,0)),a<4&&c>300&&0===d&&(d=1),s.appData.spatialLayer===d&&s.appData.temporalLayer===l||(s.appData.spatialLayer=d,s.appData.temporalLayer=l,this._vegaConnection?.message("setConsumersPreferredLayers",{consumerIds:[i],spatialLayer:d,temporalLayer:l}))}disconnectAll(){this._reconnect=!1,this._reconnectTimeOut&&(clearTimeout(this._reconnectTimeOut),this._reconnectTimeOut=null),this._socketListenerDeregisterFunctions.forEach((e=>{e()})),this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null),this._socketListenerDeregisterFunctions=[],this._vegaConnection?.removeAllListeners(),this._vegaConnection?.close(),this._sendTransport?.close(),this._receiveTransport?.close(),this._micTrack=null,this._webcamTrack=null,this._screenVideoTrack=null,this._screenAudioTrack=null,this._streamIdToVideoConsumerId.clear(),this._mediasoupDevice=null}sendAudioMutedStats(e){gd.sendEvent("audio_muted",{muted:e})}sendVideoMutedStats(e){gd.sendEvent("video_muted",{muted:e})}sendStatsCustomEvent(e,t){gd.sendEvent(e,t)}rtcStatsDisconnect(){gd.server.close()}rtcStatsReconnect(){gd.server.connected||gd.server.connect()}_startMonitoringAudioTrack(e){e.addEventListener("ended",this._audioTrackOnEnded)}_stopMonitoringAudioTrack(e){e.removeEventListener("ended",this._audioTrackOnEnded)}async _onMessage(e){const{method:t,data:r}=e;return Promise.resolve().then((()=>{switch(t){case"consumerReady":return this._onConsumerReady(r);case"consumerClosed":return this._onConsumerClosed(r);case"consumerPaused":return this._onConsumerPaused(r);case"consumerResumed":return this._onConsumerResumed(r);case"dataConsumerReady":return this._onDataConsumerReady(r);case"dataConsumerClosed":return this._onDataConsumerClosed(r);case"dominantSpeaker":return this._onDominantSpeaker(r);default:return void this._logger.debug(`unknown message method "${t}"`)}})).catch((e=>{console.error('"message" failed [error:%o]',e)}))}async _onConsumerReady(e){this._logger.debug("_onConsumerReady()",{id:e.id,producerId:e.producerId});const t=await this._receiveTransport.consume(e);if(t.pause(),t.appData.localPaused=!0,t.appData.spatialLayer=2,this._consumers.set(t.id,t),t.observer.once("close",(()=>{this._consumers.delete(t.id),this._consumerClosedCleanup(t)})),this._features.increaseIncomingMediaBufferOn&&t.rtpReceiver)try{t.rtpReceiver.jitterBufferTarget=Mc,t.rtpReceiver.playoutDelayHint=.4}catch(e){this._logger.error("Error during setting jitter buffer target:",e)}const{sourceClientId:r,screenShare:n,streamId:i}=t.appData,s=this._getOrCreateClientState(r);n?(s.hasEmittedScreenStream=!1,s.screenShareStreamId=i):(s.hasEmittedWebcamStream=!1,s.camStreamId=i);let a=n?s.screenStream:s.webcamStream;a&&a.inboundId===i||(a=new MediaStream,a.inboundId=i,n?s.screenStream=a:s.webcamStream=a),"video"===t.kind&&this._streamIdToVideoConsumerId.set(a.id,t.id),a.addTrack(t.track),this._syncIncomingStreamsWithPWA(r)}async _onConsumerClosed({consumerId:e,reason:t}){this._logger.debug("_onConsumerClosed()",{consumerId:e,reason:t}),this._consumers.get(e)?.close()}_onConsumerPaused({consumerId:e}){this._logger.debug("_onConsumerPaused()",{consumerId:e});const t=this._consumers.get(e);t&&(t.appData.remotePaused=!0,t.pause())}_onConsumerResumed({consumerId:e}){this._logger.debug("_onConsumerResumed()",{consumerId:e});const t=this._consumers.get(e);t&&(t.appData.remotePaused=!1,t.appData.localPaused||t.resume())}async _onDataConsumerReady(e){this._logger.debug("_onDataConsumerReady()",{id:e.id,producerId:e.producerId});const t=await this._receiveTransport.consumeData(e);this._dataConsumers.set(t.id,t),t.once("close",(()=>{this._dataConsumers.delete(t.id)}));const{clientId:r}=t.appData;t.on("message",(e=>{if(!this._micAnalyserDebugger)return;if("string"!=typeof e)return;const{score:r}=JSON.parse(e);r&&this._micAnalyserDebugger?.onConsumerScore(t.appData.clientId,r)})),this._syncIncomingStreamsWithPWA(r)}async _onDataConsumerClosed({dataConsumerId:e,reason:t}){this._logger.debug("_onDataConsumerClosed()",{dataConsumerId:e,reason:t});const r=this._dataConsumers.get(e);r?.close()}_onDominantSpeaker({consumerId:e}){const t=this._consumers.get(e);if(!t)return;const{sourceClientId:r}=t.appData;this._emitToPWA(uc,{clientId:r})}_consumerClosedCleanup(e){const{sourceClientId:t,screenShare:r}=e.appData,n=this._getOrCreateClientState(t),i=r?n.screenStream:n.webcamStream;i&&(i.removeTrack(e.track),0===i.getTracks().length&&(this._streamIdToVideoConsumerId.delete(i.id),r?(n.screenStream=null,n.hasEmittedScreenStream=!1,n.screenShareStreamId=null):(n.hasEmittedWebcamStream=!1,n.camStreamId=null)))}_syncIncomingStreamsWithPWA(e){const t=this._getOrCreateClientState(e),{webcamStream:r,screenStream:n,hasEmittedWebcamStream:i,hasEmittedScreenStream:s,hasAcceptedWebcamStream:a,hasAcceptedScreenStream:o,screenShareStreamId:c,camStreamId:d}=t,l=[],p=[];this._consumers.forEach((t=>{if(t.appData.sourceClientId!==e)return;const r=t.appData.screenShare?o:a;!t.appData.localPaused!==r&&(r?(t.appData.remotePaused||t.resume(),t.appData.localPaused=!1,p.push(t.id)):(t.pause(),t.appData.localPaused=!0,l.push(t.id)))})),l.length>0&&this._vegaConnection?.message("pauseConsumers",{consumerIds:l}),p.length>0&&this._vegaConnection?.message("resumeConsumers",{consumerIds:p}),r&&!i&&a&&(this._emitToPWA(zo,{clientId:e,stream:r,streamId:d,streamType:"webcam"}),t.hasEmittedWebcamStream=!0),n&&!s&&o&&(this._emitToPWA(zo,{clientId:e,stream:n,streamId:c,streamType:"screenshare"}),t.hasEmittedScreenStream=!0)}_getOrCreateClientState(e){let t=this._clientStates.get(e);return t||(t={hasAcceptedWebcamStream:!1,hasAcceptedScreenStream:!1,hasEmittedWebcamStream:!1,hasEmittedScreenStream:!1,webcamStream:null,screenStream:null,screenShareStreamId:null,camStreamId:null},this._clientStates.set(e,t)),t}_emitToPWA(e,t){this._emitter.emit(e,t)}_emitToSignal(e,t,r){this._serverSocket.emit(e,t,r)}shouldAcceptStreamsFromBothSides(){return!0}setMicAnalyserDebugger(e){this._micAnalyserDebugger=e}setMicAnalyserParams(e){this._micAnalyser?.setParams(e)}}class sg{constructor({emitter:e,serverSocket:t,webrtcProvider:r,features:n}){this.emitter=e,this.currentManager=null,t.on(ec,(({room:i,selfId:s,error:a,eventClaim:o})=>{if(a)return;const c={selfId:s,room:i,emitter:e,serverSocket:t,webrtcProvider:r,features:n,eventClaim:o},d=!!i.sfuServer;if(this.currentManager){if(this.currentManager.isInitializedWith({selfId:s,roomName:i.name,isSfu:d}))return void(this.currentManager.setEventClaim&&o&&this.currentManager.setEventClaim(o));this.currentManager.disconnectAll(),e.emit($o)}let l=null;l=d?new ig(c):new Ed(c),l.setupSocketListeners(),e.emit(Vo,{rtcManager:l}),this.currentManager=l}))}stopRtcManager(){this.currentManager&&(this.currentManager.disconnectAll(),this.emitter.emit($o))}}const ag=e=>({emit:(t,r)=>{"rtc_manager_created"===t?e(bg(r)):"stream_added"===t?e(So.streamAdded(r)):"rtc_manager_destroyed"===t&&e(hg())}}),og={dispatcherCreated:!1,error:null,isCreatingDispatcher:!1,reportedStreamResolutions:{},rtcManager:null,rtcManagerDispatcher:null,rtcManagerInitialized:!1,status:"",isAcceptingStreams:!1},cg=at({name:"rtcConnection",initialState:og,reducers:{isAcceptingStreams:(e,t)=>Object.assign(Object.assign({},e),{isAcceptingStreams:t.payload}),resolutionReported:(e,t)=>{const{streamId:r,width:n,height:i}=t.payload;return Object.assign(Object.assign({},e),{reportedStreamResolutions:Object.assign(Object.assign({},e.reportedStreamResolutions),{[r]:{width:n,height:i}})})},rtcDisconnected:()=>Object.assign({},og),rtcDispatcherCreated:(e,t)=>Object.assign(Object.assign({},e),{dispatcherCreated:!0,rtcManagerDispatcher:t.payload}),rtcManagerCreated:(e,t)=>Object.assign(Object.assign({},e),{rtcManager:t.payload,status:"ready"}),rtcManagerDestroyed:e=>Object.assign(Object.assign({},e),{rtcManager:null}),rtcManagerInitialized:e=>Object.assign(Object.assign({},e),{rtcManagerInitialized:!0})},extraReducers:e=>{e.addCase(Zs,(e=>Object.assign(Object.assign({},e),{status:"reconnect"}))),e.addCase(Xt.roomJoined,(e=>Object.assign(Object.assign({},e),{status:"reconnect"===e.status?"ready":e.status})))}}),{resolutionReported:dg,rtcDispatcherCreated:lg,rtcDisconnected:pg,rtcManagerCreated:ug,rtcManagerDestroyed:hg,rtcManagerInitialized:mg,isAcceptingStreams:fg}=cg.actions,gg=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=Sg(r).rtcManagerDispatcher,s=Ga(r),a=Wa(r);if(i)return;const o={getMediaConstraints:()=>({audio:a,video:s}),deferrable:e=>!e},c=new sg({emitter:ag(e),serverSocket:n,logger:console,webrtcProvider:o,features:{lowDataModeEnabled:!1,sfuServerOverrideHost:void 0,turnServerOverrideHost:void 0,useOnlyTURN:void 0,vp9On:!1,h264On:!1,simulcastScreenshareOn:!1}});e(lg(c))},vg=()=>(e,t)=>{const{rtcManager:r}=Sg(t());r&&r.disconnectAll(),e(pg())},yg=e=>(t,r)=>{var n;t(fg(!0));const i=r(),s=Sg(i).rtcManager,a=Mo(i);if(!s)throw new Error("No rtc manager");const o=null===(n=s.shouldAcceptStreamsFromBothSides)||void 0===n?void 0:n.call(s),c=[];for(const{clientId:t,streamId:r,state:n}of e){if(a.find((e=>e.id===t))){if("to_accept"===n||"new_accept"===n&&o||"old_accept"===n&&!o)s.acceptNewStream({streamId:"0"===r?t:r,clientId:t,shouldAddLocalVideo:"0"===r,activeBreakout:false});else if("new_accept"===n||"old_accept"===n);else if("to_unaccept"===n)null==s||s.disconnect("0"===r?t:r,false);else if("done_accept"!==n)continue;c.push({clientId:t,streamId:r,state:n.replace(/to_|new_|old_/,"done_")})}}t(xo(c)),t(fg(!1))},_g=({streamId:e,width:t,height:r})=>(n,i)=>{const{reportedStreamResolutions:s,rtcManager:a}=Sg(i()),o=Xa(i());if(!a||(null==o?void 0:o.id)===e)return;const c=s[e];c&&c.width===t&&c.height===r||a.updateStreamResolution(e,null,{width:t||1,height:r||1}),n(dg({streamId:e,width:t,height:r}))},bg=e=>t=>{const{rtcManager:r}=e;t(ug(r))},wg=()=>(e,t)=>{const r=Xa(t()),n=Sg(t()).rtcManager,i=Ga(t()),s=Wa(t());r&&n&&n.addNewStream("0",r,!s,!i),e(mg())},Sg=e=>e.rtcConnection,Cg=e=>e.rtcConnection.rtcManagerInitialized,Rg=e=>e.rtcConnection.status;Ft({actionCreator:Na.fulfilled,effect:({payload:e},{getState:t})=>{const{replacedTracks:r}=e,{rtcManager:n}=Sg(t()),i=Xa(t());null==r||r.forEach((e=>{((e,t)=>{const r=null==i?void 0:i.getTracks().find((t=>t.kind===e));r&&(null==n||n.replaceTrack(t,r))})(e.kind,e)}))}}),Ft({actionCreator:fo.fulfilled,effect:({payload:e},{getState:t})=>{const{stream:r}=e,{rtcManager:n}=Sg(t());null==n||n.addNewStream(r.id,r,!1,!0)}}),Ft({actionCreator:mo,effect:({payload:e},{getState:t})=>{const{stream:r}=e,{rtcManager:n}=Sg(t());null==n||n.removeStream(r.id,r,null)}});Bt([Se((e=>e.rtcConnection.dispatcherCreated),(e=>e.rtcConnection.isCreatingDispatcher),na,((e,t,r)=>!(e||t||!r)))],(({dispatch:e},t)=>{t&&e(gg())}));const Tg=Se((e=>e.rtcConnection.rtcManager),Cg,Qa,((e,t,r)=>!("started"!==r||!e||t)));Bt([Tg],(({dispatch:e},t)=>{t&&e(wg())}));Bt([Se(Rg,qt,((e,t)=>!t&&!["","disconnected"].includes(e)))],(({dispatch:e},t)=>{t&&e(vg())}));const Pg=Se(Rg,Mo,((e,t)=>{if("ready"!==e)return[];const r=[];for(const e of t){const{streams:t,id:n,newJoiner:i}=e;for(let e=0;e<t.length;e++){const s=t[e].id;"done_accept"!==t[e].state&&r.push({clientId:n,streamId:s,state:(i&&"0"===s?"new":"to")+"_accept"})}}return r}));Bt([Pg,e=>e.rtcConnection.isAcceptingStreams],(({dispatch:e},t,r)=>{0<t.length&&!r&&e(yg(t))}));const kg={audioEnabled:{action:ao.fulfilled,rtcEventName:"audioEnabled",getValue:e=>Wa(e),getOutput:e=>({enabled:e})},videoEnabled:{action:oo.fulfilled,rtcEventName:"videoEnabled",getValue:e=>Ga(e),getOutput:e=>({enabled:e})},localStream:{action:Na.fulfilled,rtcEventName:"localStream",getValue:e=>{var t;return null===(t=Xa(e))||void 0===t?void 0:t.getTracks().map((e=>({id:e.id,kind:e.kind,label:e.label})))},getOutput:e=>({stream:e})},localScreenshareStream:{action:fo.fulfilled,rtcEventName:"localScreenshareStream",getValue:e=>{var t;return null===(t=vo(e))||void 0===t?void 0:t.getTracks().map((e=>({id:e.id,kind:e.kind,label:e.label})))},getOutput:e=>({tracks:e})},localScreenshareStreamStopped:{action:mo,rtcEventName:"localScreenshareStream",getValue:()=>()=>null,getOutput:()=>({})},displayName:{action:co.fulfilled,rtcEventName:"displayName",getValue:e=>Kt(e),getOutput:e=>({displayName:e})},clientId:{action:null,rtcEventName:"clientId",getValue:e=>uo(e),getOutput:e=>({clientId:e})},deviceId:{action:null,rtcEventName:"deviceId",getValue:e=>(e=>{var t,r;return null===(r=null===(t=e.deviceCredentials.data)||void 0===t?void 0:t.credentials)||void 0===r?void 0:r.uuid})(e),getOutput:e=>({deviceId:e})},externalId:{action:null,rtcEventName:"externalId",getValue:e=>Ht(e),getOutput:e=>({externalId:e})},organizationId:{action:null,rtcEventName:"organizationId",getValue:e=>bo(e),getOutput:e=>({organizationId:e})},signalConnectionStatus:{action:null,rtcEventName:"signalConnectionStatus",getValue:e=>ra(e),getOutput:e=>({status:e})},roomSessionId:{action:null,rtcEventName:"roomSessionId",getValue:e=>(e=>{var t;return null===(t=e.roomConnection.session)||void 0===t?void 0:t.id})(e),getOutput:e=>({roomSessionId:e})},rtcConnectionStatus:{action:null,rtcEventName:"rtcConnectionStatus",getValue:e=>Rg(e),getOutput:e=>({status:e})},userRole:{action:null,rtcEventName:"userRole",getValue:e=>(e=>e.localParticipant.roleName)(e),getOutput:e=>({userRole:e})}},Eg=Object.values(kg).map((({action:e})=>e)).filter((e=>null!==e)),Dg=e=>"object"==typeof e?JSON.stringify(e):e,Og=at({initialState:{reportedValues:{}},name:"rtcAnalytics",reducers:{updateReportedValues:(e,t)=>Object.assign(Object.assign({},e),{reportedValues:Object.assign(Object.assign({},e.reportedValues),{[t.payload.rtcEventName]:t.payload.value})})}}),Ig=()=>(e,t)=>{const r=t(),n=Sg(r).rtcManager;n&&(n.sendStatsCustomEvent("insightsStats",{_time:Date.now(),ls:0,lr:0,bs:0,br:0,cpu:0}),Object.values(kg).forEach((({rtcEventName:t,getValue:i,getOutput:s})=>{var a;const o=i(r),c=Object.assign(Object.assign({},s(o)),{_time:Date.now()}),d=Dg(o);(null===(a=r.rtcAnalytics.reportedValues)||void 0===a?void 0:a[t])!==d&&(n.sendStatsCustomEvent(t,c),e(xg({rtcEventName:t,value:o})))})))},{updateReportedValues:xg}=Og.actions;Ft({matcher:Ye(...Eg),effect:({type:e},{getState:t,dispatch:r})=>{var n;const i=t(),s=Sg(i).rtcManager;if(!s)return;const a=Object.values(kg).find((({action:t})=>(null==t?void 0:t.type)===e));if(!a)return;const{getValue:o,getOutput:c,rtcEventName:d}=a,l=o(i),p=Dg(l),u=Object.assign(Object.assign({},c(l)),{_time:Date.now()});(null===(n=i.rtcAnalytics.reportedValues)||void 0===n?void 0:n[d])!==p&&(s.sendStatsCustomEvent(d,u),r(xg({rtcEventName:d,value:l})))}}),Bt([Cg],(({dispatch:e},t)=>{t&&e(Ig())}));const Mg=at({name:"streaming",initialState:{isStreaming:!1,error:null,startedAt:void 0},reducers:{doHandleStreamingStarted:e=>Object.assign(Object.assign({},e),{isStreaming:!0,error:null,startedAt:(new Date).getTime()}),doHandleStreamingStopped:e=>Object.assign(Object.assign({},e),{isStreaming:!1})}});Mg.actions;const jg=at({name:"waitingParticipants",initialState:{waitingParticipants:[]},reducers:{},extraReducers:e=>{e.addCase(Xt.roomJoined,((e,{payload:t})=>{var r;return(null===(r=t.room)||void 0===r?void 0:r.knockers.length)?Object.assign(Object.assign({},e),{waitingParticipants:t.room.knockers.map((e=>({id:e.clientId,displayName:e.displayName})))}):e})),e.addCase(Xt.roomKnocked,((e,t)=>{const{clientId:r,displayName:n}=t.payload;return Object.assign(Object.assign({},e),{waitingParticipants:[...e.waitingParticipants,{id:r,displayName:n}]})})),e.addCase(Xt.knockerLeft,((e,t)=>{const{clientId:r}=t.payload;return Object.assign(Object.assign({},e),{waitingParticipants:e.waitingParticipants.filter((e=>e.id!==r))})}))}}),Lg=e=>(t,r)=>{const{participantId:n}=e,i=r(),s=na(i);null==s||s.emit("handle_knock",{action:"accept",clientId:n,response:{}})},Ag=e=>(t,r)=>{const{participantId:n}=e,i=r(),s=na(i);null==s||s.emit("handle_knock",{action:"reject",clientId:n,response:{}})};const Ng=null===!1&&!1,Fg=g({app:Ut.reducer,chat:sa.reducer,cloudRecording:oa.reducer,deviceCredentials:Zt.reducer,localMedia:Ta.reducer,localParticipant:lo.reducer,localScreenshare:ho.reducer,organization:yo.reducer,remoteParticipants:Do.reducer,roomConnection:Lo.reducer,rtcAnalytics:Og.reducer,rtcConnection:cg.reducer,signalConnection:$s.reducer,streaming:Mg.reducer,waitingParticipants:jg.reducer}),Bg=({preloadedState:e,injectServices:t})=>Ke({devTools:Ng,reducer:Fg,middleware:e=>e({thunk:{extraArgument:{services:t}},serializableCheck:!1}).prepend(Nt.middleware),preloadedState:e}),Ug=(e,t,r)=>{let n;function i(){const i=t(e.getState());i!==n&&(n=i,r(n))}const s=e.subscribe(i);return i(),s},zg=[{pattern:/^(?:([^.]+)[.])?(server:?\d*)/,separator:"."},{pattern:/^(?:([^.]+)[.])?(localhost:?\d*)/,separator:"."},{pattern:/^(?:([^.]+)[.])?((\d+[.]){3}:?\d*)$/,separator:"."},{pattern:/^(?:([^.]+)-)?(ip-[^.]*[.](?:hereby[.]dev|rfc1918[.]disappear[.]at)(?::\d+|))$/,separator:"-"},{pattern:/^(?:([^.]+)[.])?((:?[^.]+[.]){1,}[^.]+)$/,separator:"."}];function Vg({host:e="whereby.com",protocol:t="https:"}={}){let r="",n=e,i=".";for(const{separator:t,pattern:s}of zg){const a=s.exec(e);if(a){r=a[1]||"",n=a[2],i=t;break}}const s=r?`${r}${i}${n}`:n;return{domain:n,domainWithSeparator:`${i}${n}`,organizationDomain:s,organization:`${t}//${s}`,service:`${t}//${n}`,subdomain:r}}Vg(window&&window.location);var $g={exports:{}};$g.exports=function(e){return(e instanceof on?e:on.from(e.toString(),"binary")).toString("base64")};var qg=Ji($g.exports);function Gg(e,t){return function(){return e.apply(t,arguments)}}const{toString:Wg}=Object.prototype,{getPrototypeOf:Kg}=Object,Jg=(e=>t=>{const r=Wg.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Hg=e=>(e=e.toLowerCase(),t=>Jg(t)===e),Yg=e=>t=>typeof t===e,{isArray:Qg}=Array,Xg=Yg("undefined");const Zg=Hg("ArrayBuffer");const ev=Yg("string"),tv=Yg("function"),rv=Yg("number"),nv=e=>null!==e&&"object"==typeof e,iv=e=>{if("object"!==Jg(e))return!1;const t=Kg(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},sv=Hg("Date"),av=Hg("File"),ov=Hg("Blob"),cv=Hg("FileList"),dv=Hg("URLSearchParams");function lv(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,i;if("object"!=typeof e&&(e=[e]),Qg(e))for(n=0,i=e.length;n<i;n++)t.call(null,e[n],n,e);else{const i=r?Object.getOwnPropertyNames(e):Object.keys(e),s=i.length;let a;for(n=0;n<s;n++)a=i[n],t.call(null,e[a],a,e)}}function pv(e,t){t=t.toLowerCase();const r=Object.keys(e);let n,i=r.length;for(;i-- >0;)if(n=r[i],t===n.toLowerCase())return n;return null}const uv="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:Wr,hv=e=>!Xg(e)&&e!==uv;const mv=(fv="undefined"!=typeof Uint8Array&&Kg(Uint8Array),e=>fv&&e instanceof fv);var fv;const gv=Hg("HTMLFormElement"),vv=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),yv=Hg("RegExp"),_v=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};lv(r,((r,i)=>{let s;!1!==(s=t(r,i,e))&&(n[i]=s||r)})),Object.defineProperties(e,n)},bv="abcdefghijklmnopqrstuvwxyz",wv="0123456789",Sv={DIGIT:wv,ALPHA:bv,ALPHA_DIGIT:bv+bv.toUpperCase()+wv};const Cv=Hg("AsyncFunction");var Rv={isArray:Qg,isArrayBuffer:Zg,isBuffer:function(e){return null!==e&&!Xg(e)&&null!==e.constructor&&!Xg(e.constructor)&&tv(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||tv(e.append)&&("formdata"===(t=Jg(e))||"object"===t&&tv(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Zg(e.buffer),t},isString:ev,isNumber:rv,isBoolean:e=>!0===e||!1===e,isObject:nv,isPlainObject:iv,isUndefined:Xg,isDate:sv,isFile:av,isBlob:ov,isRegExp:yv,isFunction:tv,isStream:e=>nv(e)&&tv(e.pipe),isURLSearchParams:dv,isTypedArray:mv,isFileList:cv,forEach:lv,merge:function e(){const{caseless:t}=hv(this)&&this||{},r={},n=(n,i)=>{const s=t&&pv(r,i)||i;iv(r[s])&&iv(n)?r[s]=e(r[s],n):iv(n)?r[s]=e({},n):Qg(n)?r[s]=n.slice():r[s]=n};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&lv(arguments[e],n);return r},extend:(e,t,r,{allOwnKeys:n}={})=>(lv(t,((t,n)=>{r&&tv(t)?e[n]=Gg(t,r):e[n]=t}),{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let i,s,a;const o={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),s=i.length;s-- >0;)a=i[s],n&&!n(a,e,t)||o[a]||(t[a]=e[a],o[a]=!0);e=!1!==r&&Kg(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:Jg,kindOfTest:Hg,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(Qg(e))return e;let t=e.length;if(!rv(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:gv,hasOwnProperty:vv,hasOwnProp:vv,reduceDescriptors:_v,freezeMethods:e=>{_v(e,((t,r)=>{if(tv(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];tv(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach((e=>{r[e]=!0}))};return Qg(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:pv,global:uv,isContextDefined:hv,ALPHABET:Sv,generateString:(e=16,t=Sv.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r},isSpecCompliantForm:function(e){return!!(e&&tv(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(nv(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[n]=e;const i=Qg(e)?[]:{};return lv(e,((e,t)=>{const s=r(e,n+1);!Xg(s)&&(i[t]=s)})),t[n]=void 0,i}}return e};return r(e,0)},isAsyncFn:Cv,isThenable:e=>e&&(nv(e)||tv(e))&&tv(e.then)&&tv(e.catch)};function Tv(e,t,r,n,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),i&&(this.response=i)}Rv.inherits(Tv,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Rv.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Pv=Tv.prototype,kv={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{kv[e]={value:e}})),Object.defineProperties(Tv,kv),Object.defineProperty(Pv,"isAxiosError",{value:!0}),Tv.from=(e,t,r,n,i,s)=>{const a=Object.create(Pv);return Rv.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),Tv.call(a,e.message,t,r,n,i),a.cause=e,a.name=e.name,s&&Object.assign(a,s),a};function Ev(e){return Rv.isPlainObject(e)||Rv.isArray(e)}function Dv(e){return Rv.endsWith(e,"[]")?e.slice(0,-2):e}function Ov(e,t,r){return e?e.concat(t).map((function(e,t){return e=Dv(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}const Iv=Rv.toFlatObject(Rv,{},null,(function(e){return/^is[A-Z]/.test(e)}));function xv(e,t,r){if(!Rv.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=Rv.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Rv.isUndefined(t[e])}))).metaTokens,i=r.visitor||d,s=r.dots,a=r.indexes,o=(r.Blob||"undefined"!=typeof Blob&&Blob)&&Rv.isSpecCompliantForm(t);if(!Rv.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(Rv.isDate(e))return e.toISOString();if(!o&&Rv.isBlob(e))throw new Tv("Blob is not supported. Use a Buffer instead.");return Rv.isArrayBuffer(e)||Rv.isTypedArray(e)?o&&"function"==typeof Blob?new Blob([e]):on.from(e):e}function d(e,r,i){let o=e;if(e&&!i&&"object"==typeof e)if(Rv.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(Rv.isArray(e)&&function(e){return Rv.isArray(e)&&!e.some(Ev)}(e)||(Rv.isFileList(e)||Rv.endsWith(r,"[]"))&&(o=Rv.toArray(e)))return r=Dv(r),o.forEach((function(e,n){!Rv.isUndefined(e)&&null!==e&&t.append(!0===a?Ov([r],n,s):null===a?r:r+"[]",c(e))})),!1;return!!Ev(e)||(t.append(Ov(i,r,s),c(e)),!1)}const l=[],p=Object.assign(Iv,{defaultVisitor:d,convertValue:c,isVisitable:Ev});if(!Rv.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!Rv.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),Rv.forEach(r,(function(r,s){!0===(!(Rv.isUndefined(r)||null===r)&&i.call(t,r,Rv.isString(s)?s.trim():s,n,p))&&e(r,n?n.concat(s):[s])})),l.pop()}}(e),t}function Mv(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function jv(e,t){this._pairs=[],e&&xv(e,this,t)}const Lv=jv.prototype;function Av(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Nv(e,t,r){if(!t)return e;const n=r&&r.encode||Av,i=r&&r.serialize;let s;if(s=i?i(t,r):Rv.isURLSearchParams(t)?t.toString():new jv(t,r).toString(n),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}Lv.append=function(e,t){this._pairs.push([e,t])},Lv.toString=function(e){const t=e?function(t){return e.call(this,t,Mv)}:Mv;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Fv=class{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Rv.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Bv={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var Uv={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:jv,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},isStandardBrowserEnv:(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),isStandardBrowserWebWorkerEnv:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,protocols:["http","https","file","blob","url","data"]};function zv(e){function t(e,r,n,i){let s=e[i++];const a=Number.isFinite(+s),o=i>=e.length;if(s=!s&&Rv.isArray(n)?n.length:s,o)return Rv.hasOwnProp(n,s)?n[s]=[n[s],r]:n[s]=r,!a;n[s]&&Rv.isObject(n[s])||(n[s]=[]);return t(e,r,n[s],i)&&Rv.isArray(n[s])&&(n[s]=function(e){const t={},r=Object.keys(e);let n;const i=r.length;let s;for(n=0;n<i;n++)s=r[n],t[s]=e[s];return t}(n[s])),!a}if(Rv.isFormData(e)&&Rv.isFunction(e.entries)){const r={};return Rv.forEachEntry(e,((e,n)=>{t(function(e){return Rv.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),n,r,0)})),r}return null}const Vv={transitional:Bv,adapter:["xhr","http"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,i=Rv.isObject(e);i&&Rv.isHTMLForm(e)&&(e=new FormData(e));if(Rv.isFormData(e))return n&&n?JSON.stringify(zv(e)):e;if(Rv.isArrayBuffer(e)||Rv.isBuffer(e)||Rv.isStream(e)||Rv.isFile(e)||Rv.isBlob(e))return e;if(Rv.isArrayBufferView(e))return e.buffer;if(Rv.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return xv(e,new Uv.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return Uv.isNode&&Rv.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((s=Rv.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return xv(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||n?(t.setContentType("application/json",!1),function(e,t,r){if(Rv.isString(e))try{return(t||JSON.parse)(e),Rv.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Vv.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&Rv.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw Tv.from(e,Tv.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Uv.classes.FormData,Blob:Uv.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Rv.forEach(["delete","get","head","post","put","patch"],(e=>{Vv.headers[e]={}}));var $v=Vv;const qv=Rv.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Gv=Symbol("internals");function Wv(e){return e&&String(e).trim().toLowerCase()}function Kv(e){return!1===e||null==e?e:Rv.isArray(e)?e.map(Kv):String(e)}function Jv(e,t,r,n,i){return Rv.isFunction(n)?n.call(this,t,r):(i&&(t=r),Rv.isString(t)?Rv.isString(n)?-1!==t.indexOf(n):Rv.isRegExp(n)?n.test(t):void 0:void 0)}class Hv{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function i(e,t,r){const i=Wv(t);if(!i)throw new Error("header name must be a non-empty string");const s=Rv.findKey(n,i);(!s||void 0===n[s]||!0===r||void 0===r&&!1!==n[s])&&(n[s||t]=Kv(e))}const s=(e,t)=>Rv.forEach(e,((e,r)=>i(e,r,t)));return Rv.isPlainObject(e)||e instanceof this.constructor?s(e,t):Rv.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?s((e=>{const t={};let r,n,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),r=e.substring(0,i).trim().toLowerCase(),n=e.substring(i+1).trim(),!r||t[r]&&qv[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)})),t})(e),t):null!=e&&i(t,e,r),this}get(e,t){if(e=Wv(e)){const r=Rv.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(Rv.isFunction(t))return t.call(this,e,r);if(Rv.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Wv(e)){const r=Rv.findKey(this,e);return!(!r||void 0===this[r]||t&&!Jv(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function i(e){if(e=Wv(e)){const i=Rv.findKey(r,e);!i||t&&!Jv(0,r[i],i,t)||(delete r[i],n=!0)}}return Rv.isArray(e)?e.forEach(i):i(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const i=t[r];e&&!Jv(0,this[i],i,e,!0)||(delete this[i],n=!0)}return n}normalize(e){const t=this,r={};return Rv.forEach(this,((n,i)=>{const s=Rv.findKey(r,i);if(s)return t[s]=Kv(n),void delete t[i];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,r)=>t.toUpperCase()+r))}(i):String(i).trim();a!==i&&delete t[i],t[a]=Kv(n),r[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Rv.forEach(this,((r,n)=>{null!=r&&!1!==r&&(t[n]=e&&Rv.isArray(r)?r.join(", "):r)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach((e=>r.set(e))),r}static accessor(e){const t=(this[Gv]=this[Gv]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=Wv(e);t[n]||(!function(e,t){const r=Rv.toCamelCase(" "+t);["get","set","has"].forEach((n=>{Object.defineProperty(e,n+r,{value:function(e,r,i){return this[n].call(this,t,e,r,i)},configurable:!0})}))}(r,e),t[n]=!0)}return Rv.isArray(e)?e.forEach(n):n(e),this}}Hv.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Rv.reduceDescriptors(Hv.prototype,(({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}})),Rv.freezeMethods(Hv);var Yv=Hv;function Qv(e,t){const r=this||$v,n=t||r,i=Yv.from(n.headers);let s=n.data;return Rv.forEach(e,(function(e){s=e.call(r,s,i.normalize(),t?t.status:void 0)})),i.normalize(),s}function Xv(e){return!(!e||!e.__CANCEL__)}function Zv(e,t,r){Tv.call(this,null==e?"canceled":e,Tv.ERR_CANCELED,t,r),this.name="CanceledError"}Rv.inherits(Zv,Tv,{__CANCEL__:!0});var ey=Uv.isStandardBrowserEnv?{write:function(e,t,r,n,i,s){const a=[];a.push(e+"="+encodeURIComponent(t)),Rv.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),Rv.isString(n)&&a.push("path="+n),Rv.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function ty(e,t){return e&&!function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var ry=Uv.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function n(r){let n=r;return e&&(t.setAttribute("href",n),n=t.href),t.setAttribute("href",n),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return r=n(window.location.href),function(e){const t=Rv.isString(e)?n(e):e;return t.protocol===r.protocol&&t.host===r.host}}():function(){return!0};function ny(e,t){let r=0;const n=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let i,s=0,a=0;return t=void 0!==t?t:1e3,function(o){const c=Date.now(),d=n[a];i||(i=c),r[s]=o,n[s]=c;let l=a,p=0;for(;l!==s;)p+=r[l++],l%=e;if(s=(s+1)%e,s===a&&(a=(a+1)%e),c-i<t)return;const u=d&&c-d;return u?Math.round(1e3*p/u):void 0}}(50,250);return i=>{const s=i.loaded,a=i.lengthComputable?i.total:void 0,o=s-r,c=n(o);r=s;const d={loaded:s,total:a,progress:a?s/a:void 0,bytes:o,rate:c||void 0,estimated:c&&a&&s<=a?(a-s)/c:void 0,event:i};d[t?"download":"upload"]=!0,e(d)}}var iy="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,r){let n=e.data;const i=Yv.from(e.headers).normalize(),s=e.responseType;let a,o;function c(){e.cancelToken&&e.cancelToken.unsubscribe(a),e.signal&&e.signal.removeEventListener("abort",a)}Rv.isFormData(n)&&(Uv.isStandardBrowserEnv||Uv.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.getContentType(/^\s*multipart\/form-data/)?Rv.isString(o=i.getContentType())&&i.setContentType(o.replace(/^\s*(multipart\/form-data);+/,"$1")):i.setContentType("multipart/form-data"));let d=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",r=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+r))}const l=ty(e.baseURL,e.url);function p(){if(!d)return;const n=Yv.from("getAllResponseHeaders"in d&&d.getAllResponseHeaders());!function(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new Tv("Request failed with status code "+r.status,[Tv.ERR_BAD_REQUEST,Tv.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}((function(e){t(e),c()}),(function(e){r(e),c()}),{data:s&&"text"!==s&&"json"!==s?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:n,config:e,request:d}),d=null}if(d.open(e.method.toUpperCase(),Nv(l,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=p:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(p)},d.onabort=function(){d&&(r(new Tv("Request aborted",Tv.ECONNABORTED,e,d)),d=null)},d.onerror=function(){r(new Tv("Network Error",Tv.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const n=e.transitional||Bv;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new Tv(t,n.clarifyTimeoutError?Tv.ETIMEDOUT:Tv.ECONNABORTED,e,d)),d=null},Uv.isStandardBrowserEnv){const t=ry(l)&&e.xsrfCookieName&&ey.read(e.xsrfCookieName);t&&i.set(e.xsrfHeaderName,t)}void 0===n&&i.setContentType(null),"setRequestHeader"in d&&Rv.forEach(i.toJSON(),(function(e,t){d.setRequestHeader(t,e)})),Rv.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),s&&"json"!==s&&(d.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",ny(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",ny(e.onUploadProgress)),(e.cancelToken||e.signal)&&(a=t=>{d&&(r(!t||t.type?new Zv(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(a),e.signal&&(e.signal.aborted?a():e.signal.addEventListener("abort",a)));const u=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(l);u&&-1===Uv.protocols.indexOf(u)?r(new Tv("Unsupported protocol "+u+":",Tv.ERR_BAD_REQUEST,e)):d.send(n||null)}))};const sy={http:null,xhr:iy};Rv.forEach(sy,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const ay=e=>`- ${e}`,oy=e=>Rv.isFunction(e)||null===e||!1===e;var cy=e=>{e=Rv.isArray(e)?e:[e];const{length:t}=e;let r,n;const i={};for(let s=0;s<t;s++){let t;if(r=e[s],n=r,!oy(r)&&(n=sy[(t=String(r)).toLowerCase()],void 0===n))throw new Tv(`Unknown adapter '${t}'`);if(n)break;i[t||"#"+s]=n}if(!n){const e=Object.entries(i).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new Tv("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(ay).join("\n"):" "+ay(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function dy(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Zv(null,e)}function ly(e){dy(e),e.headers=Yv.from(e.headers),e.data=Qv.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return cy(e.adapter||$v.adapter)(e).then((function(t){return dy(e),t.data=Qv.call(e,e.transformResponse,t),t.headers=Yv.from(t.headers),t}),(function(t){return Xv(t)||(dy(e),t&&t.response&&(t.response.data=Qv.call(e,e.transformResponse,t.response),t.response.headers=Yv.from(t.response.headers))),Promise.reject(t)}))}const py=e=>e instanceof Yv?e.toJSON():e;function uy(e,t){t=t||{};const r={};function n(e,t,r){return Rv.isPlainObject(e)&&Rv.isPlainObject(t)?Rv.merge.call({caseless:r},e,t):Rv.isPlainObject(t)?Rv.merge({},t):Rv.isArray(t)?t.slice():t}function i(e,t,r){return Rv.isUndefined(t)?Rv.isUndefined(e)?void 0:n(void 0,e,r):n(e,t,r)}function s(e,t){if(!Rv.isUndefined(t))return n(void 0,t)}function a(e,t){return Rv.isUndefined(t)?Rv.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function o(r,i,s){return s in t?n(r,i):s in e?n(void 0,r):void 0}const c={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:o,headers:(e,t)=>i(py(e),py(t),!0)};return Rv.forEach(Object.keys(Object.assign({},e,t)),(function(n){const s=c[n]||i,a=s(e[n],t[n],n);Rv.isUndefined(a)&&s!==o||(r[n]=a)})),r}const hy="1.6.0",my={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{my[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));const fy={};my.transitional=function(e,t,r){function n(e,t){return"[Axios v1.6.0] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,i,s)=>{if(!1===e)throw new Tv(n(i," has been removed"+(t?" in "+t:"")),Tv.ERR_DEPRECATED);return t&&!fy[i]&&(fy[i]=!0,console.warn(n(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,i,s)}};var gy={assertOptions:function(e,t,r){if("object"!=typeof e)throw new Tv("options must be an object",Tv.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let i=n.length;for(;i-- >0;){const s=n[i],a=t[s];if(a){const t=e[s],r=void 0===t||a(t,s,e);if(!0!==r)throw new Tv("option "+s+" must be "+r,Tv.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new Tv("Unknown option "+s,Tv.ERR_BAD_OPTION)}},validators:my};const vy=gy.validators;class yy{constructor(e){this.defaults=e,this.interceptors={request:new Fv,response:new Fv}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=uy(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:i}=t;void 0!==r&&gy.assertOptions(r,{silentJSONParsing:vy.transitional(vy.boolean),forcedJSONParsing:vy.transitional(vy.boolean),clarifyTimeoutError:vy.transitional(vy.boolean)},!1),null!=n&&(Rv.isFunction(n)?t.paramsSerializer={serialize:n}:gy.assertOptions(n,{encode:vy.function,serialize:vy.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=i&&Rv.merge(i.common,i[t.method]);i&&Rv.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=Yv.concat(s,i);const a=[];let o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const c=[];let d;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let l,p=0;if(!o){const e=[ly.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,c),l=e.length,d=Promise.resolve(t);p<l;)d=d.then(e[p++],e[p++]);return d}l=a.length;let u=t;for(p=0;p<l;){const e=a[p++],t=a[p++];try{u=e(u)}catch(e){t.call(this,e);break}}try{d=ly.call(this,u)}catch(e){return Promise.reject(e)}for(p=0,l=c.length;p<l;)d=d.then(c[p++],c[p++]);return d}getUri(e){return Nv(ty((e=uy(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}Rv.forEach(["delete","get","head","options"],(function(e){yy.prototype[e]=function(t,r){return this.request(uy(r||{},{method:e,url:t,data:(r||{}).data}))}})),Rv.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,i){return this.request(uy(i||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}yy.prototype[e]=t(),yy.prototype[e+"Form"]=t(!0)}));var _y=yy;class by{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const r=this;this.promise.then((e=>{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null})),this.promise.then=e=>{let t;const n=new Promise((e=>{r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,i){r.reason||(r.reason=new Zv(e,n,i),t(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new by((function(t){e=t})),cancel:e}}}var wy=by;const Sy={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Sy).forEach((([e,t])=>{Sy[t]=e}));var Cy=Sy;const Ry=function e(t){const r=new _y(t),n=Gg(_y.prototype.request,r);return Rv.extend(n,_y.prototype,r,{allOwnKeys:!0}),Rv.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e(uy(t,r))},n}($v);Ry.Axios=_y,Ry.CanceledError=Zv,Ry.CancelToken=wy,Ry.isCancel=Xv,Ry.VERSION=hy,Ry.toFormData=xv,Ry.AxiosError=Tv,Ry.Cancel=Ry.CanceledError,Ry.all=function(e){return Promise.all(e)},Ry.spread=function(e){return function(t){return e.apply(null,t)}},Ry.isAxiosError=function(e){return Rv.isObject(e)&&!0===e.isAxiosError},Ry.mergeConfig=uy,Ry.AxiosHeaders=Yv,Ry.formToJSON=e=>zv(Rv.isHTMLForm(e)?new FormData(e):e),Ry.getAdapter=cy,Ry.HttpStatusCode=Cy,Ry.default=Ry;var Ty=Ry;class Py{constructor(e={}){this.data=void 0===e.data?{}:e.data,this.headers=e.headers||{},this.status=e.status||200,this.statusText=e.statusText||"OK",this.url=e.url||null}}function ky(e,t){return ya.ok(e,`${t} is required`),e}function Ey(e,t){return ya.ok("boolean"==typeof e,`${t}<boolean> is required`),e}function Dy(e,t){return ya.ok("number"==typeof e,`${t}<number> is required`),e}function Oy(e,t){return ya.ok("string"==typeof e,`${t}<string> is required`),e}function Iy(e,t,r){const n=r||t.name[0].toLowerCase()+t.name.substring(1);return ya.ok(e instanceof t,`${n}<${t.name}> is required`),e}function xy(e,t){return ya.ok(Array.isArray(e),`${t}<array> is required`),e}function My(e,t){if(null==e||"object"!=typeof e||Array.isArray(e))throw new Error(`${t} must be a record. ${JSON.stringify(e)}`);return e}function jy(e,t,r){Oy(t,"name"),function(e,t,r,n){Oy(r,"name");const i=n||`${r} must be null or of type ${t}`;ya.ok(null===e||typeof e===t,i)}(e,"string",t,r)}function Ly({baseUrl:e,url:t}){return e?e+t:t}class Ay{constructor({baseUrl:e}){Oy(e,"baseUrl"),this._baseUrl=e}_requestAxios(e,t){const r=Object.assign({},t,{url:e,baseURL:this._baseUrl});return Ty.request(r)}request(e,t){return Oy(e,"url"),ya.ok("/"===e[0],'url<String> only accepts relative URLs beginning with "/".'),ya.ok(t,"options are required"),this._requestAxios(e,t).then((e=>{const{data:t,headers:r,status:n,statusText:i,config:s}=e,a=s&&s.url?Ly({baseUrl:s.baseURL,url:s.url}):null;return new Py({data:t,headers:r,status:n,statusText:i,url:a})})).catch((e=>{const t=e.response;if(!t)throw new Error("Could not make the request.");const{data:r,headers:n,status:i,statusText:s,config:a}=t,o=a&&a.url?Ly({baseUrl:a.baseURL,url:a.url}):null;return Promise.reject(new Py({data:r,headers:n,status:i,statusText:s,url:o}))}))}}class Ny{constructor({httpClient:e}){ya.ok(e,"httpClient is required"),this._httpClient=e}static dataToFormData(e){ya.ok(e,"data is required");const t=new FormData;return Object.keys(e).forEach((r=>{const n=e[r];t.append(r,n)})),t}request(e,t={}){const r=Object.assign(t.headers||{},{"Content-Type":void 0});return this._httpClient.request(e,Object.assign(t,{headers:r,transformRequest:Ny.dataToFormData}))}}let Fy;Fy="object"==typeof window?window.btoa||qg:"object"==typeof global&&global.btoa||qg;const By=()=>Promise.resolve(null);class Uy{constructor({httpClient:e,fetchDeviceCredentials:t}){this._httpClient=e,this._fetchDeviceCredentials=t}request(e,t){return this._fetchDeviceCredentials().then((r=>{const n=Object.assign({},t.headers,function(e){if(e&&e.credentials){const t=`${e.credentials.uuid}:${e.hmac}`;return{Authorization:`Basic ${Fy(t)}`}}return{}}(r),{"X-Appearin-Device-Platform":"web"}),i=Object.assign({},t,{headers:n});return this._httpClient.request(e,i)}))}}class zy{constructor({baseUrl:e="https://api.appearin.net",fetchDeviceCredentials:t=By}={}){this.authenticatedHttpClient=new Uy({httpClient:new Ay({baseUrl:e}),fetchDeviceCredentials:t}),this.authenticatedFormDataHttpClient=new Ny({httpClient:this.authenticatedHttpClient})}request(e,t){return Oy(e,"url"),ya.ok("/"===e[0],'url<String> only accepts relative URLs beginning with "/".'),ya.ok(t,"options are required"),this.authenticatedHttpClient.request(e,t)}requestMultipart(e,t){return Oy(e,"url"),ya.ok("/"===e[0],'url<String> only accepts relative URLs beginning with "/".'),ya.ok(t,"options are required"),this.authenticatedFormDataHttpClient.request(e,t)}}function Vy(e,t){return Oy(My(e,"data")[t],t)}const $y=(qy=Vy,(e,t)=>{const r=My(e,"data")[t];return null==r?null:qy(e,t)});var qy;function Gy(e,t,r){return function(e,t){return xy(My(e,"data")[t],t)}(e,t).map((e=>r(e)))}class Wy{constructor(e,t,r=void 0){this.credentials={uuid:e},this.hmac=t,this.userId=r}toJson(){return Object.assign({credentials:this.credentials,hmac:this.hmac},this.userId&&{userId:this.userId})}static fromJson(e){return new Wy(Vy(function(e,t){const r=My(e,"data")[t];return void 0===r?null:r}(e,"credentials"),"uuid"),Vy(e,"hmac"),$y(e,"userId")||void 0)}}class Ky{constructor({apiClient:e}){this._apiClient=e}getCredentials(){return this._apiClient.request("/devices",{method:"post"}).then((({data:e})=>Wy.fromJson(e))).catch((e=>{if(e.response&&404===e.response.status)return null;throw e}))}}class Jy{constructor(e,t){this._key=e,this._chromeStorage=t}loadOrDefault(e){return new Promise((t=>{this._chromeStorage.get(this._key,(r=>{t(r[this._key]||e)}))}))}save(e){return new Promise((t=>{this._chromeStorage.set({[this._key]:e},(()=>{t()}))}))}}class Hy{constructor(e,t){ky(t,"localStorage"),this._key=Oy(e,"key"),this._localStorage=t}loadOrDefault(e){try{const t=this._localStorage.getItem(this._key);if(t)try{return Promise.resolve(JSON.parse(t))}catch(e){}return Promise.resolve(e)}catch(t){return console.warn("Error getting access to storage. Are cookies blocked?",t),Promise.resolve(e)}}save(e){try{return this._localStorage.setItem(this._key,JSON.stringify(e)),Promise.resolve()}catch(e){return console.warn("Error getting access to storage. Are cookies blocked?",e),Promise.reject(e)}}}let Yy;try{Yy=self.localStorage}catch(e){Yy={getItem:()=>{},key:()=>{},setItem:()=>{},removeItem:()=>{},hasOwnProperty:()=>{},length:0}}var Qy=Yy;const Xy="credentials_saved";class Zy extends Gd{constructor({deviceService:e,credentialsStore:t}){super(),this._deviceService=e,this._credentialsStore=t}static create({baseUrl:e,storeName:t="CredentialsStorage",storeType:r="localStorage"}){const n=new Ky({apiClient:new zy({baseUrl:e})});let i=null;if("localStorage"===r)i=new Hy(t,Qy);else{if("chromeStorage"!==r)throw new Error(`Unknown store type: ${r}`);i=new Jy(t,window.chrome.storage.local)}return new Zy({deviceService:n,credentialsStore:i})}_fetchNewCredentialsFromApi(){const e=this._credentialsStore;return new Promise((t=>{const r=()=>{this._deviceService.getCredentials().then((r=>e.save(r?r.toJson():null).then((()=>t(r))))).catch((()=>{setTimeout(r,2e3)}))};r()}))}getCurrentCredentials(){return this._credentialsStore.loadOrDefault(null).then((e=>e?Wy.fromJson(e):null))}getCredentials(){return this.credentialsPromise||(this.credentialsPromise=this.getCurrentCredentials().then((e=>e||this._fetchNewCredentialsFromApi()))),this.credentialsPromise}saveCredentials(e){return this.credentialsPromise=void 0,this._credentialsStore.save(e.toJson()).then((()=>(this.emit(Xy,e),e)))}setUserId(e){return this.getCurrentCredentials().then((t=>{t||console.error("Illegal state: no credentials to set user id for.");if(null===t||t.userId!==e)return this._credentialsStore.save(Object.assign({},null==t?void 0:t.toJson(),{userId:e}))})).then((()=>{}))}}class e_{constructor({isExhausted:e,renewsAt:t,totalMinutesLimit:r,totalMinutesUsed:n}){this.isExhausted=e,this.renewsAt=t,this.totalMinutesLimit=r,this.totalMinutesUsed=n}static fromJson(e){return new e_({isExhausted:Ey(e.isExhausted,"isExhausted"),renewsAt:new Date(Oy(e.renewsAt,"renewsAt")),totalMinutesLimit:Dy(e.totalMinutesLimit,"totalMinutesLimit"),totalMinutesUsed:Dy(e.totalMinutesUsed,"totalMinutesUsed")})}}class t_{constructor({basePlanId:e,embeddedFreeTierStatus:t,isDeactivated:r,isOnTrial:n,onTrialUntil:i,trialStatus:s}){this.basePlanId=e,this.isDeactivated=r,this.isOnTrial=n,this.onTrialUntil=i||null,this.trialStatus=s||null,this.embeddedFreeTierStatus=t||null}static fromJson(e){return new t_({basePlanId:"string"==typeof e.basePlanId?e.basePlanId:null,isDeactivated:Ey(e.isDeactivated,"isDeactivated"),isOnTrial:Ey(e.isOnTrial,"isOnTrial"),onTrialUntil:"string"==typeof e.onTrialUntil?new Date(e.onTrialUntil):null,trialStatus:"string"==typeof e.trialStatus?e.trialStatus:null,embeddedFreeTierStatus:e.embeddedFreeTierStatus?e_.fromJson(e.embeddedFreeTierStatus):null})}}function r_(e){return null!=e}function n_(e={}){return{maxNumberOfInvitationsAndUsers:r_(null==e?void 0:e.maxNumberOfInvitationsAndUsers)?Number(null==e?void 0:e.maxNumberOfInvitationsAndUsers):null,maxNumberOfClaimedRooms:r_(null==e?void 0:e.maxNumberOfClaimedRooms)?Number(null==e?void 0:e.maxNumberOfClaimedRooms):null,maxRoomLimitPerOrganization:r_(null==e?void 0:e.maxRoomLimitPerOrganization)?Number(null==e?void 0:e.maxRoomLimitPerOrganization):null,trialMinutesLimit:r_(null==e?void 0:e.trialMinutesLimit)?Number(null==e?void 0:e.trialMinutesLimit):null,includedUnits:r_(null==e?void 0:e.includedUnits)?Number(null==e?void 0:e.includedUnits):null}}class i_{constructor(e){this.logoImageUrl=null,this.roomBackgroundImageUrl=null,this.roomBackgroundThumbnailUrl=null,this.roomKnockPageBackgroundImageUrl=null,this.roomKnockPageBackgroundThumbnailUrl=null,this.preferences=null,this.onboardingSurvey=null,this.type=null,Iy(e,Object,"properties"),Oy(e.organizationId,"organizationId"),Oy(e.organizationName,"organizationName"),Oy(e.subdomain,"subdomain"),Iy(e.permissions,Object,"permissions"),Iy(e.limits,Object,"limits"),this.organizationId=e.organizationId,this.organizationName=e.organizationName,this.subdomain=e.subdomain,this.permissions=e.permissions,this.limits=e.limits,this.account=e.account?new t_(e.account):null,this.logoImageUrl=e.logoImageUrl,this.roomBackgroundImageUrl=e.roomBackgroundImageUrl,this.roomBackgroundThumbnailUrl=e.roomBackgroundThumbnailUrl,this.roomKnockPageBackgroundImageUrl=e.roomKnockPageBackgroundImageUrl,this.roomKnockPageBackgroundThumbnailUrl=e.roomKnockPageBackgroundThumbnailUrl,this.preferences=e.preferences,this.onboardingSurvey=e.onboardingSurvey,this.type=e.type}static fromJson(e){const t=Iy(e,Object,"data"),r=(null==t?void 0:t.preferences)||{},n=(null==t?void 0:t.onboardingSurvey)||null,i=Iy(t.permissions,Object,"permissions");return new i_({organizationId:Oy(t.organizationId,"organizationId"),organizationName:Oy(t.organizationName,"organizationName"),subdomain:Oy(t.subdomain,"subdomain"),permissions:i,limits:n_(Iy(t.limits,Object,"limits")),account:t.account?t_.fromJson(t.account):null,logoImageUrl:"string"==typeof t.logoImageUrl?t.logoImageUrl:null,roomBackgroundImageUrl:"string"==typeof t.roomBackgroundImageUrl?t.roomBackgroundImageUrl:null,roomBackgroundThumbnailUrl:"string"==typeof t.roomBackgroundThumbnailUrl?t.roomBackgroundThumbnailUrl:null,roomKnockPageBackgroundImageUrl:"string"==typeof t.roomKnockPageBackgroundImageUrl?t.roomKnockPageBackgroundImageUrl:null,roomKnockPageBackgroundThumbnailUrl:"string"==typeof t.roomKnockPageBackgroundThumbnailUrl?t.roomKnockPageBackgroundThumbnailUrl:null,preferences:r,onboardingSurvey:n,type:"string"==typeof t.type?t.type:null})}}i_.GLOBAL_ORGANIZATION_ID="1";class s_{constructor({apiClient:e}){this._apiClient=e}createOrganization({organizationName:e,subdomain:t,owner:r}){const{displayName:n,consents:i}=r||{},s="email"in r?{value:r.email,verificationCode:Oy(r.verificationCode,"owner.verificationCode")}:null,a="idToken"in r?r.idToken:null;if(Oy(t,"subdomain"),Oy(e,"organizationName"),Oy(n,"owner.displayName"),ya.ok(s||a,"owner.email or owner.idToken is required"),i){xy(i,"consents");for(const{consentRevisionId:e,action:t}of i)Oy(e,"consentRevisionId"),jy(t,"action")}return this._apiClient.request("/organizations",{method:"POST",data:{organizationName:e,type:"private",subdomain:t,owner:Object.assign(Object.assign(Object.assign(Object.assign({},s&&{email:s}),a&&{idToken:a}),i&&{consents:i}),{displayName:n})}}).then((({data:e})=>Vy(e,"organizationId")))}getOrganizationBySubdomain(e){return Oy(e,"subdomain"),this._apiClient.request(`/organization-subdomains/${encodeURIComponent(e)}/?fields=permissions,account,onboardingSurvey`,{method:"GET"}).then((({data:e})=>i_.fromJson(e))).catch((e=>{if(e instanceof Py){if(404===e.status)return null;throw new Error(e.statusText)}throw e}))}getOrganizationByOrganizationId(e){return Oy(e,"organizationId"),this._apiClient.request(`/organizations/${encodeURIComponent(e)}?fields=permissions,account`,{method:"GET"}).then((({data:e})=>i_.fromJson(e))).catch((e=>{if(e instanceof Py){if(404===e.status)return null;throw new Error(e.statusText)}throw e}))}getOrganizationsByContactPoint(e){const{code:t}=e,r="email"in e?e.email:null,n="phoneNumber"in e?e.phoneNumber:null;ya.ok((r||n)&&!(r&&n),"either email or phoneNumber is required"),Oy(t,"code");const i=r?{type:"email",value:r}:{type:"phoneNumber",value:n};return this._apiClient.request("/organization-queries",{method:"POST",data:{contactPoint:i,code:t}}).then((({data:e})=>Gy(e,"organizations",(e=>i_.fromJson(e)))))}getOrganizationsByIdToken({idToken:e}){return Oy(e,"idToken"),this._apiClient.request("/organization-queries",{method:"POST",data:{idToken:e}}).then((({data:e})=>Gy(e,"organizations",(e=>i_.fromJson(Object.assign({permissions:{},limits:{}},My(e,"organization")))))))}getOrganizationsByLoggedInUser(){return this._apiClient.request("/user/organizations",{method:"GET"}).then((({data:e})=>Gy(e,"organizations",(e=>i_.fromJson(Object.assign({permissions:{},limits:{}},My(e,"organization")))))))}getSubdomainAvailability(e){return Oy(e,"subdomain"),this._apiClient.request(`/organization-subdomains/${encodeURIComponent(e)}/availability`,{method:"GET"}).then((({data:e})=>(Iy(e,Object,"data"),{status:Vy(e,"status")})))}updatePreferences({organizationId:e,preferences:t}){return ky(e,"organizationId"),ky(t,"preferences"),this._apiClient.request(`/organizations/${encodeURIComponent(e)}/preferences`,{method:"PATCH",data:t}).then((()=>{}))}deleteOrganization({organizationId:e}){return ky(e,"organizationId"),this._apiClient.request(`/organizations/${encodeURIComponent(e)}`,{method:"DELETE"}).then((()=>{}))}}class a_{constructor({organizationService:e,subdomain:t}){this._organizationService=e,this._subdomain=t,this._organizationPromise=null}initOrganization(){return this.fetchOrganization().then((()=>{}))}fetchOrganization(){return this._organizationPromise||(this._organizationPromise=this._organizationService.getOrganizationBySubdomain(this._subdomain)),this._organizationPromise}}const o_="https://api.whereby.dev";function c_(){const e=Zy.create({baseUrl:o_}),t=new zy({fetchDeviceCredentials:e.getCredentials.bind(e),baseUrl:o_}),r=new s_({apiClient:t});return{credentialsService:e,apiClient:t,organizationService:r,fetchOrganizationFromRoomUrl:e=>{const t=Vg({host:new URL(e).host});return new a_({organizationService:r,subdomain:t.subdomain}).fetchOrganization()}}}const d_=Se((e=>e.chat.chatMessages),(e=>e.cloudRecording),po,Xa,Mo,jo,Bo,(e=>e.streaming),(e=>e.waitingParticipants.waitingParticipants),((e,t,r,n,i,s,a,o,c)=>({chatMessages:e,cloudRecording:t.isRecording?{status:"recording"}:void 0,localScreenshareStatus:r.isScreenSharing?"active":void 0,localParticipant:Object.assign(Object.assign({},r),{stream:n}),remoteParticipants:i,screenshares:s,connectionStatus:a,liveStream:o.isStreaming?{status:"streaming",startedAt:o.startedAt}:void 0,waitingParticipants:c}))),l_="2.1.0-beta1",p_={chatMessages:[],remoteParticipants:[],connectionStatus:"initializing",screenshares:[],waitingParticipants:[]},u_={localMediaOptions:{audio:!0,video:!0}};const h_=Se((e=>e.localMedia.cameraDeviceError),ro,$a,qa,(e=>e.localMedia.isSettingCameraDevice),(e=>e.localMedia.isSettingMicrophoneDevice),to,Xa,(e=>e.localMedia.microphoneDeviceError),no,io,(e=>e.localMedia.startError),((e,t,r,n,i,s,a,o,c,d,l,p)=>({cameraDeviceError:e,cameraDevices:t,currentCameraDeviceId:r,currentMicrophoneDeviceId:n,isSettingCameraDevice:i,isSettingMicrophoneDevice:s,isStarting:a,localStream:o,microphoneDeviceError:c,microphoneDevices:d,speakerDevices:l,startError:p}))),m_={cameraDeviceError:null,cameraDevices:[],isSettingCameraDevice:!1,isSettingMicrophoneDevice:!1,isStarting:!1,microphoneDeviceError:null,microphoneDevices:[],speakerDevices:[],startError:null};return e.VideoView=o,e.sdkVersion=l_,e.useLocalMedia=function(e={audio:!0,video:!0}){const[r]=t.useState((()=>{const e=c_();return Bg({injectServices:e})})),[n,i]=t.useState(m_);return t.useEffect((()=>{const t=Ug(r,h_,i);return r.dispatch(Ua(e)),()=>{t(),r.dispatch(za())}}),[]),{state:n,actions:{setCameraDevice:t.useCallback((e=>r.dispatch(ka({deviceId:e}))),[r]),setMicrophoneDevice:t.useCallback((e=>r.dispatch(Ea({deviceId:e}))),[r]),toggleCameraEnabled:t.useCallback((e=>r.dispatch(Da({enabled:e}))),[r]),toggleMicrophoneEnabled:t.useCallback((e=>r.dispatch(Oa({enabled:e}))),[r])},store:r}},e.useRoomConnection=function(e,t=u_){const[r]=n.useState((()=>{if(t.localMedia)return t.localMedia.store;const e=c_();return Bg({injectServices:e})})),[i,s]=n.useState(),[a,c]=n.useState(p_);return n.useEffect((()=>{const n=Ug(r,d_,c),i=new URL(e),s=new URLSearchParams(i.search).get("roomKey");return r.dispatch(zt({displayName:t.displayName||"Guest",localMediaOptions:t.localMedia?void 0:t.localMediaOptions,roomKey:s,roomUrl:e,sdkVersion:l_,externalId:t.externalId||null})),()=>{n(),r.dispatch(Vt())}}),[]),n.useEffect((()=>{r&&!i&&s((()=>e=>n.createElement(o,Object.assign({},e,{onResize:({stream:e,width:t,height:n})=>{r.dispatch(_g({streamId:e.id,width:t,height:n}))}}))))}),[r,i]),{state:a,actions:{sendChatMessage:n.useCallback((e=>r.dispatch(aa({text:e}))),[r]),knock:n.useCallback((()=>r.dispatch(No())),[r]),setDisplayName:n.useCallback((e=>r.dispatch(co({displayName:e}))),[r]),toggleCamera:n.useCallback((e=>r.dispatch(Da({enabled:e}))),[r]),toggleMicrophone:n.useCallback((e=>r.dispatch(Oa({enabled:e}))),[r]),acceptWaitingParticipant:n.useCallback((e=>r.dispatch(Lg({participantId:e}))),[r]),rejectWaitingParticipant:n.useCallback((e=>r.dispatch(Ag({participantId:e}))),[r]),startCloudRecording:n.useCallback((()=>r.dispatch(da())),[r]),startScreenshare:n.useCallback((()=>r.dispatch(fo())),[r]),stopCloudRecording:n.useCallback((()=>r.dispatch(la())),[r]),stopScreenshare:n.useCallback((()=>r.dispatch(go())),[r])},components:{VideoView:i||o},_ref:r}},e}({},React);
|
|
3
|
+
let Ml;Pl.AwaitQueue=class{constructor(){this.pendingTasks=new Map,this.nextTaskId=0,this.stopping=!1}get size(){return this.pendingTasks.size}async push(e,t){if(t=t??e.name,Ol.debug(`push() [name:${t}]`),"function"!=typeof e)throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch(e){}return new Promise(((r,n)=>{const i={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:e=>{if(i.completed)return;i.completed=!0,this.pendingTasks.delete(i.id),Ol.debug(`resolving task [name:${i.name}]`),r(e);const[t]=this.pendingTasks.values();t&&!t.executedAt&&this.execute(t)},reject:e=>{if(!i.completed&&(i.completed=!0,this.pendingTasks.delete(i.id),Ol.debug(`rejecting task [name:${i.name}]: %s`,String(e)),n(e),!this.stopping)){const[e]=this.pendingTasks.values();e&&!e.executedAt&&this.execute(e)}}};this.pendingTasks.set(i.id,i),1===this.pendingTasks.size&&this.execute(i)}))}stop(){Ol.debug("stop()"),this.stopping=!0;for(const e of this.pendingTasks.values())Ol.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Il);this.stopping=!1}remove(e){Ol.debug(`remove() [taskIdx:${e}]`);const t=Array.from(this.pendingTasks.values())[e];t?t.reject(new xl):Ol.debug(`stop() | no task with given idx [taskIdx:${e}]`)}dump(){const e=Date.now();let t=0;return Array.from(this.pendingTasks.values()).map((r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0})))}async execute(e){if(Ol.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{const t=await e.task();e.resolve(t)}catch(t){e.reject(t)}}};var jl="function"==typeof queueMicrotask?queueMicrotask.bind("undefined"!=typeof window?window:Hi):e=>(Ml||(Ml=Promise.resolve())).then(e).catch((e=>setTimeout((()=>{throw e}),0))),Ll={};Object.defineProperty(Ll,"__esModule",{value:!0}),Ll.Producer=void 0;const Al=$d,Nl=tl,Fl=new Bd.Logger("Producer");class Bl extends Al.EnhancedEventEmitter{constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:s,disableTrackOnPause:a,zeroRtpOnPause:o,appData:c}){super(),this._closed=!1,this._observer=new Al.EnhancedEventEmitter,Fl.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=!!a&&!n.enabled,this._maxSpatialLayer=void 0,this._stopTracks=s,this._disableTrackOnPause=a,this._zeroRtpOnPause=o,this._appData=c||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Fl.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(Fl.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Nl.InvalidStateError("closed");return new Promise(((e,t)=>{this.safeEmit("@getstats",e,t)}))}pause(){Fl.debug("pause()"),this._closed?Fl.error("pause() | Producer closed"):(this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise(((e,t)=>{this.safeEmit("@pause",e,t)})).catch((()=>{})),this._observer.safeEmit("pause"))}resume(){Fl.debug("resume()"),this._closed?Fl.error("resume() | Producer closed"):(this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise(((e,t)=>{this.safeEmit("@resume",e,t)})).catch((()=>{})),this._observer.safeEmit("resume"))}async replaceTrack({track:e}){if(Fl.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch(e){}throw new Nl.InvalidStateError("closed")}if(e&&"ended"===e.readyState)throw new Nl.InvalidStateError("track ended");e!==this._track?(await new Promise(((t,r)=>{this.safeEmit("@replacetrack",e,t,r)})),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()):Fl.debug("replaceTrack() | same track, ignored")}async setMaxSpatialLayer(e){if(this._closed)throw new Nl.InvalidStateError("closed");if("video"!==this._kind)throw new Nl.UnsupportedError("not a video Producer");if("number"!=typeof e)throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise(((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)})).catch((()=>{})),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Nl.InvalidStateError("closed");if("object"!=typeof e)throw new TypeError("invalid params");await new Promise(((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)}))}onTrackEnded(){Fl.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(e){}}}Ll.Producer=Bl;var Ul={};Object.defineProperty(Ul,"__esModule",{value:!0}),Ul.Consumer=void 0;const zl=$d,Vl=tl,$l=new Bd.Logger("Consumer");class Gl extends zl.EnhancedEventEmitter{constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:s,appData:a}){super(),this._closed=!1,this._observer=new zl.EnhancedEventEmitter,$l.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=s,this._paused=!i.enabled,this._appData=a||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||($l.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||($l.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Vl.InvalidStateError("closed");return new Promise(((e,t)=>{this.safeEmit("@getstats",e,t)}))}pause(){$l.debug("pause()"),this._closed?$l.error("pause() | Consumer closed"):this._paused?$l.debug("pause() | Consumer is already paused"):(this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause"))}resume(){$l.debug("resume()"),this._closed?$l.error("resume() | Consumer closed"):this._paused?(this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")):$l.debug("resume() | Consumer is already resumed")}onTrackEnded(){$l.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(e){}}}Ul.Consumer=Gl;var ql={};Object.defineProperty(ql,"__esModule",{value:!0}),ql.DataProducer=void 0;const Wl=$d,Hl=tl,Kl=new Bd.Logger("DataProducer");class Jl extends Wl.EnhancedEventEmitter{constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),this._closed=!1,this._observer=new Wl.EnhancedEventEmitter,Kl.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=n||{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Kl.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(Kl.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(Kl.debug("send()"),this._closed)throw new Hl.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",(()=>{this._closed||(Kl.debug('DataChannel "open" event'),this.safeEmit("open"))})),this._dataChannel.addEventListener("error",(e=>{if(this._closed)return;let{error:t}=e;t||(t=new Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?Kl.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):Kl.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)})),this._dataChannel.addEventListener("close",(()=>{this._closed||(Kl.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))})),this._dataChannel.addEventListener("message",(()=>{this._closed||Kl.warn('DataChannel "message" event in a DataProducer, message discarded')})),this._dataChannel.addEventListener("bufferedamountlow",(()=>{this._closed||this.safeEmit("bufferedamountlow")}))}}ql.DataProducer=Jl;var Yl={};Object.defineProperty(Yl,"__esModule",{value:!0}),Yl.DataConsumer=void 0;const Ql=$d,Xl=new Bd.Logger("DataConsumer");class Zl extends Ql.EnhancedEventEmitter{constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),this._closed=!1,this._observer=new Ql.EnhancedEventEmitter,Xl.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=n,this._appData=i||{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Xl.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(Xl.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",(()=>{this._closed||(Xl.debug('DataChannel "open" event'),this.safeEmit("open"))})),this._dataChannel.addEventListener("error",(e=>{if(this._closed)return;let{error:t}=e;t||(t=new Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?Xl.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):Xl.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)})),this._dataChannel.addEventListener("close",(()=>{this._closed||(Xl.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)}))}}Yl.DataConsumer=Zl;var ep=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),tp=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),rp=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ep(t,e,r);return tp(t,e),t},np=Hi&&Hi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Tl,"__esModule",{value:!0}),Tl.Transport=void 0;const ip=Pl,sp=np(jl),ap=Bd,op=$d,cp=tl,dp=rp(il),lp=rp(sl),pp=Ll,up=Ul,hp=ql,mp=Yl,fp=new ap.Logger("Transport");class gp{constructor(e){this.consumerOptions=e,this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}class vp extends op.EnhancedEventEmitter{constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,appData:l,handlerFactory:p,extendedRtpCapabilities:u,canProduceByKind:h}){super(),this._closed=!1,this._iceGatheringState="new",this._connectionState="new",this._producers=new Map,this._consumers=new Map,this._dataProducers=new Map,this._dataConsumers=new Map,this._probatorConsumerCreated=!1,this._awaitQueue=new ip.AwaitQueue,this._pendingConsumerTasks=[],this._consumerCreationInProgress=!1,this._pendingPauseConsumers=new Map,this._consumerPauseInProgress=!1,this._pendingResumeConsumers=new Map,this._consumerResumeInProgress=!1,this._pendingCloseConsumers=new Map,this._consumerCloseInProgress=!1,this._observer=new op.EnhancedEventEmitter,fp.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._extendedRtpCapabilities=u,this._canProduceByKind=h,this._maxSctpMessageSize=s?s.maxMessageSize:null,delete(c=dp.clone(c,{})).iceServers,delete c.iceTransportPolicy,delete c.bundlePolicy,delete c.rtcpMuxPolicy,delete c.sdpSemantics,this._handler=p(),this._handler.run({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:u}),this._appData=l||{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){fp.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(const e of this._producers.values())e.transportClosed();this._producers.clear();for(const e of this._consumers.values())e.transportClosed();this._consumers.clear();for(const e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(const e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close")}}async getStats(){if(this._closed)throw new cp.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(fp.debug("restartIce()"),this._closed)throw new cp.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push((async()=>await this._handler.restartIce(e)),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(fp.debug("updateIceServers()"),this._closed)throw new cp.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push((async()=>this._handler.updateIceServers(e)),"transport.updateIceServers()")}async produce({track:e,encodings:t,codecOptions:r,codec:n,stopTracks:i=!0,disableTrackOnPause:s=!0,zeroRtpOnPause:a=!1,appData:o={}}={}){if(fp.debug("produce() [track:%o]",e),this._closed)throw new cp.InvalidStateError("closed");if(!e)throw new TypeError("missing track");if("send"!==this._direction)throw new cp.UnsupportedError("not a sending Transport");if(!this._canProduceByKind[e.kind])throw new cp.UnsupportedError(`cannot produce ${e.kind}`);if("ended"===e.readyState)throw new cp.InvalidStateError("track ended");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("produce"))throw new TypeError('no "produce" listener set into this transport');if(o&&"object"!=typeof o)throw new TypeError("if given, appData must be an object");return this._awaitQueue.push((async()=>{let c;if(t&&!Array.isArray(t))throw TypeError("encodings must be an array");t&&0===t.length?c=void 0:t&&(c=t.map((e=>{const t={active:!0};return!1===e.active&&(t.active=!1),"boolean"==typeof e.dtx&&(t.dtx=e.dtx),"string"==typeof e.scalabilityMode&&(t.scalabilityMode=e.scalabilityMode),"number"==typeof e.scaleResolutionDownBy&&(t.scaleResolutionDownBy=e.scaleResolutionDownBy),"number"==typeof e.maxBitrate&&(t.maxBitrate=e.maxBitrate),"number"==typeof e.maxFramerate&&(t.maxFramerate=e.maxFramerate),"boolean"==typeof e.adaptivePtime&&(t.adaptivePtime=e.adaptivePtime),"string"==typeof e.priority&&(t.priority=e.priority),"string"==typeof e.networkPriority&&(t.networkPriority=e.networkPriority),t})));const{localId:d,rtpParameters:l,rtpSender:p}=await this._handler.send({track:e,encodings:c,codecOptions:r,codec:n});try{lp.validateRtpParameters(l);const{id:t}=await new Promise(((t,r)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:l,appData:o},t,r)})),r=new pp.Producer({id:t,localId:d,rtpSender:p,track:e,rtpParameters:l,stopTracks:i,disableTrackOnPause:s,zeroRtpOnPause:a,appData:o});return this._producers.set(r.id,r),this.handleProducer(r),this._observer.safeEmit("newproducer",r),r}catch(e){throw this._handler.stopSending(d).catch((()=>{})),e}}),"transport.produce()").catch((t=>{if(i)try{e.stop()}catch(e){}throw t}))}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,appData:s={}}){if(fp.debug("consume()"),n=dp.clone(n,void 0),this._closed)throw new cp.InvalidStateError("closed");if("recv"!==this._direction)throw new cp.UnsupportedError("not a receiving Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing producerId");if("audio"!==r&&"video"!==r)throw new TypeError(`invalid kind '${r}'`);if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(s&&"object"!=typeof s)throw new TypeError("if given, appData must be an object");if(!lp.canReceive(n,this._extendedRtpCapabilities))throw new cp.UnsupportedError("cannot consume this Producer");const a=new gp({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,appData:s});return this._pendingConsumerTasks.push(a),(0,sp.default)((()=>{this._closed||!1===this._consumerCreationInProgress&&this.createPendingConsumers()})),a.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:n="",protocol:i="",appData:s={}}={}){if(fp.debug("produceData()"),this._closed)throw new cp.InvalidStateError("closed");if("send"!==this._direction)throw new cp.UnsupportedError("not a sending Transport");if(!this._maxSctpMessageSize)throw new cp.UnsupportedError("SCTP not enabled by remote Transport");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("producedata"))throw new TypeError('no "producedata" listener set into this transport');if(s&&"object"!=typeof s)throw new TypeError("if given, appData must be an object");return(t||r)&&(e=!1),this._awaitQueue.push((async()=>{const{dataChannel:a,sctpStreamParameters:o}=await this._handler.sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i});lp.validateSctpStreamParameters(o);const{id:c}=await new Promise(((e,t)=>{this.safeEmit("producedata",{sctpStreamParameters:o,label:n,protocol:i,appData:s},e,t)})),d=new hp.DataProducer({id:c,dataChannel:a,sctpStreamParameters:o,appData:s});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d}),"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:n="",protocol:i="",appData:s={}}){if(fp.debug("consumeData()"),r=dp.clone(r,void 0),this._closed)throw new cp.InvalidStateError("closed");if("recv"!==this._direction)throw new cp.UnsupportedError("not a receiving Transport");if(!this._maxSctpMessageSize)throw new cp.UnsupportedError("SCTP not enabled by remote Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing dataProducerId");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(s&&"object"!=typeof s)throw new TypeError("if given, appData must be an object");return lp.validateSctpStreamParameters(r),this._awaitQueue.push((async()=>{const{dataChannel:a}=await this._handler.receiveDataChannel({sctpStreamParameters:r,label:n,protocol:i}),o=new mp.DataConsumer({id:e,dataProducerId:t,dataChannel:a,sctpStreamParameters:r,appData:s});return this._dataConsumers.set(o.id,o),this.handleDataConsumer(o),this._observer.safeEmit("newdataconsumer",o),o}),"transport.consumeData()")}async createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingConsumerTasks.length)return void fp.debug("createPendingConsumers() | there is no Consumer to be created");const e=[...this._pendingConsumerTasks];let t;this._pendingConsumerTasks=[];const r=[];for(const t of e){const{id:e,kind:n,rtpParameters:i,streamId:s}=t.consumerOptions;r.push({trackId:e,kind:n,rtpParameters:i,streamId:s})}try{const n=await this._handler.receive(r);for(let r=0;r<n.length;++r){const i=e[r],s=n[r],{id:a,producerId:o,kind:c,rtpParameters:d,appData:l}=i.consumerOptions,{localId:p,rtpReceiver:u,track:h}=s,m=new up.Consumer({id:a,localId:p,producerId:o,rtpReceiver:u,track:h,rtpParameters:d,appData:l});this._consumers.set(m.id,m),this.handleConsumer(m),this._probatorConsumerCreated||t||"video"!==c||(t=m),this._observer.safeEmit("newconsumer",m),i.resolve(m)}}catch(t){for(const r of e)r.reject(t)}if(t)try{const e=lp.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:e}]),fp.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(e){fp.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",e)}}),"transport.createPendingConsumers()").then((()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()})).catch((()=>{}))}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingPauseConsumers.size)return void fp.debug("pausePendingConsumers() | there is no Consumer to be paused");const e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{const t=e.map((e=>e.localId));await this._handler.pauseReceiving(t)}catch(e){fp.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(0===this._pendingResumeConsumers.size)return void fp.debug("resumePendingConsumers() | there is no Consumer to be resumed");const e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{const t=e.map((e=>e.localId));await this._handler.resumeReceiving(t)}catch(e){fp.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()=>{if(0===this._pendingCloseConsumers.size)return void fp.debug("closePendingConsumers() | there is no Consumer to be closed");const e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map((e=>e.localId)))}catch(e){fp.error("closePendingConsumers() | failed to close Consumers:",e)}}),"transport.closePendingConsumers").then((()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()})).catch((()=>{}))}handleHandler(){const e=this._handler;e.on("@connect",(({dtlsParameters:e},t,r)=>{this._closed?r(new cp.InvalidStateError("closed")):this.safeEmit("connect",{dtlsParameters:e},t,r)})),e.on("@icegatheringstatechange",(e=>{e!==this._iceGatheringState&&(fp.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))})),e.on("@connectionstatechange",(e=>{e!==this._connectionState&&(fp.debug("connection state changed to %s",e),this._connectionState=e,this._closed||this.safeEmit("connectionstatechange",e))}))}handleProducer(e){e.on("@close",(()=>{this._producers.delete(e.id),this._closed||this._awaitQueue.push((async()=>await this._handler.stopSending(e.localId)),"producer @close event").catch((e=>fp.warn("producer.close() failed:%o",e)))})),e.on("@pause",((t,r)=>{this._awaitQueue.push((async()=>await this._handler.pauseSending(e.localId)),"producer @pause event").then(t).catch(r)})),e.on("@resume",((t,r)=>{this._awaitQueue.push((async()=>await this._handler.resumeSending(e.localId)),"producer @resume event").then(t).catch(r)})),e.on("@replacetrack",((t,r,n)=>{this._awaitQueue.push((async()=>await this._handler.replaceTrack(e.localId,t)),"producer @replacetrack event").then(r).catch(n)})),e.on("@setmaxspatiallayer",((t,r,n)=>{this._awaitQueue.push((async()=>await this._handler.setMaxSpatialLayer(e.localId,t)),"producer @setmaxspatiallayer event").then(r).catch(n)})),e.on("@setrtpencodingparameters",((t,r,n)=>{this._awaitQueue.push((async()=>await this._handler.setRtpEncodingParameters(e.localId,t)),"producer @setrtpencodingparameters event").then(r).catch(n)})),e.on("@getstats",((t,r)=>{if(this._closed)return r(new cp.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)}))}handleConsumer(e){e.on("@close",(()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),this._closed||(this._pendingCloseConsumers.set(e.id,e),!1===this._consumerCloseInProgress&&this.closePendingConsumers())})),e.on("@pause",(()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),(0,sp.default)((()=>{this._closed||!1===this._consumerPauseInProgress&&this.pausePendingConsumers()}))})),e.on("@resume",(()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),(0,sp.default)((()=>{this._closed||!1===this._consumerResumeInProgress&&this.resumePendingConsumers()}))})),e.on("@getstats",((t,r)=>{if(this._closed)return r(new cp.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)}))}handleDataProducer(e){e.on("@close",(()=>{this._dataProducers.delete(e.id)}))}handleDataConsumer(e){e.on("@close",(()=>{this._dataConsumers.delete(e.id)}))}}Tl.Transport=vp;var yp={},_p={},bp=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),wp=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Sp=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&bp(t,e,r);return wp(t,e),t};Object.defineProperty(_p,"__esModule",{value:!0}),_p.applyCodecParameters=_p.getCname=_p.extractDtlsParameters=_p.extractRtpCapabilities=void 0;const Cp=Sp(hc);_p.extractRtpCapabilities=function({sdpObject:e}){const t=new Map,r=[];let n=!1,i=!1;for(const s of e.media){const e=s.type;switch(e){case"audio":if(n)continue;n=!0;break;case"video":if(i)continue;i=!0;break;default:continue}for(const r of s.rtp){const n={kind:e,mimeType:`${e}/${r.codec}`,preferredPayloadType:r.payload,clockRate:r.rate,channels:r.encoding,parameters:{},rtcpFeedback:[]};t.set(n.preferredPayloadType,n)}for(const e of s.fmtp||[]){const r=Cp.parseParams(e.config),n=t.get(e.payload);n&&(r&&r.hasOwnProperty("profile-level-id")&&(r["profile-level-id"]=String(r["profile-level-id"])),n.parameters=r)}for(const r of s.rtcpFb||[]){const n={type:r.type,parameter:r.subtype};if(n.parameter||delete n.parameter,"*"!==r.payload){const e=t.get(r.payload);if(!e)continue;e.rtcpFeedback.push(n)}else for(const r of t.values())r.kind!==e||/.+\/rtx$/i.test(r.mimeType)||r.rtcpFeedback.push(n)}for(const t of s.ext||[]){if(t["encrypt-uri"])continue;const n={kind:e,uri:t.uri,preferredId:t.value};r.push(n)}}return{codecs:Array.from(t.values()),headerExtensions:r}},_p.extractDtlsParameters=function({sdpObject:e}){let t,r=e.setup,n=e.fingerprint;if(!r||!n){const t=(e.media||[]).find((e=>0!==e.port));t&&(r??(r=t.setup),n??(n=t.fingerprint))}if(!r)throw new Error("no a=setup found at SDP session or media level");if(!n)throw new Error("no a=fingerprint found at SDP session or media level");switch(r){case"active":t="client";break;case"passive":t="server";break;case"actpass":t="auto"}return{role:t,fingerprints:[{algorithm:n.type,value:n.hash}]}},_p.getCname=function({offerMediaObject:e}){const t=(e.ssrcs||[]).find((e=>"cname"===e.attribute));return t?t.value:""},_p.applyCodecParameters=function({offerRtpParameters:e,answerMediaObject:t}){for(const r of e.codecs){const e=r.mimeType.toLowerCase();if("audio/opus"!==e)continue;if(!(t.rtp||[]).find((e=>e.payload===r.payloadType)))continue;t.fmtp=t.fmtp||[];let n=t.fmtp.find((e=>e.payload===r.payloadType));n||(n={payload:r.payloadType,config:""},t.fmtp.push(n));const i=Cp.parseParams(n.config);switch(e){case"audio/opus":{const e=r.parameters["sprop-stereo"];void 0!==e&&(i.stereo=e?1:0);break}}n.config="";for(const e of Object.keys(i))n.config&&(n.config+=";"),n.config+=`${e}=${i[e]}`}};var Rp={};Object.defineProperty(Rp,"__esModule",{value:!0}),Rp.addLegacySimulcast=Rp.getRtpEncodings=void 0,Rp.getRtpEncodings=function({offerMediaObject:e}){const t=new Set;for(const r of e.ssrcs||[]){const e=r.id;t.add(e)}if(0===t.size)throw new Error("no a=ssrc lines found");const r=new Map;for(const n of e.ssrcGroups||[]){if("FID"!==n.semantics)continue;let[e,i]=n.ssrcs.split(/\s+/);e=Number(e),i=Number(i),t.has(e)&&(t.delete(e),t.delete(i),r.set(e,i))}for(const e of t)r.set(e,null);const n=[];for(const[e,t]of r){const r={ssrc:e};t&&(r.rtx={ssrc:t}),n.push(r)}return n},Rp.addLegacySimulcast=function({offerMediaObject:e,numStreams:t}){if(t<=1)throw new TypeError("numStreams must be greater than 1");const r=(e.ssrcs||[]).find((e=>"msid"===e.attribute));if(!r)throw new Error("a=ssrc line with msid information not found");const[n,i]=r.value.split(" "),s=r.id;let a;(e.ssrcGroups||[]).some((e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===s&&(a=Number(t[1]),!0)}));const o=e.ssrcs.find((e=>"cname"===e.attribute));if(!o)throw new Error("a=ssrc line with cname information not found");const c=o.value,d=[],l=[];for(let e=0;e<t;++e)d.push(s+e),a&&l.push(a+e);e.ssrcGroups=[],e.ssrcs=[],e.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let t=0;t<d.length;++t){const r=d[t];e.ssrcs.push({id:r,attribute:"cname",value:c}),e.ssrcs.push({id:r,attribute:"msid",value:`${n} ${i}`})}for(let t=0;t<l.length;++t){const r=d[t],s=l[t];e.ssrcs.push({id:s,attribute:"cname",value:c}),e.ssrcs.push({id:s,attribute:"msid",value:`${n} ${i}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${r} ${s}`})}};var Tp={};Object.defineProperty(Tp,"__esModule",{value:!0}),Tp.addNackSuppportForOpus=void 0,Tp.addNackSuppportForOpus=function(e){for(const t of e.codecs||[])"audio/opus"!==t.mimeType.toLowerCase()&&"audio/multiopus"!==t.mimeType.toLowerCase()||t.rtcpFeedback?.some((e=>"nack"===e.type&&!e.parameter))||(t.rtcpFeedback||(t.rtcpFeedback=[]),t.rtcpFeedback.push({type:"nack"}))};var Pp={};Object.defineProperty(Pp,"__esModule",{value:!0}),Pp.HandlerInterface=void 0;const kp=$d;class Ep extends kp.EnhancedEventEmitter{constructor(){super()}}Pp.HandlerInterface=Ep;var Dp={},Op={},Ip=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),xp=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Mp=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Ip(t,e,r);return xp(t,e),t};Object.defineProperty(Op,"__esModule",{value:!0}),Op.OfferMediaSection=Op.AnswerMediaSection=Op.MediaSection=void 0;const jp=Mp(hc),Lp=Mp(il);class Ap{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:n=!1}){if(this._mediaObject={},this._planB=n,e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(const e of t){const t={component:1};t.foundation=e.foundation,t.ip=e.ip,t.port=e.port,t.priority=e.priority,t.transport=e.protocol,t.type=e.type,e.tcpType&&(t.tcptype=e.tcpType),this._mediaObject.candidates.push(t)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return 0===this._mediaObject.port}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause(),delete this._mediaObject.ext,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}close(){this.disable(),this._mediaObject.port=0}}Op.MediaSection=Ap;Op.AnswerMediaSection=class extends Ap{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,planB:s=!1,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:d,extmapAllowMixed:l=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:s}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(const e of c.codecs){const t={payload:e.payloadType,codec:Np(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);const r=Lp.clone(e.parameters,{});let n=Lp.clone(e.rtcpFeedback,[]);if(d){const{opusStereo:t,opusFec:i,opusDtx:s,opusMaxPlaybackRate:a,opusMaxAverageBitrate:c,opusPtime:l,opusNack:p,videoGoogleStartBitrate:u,videoGoogleMaxBitrate:h,videoGoogleMinBitrate:m}=d,f=o.codecs.find((t=>t.payloadType===e.payloadType));switch(e.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":void 0!==t&&(f.parameters["sprop-stereo"]=t?1:0,r.stereo=t?1:0),void 0!==i&&(f.parameters.useinbandfec=i?1:0,r.useinbandfec=i?1:0),void 0!==s&&(f.parameters.usedtx=s?1:0,r.usedtx=s?1:0),void 0!==a&&(r.maxplaybackrate=a),void 0!==c&&(r.maxaveragebitrate=c),void 0!==l&&(f.parameters.ptime=l,r.ptime=l),p||(f.rtcpFeedback=f.rtcpFeedback.filter((e=>"nack"!==e.type||e.parameter)),n=n.filter((e=>"nack"!==e.type||e.parameter)));break;case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":void 0!==u&&(r["x-google-start-bitrate"]=u),void 0!==h&&(r["x-google-max-bitrate"]=h),void 0!==m&&(r["x-google-min-bitrate"]=m)}}const i={payload:e.payloadType,config:""};for(const e of Object.keys(r))i.config&&(i.config+=";"),i.config+=`${e}=${r[e]}`;i.config&&this._mediaObject.fmtp.push(i);for(const t of n)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}this._mediaObject.payloads=c.codecs.map((e=>e.payloadType)).join(" "),this._mediaObject.ext=[];for(const e of c.headerExtensions){(a.ext||[]).some((t=>t.uri===e.uri))&&this._mediaObject.ext.push({uri:e.uri,value:e.id})}if(l&&"extmap-allow-mixed"===a.extmapAllowMixed&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(const e of a.rids||[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(const e of a.rids||[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize",this._planB&&"video"===this._mediaObject.type&&(this._mediaObject.xGoogleFlag="conference");break;case"application":"number"==typeof a.sctpPort?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=n.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize})}}setDtlsRole(e){switch(e){case"client":this._mediaObject.setup="active";break;case"server":this._mediaObject.setup="passive";break;case"auto":this._mediaObject.setup="actpass"}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast||!this._mediaObject.simulcast.list1)return;const t={};for(const r of e)r.rid&&(t[r.rid]=r);const r=this._mediaObject.simulcast.list1,n=jp.parseSimulcastStreamList(r);for(const e of n)for(const r of e)r.paused=!t[r.scid]?.active;this._mediaObject.simulcast.list1=n.map((e=>e.map((e=>`${e.paused?"~":""}${e.scid}`)).join(","))).join(";")}};function Np(e){const t=new RegExp("^(audio|video)/(.+)","i").exec(e.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}Op.OfferMediaSection=class extends Ap{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,planB:s=!1,mid:a,kind:o,offerRtpParameters:c,streamId:d,trackId:l,oldDataChannelSpec:p=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:s}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.protocol=n?"UDP/DTLS/SCTP":"UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._planB||(this._mediaObject.msid=`${d||"-"} ${l}`);for(const e of c.codecs){const t={payload:e.payloadType,codec:Np(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);const r={payload:e.payloadType,config:""};for(const t of Object.keys(e.parameters))r.config&&(r.config+=";"),r.config+=`${t}=${e.parameters[t]}`;r.config&&this._mediaObject.fmtp.push(r);for(const t of e.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}this._mediaObject.payloads=c.codecs.map((e=>e.payloadType)).join(" "),this._mediaObject.ext=[];for(const e of c.headerExtensions)this._mediaObject.ext.push({uri:e.uri,value:e.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";const e=c.encodings[0],t=e.ssrc,r=e.rtx&&e.rtx.ssrc?e.rtx.ssrc:void 0;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],c.rtcp.cname&&this._mediaObject.ssrcs.push({id:t,attribute:"cname",value:c.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:t,attribute:"msid",value:`${d||"-"} ${l}`}),r&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:r,attribute:"cname",value:c.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:r,attribute:"msid",value:`${d||"-"} ${l}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`}));break}case"application":p?(this._mediaObject.payloads=n.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize}):(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize)}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}planBReceive({offerRtpParameters:e,streamId:t,trackId:r}){const n=e.encodings[0],i=n.ssrc,s=n.rtx&&n.rtx.ssrc?n.rtx.ssrc:void 0,a=this._mediaObject.payloads.split(" ");for(const t of e.codecs){if(a.includes(String(t.payloadType)))continue;const e={payload:t.payloadType,codec:Np(t),rate:t.clockRate};t.channels>1&&(e.encoding=t.channels),this._mediaObject.rtp.push(e);const r={payload:t.payloadType,config:""};for(const e of Object.keys(t.parameters))r.config&&(r.config+=";"),r.config+=`${e}=${t.parameters[e]}`;r.config&&this._mediaObject.fmtp.push(r);for(const e of t.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:t.payloadType,type:e.type,subtype:e.parameter})}this._mediaObject.payloads+=` ${e.codecs.filter((e=>!this._mediaObject.payloads.includes(e.payloadType))).map((e=>e.payloadType)).join(" ")}`,this._mediaObject.payloads=this._mediaObject.payloads.trim(),e.rtcp.cname&&this._mediaObject.ssrcs.push({id:i,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:i,attribute:"msid",value:`${t||"-"} ${r}`}),s&&(e.rtcp.cname&&this._mediaObject.ssrcs.push({id:s,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:s,attribute:"msid",value:`${t||"-"} ${r}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${i} ${s}`}))}planBStopReceiving({offerRtpParameters:e}){const t=e.encodings[0],r=t.ssrc,n=t.rtx&&t.rtx.ssrc?t.rtx.ssrc:void 0;this._mediaObject.ssrcs=this._mediaObject.ssrcs.filter((e=>e.id!==r&&e.id!==n)),n&&(this._mediaObject.ssrcGroups=this._mediaObject.ssrcGroups.filter((e=>e.ssrcs!==`${r} ${n}`)))}};var Fp=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Bp=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Up=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Fp(t,e,r);return Bp(t,e),t};Object.defineProperty(Dp,"__esModule",{value:!0}),Dp.RemoteSdp=void 0;const zp=Up(hc),Vp=Op,$p=new Bd.Logger("RemoteSdp");Dp.RemoteSdp=class{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,planB:s=!1}){if(this._mediaSections=[],this._midToIndex=new Map,this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=n,this._plainRtpParameters=i,this._planB=s,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:1e4,sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},e&&e.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};const e=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[e-1].algorithm,hash:r.fingerprints[e-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){$p.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(const t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){$p.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(const t of this._mediaSections)t.setDtlsRole(e)}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){const t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i,extmapAllowMixed:s=!1}){const a=new Vp.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i,extmapAllowMixed:s});t?this._replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this._replaceMediaSection(a):this._addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}){const s=this._midToIndex.get(e);let a;if(void 0!==s&&(a=this._mediaSections[s]),a)a.planBReceive({offerRtpParameters:r,streamId:n,trackId:i}),this._replaceMediaSection(a);else{a=new Vp.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i});const s=this._mediaSections.find((e=>e.closed));s?this._replaceMediaSection(a,s.mid):this._addMediaSection(a)}}pauseMediaSection(e){this._findMediaSection(e).pause()}resumeSendingMediaSection(e){this._findMediaSection(e).resume()}resumeReceivingMediaSection(e){this._findMediaSection(e).resume()}disableMediaSection(e){this._findMediaSection(e).disable()}closeMediaSection(e){const t=this._findMediaSection(e);return e===this._firstMid?($p.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this._regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){const r=this._findMediaSection(e);r.muxSimulcastStreams(t),this._replaceMediaSection(r)}planBStopReceiving({mid:e,offerRtpParameters:t}){const r=this._findMediaSection(e);r.planBStopReceiving({offerRtpParameters:t}),this._replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){const t=new Vp.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this._addMediaSection(t)}receiveSctpAssociation({oldDataChannelSpec:e=!1}={}){const t=new Vp.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application",oldDataChannelSpec:e});this._addMediaSection(t)}getSdp(){return this._sdpObject.origin.sessionVersion++,zp.write(this._sdpObject)}_addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this._regenerateBundleMids()}_replaceMediaSection(e,t){if("string"==typeof t){const r=this._midToIndex.get(t);if(void 0===r)throw new Error(`no media section found for reuseMid '${t}'`);const n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this._regenerateBundleMids()}else{const t=this._midToIndex.get(e.mid);if(void 0===t)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[t]=e,this._sdpObject.media[t]=e.getObject()}}_findMediaSection(e){const t=this._midToIndex.get(e);if(void 0===t)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}_regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter((e=>!e.closed)).map((e=>e.mid)).join(" "))}};var Gp={};Object.defineProperty(Gp,"__esModule",{value:!0}),Gp.parse=void 0;const qp=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");Gp.parse=function(e){const t=qp.exec(e||"");return t?{spatialLayers:Number(t[1]),temporalLayers:Number(t[2])}:{spatialLayers:1,temporalLayers:1}};var Wp=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Hp=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Kp=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Wp(t,e,r);return Hp(t,e),t};Object.defineProperty(yp,"__esModule",{value:!0}),yp.Chrome111=void 0;const Jp=Kp(hc),Yp=Bd,Qp=Kp(il),Xp=Kp(sl),Zp=Kp(_p),eu=Kp(Rp),tu=Kp(Tp),ru=tl,nu=Pp,iu=Dp,su=Gp,au=new Yp.Logger("Chrome111"),ou={OS:1024,MIS:1024};class cu extends nu.HandlerInterface{static createFactory(){return()=>new cu}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome111"}close(){if(au.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){au.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Jp.parse(t.sdp),n=Zp.extractRtpCapabilities({sdpObject:r});return tu.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return au.debug("getNativeSctpCapabilities()"),{numStreams:ou}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),au.debug("run()"),this._direction=e,this._remoteSdp=new iu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:Xp.getSendingRtpParameters("audio",d),video:Xp.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Xp.getSendingRemoteRtpParameters("audio",d),video:Xp.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):(au.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",(()=>{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")}})))}async updateIceServers(e){this.assertNotClosed(),au.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),au.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});au.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();au.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){if(this.assertNotClosed(),this.assertSendDirection(),au.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1){t.forEach(((e,t)=>{e.rid=`r${t}`}));let e=1,r=1;for(const e of t){const t=e.scalabilityMode?(0,su.parse)(e.scalabilityMode).temporalLayers:3;t>r&&(r=t)}for(const n of t)n.rid="r"+e++,n.scalabilityMode=`L1T${r}`}const i=Qp.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=Xp.reduceCodecs(i.codecs,n);const s=Qp.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=Xp.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t}),c=await this._pc.createOffer();let d=Jp.parse(c.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d}),au.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);const l=o.mid;i.mid=l,d=Jp.parse(this._pc.localDescription.sdp);const p=d.media[a.idx];if(i.rtcp.cname=Zp.getCname({offerMediaObject:p}),t)if(1===t.length){const e=eu.getRtpEncodings({offerMediaObject:p});Object.assign(e[0],t[0]),i.encodings=e}else i.encodings=t;else i.encodings=eu.getRtpEncodings({offerMediaObject:p});this._remoteSdp.send({offerMediaObject:p,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const u={type:"answer",sdp:this._remoteSdp.getSdp()};return au.debug("send() | calling pc.setRemoteDescription() [answer:%o]",u),await this._pc.setRemoteDescription(u),this._mapMidTransceiver.set(l,o),{localId:l,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),au.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();au.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),au.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();au.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),au.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();au.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?au.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):au.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),au.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();au.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),au.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();au.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};au.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ou.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Jp.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),au.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};au.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;au.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Jp.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Zp.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Jp.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),au.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){au.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();au.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){au.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();au.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){au.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();au.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};au.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};au.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Jp.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}au.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Jp.parse(this._pc.localDescription.sdp));const r=Zp.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new ru.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}yp.Chrome111=cu;var du={},lu=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),pu=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),uu=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&lu(t,e,r);return pu(t,e),t};Object.defineProperty(du,"__esModule",{value:!0}),du.Chrome74=void 0;const hu=uu(hc),mu=Bd,fu=uu(il),gu=uu(sl),vu=uu(_p),yu=uu(Rp),_u=uu(Tp),bu=tl,wu=Pp,Su=Dp,Cu=Gp,Ru=new mu.Logger("Chrome74"),Tu={OS:1024,MIS:1024};class Pu extends wu.HandlerInterface{static createFactory(){return()=>new Pu}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome74"}close(){if(Ru.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Ru.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=hu.parse(t.sdp),n=vu.extractRtpCapabilities({sdpObject:r});return _u.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Ru.debug("getNativeSctpCapabilities()"),{numStreams:Tu}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){Ru.debug("run()"),this._direction=e,this._remoteSdp=new Su.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:gu.getSendingRtpParameters("audio",d),video:gu.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:gu.getSendingRemoteRtpParameters("audio",d),video:gu.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):(Ru.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",(()=>{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")}})))}async updateIceServers(e){this.assertNotClosed(),Ru.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),Ru.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Ru.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Ru.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const i=fu.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=gu.reduceCodecs(i.codecs,n);const s=fu.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=gu.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});let c,d=await this._pc.createOffer(),l=hu.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let p=!1;const u=(0,Cu.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&u.spatialLayers>1&&"video/vp9"===i.codecs[0].mimeType.toLowerCase()&&(Ru.debug("send() | enabling legacy simulcast for VP9 SVC"),p=!0,l=hu.parse(d.sdp),c=l.media[a.idx],yu.addLegacySimulcast({offerMediaObject:c,numStreams:u.spatialLayers}),d={type:"offer",sdp:hu.write(l)}),Ru.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);const h=o.mid;if(i.mid=h,l=hu.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=vu.getCname({offerMediaObject:c}),t)if(1===t.length){let e=yu.getRtpEncodings({offerMediaObject:c});Object.assign(e[0],t[0]),p&&(e=[e[0]]),i.encodings=e}else i.encodings=t;else i.encodings=yu.getRtpEncodings({offerMediaObject:c});if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${u.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const m={type:"answer",sdp:this._remoteSdp.getSdp()};return Ru.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),Ru.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Ru.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Ru.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();Ru.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Ru.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Ru.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Ru.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Ru.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Ru.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Ru.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Tu.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=hu.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Ru.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Ru.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Ru.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=hu.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));vu.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:hu.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Ru.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Ru.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Ru.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Ru.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Ru.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Ru.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Ru.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Ru.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Ru.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=hu.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Ru.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=hu.parse(this._pc.localDescription.sdp));const r=vu.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new bu.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}du.Chrome74=Pu;var ku={},Eu=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Du=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Ou=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Eu(t,e,r);return Du(t,e),t};Object.defineProperty(ku,"__esModule",{value:!0}),ku.Chrome70=void 0;const Iu=Ou(hc),xu=Bd,Mu=Ou(il),ju=Ou(sl),Lu=Ou(_p),Au=Ou(Rp),Nu=Pp,Fu=Dp,Bu=Gp,Uu=new xu.Logger("Chrome70"),zu={OS:1024,MIS:1024};class Vu extends Nu.HandlerInterface{static createFactory(){return()=>new Vu}constructor(){super(),this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome70"}close(){if(Uu.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){Uu.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Iu.parse(t.sdp);return Lu.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Uu.debug("getNativeSctpCapabilities()"),{numStreams:zu}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){Uu.debug("run()"),this._direction=e,this._remoteSdp=new Fu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:ju.getSendingRtpParameters("audio",d),video:ju.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:ju.getSendingRemoteRtpParameters("audio",d),video:ju.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Uu.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){Uu.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(Uu.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Uu.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Uu.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),Uu.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);const i=Mu.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=ju.reduceCodecs(i.codecs,n);const s=Mu.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=ju.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});let c,d=await this._pc.createOffer(),l=Iu.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),t&&t.length>1&&(Uu.debug("send() | enabling legacy simulcast"),l=Iu.parse(d.sdp),c=l.media[a.idx],Au.addLegacySimulcast({offerMediaObject:c,numStreams:t.length}),d={type:"offer",sdp:Iu.write(l)});let p=!1;const u=(0,Bu.parse)((t||[{}])[0].scalabilityMode);if(t&&1===t.length&&u.spatialLayers>1&&"video/vp9"===i.codecs[0].mimeType.toLowerCase()&&(Uu.debug("send() | enabling legacy simulcast for VP9 SVC"),p=!0,l=Iu.parse(d.sdp),c=l.media[a.idx],Au.addLegacySimulcast({offerMediaObject:c,numStreams:u.spatialLayers}),d={type:"offer",sdp:Iu.write(l)}),Uu.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d),t){Uu.debug("send() | applying given encodings");const e=o.sender.getParameters();for(let r=0;r<(e.encodings||[]).length;++r){const n=e.encodings[r],i=t[r];if(!i)break;e.encodings[r]=Object.assign(n,i)}await o.sender.setParameters(e)}const h=o.mid;if(i.mid=h,l=Iu.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=Lu.getCname({offerMediaObject:c}),i.encodings=Au.getRtpEncodings({offerMediaObject:c}),t)for(let e=0;e<i.encodings.length;++e)t[e]&&Object.assign(i.encodings[e],t[e]);if(p&&(i.encodings=[i.encodings[0]]),i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r});const m={type:"answer",sdp:this._remoteSdp.getSdp()};return Uu.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){this.assertSendDirection(),Uu.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Uu.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?Uu.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Uu.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),Uu.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Uu.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),Uu.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Uu.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};Uu.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%zu.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Iu.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Uu.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Uu.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Uu.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Iu.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Lu.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Iu.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Uu.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){Uu.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Uu.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};Uu.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Uu.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Iu.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Uu.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Iu.parse(this._pc.localDescription.sdp));const r=Lu.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}ku.Chrome70=Vu;var $u={},Gu={};Object.defineProperty(Gu,"__esModule",{value:!0}),Gu.addLegacySimulcast=Gu.getRtpEncodings=void 0,Gu.getRtpEncodings=function({offerMediaObject:e,track:t}){const r=new Set;for(const n of e.ssrcs||[]){if("msid"!==n.attribute)continue;if(n.value.split(" ")[1]===t.id){const e=n.id;r.add(e)}}if(0===r.size)throw new Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);const n=new Map;for(const t of e.ssrcGroups||[]){if("FID"!==t.semantics)continue;let[e,i]=t.ssrcs.split(/\s+/);e=Number(e),i=Number(i),r.has(e)&&(r.delete(e),r.delete(i),n.set(e,i))}for(const e of r)n.set(e,null);const i=[];for(const[e,t]of n){const r={ssrc:e};t&&(r.rtx={ssrc:t}),i.push(r)}return i},Gu.addLegacySimulcast=function({offerMediaObject:e,track:t,numStreams:r}){if(r<=1)throw new TypeError("numStreams must be greater than 1");let n,i,s;if(!(e.ssrcs||[]).find((e=>{if("msid"!==e.attribute)return!1;return e.value.split(" ")[1]===t.id&&(n=e.id,s=e.value.split(" ")[0],!0)})))throw new Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);(e.ssrcGroups||[]).some((e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===n&&(i=Number(t[1]),!0)}));const a=e.ssrcs.find((e=>"cname"===e.attribute&&e.id===n));if(!a)throw new Error(`a=ssrc line with cname information not found [track.id:${t.id}]`);const o=a.value,c=[],d=[];for(let e=0;e<r;++e)c.push(n+e),i&&d.push(i+e);e.ssrcGroups=e.ssrcGroups||[],e.ssrcs=e.ssrcs||[],e.ssrcGroups.push({semantics:"SIM",ssrcs:c.join(" ")});for(let r=0;r<c.length;++r){const n=c[r];e.ssrcs.push({id:n,attribute:"cname",value:o}),e.ssrcs.push({id:n,attribute:"msid",value:`${s} ${t.id}`})}for(let r=0;r<d.length;++r){const n=c[r],i=d[r];e.ssrcs.push({id:i,attribute:"cname",value:o}),e.ssrcs.push({id:i,attribute:"msid",value:`${s} ${t.id}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${n} ${i}`})}};var qu=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Wu=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Hu=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&qu(t,e,r);return Wu(t,e),t};Object.defineProperty($u,"__esModule",{value:!0}),$u.Chrome67=void 0;const Ku=Hu(hc),Ju=Bd,Yu=Hu(il),Qu=Hu(sl),Xu=Hu(_p),Zu=Hu(Gu),eh=Pp,th=Dp,rh=new Ju.Logger("Chrome67"),nh={OS:1024,MIS:1024};class ih extends eh.HandlerInterface{static createFactory(){return()=>new ih}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome67"}close(){if(rh.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){rh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=Ku.parse(t.sdp);return Xu.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return rh.debug("getNativeSctpCapabilities()"),{numStreams:nh}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){rh.debug("run()"),this._direction=e,this._remoteSdp=new th.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:Qu.getSendingRtpParameters("audio",d),video:Qu.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Qu.getSendingRemoteRtpParameters("audio",d),video:Qu.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(rh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){rh.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(rh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});rh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();rh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),rh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&rh.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let i,s=await this._pc.createOffer(),a=Ku.parse(s.sdp);const o=Yu.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=Qu.reduceCodecs(o.codecs);const c=Yu.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=Qu.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(rh.debug("send() | enabling simulcast"),a=Ku.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),Zu.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:Ku.write(a)}),rh.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=Ku.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=Xu.getCname({offerMediaObject:i}),o.encodings=Zu.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&"video/vp8"===o.codecs[0].mimeType.toLowerCase())for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);this._nextSendLocalId++;const p=this._pc.getSenders().find((t=>t.track===e));return this._mapSendLocalIdRtpSender.set(l,p),{localId:l,rtpParameters:o,rtpSender:p}}async stopSending(e){this.assertSendDirection(),rh.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");this._pc.removeTrack(t),t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);const r=await this._pc.createOffer();rh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void rh.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?rh.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):rh.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.track;await r.replaceTrack(t),n&&this._sendStream.removeTrack(n),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),rh.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(n)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),rh.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.setParameters(n)}async getSenderStats(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};rh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%nh.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Ku.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),rh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};rh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const t of e){const{trackId:e,kind:r,rtpParameters:n,streamId:i}=t;rh.debug("receive() [trackId:%s, kind:%s]",e,r);const s=r;this._remoteSdp.receive({mid:s,kind:r,offerRtpParameters:n,streamId:i||n.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let n=await this._pc.createAnswer();const i=Ku.parse(n.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,s=i.media.find((e=>String(e.mid)===n));Xu.applyCodecParameters({offerRtpParameters:r,answerMediaObject:s})}n={type:"answer",sdp:Ku.write(i)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:i}),rh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(const r of e){const{kind:e,trackId:n,rtpParameters:i}=r,s=n,a=e,o=this._pc.getReceivers().find((e=>e.track&&e.track.id===s));if(!o)throw new Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(s,{mid:a,rtpParameters:i,rtpReceiver:o}),t.push({localId:s,track:o.track,rtpReceiver:o})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){rh.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();rh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();const{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw new Error("associated RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};rh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};rh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Ku.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}rh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Ku.parse(this._pc.localDescription.sdp));const r=Xu.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}$u.Chrome67=ih;var sh={},ah=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),oh=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),ch=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ah(t,e,r);return oh(t,e),t};Object.defineProperty(sh,"__esModule",{value:!0}),sh.Chrome55=void 0;const dh=ch(hc),lh=Bd,ph=tl,uh=ch(il),hh=ch(sl),mh=ch(_p),fh=ch(Gu),gh=Pp,vh=Dp,yh=new lh.Logger("Chrome55"),_h={OS:1024,MIS:1024};class bh extends gh.HandlerInterface{static createFactory(){return()=>new bh}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome55"}close(){if(yh.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){yh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=dh.parse(t.sdp);return mh.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return yh.debug("getNativeSctpCapabilities()"),{numStreams:_h}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){yh.debug("run()"),this._direction=e,this._remoteSdp=new vh.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:hh.getSendingRtpParameters("audio",d),video:hh.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:hh.getSendingRemoteRtpParameters("audio",d),video:hh.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(yh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){yh.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(yh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});yh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();yh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),yh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&yh.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let i,s=await this._pc.createOffer(),a=dh.parse(s.sdp);const o=uh.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=hh.reduceCodecs(o.codecs);const c=uh.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=hh.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(yh.debug("send() | enabling simulcast"),a=dh.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),fh.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:dh.write(a)}),yh.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=dh.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=mh.getCname({offerMediaObject:i}),o.encodings=fh.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&"video/vp8"===o.codecs[0].mimeType.toLowerCase())for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(l,e),{localId:l,rtpParameters:o}}async stopSending(e){this.assertSendDirection(),yh.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdTrack.get(e);if(!t)throw new Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);const r=await this._pc.createOffer();yh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void yh.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new ph.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new ph.UnsupportedError(" not implemented")}async setRtpEncodingParameters(e,t){throw new ph.UnsupportedError("not supported")}async getSenderStats(e){throw new ph.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};yh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_h.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=dh.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),yh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};yh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const t of e){const{trackId:e,kind:r,rtpParameters:n,streamId:i}=t;yh.debug("receive() [trackId:%s, kind:%s]",e,r);const s=r;this._remoteSdp.receive({mid:s,kind:r,offerRtpParameters:n,streamId:i||n.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let n=await this._pc.createAnswer();const i=dh.parse(n.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,s=i.media.find((e=>String(e.mid)===n));mh.applyCodecParameters({offerRtpParameters:r,answerMediaObject:s})}n={type:"answer",sdp:dh.write(i)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:i}),yh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(const r of e){const{kind:e,trackId:n,rtpParameters:i}=r,s=e,a=n,o=r.streamId||i.rtcp.cname,c=this._pc.getRemoteStreams().find((e=>e.id===o)).getTrackById(a);if(!c)throw new Error("remote track not found");this._mapRecvLocalIdInfo.set(a,{mid:s,rtpParameters:i}),t.push({localId:a,track:c})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){yh.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();yh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new ph.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};yh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};yh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=dh.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}yh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=dh.parse(this._pc.localDescription.sdp));const r=mh.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}sh.Chrome55=bh;var wh={},Sh=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Ch=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Rh=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Sh(t,e,r);return Ch(t,e),t};Object.defineProperty(wh,"__esModule",{value:!0}),wh.Firefox60=void 0;const Th=Rh(hc),Ph=Bd,kh=tl,Eh=Rh(il),Dh=Rh(sl),Oh=Rh(_p),Ih=Rh(Rp),xh=Pp,Mh=Dp,jh=Gp,Lh=new Ph.Logger("Firefox60"),Ah={OS:16,MIS:2048};class Nh extends xh.HandlerInterface{static createFactory(){return()=>new Nh}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Firefox60"}close(){if(Lh.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Lh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),t=document.createElement("canvas");t.getContext("2d");const r=t.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"});const n=e.addTransceiver(r,{direction:"sendrecv"}),i=n.sender.getParameters(),s=[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}];i.encodings=s,await n.sender.setParameters(i);const a=await e.createOffer();try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}const o=Th.parse(a.sdp);return Oh.extractRtpCapabilities({sdpObject:o})}catch(n){try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}throw n}}async getNativeSctpCapabilities(){return Lh.debug("getNativeSctpCapabilities()"),{numStreams:Ah}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),Lh.debug("run()"),this._direction=e,this._remoteSdp=new Mh.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:Dh.getSendingRtpParameters("audio",d),video:Dh.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:Dh.getSendingRemoteRtpParameters("audio",d),video:Dh.getSendingRemoteRtpParameters("video",d)},this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Lh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){throw this.assertNotClosed(),new kh.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),Lh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Lh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Lh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&(t=Eh.clone(t,[])).length>1&&(t.forEach(((e,t)=>{e.rid=`r${t}`})),t.reverse());const i=Eh.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=Dh.reduceCodecs(i.codecs,n);const s=Eh.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=Dh.reduceCodecs(s.codecs,n);const a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});if(t){const e=a.sender.getParameters();e.encodings=t,await a.sender.setParameters(e)}const o=await this._pc.createOffer();let c=Th.parse(o.sdp);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:c});const d=(0,jh.parse)((t||[{}])[0].scalabilityMode);Lh.debug("send() | calling pc.setLocalDescription() [offer:%o]",o),await this._pc.setLocalDescription(o);const l=a.mid;i.mid=l,c=Th.parse(this._pc.localDescription.sdp);const p=c.media[c.media.length-1];if(i.rtcp.cname=Oh.getCname({offerMediaObject:p}),t)if(1===t.length){const e=Ih.getRtpEncodings({offerMediaObject:p});Object.assign(e[0],t[0]),i.encodings=e}else i.encodings=t.reverse();else i.encodings=Ih.getRtpEncodings({offerMediaObject:p});if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${d.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:p,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const u={type:"answer",sdp:this._remoteSdp.getSdp()};return Lh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",u),await this._pc.setRemoteDescription(u),this._mapMidTransceiver.set(l,a),{localId:l,rtpParameters:i,rtpSender:a.sender}}async stopSending(e){if(this.assertSendDirection(),Lh.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);const r=await this._pc.createOffer();Lh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Lh.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();Lh.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Lh.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Lh.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");const n=r.sender.getParameters();t=n.encodings.length-1-t,n.encodings.forEach(((e,r)=>{e.active=r>=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Lh.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Lh.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Lh.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Lh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ah.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Th.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),Lh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Lh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Lh.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Th.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,a=r.get(e),o=s.media.find((e=>String(e.mid)===a));Oh.applyCodecParameters({offerRtpParameters:n,answerMediaObject:o}),i={type:"answer",sdp:Th.write(s)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:s}),Lh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Lh.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Lh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Lh.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Lh.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Lh.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Lh.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Lh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Lh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Th.parse(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}Lh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Th.parse(this._pc.localDescription.sdp));const r=Oh.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new kh.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}wh.Firefox60=Nh;var Fh={},Bh=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Uh=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),zh=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Bh(t,e,r);return Uh(t,e),t};Object.defineProperty(Fh,"__esModule",{value:!0}),Fh.Safari12=void 0;const Vh=zh(hc),$h=Bd,Gh=zh(il),qh=zh(sl),Wh=zh(_p),Hh=zh(Rp),Kh=zh(Tp),Jh=tl,Yh=Pp,Qh=Dp,Xh=Gp,Zh=new $h.Logger("Safari12"),em={OS:1024,MIS:1024};class tm extends Yh.HandlerInterface{static createFactory(){return()=>new tm}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari12"}close(){if(Zh.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Zh.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Vh.parse(t.sdp),n=Wh.extractRtpCapabilities({sdpObject:r});return Kh.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Zh.debug("getNativeSctpCapabilities()"),{numStreams:em}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),Zh.debug("run()"),this._direction=e,this._remoteSdp=new Qh.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:qh.getSendingRtpParameters("audio",d),video:qh.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:qh.getSendingRemoteRtpParameters("audio",d),video:qh.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Zh.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){this.assertNotClosed(),Zh.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),Zh.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Zh.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Zh.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);const i=Gh.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=qh.reduceCodecs(i.codecs,n);const s=Gh.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=qh.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});let c,d=await this._pc.createOffer(),l=Vh.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});const p=(0,Xh.parse)((t||[{}])[0].scalabilityMode);t&&t.length>1&&(Zh.debug("send() | enabling legacy simulcast"),l=Vh.parse(d.sdp),c=l.media[a.idx],Hh.addLegacySimulcast({offerMediaObject:c,numStreams:t.length}),d={type:"offer",sdp:Vh.write(l)}),Zh.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);const u=o.mid;if(i.mid=u,l=Vh.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=Wh.getCname({offerMediaObject:c}),i.encodings=Hh.getRtpEncodings({offerMediaObject:c}),t)for(let e=0;e<i.encodings.length;++e)t[e]&&Object.assign(i.encodings[e],t[e]);if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${p.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r});const h={type:"answer",sdp:this._remoteSdp.getSdp()};return Zh.debug("send() | calling pc.setRemoteDescription() [answer:%o]",h),await this._pc.setRemoteDescription(h),this._mapMidTransceiver.set(u,o),{localId:u,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;Zh.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Zh.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Zh.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();Zh.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Zh.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Zh.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Zh.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Zh.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Zh.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Zh.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%em.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Vh.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Zh.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Zh.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Zh.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Vh.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Wh.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Vh.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Zh.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Zh.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Zh.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Zh.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Zh.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Zh.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Zh.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Zh.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Zh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Vh.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Zh.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Vh.parse(this._pc.localDescription.sdp));const r=Wh.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Jh.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}Fh.Safari12=tm;var rm={},nm=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),im=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),sm=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&nm(t,e,r);return im(t,e),t};Object.defineProperty(rm,"__esModule",{value:!0}),rm.Safari11=void 0;const am=sm(hc),om=Bd,cm=sm(il),dm=sm(sl),lm=sm(_p),pm=sm(Gu),um=Pp,hm=Dp,mm=new om.Logger("Safari11"),fm={OS:1024,MIS:1024};class gm extends um.HandlerInterface{static createFactory(){return()=>new gm}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari11"}close(){if(mm.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){mm.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=am.parse(t.sdp);return lm.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return mm.debug("getNativeSctpCapabilities()"),{numStreams:fm}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){mm.debug("run()"),this._direction=e,this._remoteSdp=new hm.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:dm.getSendingRtpParameters("audio",d),video:dm.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:dm.getSendingRemoteRtpParameters("audio",d),video:dm.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(mm.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){mm.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(mm.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});mm.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();mm.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),mm.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&mm.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let i,s=await this._pc.createOffer(),a=am.parse(s.sdp);const o=cm.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=dm.reduceCodecs(o.codecs);const c=cm.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=dm.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(mm.debug("send() | enabling simulcast"),a=am.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),pm.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:am.write(a)}),mm.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=am.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=lm.getCname({offerMediaObject:i}),o.encodings=pm.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&"video/vp8"===o.codecs[0].mimeType.toLowerCase())for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);this._nextSendLocalId++;const p=this._pc.getSenders().find((t=>t.track===e));return this._mapSendLocalIdRtpSender.set(l,p),{localId:l,rtpParameters:o,rtpSender:p}}async stopSending(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);const r=await this._pc.createOffer();mm.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void mm.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?mm.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):mm.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.track;await r.replaceTrack(t),n&&this._sendStream.removeTrack(n),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),mm.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(n)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),mm.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.setParameters(n)}async getSenderStats(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};mm.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%fm.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=am.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),mm.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};mm.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const t of e){const{trackId:e,kind:r,rtpParameters:n,streamId:i}=t;mm.debug("receive() [trackId:%s, kind:%s]",e,r);const s=r;this._remoteSdp.receive({mid:s,kind:r,offerRtpParameters:n,streamId:i||n.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let n=await this._pc.createAnswer();const i=am.parse(n.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,s=i.media.find((e=>String(e.mid)===n));lm.applyCodecParameters({offerRtpParameters:r,answerMediaObject:s})}n={type:"answer",sdp:am.write(i)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:i}),mm.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(const r of e){const{kind:e,trackId:n,rtpParameters:i}=r,s=e,a=n,o=this._pc.getReceivers().find((e=>e.track&&e.track.id===a));if(!o)throw new Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(a,{mid:s,rtpParameters:i,rtpReceiver:o}),t.push({localId:a,track:o.track,rtpReceiver:o})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){mm.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();mm.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw new Error("associated RTCRtpReceiver not found");return t.getStats()}async pauseReceiving(e){}async resumeReceiving(e){}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};mm.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};mm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=am.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}mm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=am.parse(this._pc.localDescription.sdp));const r=lm.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}rm.Safari11=gm;var vm={},ym={},_m=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),bm=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),wm=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&_m(t,e,r);return bm(t,e),t};Object.defineProperty(ym,"__esModule",{value:!0}),ym.mangleRtpParameters=ym.getCapabilities=void 0;const Sm=wm(il);ym.getCapabilities=function(){const e=RTCRtpReceiver.getCapabilities(),t=Sm.clone(e,{});for(const e of t.codecs){if(e.channels=e.numChannels,delete e.numChannels,e.mimeType=e.mimeType||`${e.kind}/${e.name}`,e.parameters){const t=e.parameters;t.apt&&(t.apt=Number(t.apt)),t["packetization-mode"]&&(t["packetization-mode"]=Number(t["packetization-mode"]))}for(const t of e.rtcpFeedback||[])t.parameter||(t.parameter="")}return t},ym.mangleRtpParameters=function(e){const t=Sm.clone(e,{});t.mid&&(t.muxId=t.mid,delete t.mid);for(const e of t.codecs)e.channels&&(e.numChannels=e.channels,delete e.channels),e.mimeType&&!e.name&&(e.name=e.mimeType.split("/")[1]),delete e.mimeType;return t};var Cm=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Rm=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Tm=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Cm(t,e,r);return Rm(t,e),t};Object.defineProperty(vm,"__esModule",{value:!0}),vm.Edge11=void 0;const Pm=Bd,km=tl,Em=Tm(il),Dm=Tm(sl),Om=Tm(ym),Im=Pp,xm=new Pm.Logger("Edge11");class Mm extends Im.HandlerInterface{static createFactory(){return()=>new Mm}constructor(){super(),this._rtpSenders=new Map,this._rtpReceivers=new Map,this._nextSendLocalId=0,this._transportReady=!1}get name(){return"Edge11"}close(){xm.debug("close()");try{this._iceGatherer.close()}catch(e){}try{this._iceTransport.stop()}catch(e){}try{this._dtlsTransport.stop()}catch(e){}for(const e of this._rtpSenders.values())try{e.stop()}catch(e){}for(const e of this._rtpReceivers.values())try{e.stop()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){return xm.debug("getNativeRtpCapabilities()"),Om.getCapabilities()}async getNativeSctpCapabilities(){return xm.debug("getNativeSctpCapabilities()"),{numStreams:{OS:0,MIS:0}}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){xm.debug("run()"),this._sendingRtpParametersByKind={audio:Dm.getSendingRtpParameters("audio",d),video:Dm.getSendingRtpParameters("video",d)},this._remoteIceParameters=t,this._remoteIceCandidates=r,this._remoteDtlsParameters=n,this._cname=`CNAME-${Em.generateRandomNumber()}`,this.setIceGatherer({iceServers:s,iceTransportPolicy:a}),this.setIceTransport(),this.setDtlsTransport()}async updateIceServers(e){throw new km.UnsupportedError("not supported")}async restartIce(e){if(xm.debug("restartIce()"),this._remoteIceParameters=e,this._transportReady){xm.debug("restartIce() | calling iceTransport.start()"),this._iceTransport.start(this._iceGatherer,e,"controlling");for(const e of this._remoteIceCandidates)this._iceTransport.addRemoteCandidate(e);this._iceTransport.addRemoteCandidate({})}}async getTransportStats(){return this._iceTransport.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){xm.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),xm.debug("send() | calling new RTCRtpSender()");const i=new RTCRtpSender(e,this._dtlsTransport),s=Em.clone(this._sendingRtpParametersByKind[e.kind],{});s.codecs=Dm.reduceCodecs(s.codecs,n);const a=s.codecs.some((e=>/.+\/rtx$/i.test(e.mimeType)));t||(t=[{}]);for(const e of t)e.ssrc=Em.generateRandomNumber(),a&&(e.rtx={ssrc:Em.generateRandomNumber()});s.encodings=t,s.rtcp={cname:this._cname,reducedSize:!0,mux:!0};const o=Om.mangleRtpParameters(s);xm.debug("send() | calling rtpSender.send() [params:%o]",o),await i.send(o);const c=String(this._nextSendLocalId);return this._nextSendLocalId++,this._rtpSenders.set(c,i),{localId:c,rtpParameters:s,rtpSender:i}}async stopSending(e){xm.debug("stopSending() [localId:%s]",e);const t=this._rtpSenders.get(e);if(!t)throw new Error("RTCRtpSender not found");this._rtpSenders.delete(e);try{xm.debug("stopSending() | calling rtpSender.stop()"),t.stop()}catch(e){throw xm.warn("stopSending() | rtpSender.stop() failed:%o",e),e}}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){t?xm.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):xm.debug("replaceTrack() [localId:%s, no track]",e);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");r.setTrack(t)}async setMaxSpatialLayer(e,t){xm.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(n)}async setRtpEncodingParameters(e,t){xm.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");const n=r.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.setParameters(n)}async getSenderStats(e){const t=this._rtpSenders.get(e);if(!t)throw new Error("RTCRtpSender not found");return t.getStats()}async sendDataChannel(e){throw new km.UnsupportedError("not implemented")}async receive(e){const t=[];for(const t of e){const{trackId:e,kind:r}=t;xm.debug("receive() [trackId:%s, kind:%s]",e,r)}this._transportReady||await this.setupTransport({localDtlsRole:"server"});for(const r of e){const{trackId:e,kind:n,rtpParameters:i}=r;xm.debug("receive() | calling new RTCRtpReceiver()");const s=new RTCRtpReceiver(this._dtlsTransport,n);s.addEventListener("error",(e=>{xm.error('rtpReceiver "error" event [event:%o]',e)}));const a=Om.mangleRtpParameters(i);xm.debug("receive() | calling rtpReceiver.receive() [params:%o]",a),await s.receive(a);const o=e;this._rtpReceivers.set(o,s),t.push({localId:o,track:s.track,rtpReceiver:s})}return t}async stopReceiving(e){for(const t of e){xm.debug("stopReceiving() [localId:%s]",t);const e=this._rtpReceivers.get(t);if(!e)throw new Error("RTCRtpReceiver not found");this._rtpReceivers.delete(t);try{xm.debug("stopReceiving() | calling rtpReceiver.stop()"),e.stop()}catch(e){xm.warn("stopReceiving() | rtpReceiver.stop() failed:%o",e)}}}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){const t=this._rtpReceivers.get(e);if(!t)throw new Error("RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel(e){throw new km.UnsupportedError("not implemented")}setIceGatherer({iceServers:e,iceTransportPolicy:t}){const r=new RTCIceGatherer({iceServers:e||[],gatherPolicy:t||"all"});r.addEventListener("error",(e=>{xm.error('iceGatherer "error" event [event:%o]',e)}));try{r.gather()}catch(e){xm.debug("setIceGatherer() | iceGatherer.gather() failed: %s",e.toString())}this._iceGatherer=r}setIceTransport(){const e=new RTCIceTransport(this._iceGatherer);e.addEventListener("statechange",(()=>{switch(e.state){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")}})),e.addEventListener("icestatechange",(()=>{switch(e.state){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")}})),e.addEventListener("candidatepairchange",(e=>{xm.debug('iceTransport "candidatepairchange" event [pair:%o]',e.pair)})),this._iceTransport=e}setDtlsTransport(){const e=new RTCDtlsTransport(this._iceTransport);e.addEventListener("statechange",(()=>{xm.debug('dtlsTransport "statechange" event [state:%s]',e.state)})),e.addEventListener("dtlsstatechange",(()=>{xm.debug('dtlsTransport "dtlsstatechange" event [state:%s]',e.state),"closed"===e.state&&this.emit("@connectionstatechange","closed")})),e.addEventListener("error",(e=>{xm.error('dtlsTransport "error" event [event:%o]',e)})),this._dtlsTransport=e}async setupTransport({localDtlsRole:e}){xm.debug("setupTransport()");const t=this._dtlsTransport.getLocalParameters();t.role=e,await new Promise(((e,r)=>{this.safeEmit("@connect",{dtlsParameters:t},e,r)})),this._iceTransport.start(this._iceGatherer,this._remoteIceParameters,"controlling");for(const e of this._remoteIceCandidates)this._iceTransport.addRemoteCandidate(e);this._iceTransport.addRemoteCandidate({}),this._remoteDtlsParameters.fingerprints=this._remoteDtlsParameters.fingerprints.filter((e=>"sha-256"===e.algorithm||"sha-384"===e.algorithm||"sha-512"===e.algorithm)),this._dtlsTransport.start(this._remoteDtlsParameters),this._transportReady=!0}}vm.Edge11=Mm;var jm={},Lm=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),Am=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Nm=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Lm(t,e,r);return Am(t,e),t};Object.defineProperty(jm,"__esModule",{value:!0}),jm.ReactNativeUnifiedPlan=void 0;const Fm=Nm(hc),Bm=Bd,Um=Nm(il),zm=Nm(sl),Vm=Nm(_p),$m=Nm(Rp),Gm=Nm(Tp),qm=tl,Wm=Pp,Hm=Dp,Km=Gp,Jm=new Bm.Logger("ReactNativeUnifiedPlan"),Ym={OS:1024,MIS:1024};class Qm extends Wm.HandlerInterface{static createFactory(){return()=>new Qm}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNativeUnifiedPlan"}close(){if(Jm.debug("close()"),!this._closed){if(this._closed=!0,this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){Jm.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const t=await e.createOffer();try{e.close()}catch(e){}const r=Fm.parse(t.sdp),n=Vm.extractRtpCapabilities({sdpObject:r});return Gm.addNackSuppportForOpus(n),n}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return Jm.debug("getNativeSctpCapabilities()"),{numStreams:Ym}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){this.assertNotClosed(),Jm.debug("run()"),this._direction=e,this._remoteSdp=new Hm.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._sendingRtpParametersByKind={audio:zm.getSendingRtpParameters("audio",d),video:zm.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:zm.getSendingRemoteRtpParameters("audio",d),video:zm.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(Jm.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){this.assertNotClosed(),Jm.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),Jm.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});Jm.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};Jm.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();Jm.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertNotClosed(),this.assertSendDirection(),Jm.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const i=Um.clone(this._sendingRtpParametersByKind[e.kind],{});i.codecs=zm.reduceCodecs(i.codecs,n);const s=Um.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});s.codecs=zm.reduceCodecs(s.codecs,n);const a=this._remoteSdp.getNextMediaSectionIdx(),o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});let c,d=await this._pc.createOffer(),l=Fm.parse(d.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let p=!1;const u=(0,Km.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&u.spatialLayers>1&&"video/vp9"===i.codecs[0].mimeType.toLowerCase()&&(Jm.debug("send() | enabling legacy simulcast for VP9 SVC"),p=!0,l=Fm.parse(d.sdp),c=l.media[a.idx],$m.addLegacySimulcast({offerMediaObject:c,numStreams:u.spatialLayers}),d={type:"offer",sdp:Fm.write(l)}),Jm.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let h=o.mid??void 0;if(h||Jm.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),i.mid=h,l=Fm.parse(this._pc.localDescription.sdp),c=l.media[a.idx],i.rtcp.cname=Vm.getCname({offerMediaObject:c}),t)if(1===t.length){let e=$m.getRtpEncodings({offerMediaObject:c});Object.assign(e[0],t[0]),p&&(e=[e[0]]),i.encodings=e}else i.encodings=t;else i.encodings=$m.getRtpEncodings({offerMediaObject:c});if(i.encodings.length>1&&("video/vp8"===i.codecs[0].mimeType.toLowerCase()||"video/h264"===i.codecs[0].mimeType.toLowerCase()))for(const e of i.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${u.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:c,reuseMid:a.reuseMid,offerRtpParameters:i,answerRtpParameters:s,codecOptions:r,extmapAllowMixed:!0});const m={type:"answer",sdp:this._remoteSdp.getSdp()};return Jm.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m),h||(h=o.mid,i.mid=h),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:i,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;Jm.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender);if(this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}const r=await this._pc.createOffer();Jm.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),Jm.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();Jm.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),Jm.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();Jm.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const n={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?Jm.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):Jm.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),Jm.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Jm.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),Jm.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const n=r.sender.getParameters();n.encodings.forEach(((e,r)=>{n.encodings[r]={...e,...t}})),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);const i=await this._pc.createOffer();Jm.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const s={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertNotClosed(),this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:i};Jm.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ym.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=Fm.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),Jm.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};Jm.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i,streamId:s}=t;Jm.debug("receive() [trackId:%s, kind:%s]",e,n);const a=i.mid||String(this._mapMidTransceiver.size);r.set(e,a),this._remoteSdp.receive({mid:a,kind:n,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};Jm.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=Fm.parse(i.sdp);for(const t of e){const{trackId:e,rtpParameters:n}=t,i=r.get(e),a=s.media.find((e=>String(e.mid)===i));Vm.applyCodecParameters({offerRtpParameters:n,answerMediaObject:a})}i={type:"answer",sdp:Fm.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),Jm.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{trackId:e}=n,i=r.get(e),s=this._pc.getTransceivers().find((e=>e.mid===i));if(!s)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,s),t.push({localId:i,track:s.receiver.track,rtpReceiver:s.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const t of e){Jm.debug("stopReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Jm.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Jm.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const t of e)this._mapMidTransceiver.delete(t)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Jm.debug("pauseReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Jm.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Jm.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const t of e){Jm.debug("resumeReceiving() [localId:%s]",t);const e=this._mapMidTransceiver.get(t);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};Jm.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();Jm.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a,protocol:r};Jm.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};Jm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=Fm.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}Jm.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Fm.parse(this._pc.localDescription.sdp));const r=Vm.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new qm.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}jm.ReactNativeUnifiedPlan=Qm;var Xm={},Zm=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),ef=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),tf=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&Zm(t,e,r);return ef(t,e),t};Object.defineProperty(Xm,"__esModule",{value:!0}),Xm.ReactNative=void 0;const rf=tf(hc),nf=Bd,sf=tl,af=tf(il),of=tf(sl),cf=tf(_p),df=tf(Gu),lf=Pp,pf=Dp,uf=new nf.Logger("ReactNative"),hf={OS:1024,MIS:1024};class mf extends lf.HandlerInterface{static createFactory(){return()=>new mf}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNative"}close(){if(uf.debug("close()"),this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){uf.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}const r=rf.parse(t.sdp);return cf.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return uf.debug("getNativeSctpCapabilities()"),{numStreams:hf}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:d}){uf.debug("run()"),this._direction=e,this._remoteSdp=new pf.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:of.getSendingRtpParameters("audio",d),video:of.getSendingRtpParameters("video",d)},this._sendingRemoteRtpParametersByKind={audio:of.getSendingRemoteRtpParameters("audio",d),video:of.getSendingRemoteRtpParameters("video",d)},n.role&&"auto"!==n.role&&(this._forcedLocalDtlsRole="server"===n.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:s||[],iceTransportPolicy:a||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(uf.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),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")}}))}async updateIceServers(e){uf.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(uf.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});uf.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();uf.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:n}){this.assertSendDirection(),uf.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),n&&uf.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let i,s=await this._pc.createOffer(),a=rf.parse(s.sdp);const o=af.clone(this._sendingRtpParametersByKind[e.kind],{});o.codecs=of.reduceCodecs(o.codecs);const c=af.clone(this._sendingRemoteRtpParametersByKind[e.kind],{});if(c.codecs=of.reduceCodecs(c.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),"video"===e.kind&&t&&t.length>1&&(uf.debug("send() | enabling simulcast"),a=rf.parse(s.sdp),i=a.media.find((e=>"video"===e.type)),df.addLegacySimulcast({offerMediaObject:i,track:e,numStreams:t.length}),s={type:"offer",sdp:rf.write(a)}),uf.debug("send() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s),a=rf.parse(this._pc.localDescription.sdp),i=a.media.find((t=>t.type===e.kind)),o.rtcp.cname=cf.getCname({offerMediaObject:i}),o.encodings=df.getRtpEncodings({offerMediaObject:i,track:e}),t)for(let e=0;e<o.encodings.length;++e)t[e]&&Object.assign(o.encodings[e],t[e]);if(o.encodings.length>1&&("video/vp8"===o.codecs[0].mimeType.toLowerCase()||"video/h264"===o.codecs[0].mimeType.toLowerCase()))for(const e of o.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:i,offerRtpParameters:o,answerRtpParameters:c,codecOptions:r});const d={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("send() | calling pc.setRemoteDescription() [answer:%o]",d),await this._pc.setRemoteDescription(d);const l=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(l,e),{localId:l,rtpParameters:o}}async stopSending(e){this.assertSendDirection(),uf.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdTrack.get(e);if(!t)throw new Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);const r=await this._pc.createOffer();uf.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length)return void uf.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());throw e}if("stable"===this._pc.signalingState)return;const n={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new sf.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new sf.UnsupportedError("not implemented")}async setRtpEncodingParameters(e,t){throw new sf.UnsupportedError("not implemented")}async getSenderStats(e){throw new sf.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}){this.assertSendDirection();const s={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:i};uf.debug("sendDataChannel() [options:%o]",s);const a=this._pc.createDataChannel(n,s);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%hf.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=rf.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),uf.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const n={type:"answer",sdp:this._remoteSdp.getSdp()};uf.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._hasDataChannelMediaSection=!0}return{dataChannel:a,sctpStreamParameters:{streamId:s.id,ordered:s.ordered,maxPacketLifeTime:s.maxPacketLifeTime,maxRetransmits:s.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[],r=new Map;for(const t of e){const{trackId:e,kind:n,rtpParameters:i}=t;uf.debug("receive() [trackId:%s, kind:%s]",e,n);const s=n;let a=t.streamId||i.rtcp.cname;uf.debug("receive() | forcing a random remote streamId to avoid well known bug in react-native-webrtc"),a+=`-hack-${af.generateRandomNumber()}`,r.set(e,a),this._remoteSdp.receive({mid:s,kind:n,offerRtpParameters:i,streamId:a,trackId:e})}const n={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer();const s=rf.parse(i.sdp);for(const t of e){const{kind:e,rtpParameters:r}=t,n=e,i=s.media.find((e=>String(e.mid)===n));cf.applyCodecParameters({offerRtpParameters:r,answerMediaObject:i})}i={type:"answer",sdp:rf.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),uf.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const n of e){const{kind:e,trackId:i,rtpParameters:s}=n,a=i,o=e,c=r.get(i),d=this._pc.getRemoteStreams().find((e=>e.id===c)).getTrackById(a);if(!d)throw new Error("remote track not found");this._mapRecvLocalIdInfo.set(a,{mid:o,rtpParameters:s}),t.push({localId:a,track:d})}return t}async stopReceiving(e){this.assertRecvDirection();for(const t of e){uf.debug("stopReceiving() [localId:%s]",t);const{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();uf.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new sf.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:n,ordered:i,maxPacketLifeTime:s,maxRetransmits:a}=e,o={negotiated:!0,id:n,ordered:i,maxPacketLifeTime:s,maxRetransmitTime:s,maxRetransmits:a,protocol:r};uf.debug("receiveDataChannel() [options:%o]",o);const c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};uf.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=rf.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}uf.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=rf.parse(this._pc.localDescription.sdp));const r=cf.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}}Xm.ReactNative=mf;var ff=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),gf=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),vf=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&ff(t,e,r);return gf(t,e),t};Object.defineProperty(Ad,"__esModule",{value:!0}),Ad.Device=Ad.detectDevice=void 0;const yf=Fd,_f=Bd,bf=$d,wf=tl,Sf=vf(il),Cf=vf(sl),Rf=Tl,Tf=yp,Pf=du,kf=ku,Ef=$u,Df=sh,Of=wh,If=Fh,xf=rm,Mf=vm,jf=jm,Lf=Xm,Af=new _f.Logger("Device");function Nf(){if("object"==typeof navigator&&"ReactNative"===navigator.product)return Af.debug("detectDevice() | React-Native detected"),"undefined"==typeof RTCPeerConnection?void Af.warn("detectDevice() | unsupported react-native-webrtc without RTCPeerConnection, forgot to call registerGlobals()?"):"undefined"!=typeof RTCRtpTransceiver?(Af.debug("detectDevice() | ReactNative UnifiedPlan handler chosen"),"ReactNativeUnifiedPlan"):(Af.debug("detectDevice() | ReactNative PlanB handler chosen"),"ReactNative");if("object"!=typeof navigator||"string"!=typeof navigator.userAgent)Af.warn("detectDevice() | unknown device");else{const e=navigator.userAgent,t=new yf.UAParser(e);Af.debug("detectDevice() | browser detected [ua:%s, parsed:%o]",e,t.getResult());const r=t.getBrowser(),n=r.name?.toLowerCase()??"",i=parseInt(r.major??"0"),s=t.getEngine(),a=s.name?.toLowerCase()??"",o=t.getOS(),c=o.name?.toLowerCase()??"",d=parseFloat(o.version??"0"),l="ios"===c,p=["chrome","chromium","mobile chrome","chrome webview","chrome headless"].includes(n),u=["firefox","mobile firefox","mobile focus"].includes(n),h=["safari","mobile safari"].includes(n),m=["edge"].includes(n);if((p||m)&&!l&&i>=111)return"Chrome111";if(p&&!l&&i>=74||m&&!l&&i>=88)return"Chrome74";if(p&&!l&&i>=70)return"Chrome70";if(p&&!l&&i>=67)return"Chrome67";if(p&&!l&&i>=55)return"Chrome55";if(u&&!l&&i>=60)return"Firefox60";if(u&&l&&d>=14.3)return"Safari12";if(h&&i>=12&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if(h&&i>=11)return"Safari11";if(m&&!l&&i>=11&&i<=18)return"Edge11";if("webkit"===a&&l&&d>=14.3&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if("blink"===a){const t=e.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);if(t){const e=Number(t[1]);return e>=111?"Chrome111":e>=74?"Chrome74":e>=70?"Chrome70":e>=67?"Chrome67":"Chrome55"}return"Chrome111"}Af.warn("detectDevice() | browser not supported [name:%s, version:%s]",n,i)}}Ad.detectDevice=Nf;Ad.Device=class{constructor({handlerName:e,handlerFactory:t,Handler:r}={}){if(this._loaded=!1,this._observer=new bf.EnhancedEventEmitter,Af.debug("constructor()"),r){if(Af.warn("constructor() | Handler option is DEPRECATED, use handlerName or handlerFactory instead"),"string"!=typeof r)throw new TypeError("non string Handler option no longer supported, use handlerFactory instead");e=r}if(e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)Af.debug("constructor() | handler given: %s",e);else{if(!(e=Nf()))throw new wf.UnsupportedError("device not supported");Af.debug("constructor() | detected handler: %s",e)}switch(e){case"Chrome111":this._handlerFactory=Tf.Chrome111.createFactory();break;case"Chrome74":this._handlerFactory=Pf.Chrome74.createFactory();break;case"Chrome70":this._handlerFactory=kf.Chrome70.createFactory();break;case"Chrome67":this._handlerFactory=Ef.Chrome67.createFactory();break;case"Chrome55":this._handlerFactory=Df.Chrome55.createFactory();break;case"Firefox60":this._handlerFactory=Of.Firefox60.createFactory();break;case"Safari12":this._handlerFactory=If.Safari12.createFactory();break;case"Safari11":this._handlerFactory=xf.Safari11.createFactory();break;case"Edge11":this._handlerFactory=Mf.Edge11.createFactory();break;case"ReactNativeUnifiedPlan":this._handlerFactory=jf.ReactNativeUnifiedPlan.createFactory();break;case"ReactNative":this._handlerFactory=Lf.ReactNative.createFactory();break;default:throw new TypeError(`unknown handlerName "${e}"`)}}const n=this._handlerFactory();this._handlerName=n.name,n.close(),this._extendedRtpCapabilities=void 0,this._recvRtpCapabilities=void 0,this._canProduceByKind={audio:!1,video:!1},this._sctpCapabilities=void 0}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new wf.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new wf.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e}){let t;Af.debug("load() [routerRtpCapabilities:%o]",e),e=Sf.clone(e,void 0);try{if(this._loaded)throw new wf.InvalidStateError("already loaded");Cf.validateRtpCapabilities(e),t=this._handlerFactory();const r=await t.getNativeRtpCapabilities();Af.debug("load() | got native RTP capabilities:%o",r),Cf.validateRtpCapabilities(r),this._extendedRtpCapabilities=Cf.getExtendedRtpCapabilities(r,e),Af.debug("load() | got extended RTP capabilities:%o",this._extendedRtpCapabilities),this._canProduceByKind.audio=Cf.canSend("audio",this._extendedRtpCapabilities),this._canProduceByKind.video=Cf.canSend("video",this._extendedRtpCapabilities),this._recvRtpCapabilities=Cf.getRecvRtpCapabilities(this._extendedRtpCapabilities),Cf.validateRtpCapabilities(this._recvRtpCapabilities),Af.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._sctpCapabilities=await t.getNativeSctpCapabilities(),Af.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),Cf.validateSctpCapabilities(this._sctpCapabilities),Af.debug("load() succeeded"),this._loaded=!0,t.close()}catch(e){throw t&&t.close(),e}}canProduce(e){if(!this._loaded)throw new wf.InvalidStateError("not loaded");if("audio"!==e&&"video"!==e)throw new TypeError(`invalid kind "${e}"`);return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d}){return Af.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d}){return Af.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:s,iceTransportPolicy:a,additionalSettings:o,proprietaryConstraints:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,appData:l}){if(!this._loaded)throw new wf.InvalidStateError("not loaded");if("string"!=typeof t)throw new TypeError("missing id");if("object"!=typeof r)throw new TypeError("missing iceParameters");if(!Array.isArray(n))throw new TypeError("missing iceCandidates");if("object"!=typeof i)throw new TypeError("missing dtlsParameters");if(s&&"object"!=typeof s)throw new TypeError("wrong sctpParameters");if(l&&"object"!=typeof l)throw new TypeError("if given, appData must be an object");const p=new Rf.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,appData:l,handlerFactory:this._handlerFactory,extendedRtpCapabilities:this._extendedRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",p),p}};var Ff={},Bf={};Object.defineProperty(Bf,"__esModule",{value:!0});var Uf={};Object.defineProperty(Uf,"__esModule",{value:!0}),function(e){var t=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=Hi&&Hi.__exportStar||function(e,r){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(r,n)||t(r,e,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(Ad,e),r(Tl,e),r(Ll,e),r(Ul,e),r(ql,e),r(Yl,e),r(Bf,e),r(Uf,e),r(Pp,e),r(tl,e)}(Ff),function(e){var t=Hi&&Hi.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=Hi&&Hi.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=Hi&&Hi.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=Hi&&Hi.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.debug=e.parseScalabilityMode=e.detectDevice=e.Device=e.version=e.types=void 0;const s=i(Ld);e.debug=s.default;const a=Ad;Object.defineProperty(e,"Device",{enumerable:!0,get:function(){return a.Device}}),Object.defineProperty(e,"detectDevice",{enumerable:!0,get:function(){return a.detectDevice}});const o=n(Ff);e.types=o,e.version="3.6.100";var c=Gp;Object.defineProperty(e,"parseScalabilityMode",{enumerable:!0,get:function(){return c.parse}})}(Id);class zf{static parse(e){let t;try{t=JSON.parse(e)}catch(e){return}if("object"==typeof t&&!Array.isArray(t))return t.request?zf._handleRequest(t):t.response?zf._handleResponse(t):t.message?zf._handleMessage(t):void 0}static _handleRequest(e){const t={request:!0};if("string"==typeof e.method&&"number"==typeof e.id)return t.id=e.id,t.method=e.method,t.data=e.data||{},t}static _handleResponse(e){const t={response:!0};if("number"==typeof e.id)return t.id=e.id,e.ok?(t.ok=!0,t.data=e.data||{}):(t.ok=!1,t.errorCode=e.errorCode,t.errorReason=e.errorReason),t}static _handleMessage(e){const t={message:!0};if("string"==typeof e.method)return t.method=e.method,t.data=e.data||{},t}static createRequest(e,t){return{request:!0,id:Math.round(1e7*Math.random()),method:e,data:t||{}}}static createSuccessResponse(e,t){return{response:!0,id:e.id,ok:!0,data:t||{}}}static createErrorResponse(e,t,r){return{response:!0,id:e.id,errorCode:t,errorReason:r}}static createMessage(e,t){return{message:!0,method:e,data:t||{}}}}class Vf extends qd{constructor(e,t,r="whereby-sfu#v4"){super(),this.wsUrl=e,this.logger=t,this.protocol=r,this.sents=new Map,this._setupSocket()}_setupSocket(){this.socket=new WebSocket(this.wsUrl,this.protocol),this.socket.onopen=this._onOpen.bind(this),this.socket.onmessage=this._onMessage.bind(this),this.socket.onclose=this._onClose.bind(this),this.socket.onerror=this._onError.bind(this)}_tearDown(){this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket=null,this.sents.forEach((e=>e.close())),this.emit("close")}close(){this.socket?.close()}_onOpen(){this.logger.log("VegaConnectionManager: Connected"),this.emit("open")}_onMessage(e){const t=zf.parse(e.data);this.logger.log("VegaConnectionManager: Received message",t),t?.response?this._handleResponse(t):t?.message&&this.emit("message",t)}_onClose(){this.logger.log("VegaConnectionManager: Disconnected"),this._tearDown()}_onError(e){this.logger.log("VegaConnectionManager: Error",e)}_handleResponse(e){const t=this.sents.get(e.id);if(e.ok)t.resolve(e.data);else{const r=new Error(e.errorReason);t.reject(r)}}send(e){try{this.socket.send(JSON.stringify(e))}catch(e){}}message(e,t={}){const r=zf.createMessage(e,t);this.send(r)}request(e,t={},r=1500*(15+.1*this.sents.size)){const n=zf.createRequest(e,t);return this.send(n),new Promise(((e,t)=>{const i={id:n.id,method:n.method,resolve:t=>{this.sents.delete(n.id)&&(clearTimeout(i.timer),e(t))},reject:e=>{this.sents.delete(n.id)&&(clearTimeout(i.timer),t(e))},timer:setTimeout((()=>{this.sents.delete(n.id)&&t(new Error("request timeout"))}),r),close:()=>{clearTimeout(i.timer),t(new Error("transport closed"))}};this.sents.set(n.id,i)}))}}const $f={codecOptions:{opusDtx:!0,opusFec:!0},encodings:[{dtx:!0}]},Gf={codecOptions:{videoGoogleStartBitrate:500},encodings:[{scaleResolutionDownBy:4,maxBitrate:15e4},{scaleResolutionDownBy:2,maxBitrate:5e5},{scaleResolutionDownBy:1,maxBitrate:1e6}]},qf={codecOptions:{videoGoogleStartBitrate:500},encodings:[{scaleResolutionDownBy:2,maxBitrate:15e4},{scaleResolutionDownBy:1,maxBitrate:5e5}]},Wf={codecOptions:{videoGoogleStartBitrate:500},encodings:[{scalabilityMode:"L3T2_KEY"}]},Hf={encodings:[{}]},Kf={encodings:[{scaleResolutionDownBy:2,dtx:!0,maxBitrate:5e5},{scaleResolutionDownBy:1,dtx:!0,maxBitrate:15e5}]},Jf={encodings:[{dtx:!0}]},Yf=(e,t,r)=>{const{lowDataModeEnabled:n,simulcastScreenshareOn:i,vp9On:s}=r;return"audio"===e?$f:t?s?Jf:i?Kf:Hf:s?Wf:n?qf:Gf},Qf=()=>{let e=Id.detectDevice()||(/applecoremedia|applewebkit|safari/i.test(navigator.userAgent)?"Safari12":void 0);return/iphone|ipad/i.test(navigator.userAgent)&&(e="Safari12"),e};var Xf=Object.freeze({__proto__:null,KalmanFilter:class{constructor({R:e=.01,Q:t=2,A:r=1.1,B:n=1,C:i=1.2}={R:.01,Q:2,A:1.1,B:1,C:1.2}){this.R=e,this.Q=t,this.A=r,this.C=i,this.B=n,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{const r=this.predict(t),n=this.uncertainty(),i=n*this.C*(1/(this.C*n*this.C+this.Q));this.x=r+i*(e-this.C*r),this.cov=n-i*this.C*n}return this.x}predict(e=0){return this.A*this.x+this.B*e}uncertainty(){return this.A*this.cov*this.A+this.R}lastMeasurement(){return this.x}setMeasurementNoise(e){this.Q=e}setProcessNoise(e){this.R=e}},calculateStd:e=>{const t=e.reduce(((e,t)=>e+t),0)/e.length;return e.reduce(((e,r)=>e.concat((r-t)**2)),[]).reduce(((e,t)=>e+t),0)/e.length},createACFCalculator:()=>{let e=-1,t=0,r=0;return n=>{const i=n.reduce(((e,t)=>e+t),0)/n.length;if(e=e<0?i:.95*e+.05*i,++r<2)return t=i,0;const s=(i-e)*(t-e);return t=i,s}},standardDeviation:e=>{const t=e.reduce(((e,t)=>e+t),0)/e.length;return{mean:t,SD:Math.sqrt(e.reduce(((e,r)=>e+(r-t)**2),0)/e.length)}},variance:(e,t=!1)=>{const r=e.reduce(((e,t)=>e+t),0)/e.length;return e.reduce(((e,t)=>e.concat((t-r)**2)),[]).reduce(((e,t)=>e+t),0)/(e.length-(t?0:1))}});const Zf={minDecibels:-80,maxDecibels:-10,smoothingTimeConstant:.8,aggSize:1,sampleRate:10,reportRate:2,bins:32,bands:[[0,1,2,3],[4,5,6,7]],separateTrack:{autoGainControl:!1,noiseSupression:!1},binFormula:"bin",scoreFormula:"300 * bands[1].avg / Math.max(bands[1].avg + bands[0].avg, 0.01)",outFormula:"score"};const eg=zs.browserDetails.browser;let tg=!1;const rg=hd(),ng=hd();"chrome"===eg&&window.document.addEventListener("beforeunload",(()=>tg=!0));class ig{constructor({selfId:e,room:t,emitter:r,serverSocket:n,webrtcProvider:i,features:s,eventClaim:a,logger:o=console}){ya.ok(e,"selfId is required"),ya.ok(t,"room is required"),ya.ok(r&&r.emit,"emitter is required"),ya.ok(n instanceof Vs,"serverSocket is required"),ya.ok(i,"webrtcProvider is required");const{session:c,iceServers:d,sfuServer:l,mediaserverConfigTtlSeconds:p}=t;this._selfId=e,this._room=t,this._roomSessionId=c?.id,this._emitter=r,this._serverSocket=n,this._webrtcProvider=i,this._features=s||{},this._eventClaim=a,this._logger=o,this._vegaConnection=null,this._micAnalyser=null,this._micAnalyserDebugger=null,this._mediasoupDevice=new Id.Device({handlerName:Qf()}),this._routerRtpCapabilities=null,this._sendTransport=null,this._receiveTransport=null,this._clientStates=new Map,this._streamIdToVideoConsumerId=new Map,this._consumers=new Map,this._dataConsumers=new Map,this._localStreamDeregisterFunction=null,this._micTrack=null,this._webcamTrack=null,this._screenVideoTrack=null,this._screenAudioTrack=null,this._micProducer=null,this._micProducerPromise=null,this._micPaused=!1,this._micScoreProducer=null,this._micScoreProducerPromise=null,this._webcamProducer=null,this._webcamProducerPromise=null,this._webcamPaused=!1,this._screenVideoProducer=null,this._screenVideoProducerPromise=null,this._screenAudioProducer=null,this._screenAudioProducerPromise=null,this._sndTransportIceRestartPromise=null,this._rcvTransportIceRestartPromise=null,this._colocation=null,this._stopCameraTimeout=null,this._audioTrackOnEnded=()=>{gd.sendEvent("audio_ended",{unloading:tg}),this._emitToPWA(pc,{})},this._updateAndScheduleMediaServersRefresh({sfuServer:l,iceServers:d.iceServers||[],mediaserverConfigTtlSeconds:p}),this._socketListenerDeregisterFunctions=[],this._reconnect=!0,this._reconnectTimeOut=null}_updateAndScheduleMediaServersRefresh({iceServers:e,sfuServer:t,mediaserverConfigTtlSeconds:r}){this._iceServers=e,this._sfuServer=t,this._mediaserverConfigTtlSeconds=r,this._sendTransport?.updateIceServers({iceServers:this._iceServers}),this._receiveTransport?.updateIceServers({iceServers:this._iceServers}),this._clearMediaServersRefresh(),r&&(this._fetchMediaServersTimer=setTimeout((()=>this._emitToSignal(Yo)),1e3*r))}_clearMediaServersRefresh(){this._fetchMediaServersTimer&&(clearTimeout(this._fetchMediaServersTimer),this._fetchMediaServersTimer=null)}setupSocketListeners(){this._socketListenerDeregisterFunctions.push((()=>this._clearMediaServersRefresh()),this._serverSocket.on(Zo,(e=>{e.error?this._logger.warn("FETCH_MEDIASERVER_CONFIG failed:",e.error):this._updateAndScheduleMediaServersRefresh(e)})),this._serverSocket.on(ec,(()=>{this._screenVideoTrack&&this._emitScreenshareStarted()}))),this._connect()}_emitScreenshareStarted(){this._emitToSignal(Qo,{streamId:ng,hasAudioTrack:Boolean(this._screenAudioTrack)})}_connect(){const e=`wss://${this._features.sfuServerOverrideHost||[this._sfuServer.url]}?${new URLSearchParams({clientId:this._selfId,organizationId:this._room.organizationId,roomName:this._room.name,eventClaim:this._room.isClaimed?this._eventClaim:null,lowBw:!0}).toString()}`;this._vegaConnection=new Vf(e,this._logger),this._vegaConnection.on("open",(()=>this._join())),this._vegaConnection.on("close",(()=>this._onClose())),this._vegaConnection.on("message",(e=>this._onMessage(e)))}_onClose(){this._logger.debug("_onClose()"),this._sendTransport?.close(),this._receiveTransport?.close(),this._sendTransport=null,this._receiveTransport=null,this._streamIdToVideoConsumerId.clear(),this._reconnect&&(this._reconnectTimeOut=setTimeout((()=>this._connect()),1e3))}async _join(){this._logger.debug("join()");try{const{routerRtpCapabilities:e}=await this._vegaConnection.request("getCapabilities");this._routerRtpCapabilities||(((e,t)=>{const{vp9On:r,h264On:n}=t;if(r){const{preferredPayloadType:t}=e.codecs.find((e=>"video/vp9"===e.mimeType.toLowerCase())),{preferredPayloadType:r}=e.codecs.find((e=>"video/rtx"===e.mimeType.toLowerCase()&&e.parameters.apt===t));e.codecs=e.codecs.filter((e=>"audio"===e.kind||e.preferredPayloadType===t||e.preferredPayloadType===r))}else if(n){const{preferredPayloadType:t}=e.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase())),{preferredPayloadType:r}=e.codecs.find((e=>"video/rtx"===e.mimeType.toLowerCase()&&e.parameters.apt===t));e.codecs=e.codecs.filter((e=>"audio"===e.kind||e.preferredPayloadType===t||e.preferredPayloadType===r))}})(e,this._features),this._routerRtpCapabilities=e,await this._mediasoupDevice.load({routerRtpCapabilities:e})),this._vegaConnection.message("setCapabilities",{rtpCapabilities:this._mediasoupDevice.rtpCapabilities}),this._colocation&&this._vegaConnection.message("setColocation",{colocation:this._colocation}),await Promise.all([this._createTransport(!0),this._createTransport(!1)]);const t=[];!this._micTrack||this._micProducer||this._micProducerPromise||t.push(this._internalSendMic()),!this._webcamTrack||this._webcamProducer||this._webcamProducerPromise||t.push(this._internalSendWebcam()),!this._screenVideoTrack||this._screenVideoProducer||this._screenVideoProducerPromise||t.push(this._internalSendScreenVideo()),!this._screenAudioTrack||this._screenAudioProducer||this._screenAudioProducerPromise||t.push(this._internalSendScreenAudio()),await Promise.all(t)}catch(e){this._logger.error("_join() [error:%o]",e)}}async _createTransport(e){const t=e?"createSendTransport":"createRecvTransport",r=await this._vegaConnection.request("createTransport",{producing:e,consuming:!e,enableTcp:!0,enableUdp:!0,preferUdp:!0,sctpParameters:{enableSctp:!0,numSctpStreams:{OS:1024,MIS:1024},maxSctpMessageSize:262144,sctpSendBufferSize:262144}});r.iceServers=this._iceServers,((e,t)=>{if(!t.useOnlyTURN)return;e.iceTransportPolicy="relay";const r={onlyudp:/^turn:.*transport=udp$/,onlytcp:/^turn:.*transport=tcp$/,onlytls:/^turns:.*transport=tcp$/}[t.useOnlyTURN];r&&(e.iceServers=e.iceServers.filter((e=>e.url&&e.url.match(r))))})(r,this._features);const n=this._mediasoupDevice[t](r),i=async t=>{if(this._logger.debug(`Transport ConnectionStateChanged ${t}`),"disconnected"===t||"failed"===t)if(e){if(this._sndTransportIceRestartPromise)return;this._sndTransportIceRestartPromise=this._restartIce(n).finally((()=>{this._sndTransportIceRestartPromise=null}))}else{if(this._rcvTransportIceRestartPromise)return;this._rcvTransportIceRestartPromise=this._restartIce(n).finally((()=>{this._rcvTransportIceRestartPromise=null}))}};n.on("connect",(({dtlsParameters:e},t)=>{this._vegaConnection?.message("connectTransport",{transportId:n.id,dtlsParameters:e}),t()})).on("connectionstatechange",i),n.observer.once("close",(()=>{n.removeListener(i)})),e?(n.on("produce",(async({kind:e,rtpParameters:t,appData:r},i,s)=>{try{const{paused:s}=r,{id:a}=await(this._vegaConnection?.request("produce",{transportId:n.id,kind:e,rtpParameters:t,paused:s,appData:r}));i({id:a})}catch(e){s(e)}})),n.on("producedata",(async({appData:e,sctpStreamParameters:t},r,i)=>{try{const{id:i}=await(this._vegaConnection?.request("produceData",{transportId:n.id,sctpStreamParameters:t,appData:e}));r({id:i})}catch(e){i(e)}})),this._sendTransport=n):this._receiveTransport=n}async _restartIce(e,t=0){if(!e||!("closed"in e)||!("connectionState"in e))return void this._logger.debug("_restartIce: No transport or property closed or connectionState!");if(e.closed)return void this._logger.debug("_restartIce: Transport is closed!");if("disconnected"!==e.connectionState&&"failed"!==e.connectionState)return void this._logger.debug("_restartIce: Connection is healthy ICE restart no loneger needed!");const{iceRestartStarted:r}=e.appData,n=Date.now();if(Number.isFinite(r)&&n-r<3500)return;if(e.appData.iceRestartStarted=n,5<=t)return void this._logger.debug("_restartIce: Reached restart ICE maximum retry count!");if(!this._vegaConnection)return void this._logger.debug("_restartIce: Connection is undefined");const{iceParameters:i}=await this._vegaConnection.request("restartIce",{transportId:e.id});this._logger.debug("_restartIce: ICE restart iceParameters received from SFU: ",i);const s=await e.restartIce({iceParameters:i}).then((()=>null)).catch((e=>e));if(s)switch(this._logger.error(`_restartIce: ICE restart failed: ${s}`),s.message){case"missing transportId":case"no such transport":break;default:await new Promise((e=>{setTimeout((()=>{e()}),Math.min(3500*2**t,6e4))})),await this._restartIce(e,t+1)}else await new Promise((e=>{setTimeout((()=>{e()}),6e4*Math.min(8,t+1))})),"failed"!==e.connectionState&&"disconnected"!==e.connectionState||await this._restartIce(e,t+1)}async _internalSendMic(){this._logger.debug("_internalSendMic()"),this._micProducerPromise=(async()=>{try{if(!this._micTrack||!this._sendTransport||this._micProducer)return void(this._micProducerPromise=null);const e=this._micPaused,t=await this._sendTransport.produce({track:this._micTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("audio",!1,this._features),appData:{streamId:rg,sourceClientId:this._selfId,screenShare:!1,source:"mic",paused:e}});e?t.pause():t.resume(),this._micProducer=t,t.observer.once("close",(()=>{this._logger.debug('micProducer "close" event'),t.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[t.id]}),this._micProducer=null,this._micProducerPromise=null})),this._micTrack!==this._micProducer.track&&await this._replaceMicTrack(),this._micPaused!==this._micProducer.paused&&this._pauseResumeMic()}catch(e){this._logger.error("micProducer failed:%o",e)}finally{this._micProducerPromise=null,this._micTrack||(this._stopProducer(this._micProducer),this._micProducer=null)}})()}async _internalSetupMicScore(){this._logger.debug("_internalSetupMicScore()"),this._micScoreProducerPromise=(async()=>{try{if(!this._micProducer||!this._colocation||this._micScoreProducer)return void(this._micScoreProducerPromise=null);const e=await this._sendTransport.produceData({ordered:!1,maxPacketLifeTime:3e3,label:"micscore",appData:{producerId:this._micProducer.id,clientId:this._selfId}});this._micScoreProducer=e,e.observer.once("close",(()=>{this._logger.debug('micScoreProducer "close" event'),e.appData.localClosed&&this._vegaConnection?.message("closeDataProducers",{dataProducerIds:[e.id]}),this._micScoreProducer=null,this._micScoreProducerPromise=null}))}catch(e){this._logger.error("micScoreProducer failed:%o",e)}finally{this._micScoreProducerPromise=null,this._micProducer&&this._colocation||this._stopMicScoreProducer()}})()}_stopMicScoreProducer(){this._stopProducer(this._micScoreProducer),this._micScoreProducer=null}async _replaceMicTrack(){this._logger.debug("_replaceMicTrack()"),this._micTrack&&this._micProducer&&!this._micProducer.closed&&this._micProducer.track!==this._micTrack&&(await this._micProducer.replaceTrack({track:this._micTrack}),this._micAnalyser?.setTrack(this._micTrack),await this._replaceMicTrack())}_pauseResumeMic(){this._logger.debug("_pauseResumeMic()"),this._micProducer&&!this._micProducer.closed&&this._micPaused!==this._micProducer.paused&&(this._micPaused?(this._micProducer.pause(),this._vegaConnection?.message("pauseProducers",{producerIds:[this._micProducer.id]})):(this._micProducer.resume(),this._vegaConnection?.message("resumeProducers",{producerIds:[this._micProducer.id]})),this._pauseResumeMic())}async _sendMic(e){return this._logger.debug("_sendMic() [track:%o]",e),this._micTrack=e,this._micProducer?await this._replaceMicTrack():this._micProducerPromise?void 0:this._sendTransport?await this._internalSendMic():void 0}_sendMicScore(e){if(!isNaN(e)&&isFinite(e))if(this._micScoreProducer){if(this._micScoreProducer.closed)return void this._stopMicScoreProducer();try{this._micScoreProducer.send(JSON.stringify({score:e}))}catch(e){console.error("_sendMicScore failed [error:%o]",e)}}else!this._micScoreProducerPromise&&this._micProducer&&this._colocation&&0!==e&&this._internalSetupMicScore()}async _internalSendWebcam(){this._logger.debug("_internalSendWebcam()"),this._webcamProducerPromise=(async()=>{try{if(!this._webcamTrack||!this._sendTransport||this._webcamProducer)return void(this._webcamProducerPromise=null);const e=this._webcamPaused,t=await this._sendTransport.produce({track:this._webcamTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("video",!1,this._features),appData:{streamId:rg,sourceClientId:this._selfId,screenShare:!1,source:"webcam",paused:e}});e?t.pause():t.resume(),this._webcamProducer=t,t.observer.once("close",(()=>{this._logger.debug('webcamProducer "close" event'),t.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[t.id]}),this._webcamProducer=null,this._webcamProducerPromise=null})),this._webcamTrack!==this._webcamProducer.track&&await this._replaceWebcamTrack(),this._webcamPaused!==this._webcamProducer.paused&&this._pauseResumeWebcam()}catch(e){this._logger.error("webcamProducer failed:%o",e)}finally{this._webcamProducerPromise=null,this._webcamTrack||(await this._stopProducer(this._webcamProducer),this._webcamProducer=null)}})()}async _replaceWebcamTrack(){this._logger.debug("_replaceWebcamTrack()"),this._webcamTrack&&this._webcamProducer&&!this._webcamProducer.closed&&this._webcamProducer.track!==this._webcamTrack&&(await this._webcamProducer.replaceTrack({track:this._webcamTrack}),await this._replaceWebcamTrack())}_pauseResumeWebcam(){this._logger.debug("_pauseResumeWebcam()"),this._webcamProducer&&!this._webcamProducer.closed&&this._webcamPaused!==this._webcamProducer.paused&&(this._webcamPaused?(this._webcamProducer.pause(),this._vegaConnection?.message("pauseProducers",{producerIds:[this._webcamProducer.id]})):(this._webcamProducer.resume(),this._vegaConnection?.message("resumeProducers",{producerIds:[this._webcamProducer.id]})),this._pauseResumeWebcam())}async _sendWebcam(e){return this._logger.debug("_sendWebcam() [track:%o]",e),this._webcamTrack=e,this._webcamProducer?await this._replaceWebcamTrack():this._webcamProducerPromise?void 0:this._sendTransport?await this._internalSendWebcam():void 0}async _internalSendScreenVideo(){this._logger.debug("_internalSendScreenVideo()"),this._screenVideoProducerPromise=(async()=>{try{if(!this._screenVideoTrack||!this._sendTransport||this._screenVideoProducer)return void(this._screenVideoProducerPromise=null);const e=await this._sendTransport.produce({track:this._screenVideoTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("video",!0,this._features),appData:{streamId:ng,sourceClientId:this._selfId,screenShare:!0,source:"screenvideo",paused:!1}});this._screenVideoProducer=e,e.observer.once("close",(()=>{this._logger.debug('screenVideoProducer "close" event'),e.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[e.id]}),this._screenVideoProducer=null,this._screenVideoProducerPromise=null})),this._screenVideoTrack!==this._screenVideoProducer.track&&await this._replaceScreenVideoTrack()}catch(e){this._logger.error("screenVideoProducer failed:%o",e)}finally{this._screenVideoProducerPromise=null,this._screenVideoTrack||(await this._stopProducer(this._screenVideoProducer),this._screenVideoProducer=null)}})()}async _replaceScreenVideoTrack(){this._logger.debug("_replaceScreenVideoTrack()"),this._screenVideoTrack&&this._screenVideoProducer&&!this._screenVideoProducer.closed&&this._screenVideoProducer.track!==this._screenVideoTrack&&(await this._screenVideoProducer.replaceTrack({track:this._screenVideoTrack}),await this._replaceScreenVideoTrack())}async _sendScreenVideo(e){return this._logger.debug("_sendScreenVideo() [track:%o]",e),this._screenVideoTrack=e,this._screenVideoProducer?await this._replaceScreenVideoTrack():this._screenVideoProducerPromise?void 0:this._sendTransport?await this._internalSendScreenVideo():void 0}async _internalSendScreenAudio(){this._logger.debug("_internalSendScreenAudio()"),this._screenAudioProducerPromise=(async()=>{try{if(!this._screenAudioTrack||!this._sendTransport||this._screenAudioProducer)return void(this._screenAudioProducerPromise=null);const e=await this._sendTransport.produce({track:this._screenAudioTrack,disableTrackOnPause:!1,stopTracks:!1,...Yf("video",!0,this._features),appData:{streamId:ng,sourceClientId:this._selfId,screenShare:!0,source:"screenaudio",paused:!1}});this._screenAudioProducer=e,e.observer.once("close",(()=>{this._logger.debug('screenAudioProducer "close" event'),e.appData.localClosed&&this._vegaConnection?.message("closeProducers",{producerIds:[e.id]}),this._screenAudioProducer=null,this._screenAudioProducerPromise=null})),this._screenAudioTrack!==this._screenAudioProducer.track&&await this._replaceScreenAudioTrack()}catch(e){this._logger.error("screenAudioProducer failed:%o",e)}finally{this._screenAudioProducerPromise=null,this._screenAudioTrack||(await this._stopProducer(this._screenAudioProducer),this._screenAudioProducer=null)}})()}async _replaceScreenAudioTrack(){this._logger.debug("_replaceScreenAudioTrack()"),this._screenAudioTrack&&this._screenAudioProducer&&!this._screenAudioProducer.closed&&this._screenAudioProducer.track!==this._screenAudioTrack&&(await this._screenAudioProducer.replaceTrack({track:this._screenAudioTrack}),await this._replaceScreenAudioTrack())}async _sendScreenAudio(e){return this._logger.debug("_sendScreenAudio() [track:%o]",e),this._screenAudioTrack=e,this._screenAudioProducer?await this._replaceScreenAudioTrack():this._screenAudioProducerPromise?void 0:this._sendTransport?await this._internalSendScreenAudio():void 0}_stopProducer(e){this._logger.debug("_stopProducer()"),e&&!e.closed&&(e.appData.localClosed=!0,e.close())}isInitializedWith({selfId:e,roomName:t,isSfu:r}){return this._selfId===e&&this._room.name===t&&Boolean(r)}setEventClaim(e){this._eventClaim=e,this._vegaConnection?.message("eventClaim",{eventClaim:e})}setColocation(e){this._colocation=e,this._vegaConnection?.message("setColocation",{colocation:e}),e||!this._micScoreProducer||this._micScoreProducerPromise||this._stopMicScoreProducer(),this._syncMicAnalyser(),gd.sendEvent("colocation_changed",{colocation:e})}setRoomSessionId(e){this._roomSessionId=e}disconnect(e,t,r){if(this._logger.debug("disconnect() [clientIdOrStreamId:%s, eventClaim:%s]",e,r),this._clientStates.has(e)){const t=this._clientStates.get(e);t.hasAcceptedWebcamStream=!1,t.hasAcceptedScreenStream=!1,this._syncIncomingStreamsWithPWA(e)}r&&(this._eventClaim=r,this._vegaConnection?.message("eventClaim",{eventClaim:r}))}replaceTrack(e,t){e&&"audio"===e.kind&&this._stopMonitoringAudioTrack(e),"audio"===t.kind&&(this._startMonitoringAudioTrack(t),this._micTrack=t,this._replaceMicTrack()),"video"===t.kind&&(this._webcamTrack=t,this._replaceWebcamTrack())}removeStream(e,t,r){this._logger.debug("removeStream() [streamId:%s, requestedByClientId:%s]",e,r),this._emitToSignal(Xo,{streamId:ng,requestedByClientId:r}),this._stopProducer(this._screenVideoProducer),this._screenVideoProducer=null,this._screenVideoTrack=null,this._stopProducer(this._screenAudioProducer),this._screenAudioProducer=null,this._screenAudioTrack=null}_onMicAnalyserScoreUpdated(e){this._micAnalyserDebugger?.onScoreUpdated?.(e),this._sendMicScore(this._micPaused?0:e.out)}addNewStream(e,t,r,n){if("0"===e){this._micPaused=r,this._webcamPaused=n;const e=t.getVideoTracks()[0],i=t.getAudioTracks()[0];e&&this._sendWebcam(e),i&&(this._sendMic(i),this._syncMicAnalyser(),this._startMonitoringAudioTrack(i)),this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null);const s=e=>{const{enable:t,track:r}=e.detail;this._webcamPaused=!t,this._pauseResumeWebcam(),this._handleStopOrResumeVideo({enable:t,track:r})};t.addEventListener("stopresumevideo",s),this._localStreamDeregisterFunction=()=>{t.removeEventListener("stopresumevideo",s)}}else{const e=t.getVideoTracks()[0],r=t.getAudioTracks()[0];e&&this._sendScreenVideo(e),r&&this._sendScreenAudio(r),this._emitScreenshareStarted()}}_syncMicAnalyser(){if(!this._micTrack||!this._colocation||this._micAnalyser)return this._micAnalyser&&!this._colocation?(this._micAnalyser.close(),void(this._micAnalyser=null)):void 0;this._micAnalyser=function({micTrack:e,params:t,onScoreUpdated:r}){const n=new AudioContext;let i=null,s=null,a=null,o=!1;const c=async e=>{if(a&&o&&a.stop(),o=!1,e&&t.separateTrack)try{e=(await navigator.mediaDevices.getUserMedia({audio:{deviceId:a?.getSettings().deviceId,...t.separateTrack},video:!1})).getAudioTracks()[0],o=!0}catch(e){console.warn("unable to fetch new track for colocation speaker analysis, using current",e)}if(a=e,s&&(s.disconnect(),s=null),e){const t=new MediaStream([e]);s=n.createMediaStreamSource(t),s.connect(i)}};let d;const l=e=>{if(clearInterval(d),t={...Zf,...e},!i||i.fftSize!==2*t.bins){let e=null;i&&(e=a,c(null)),i=n.createAnalyser(),i.fftSize=2*t.bins,e&&c(e)}const s=new Uint8Array(i.frequencyBinCount),o=[];i.minDecibels=t.minDecibels,i.maxDecibels=t.maxDecibels,i.smoothingTimeConstant=t.smoothingTimeConstant;const l=t.initScript&&new Function("f","setTrack","lastTrack",t.initScript.join("\n")),p=t.scoreScript&&new Function("bins","g","f",t.scoreScript.join("\n")),u=t.scoreFormula&&new Function("bands",`return ${t.scoreFormula}`),h=t.outFormula&&new Function("score","avg","max","scores",`return ${t.outFormula}`),m=t.binFormula&&new Function("bin","index",`return ${t.binFormula}`);let f=0;const g=l&&l(Xf,c,a);d=setInterval((()=>{i.getByteFrequencyData(s);let e=0;if(u){const r=t.bands.map((e=>{const t=e.map((e=>m(s[e]/255,e)));return{avg:t.reduce(((e,t)=>e+t),0)/e.length,min:t.reduce(((e,t)=>Math.min(e,t/255)),Number.MAX_VALUE),max:t.reduce(((e,t)=>Math.max(e,t/255)),0)}}));e=u(r)||0}else p&&(e=p(s,g,Xf),isNaN(e)&&(e=0));if(o.push(e),o.length>t.aggSize&&o.shift(),f++,f>=t.reportRate){f=0;const t=o.reduce(((e,t)=>Math.max(e,t)),0),n=o.reduce(((e,t)=>e+t),0)/o.length,i=h(e,n,t,o);r({bins:s,score:e,max:t,avg:n,out:i})}}),1e3/t.sampleRate)};return l(t),c(e),{setParams:l,setTrack:c,close(){c(null),clearInterval(d),n.close()}}}({micTrack:this._micTrack,onScoreUpdated:this._onMicAnalyserScoreUpdated.bind(this)})}stopOrResumeAudio(e,t){this._logger.debug("stopOrResumeAudio() [enabled:%s]",t),this._micPaused=!t,this._pauseResumeMic()}_handleStopOrResumeVideo({enable:e,track:t}){e?this._sendWebcam(t):this._webcamProducer&&!this._webcamProducer.closed&&this._webcamProducer.track===t&&(this._stopProducer(this._webcamProducer),this._webcamProducer=null,this._webcamTrack=null)}stopOrResumeVideo(e,t){if(this._logger.debug("stopOrResumeVideo() [enable:%s]",t),this._webcamPaused=!t,this._pauseResumeWebcam(),["chrome","safari"].includes(eg))if(t){if(0===e.getVideoTracks().length){const r=this._webrtcProvider.getMediaConstraints().video;navigator.mediaDevices.getUserMedia({video:r}).then((r=>{const n=r.getVideoTracks()[0];e.addTrack(n),this._emitToPWA(Go,{streamId:e.id,tracks:[n],screenShare:!1}),this._handleStopOrResumeVideo({enable:t,track:n})}))}}else clearTimeout(this._stopCameraTimeout),this._stopCameraTimeout=setTimeout((()=>{e.getVideoTracks().forEach((r=>{!1===r.enabled&&(r.stop(),e.removeTrack(r),this._emitToPWA(qo,{stream:e,track:r}),this._handleStopOrResumeVideo({enable:t,track:r}))}))}),5e3)}supportsScreenShareAudio(){return!0}acceptNewStream({streamId:e,clientId:t}){this._logger.debug("acceptNewStream()",{streamId:e,clientId:t}),this.rtcStatsReconnect();const r=this._getOrCreateClientState(t);e!==t?(r.hasAcceptedScreenStream=!0,r.hasEmittedScreenStream=!1):(r.hasAcceptedWebcamStream=!0,r.hasEmittedWebcamStream=!1),this._syncIncomingStreamsWithPWA(t)}updateStreamResolution(e,t,{width:r,height:n}){this._logger.debug("updateStreamResolution()",{streamId:e,width:r,height:n});const i=this._streamIdToVideoConsumerId.get(e),s=this._consumers.get(i);if(!s)return;let a=0;this._consumers.forEach((e=>{e._closed||e._paused||"webcam"!==e._appData?.source&&"screenvideo"!==e._appData?.source||a++}));let o=2;/T3/.test(s._rtpParameters?.encodings?.[0]?.scalabilityMode||"")&&(o=3);const c=Math.max(r,n);let d=c>=480?c>=960?2:1:0,l=o-1;c<100&&(l=Math.max(o-2,0)),a>8&&0===d&&(l=Math.max(o-2,0)),a<4&&c>300&&0===d&&(d=1),s.appData.spatialLayer===d&&s.appData.temporalLayer===l||(s.appData.spatialLayer=d,s.appData.temporalLayer=l,this._vegaConnection?.message("setConsumersPreferredLayers",{consumerIds:[i],spatialLayer:d,temporalLayer:l}))}disconnectAll(){this._reconnect=!1,this._reconnectTimeOut&&(clearTimeout(this._reconnectTimeOut),this._reconnectTimeOut=null),this._socketListenerDeregisterFunctions.forEach((e=>{e()})),this._localStreamDeregisterFunction&&(this._localStreamDeregisterFunction(),this._localStreamDeregisterFunction=null),this._socketListenerDeregisterFunctions=[],this._vegaConnection?.removeAllListeners(),this._vegaConnection?.close(),this._sendTransport?.close(),this._receiveTransport?.close(),this._micTrack=null,this._webcamTrack=null,this._screenVideoTrack=null,this._screenAudioTrack=null,this._streamIdToVideoConsumerId.clear(),this._mediasoupDevice=null}sendAudioMutedStats(e){gd.sendEvent("audio_muted",{muted:e})}sendVideoMutedStats(e){gd.sendEvent("video_muted",{muted:e})}sendStatsCustomEvent(e,t){gd.sendEvent(e,t)}rtcStatsDisconnect(){gd.server.close()}rtcStatsReconnect(){gd.server.connected||gd.server.connect()}_startMonitoringAudioTrack(e){e.addEventListener("ended",this._audioTrackOnEnded)}_stopMonitoringAudioTrack(e){e.removeEventListener("ended",this._audioTrackOnEnded)}async _onMessage(e){const{method:t,data:r}=e;return Promise.resolve().then((()=>{switch(t){case"consumerReady":return this._onConsumerReady(r);case"consumerClosed":return this._onConsumerClosed(r);case"consumerPaused":return this._onConsumerPaused(r);case"consumerResumed":return this._onConsumerResumed(r);case"dataConsumerReady":return this._onDataConsumerReady(r);case"dataConsumerClosed":return this._onDataConsumerClosed(r);case"dominantSpeaker":return this._onDominantSpeaker(r);default:return void this._logger.debug(`unknown message method "${t}"`)}})).catch((e=>{console.error('"message" failed [error:%o]',e)}))}async _onConsumerReady(e){this._logger.debug("_onConsumerReady()",{id:e.id,producerId:e.producerId});const t=await this._receiveTransport.consume(e);if(t.pause(),t.appData.localPaused=!0,t.appData.spatialLayer=2,this._consumers.set(t.id,t),t.observer.once("close",(()=>{this._consumers.delete(t.id),this._consumerClosedCleanup(t)})),this._features.increaseIncomingMediaBufferOn&&t.rtpReceiver)try{t.rtpReceiver.jitterBufferTarget=Mc,t.rtpReceiver.playoutDelayHint=.4}catch(e){this._logger.error("Error during setting jitter buffer target:",e)}const{sourceClientId:r,screenShare:n,streamId:i}=t.appData,s=this._getOrCreateClientState(r);n?(s.hasEmittedScreenStream=!1,s.screenShareStreamId=i):(s.hasEmittedWebcamStream=!1,s.camStreamId=i);let a=n?s.screenStream:s.webcamStream;a&&a.inboundId===i||(a=new MediaStream,a.inboundId=i,n?s.screenStream=a:s.webcamStream=a),"video"===t.kind&&this._streamIdToVideoConsumerId.set(a.id,t.id),a.addTrack(t.track),this._syncIncomingStreamsWithPWA(r)}async _onConsumerClosed({consumerId:e,reason:t}){this._logger.debug("_onConsumerClosed()",{consumerId:e,reason:t}),this._consumers.get(e)?.close()}_onConsumerPaused({consumerId:e}){this._logger.debug("_onConsumerPaused()",{consumerId:e});const t=this._consumers.get(e);t&&(t.appData.remotePaused=!0,t.pause())}_onConsumerResumed({consumerId:e}){this._logger.debug("_onConsumerResumed()",{consumerId:e});const t=this._consumers.get(e);t&&(t.appData.remotePaused=!1,t.appData.localPaused||t.resume())}async _onDataConsumerReady(e){this._logger.debug("_onDataConsumerReady()",{id:e.id,producerId:e.producerId});const t=await this._receiveTransport.consumeData(e);this._dataConsumers.set(t.id,t),t.once("close",(()=>{this._dataConsumers.delete(t.id)}));const{clientId:r}=t.appData;t.on("message",(e=>{if(!this._micAnalyserDebugger)return;if("string"!=typeof e)return;const{score:r}=JSON.parse(e);r&&this._micAnalyserDebugger?.onConsumerScore(t.appData.clientId,r)})),this._syncIncomingStreamsWithPWA(r)}async _onDataConsumerClosed({dataConsumerId:e,reason:t}){this._logger.debug("_onDataConsumerClosed()",{dataConsumerId:e,reason:t});const r=this._dataConsumers.get(e);r?.close()}_onDominantSpeaker({consumerId:e}){const t=this._consumers.get(e);if(!t)return;const{sourceClientId:r}=t.appData;this._emitToPWA(uc,{clientId:r})}_consumerClosedCleanup(e){const{sourceClientId:t,screenShare:r}=e.appData,n=this._getOrCreateClientState(t),i=r?n.screenStream:n.webcamStream;i&&(i.removeTrack(e.track),0===i.getTracks().length&&(this._streamIdToVideoConsumerId.delete(i.id),r?(n.screenStream=null,n.hasEmittedScreenStream=!1,n.screenShareStreamId=null):(n.hasEmittedWebcamStream=!1,n.camStreamId=null)))}_syncIncomingStreamsWithPWA(e){const t=this._getOrCreateClientState(e),{webcamStream:r,screenStream:n,hasEmittedWebcamStream:i,hasEmittedScreenStream:s,hasAcceptedWebcamStream:a,hasAcceptedScreenStream:o,screenShareStreamId:c,camStreamId:d}=t,l=[],p=[];this._consumers.forEach((t=>{if(t.appData.sourceClientId!==e)return;const r=t.appData.screenShare?o:a;!t.appData.localPaused!==r&&(r?(t.appData.remotePaused||t.resume(),t.appData.localPaused=!1,p.push(t.id)):(t.pause(),t.appData.localPaused=!0,l.push(t.id)))})),l.length>0&&this._vegaConnection?.message("pauseConsumers",{consumerIds:l}),p.length>0&&this._vegaConnection?.message("resumeConsumers",{consumerIds:p}),r&&!i&&a&&(this._emitToPWA(zo,{clientId:e,stream:r,streamId:d,streamType:"webcam"}),t.hasEmittedWebcamStream=!0),n&&!s&&o&&(this._emitToPWA(zo,{clientId:e,stream:n,streamId:c,streamType:"screenshare"}),t.hasEmittedScreenStream=!0)}_getOrCreateClientState(e){let t=this._clientStates.get(e);return t||(t={hasAcceptedWebcamStream:!1,hasAcceptedScreenStream:!1,hasEmittedWebcamStream:!1,hasEmittedScreenStream:!1,webcamStream:null,screenStream:null,screenShareStreamId:null,camStreamId:null},this._clientStates.set(e,t)),t}_emitToPWA(e,t){this._emitter.emit(e,t)}_emitToSignal(e,t,r){this._serverSocket.emit(e,t,r)}shouldAcceptStreamsFromBothSides(){return!0}setMicAnalyserDebugger(e){this._micAnalyserDebugger=e}setMicAnalyserParams(e){this._micAnalyser?.setParams(e)}}class sg{constructor({emitter:e,serverSocket:t,webrtcProvider:r,features:n}){this.emitter=e,this.currentManager=null,t.on(ec,(({room:i,selfId:s,error:a,eventClaim:o})=>{if(a)return;const c={selfId:s,room:i,emitter:e,serverSocket:t,webrtcProvider:r,features:n,eventClaim:o},d=!!i.sfuServer;if(this.currentManager){if(this.currentManager.isInitializedWith({selfId:s,roomName:i.name,isSfu:d}))return void(this.currentManager.setEventClaim&&o&&this.currentManager.setEventClaim(o));this.currentManager.disconnectAll(),e.emit($o)}let l=null;l=d?new ig(c):new Ed(c),l.setupSocketListeners(),e.emit(Vo,{rtcManager:l}),this.currentManager=l}))}stopRtcManager(){this.currentManager&&(this.currentManager.disconnectAll(),this.emitter.emit($o))}}const ag=e=>({emit:(t,r)=>{"rtc_manager_created"===t?e(bg(r)):"stream_added"===t?e(So.streamAdded(r)):"rtc_manager_destroyed"===t&&e(hg())}}),og={dispatcherCreated:!1,error:null,isCreatingDispatcher:!1,reportedStreamResolutions:{},rtcManager:null,rtcManagerDispatcher:null,rtcManagerInitialized:!1,status:"",isAcceptingStreams:!1},cg=at({name:"rtcConnection",initialState:og,reducers:{isAcceptingStreams:(e,t)=>Object.assign(Object.assign({},e),{isAcceptingStreams:t.payload}),resolutionReported:(e,t)=>{const{streamId:r,width:n,height:i}=t.payload;return Object.assign(Object.assign({},e),{reportedStreamResolutions:Object.assign(Object.assign({},e.reportedStreamResolutions),{[r]:{width:n,height:i}})})},rtcDisconnected:()=>Object.assign({},og),rtcDispatcherCreated:(e,t)=>Object.assign(Object.assign({},e),{dispatcherCreated:!0,rtcManagerDispatcher:t.payload}),rtcManagerCreated:(e,t)=>Object.assign(Object.assign({},e),{rtcManager:t.payload,status:"ready"}),rtcManagerDestroyed:e=>Object.assign(Object.assign({},e),{rtcManager:null}),rtcManagerInitialized:e=>Object.assign(Object.assign({},e),{rtcManagerInitialized:!0})},extraReducers:e=>{e.addCase(Zs,(e=>Object.assign(Object.assign({},e),{status:"reconnect"}))),e.addCase(Xt.roomJoined,(e=>Object.assign(Object.assign({},e),{status:"reconnect"===e.status?"ready":e.status})))}}),{resolutionReported:dg,rtcDispatcherCreated:lg,rtcDisconnected:pg,rtcManagerCreated:ug,rtcManagerDestroyed:hg,rtcManagerInitialized:mg,isAcceptingStreams:fg}=cg.actions,gg=()=>(e,t)=>{const r=t(),n=ea(r).socket,i=Sg(r).rtcManagerDispatcher,s=qa(r),a=Wa(r);if(i)return;const o={getMediaConstraints:()=>({audio:a,video:s}),deferrable:e=>!e},c=new sg({emitter:ag(e),serverSocket:n,logger:console,webrtcProvider:o,features:{lowDataModeEnabled:!1,sfuServerOverrideHost:void 0,turnServerOverrideHost:void 0,useOnlyTURN:void 0,vp9On:!1,h264On:!1,simulcastScreenshareOn:!1}});e(lg(c))},vg=()=>(e,t)=>{const{rtcManager:r}=Sg(t());r&&r.disconnectAll(),e(pg())},yg=e=>(t,r)=>{var n;t(fg(!0));const i=r(),s=Sg(i).rtcManager,a=Mo(i);if(!s)throw new Error("No rtc manager");const o=null===(n=s.shouldAcceptStreamsFromBothSides)||void 0===n?void 0:n.call(s),c=[];for(const{clientId:t,streamId:r,state:n}of e){if(a.find((e=>e.id===t))){if("to_accept"===n||"new_accept"===n&&o||"old_accept"===n&&!o)s.acceptNewStream({streamId:"0"===r?t:r,clientId:t,shouldAddLocalVideo:"0"===r,activeBreakout:false});else if("new_accept"===n||"old_accept"===n);else if("to_unaccept"===n)null==s||s.disconnect("0"===r?t:r,false);else if("done_accept"!==n)continue;c.push({clientId:t,streamId:r,state:n.replace(/to_|new_|old_/,"done_")})}}t(xo(c)),t(fg(!1))},_g=({streamId:e,width:t,height:r})=>(n,i)=>{const{reportedStreamResolutions:s,rtcManager:a}=Sg(i()),o=Xa(i());if(!a||(null==o?void 0:o.id)===e)return;const c=s[e];c&&c.width===t&&c.height===r||a.updateStreamResolution(e,null,{width:t||1,height:r||1}),n(dg({streamId:e,width:t,height:r}))},bg=e=>t=>{const{rtcManager:r}=e;t(ug(r))},wg=()=>(e,t)=>{const r=Xa(t()),n=Sg(t()).rtcManager,i=qa(t()),s=Wa(t());r&&n&&n.addNewStream("0",r,!s,!i),e(mg())},Sg=e=>e.rtcConnection,Cg=e=>e.rtcConnection.rtcManagerInitialized,Rg=e=>e.rtcConnection.status;Ft({actionCreator:Na.fulfilled,effect:({payload:e},{getState:t})=>{const{replacedTracks:r}=e,{rtcManager:n}=Sg(t()),i=Xa(t());null==r||r.forEach((e=>{((e,t)=>{const r=null==i?void 0:i.getTracks().find((t=>t.kind===e));r&&(null==n||n.replaceTrack(t,r))})(e.kind,e)}))}}),Ft({actionCreator:fo.fulfilled,effect:({payload:e},{getState:t})=>{const{stream:r}=e,{rtcManager:n}=Sg(t());null==n||n.addNewStream(r.id,r,!1,!0)}}),Ft({actionCreator:mo,effect:({payload:e},{getState:t})=>{const{stream:r}=e,{rtcManager:n}=Sg(t());null==n||n.removeStream(r.id,r,null)}});Bt([Se((e=>e.rtcConnection.dispatcherCreated),(e=>e.rtcConnection.isCreatingDispatcher),na,((e,t,r)=>!(e||t||!r)))],(({dispatch:e},t)=>{t&&e(gg())}));const Tg=Se((e=>e.rtcConnection.rtcManager),Cg,Qa,((e,t,r)=>!("started"!==r||!e||t)));Bt([Tg],(({dispatch:e},t)=>{t&&e(wg())}));Bt([Se(Rg,Gt,((e,t)=>!t&&!["","disconnected"].includes(e)))],(({dispatch:e},t)=>{t&&e(vg())}));const Pg=Se(Rg,Mo,((e,t)=>{if("ready"!==e)return[];const r=[];for(const e of t){const{streams:t,id:n,newJoiner:i}=e;for(let e=0;e<t.length;e++){const s=t[e].id;"done_accept"!==t[e].state&&r.push({clientId:n,streamId:s,state:(i&&"0"===s?"new":"to")+"_accept"})}}return r}));Bt([Pg,e=>e.rtcConnection.isAcceptingStreams],(({dispatch:e},t,r)=>{0<t.length&&!r&&e(yg(t))}));const kg={audioEnabled:{action:ao.fulfilled,rtcEventName:"audioEnabled",getValue:e=>Wa(e),getOutput:e=>({enabled:e})},videoEnabled:{action:oo.fulfilled,rtcEventName:"videoEnabled",getValue:e=>qa(e),getOutput:e=>({enabled:e})},localStream:{action:Na.fulfilled,rtcEventName:"localStream",getValue:e=>{var t;return null===(t=Xa(e))||void 0===t?void 0:t.getTracks().map((e=>({id:e.id,kind:e.kind,label:e.label})))},getOutput:e=>({stream:e})},localScreenshareStream:{action:fo.fulfilled,rtcEventName:"localScreenshareStream",getValue:e=>{var t;return null===(t=vo(e))||void 0===t?void 0:t.getTracks().map((e=>({id:e.id,kind:e.kind,label:e.label})))},getOutput:e=>({tracks:e})},localScreenshareStreamStopped:{action:mo,rtcEventName:"localScreenshareStream",getValue:()=>()=>null,getOutput:()=>({})},displayName:{action:co.fulfilled,rtcEventName:"displayName",getValue:e=>Ht(e),getOutput:e=>({displayName:e})},clientId:{action:null,rtcEventName:"clientId",getValue:e=>uo(e),getOutput:e=>({clientId:e})},deviceId:{action:null,rtcEventName:"deviceId",getValue:e=>(e=>{var t,r;return null===(r=null===(t=e.deviceCredentials.data)||void 0===t?void 0:t.credentials)||void 0===r?void 0:r.uuid})(e),getOutput:e=>({deviceId:e})},externalId:{action:null,rtcEventName:"externalId",getValue:e=>Jt(e),getOutput:e=>({externalId:e})},organizationId:{action:null,rtcEventName:"organizationId",getValue:e=>bo(e),getOutput:e=>({organizationId:e})},signalConnectionStatus:{action:null,rtcEventName:"signalConnectionStatus",getValue:e=>ra(e),getOutput:e=>({status:e})},roomSessionId:{action:null,rtcEventName:"roomSessionId",getValue:e=>(e=>{var t;return null===(t=e.roomConnection.session)||void 0===t?void 0:t.id})(e),getOutput:e=>({roomSessionId:e})},rtcConnectionStatus:{action:null,rtcEventName:"rtcConnectionStatus",getValue:e=>Rg(e),getOutput:e=>({status:e})},userRole:{action:null,rtcEventName:"userRole",getValue:e=>(e=>e.localParticipant.roleName)(e),getOutput:e=>({userRole:e})}},Eg=Object.values(kg).map((({action:e})=>e)).filter((e=>null!==e)),Dg=e=>"object"==typeof e?JSON.stringify(e):e,Og=at({initialState:{reportedValues:{}},name:"rtcAnalytics",reducers:{updateReportedValues:(e,t)=>Object.assign(Object.assign({},e),{reportedValues:Object.assign(Object.assign({},e.reportedValues),{[t.payload.rtcEventName]:t.payload.value})})}}),Ig=()=>(e,t)=>{const r=t(),n=Sg(r).rtcManager;n&&(n.sendStatsCustomEvent("insightsStats",{_time:Date.now(),ls:0,lr:0,bs:0,br:0,cpu:0}),Object.values(kg).forEach((({rtcEventName:t,getValue:i,getOutput:s})=>{var a;const o=i(r),c=Object.assign(Object.assign({},s(o)),{_time:Date.now()}),d=Dg(o);(null===(a=r.rtcAnalytics.reportedValues)||void 0===a?void 0:a[t])!==d&&(n.sendStatsCustomEvent(t,c),e(xg({rtcEventName:t,value:o})))})))},{updateReportedValues:xg}=Og.actions;Ft({matcher:Ye(...Eg),effect:({type:e},{getState:t,dispatch:r})=>{var n;const i=t(),s=Sg(i).rtcManager;if(!s)return;const a=Object.values(kg).find((({action:t})=>(null==t?void 0:t.type)===e));if(!a)return;const{getValue:o,getOutput:c,rtcEventName:d}=a,l=o(i),p=Dg(l),u=Object.assign(Object.assign({},c(l)),{_time:Date.now()});(null===(n=i.rtcAnalytics.reportedValues)||void 0===n?void 0:n[d])!==p&&(s.sendStatsCustomEvent(d,u),r(xg({rtcEventName:d,value:l})))}}),Bt([Cg],(({dispatch:e},t)=>{t&&e(Ig())}));const Mg=at({name:"streaming",initialState:{isStreaming:!1,error:null,startedAt:void 0},reducers:{doHandleStreamingStarted:e=>Object.assign(Object.assign({},e),{isStreaming:!0,error:null,startedAt:(new Date).getTime()}),doHandleStreamingStopped:e=>Object.assign(Object.assign({},e),{isStreaming:!1})}});Mg.actions;const jg=at({name:"waitingParticipants",initialState:{waitingParticipants:[]},reducers:{},extraReducers:e=>{e.addCase(Xt.roomJoined,((e,{payload:t})=>{var r;return(null===(r=t.room)||void 0===r?void 0:r.knockers.length)?Object.assign(Object.assign({},e),{waitingParticipants:t.room.knockers.map((e=>({id:e.clientId,displayName:e.displayName})))}):e})),e.addCase(Xt.roomKnocked,((e,t)=>{const{clientId:r,displayName:n}=t.payload;return Object.assign(Object.assign({},e),{waitingParticipants:[...e.waitingParticipants,{id:r,displayName:n}]})})),e.addCase(Xt.knockerLeft,((e,t)=>{const{clientId:r}=t.payload;return Object.assign(Object.assign({},e),{waitingParticipants:e.waitingParticipants.filter((e=>e.id!==r))})}))}}),Lg=e=>(t,r)=>{const{participantId:n}=e,i=r(),s=na(i);null==s||s.emit("handle_knock",{action:"accept",clientId:n,response:{}})},Ag=e=>(t,r)=>{const{participantId:n}=e,i=r(),s=na(i);null==s||s.emit("handle_knock",{action:"reject",clientId:n,response:{}})};const Ng=null===!1&&!1,Fg=g({app:Ut.reducer,chat:sa.reducer,cloudRecording:oa.reducer,deviceCredentials:Zt.reducer,localMedia:Ta.reducer,localParticipant:lo.reducer,localScreenshare:ho.reducer,organization:yo.reducer,remoteParticipants:Do.reducer,roomConnection:Lo.reducer,rtcAnalytics:Og.reducer,rtcConnection:cg.reducer,signalConnection:$s.reducer,streaming:Mg.reducer,waitingParticipants:jg.reducer}),Bg=({preloadedState:e,injectServices:t})=>He({devTools:Ng,reducer:Fg,middleware:e=>e({thunk:{extraArgument:{services:t}},serializableCheck:!1}).prepend(Nt.middleware),preloadedState:e}),Ug=(e,t,r)=>{let n;function i(){const i=t(e.getState());i!==n&&(n=i,r(n))}const s=e.subscribe(i);return i(),s},zg=[{pattern:/^(?:([^.]+)[.])?(server:?\d*)/,separator:"."},{pattern:/^(?:([^.]+)[.])?(localhost:?\d*)/,separator:"."},{pattern:/^(?:([^.]+)[.])?((\d+[.]){3}:?\d*)$/,separator:"."},{pattern:/^(?:([^.]+)-)?(ip-[^.]*[.](?:hereby[.]dev|rfc1918[.]disappear[.]at)(?::\d+|))$/,separator:"-"},{pattern:/^(?:([^.]+)[.])?((:?[^.]+[.]){1,}[^.]+)$/,separator:"."}];function Vg({host:e="whereby.com",protocol:t="https:"}={}){let r="",n=e,i=".";for(const{separator:t,pattern:s}of zg){const a=s.exec(e);if(a){r=a[1]||"",n=a[2],i=t;break}}const s=r?`${r}${i}${n}`:n;return{domain:n,domainWithSeparator:`${i}${n}`,organizationDomain:s,organization:`${t}//${s}`,service:`${t}//${n}`,subdomain:r}}Vg(window&&window.location);var $g={exports:{}};$g.exports=function(e){return(e instanceof on?e:on.from(e.toString(),"binary")).toString("base64")};var Gg=Ki($g.exports);function qg(e,t){return function(){return e.apply(t,arguments)}}const{toString:Wg}=Object.prototype,{getPrototypeOf:Hg}=Object,Kg=(e=>t=>{const r=Wg.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Jg=e=>(e=e.toLowerCase(),t=>Kg(t)===e),Yg=e=>t=>typeof t===e,{isArray:Qg}=Array,Xg=Yg("undefined");const Zg=Jg("ArrayBuffer");const ev=Yg("string"),tv=Yg("function"),rv=Yg("number"),nv=e=>null!==e&&"object"==typeof e,iv=e=>{if("object"!==Kg(e))return!1;const t=Hg(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},sv=Jg("Date"),av=Jg("File"),ov=Jg("Blob"),cv=Jg("FileList"),dv=Jg("URLSearchParams");function lv(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,i;if("object"!=typeof e&&(e=[e]),Qg(e))for(n=0,i=e.length;n<i;n++)t.call(null,e[n],n,e);else{const i=r?Object.getOwnPropertyNames(e):Object.keys(e),s=i.length;let a;for(n=0;n<s;n++)a=i[n],t.call(null,e[a],a,e)}}function pv(e,t){t=t.toLowerCase();const r=Object.keys(e);let n,i=r.length;for(;i-- >0;)if(n=r[i],t===n.toLowerCase())return n;return null}const uv="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:Wr,hv=e=>!Xg(e)&&e!==uv;const mv=(fv="undefined"!=typeof Uint8Array&&Hg(Uint8Array),e=>fv&&e instanceof fv);var fv;const gv=Jg("HTMLFormElement"),vv=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),yv=Jg("RegExp"),_v=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};lv(r,((r,i)=>{let s;!1!==(s=t(r,i,e))&&(n[i]=s||r)})),Object.defineProperties(e,n)},bv="abcdefghijklmnopqrstuvwxyz",wv="0123456789",Sv={DIGIT:wv,ALPHA:bv,ALPHA_DIGIT:bv+bv.toUpperCase()+wv};const Cv=Jg("AsyncFunction");var Rv={isArray:Qg,isArrayBuffer:Zg,isBuffer:function(e){return null!==e&&!Xg(e)&&null!==e.constructor&&!Xg(e.constructor)&&tv(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||tv(e.append)&&("formdata"===(t=Kg(e))||"object"===t&&tv(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Zg(e.buffer),t},isString:ev,isNumber:rv,isBoolean:e=>!0===e||!1===e,isObject:nv,isPlainObject:iv,isUndefined:Xg,isDate:sv,isFile:av,isBlob:ov,isRegExp:yv,isFunction:tv,isStream:e=>nv(e)&&tv(e.pipe),isURLSearchParams:dv,isTypedArray:mv,isFileList:cv,forEach:lv,merge:function e(){const{caseless:t}=hv(this)&&this||{},r={},n=(n,i)=>{const s=t&&pv(r,i)||i;iv(r[s])&&iv(n)?r[s]=e(r[s],n):iv(n)?r[s]=e({},n):Qg(n)?r[s]=n.slice():r[s]=n};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&lv(arguments[e],n);return r},extend:(e,t,r,{allOwnKeys:n}={})=>(lv(t,((t,n)=>{r&&tv(t)?e[n]=qg(t,r):e[n]=t}),{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let i,s,a;const o={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),s=i.length;s-- >0;)a=i[s],n&&!n(a,e,t)||o[a]||(t[a]=e[a],o[a]=!0);e=!1!==r&&Hg(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:Kg,kindOfTest:Jg,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(Qg(e))return e;let t=e.length;if(!rv(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:gv,hasOwnProperty:vv,hasOwnProp:vv,reduceDescriptors:_v,freezeMethods:e=>{_v(e,((t,r)=>{if(tv(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];tv(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach((e=>{r[e]=!0}))};return Qg(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:pv,global:uv,isContextDefined:hv,ALPHABET:Sv,generateString:(e=16,t=Sv.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r},isSpecCompliantForm:function(e){return!!(e&&tv(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(nv(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[n]=e;const i=Qg(e)?[]:{};return lv(e,((e,t)=>{const s=r(e,n+1);!Xg(s)&&(i[t]=s)})),t[n]=void 0,i}}return e};return r(e,0)},isAsyncFn:Cv,isThenable:e=>e&&(nv(e)||tv(e))&&tv(e.then)&&tv(e.catch)};function Tv(e,t,r,n,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),i&&(this.response=i)}Rv.inherits(Tv,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Rv.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Pv=Tv.prototype,kv={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{kv[e]={value:e}})),Object.defineProperties(Tv,kv),Object.defineProperty(Pv,"isAxiosError",{value:!0}),Tv.from=(e,t,r,n,i,s)=>{const a=Object.create(Pv);return Rv.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),Tv.call(a,e.message,t,r,n,i),a.cause=e,a.name=e.name,s&&Object.assign(a,s),a};function Ev(e){return Rv.isPlainObject(e)||Rv.isArray(e)}function Dv(e){return Rv.endsWith(e,"[]")?e.slice(0,-2):e}function Ov(e,t,r){return e?e.concat(t).map((function(e,t){return e=Dv(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}const Iv=Rv.toFlatObject(Rv,{},null,(function(e){return/^is[A-Z]/.test(e)}));function xv(e,t,r){if(!Rv.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=Rv.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Rv.isUndefined(t[e])}))).metaTokens,i=r.visitor||d,s=r.dots,a=r.indexes,o=(r.Blob||"undefined"!=typeof Blob&&Blob)&&Rv.isSpecCompliantForm(t);if(!Rv.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(Rv.isDate(e))return e.toISOString();if(!o&&Rv.isBlob(e))throw new Tv("Blob is not supported. Use a Buffer instead.");return Rv.isArrayBuffer(e)||Rv.isTypedArray(e)?o&&"function"==typeof Blob?new Blob([e]):on.from(e):e}function d(e,r,i){let o=e;if(e&&!i&&"object"==typeof e)if(Rv.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(Rv.isArray(e)&&function(e){return Rv.isArray(e)&&!e.some(Ev)}(e)||(Rv.isFileList(e)||Rv.endsWith(r,"[]"))&&(o=Rv.toArray(e)))return r=Dv(r),o.forEach((function(e,n){!Rv.isUndefined(e)&&null!==e&&t.append(!0===a?Ov([r],n,s):null===a?r:r+"[]",c(e))})),!1;return!!Ev(e)||(t.append(Ov(i,r,s),c(e)),!1)}const l=[],p=Object.assign(Iv,{defaultVisitor:d,convertValue:c,isVisitable:Ev});if(!Rv.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!Rv.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),Rv.forEach(r,(function(r,s){!0===(!(Rv.isUndefined(r)||null===r)&&i.call(t,r,Rv.isString(s)?s.trim():s,n,p))&&e(r,n?n.concat(s):[s])})),l.pop()}}(e),t}function Mv(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function jv(e,t){this._pairs=[],e&&xv(e,this,t)}const Lv=jv.prototype;function Av(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Nv(e,t,r){if(!t)return e;const n=r&&r.encode||Av,i=r&&r.serialize;let s;if(s=i?i(t,r):Rv.isURLSearchParams(t)?t.toString():new jv(t,r).toString(n),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}Lv.append=function(e,t){this._pairs.push([e,t])},Lv.toString=function(e){const t=e?function(t){return e.call(this,t,Mv)}:Mv;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Fv=class{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Rv.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Bv={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var Uv={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:jv,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},isStandardBrowserEnv:(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),isStandardBrowserWebWorkerEnv:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,protocols:["http","https","file","blob","url","data"]};function zv(e){function t(e,r,n,i){let s=e[i++];const a=Number.isFinite(+s),o=i>=e.length;if(s=!s&&Rv.isArray(n)?n.length:s,o)return Rv.hasOwnProp(n,s)?n[s]=[n[s],r]:n[s]=r,!a;n[s]&&Rv.isObject(n[s])||(n[s]=[]);return t(e,r,n[s],i)&&Rv.isArray(n[s])&&(n[s]=function(e){const t={},r=Object.keys(e);let n;const i=r.length;let s;for(n=0;n<i;n++)s=r[n],t[s]=e[s];return t}(n[s])),!a}if(Rv.isFormData(e)&&Rv.isFunction(e.entries)){const r={};return Rv.forEachEntry(e,((e,n)=>{t(function(e){return Rv.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),n,r,0)})),r}return null}const Vv={transitional:Bv,adapter:["xhr","http"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,i=Rv.isObject(e);i&&Rv.isHTMLForm(e)&&(e=new FormData(e));if(Rv.isFormData(e))return n&&n?JSON.stringify(zv(e)):e;if(Rv.isArrayBuffer(e)||Rv.isBuffer(e)||Rv.isStream(e)||Rv.isFile(e)||Rv.isBlob(e))return e;if(Rv.isArrayBufferView(e))return e.buffer;if(Rv.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return xv(e,new Uv.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return Uv.isNode&&Rv.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((s=Rv.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return xv(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||n?(t.setContentType("application/json",!1),function(e,t,r){if(Rv.isString(e))try{return(t||JSON.parse)(e),Rv.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Vv.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&Rv.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw Tv.from(e,Tv.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Uv.classes.FormData,Blob:Uv.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Rv.forEach(["delete","get","head","post","put","patch"],(e=>{Vv.headers[e]={}}));var $v=Vv;const Gv=Rv.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const qv=Symbol("internals");function Wv(e){return e&&String(e).trim().toLowerCase()}function Hv(e){return!1===e||null==e?e:Rv.isArray(e)?e.map(Hv):String(e)}function Kv(e,t,r,n,i){return Rv.isFunction(n)?n.call(this,t,r):(i&&(t=r),Rv.isString(t)?Rv.isString(n)?-1!==t.indexOf(n):Rv.isRegExp(n)?n.test(t):void 0:void 0)}class Jv{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function i(e,t,r){const i=Wv(t);if(!i)throw new Error("header name must be a non-empty string");const s=Rv.findKey(n,i);(!s||void 0===n[s]||!0===r||void 0===r&&!1!==n[s])&&(n[s||t]=Hv(e))}const s=(e,t)=>Rv.forEach(e,((e,r)=>i(e,r,t)));return Rv.isPlainObject(e)||e instanceof this.constructor?s(e,t):Rv.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?s((e=>{const t={};let r,n,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),r=e.substring(0,i).trim().toLowerCase(),n=e.substring(i+1).trim(),!r||t[r]&&Gv[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)})),t})(e),t):null!=e&&i(t,e,r),this}get(e,t){if(e=Wv(e)){const r=Rv.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(Rv.isFunction(t))return t.call(this,e,r);if(Rv.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Wv(e)){const r=Rv.findKey(this,e);return!(!r||void 0===this[r]||t&&!Kv(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function i(e){if(e=Wv(e)){const i=Rv.findKey(r,e);!i||t&&!Kv(0,r[i],i,t)||(delete r[i],n=!0)}}return Rv.isArray(e)?e.forEach(i):i(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const i=t[r];e&&!Kv(0,this[i],i,e,!0)||(delete this[i],n=!0)}return n}normalize(e){const t=this,r={};return Rv.forEach(this,((n,i)=>{const s=Rv.findKey(r,i);if(s)return t[s]=Hv(n),void delete t[i];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,r)=>t.toUpperCase()+r))}(i):String(i).trim();a!==i&&delete t[i],t[a]=Hv(n),r[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Rv.forEach(this,((r,n)=>{null!=r&&!1!==r&&(t[n]=e&&Rv.isArray(r)?r.join(", "):r)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach((e=>r.set(e))),r}static accessor(e){const t=(this[qv]=this[qv]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=Wv(e);t[n]||(!function(e,t){const r=Rv.toCamelCase(" "+t);["get","set","has"].forEach((n=>{Object.defineProperty(e,n+r,{value:function(e,r,i){return this[n].call(this,t,e,r,i)},configurable:!0})}))}(r,e),t[n]=!0)}return Rv.isArray(e)?e.forEach(n):n(e),this}}Jv.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Rv.reduceDescriptors(Jv.prototype,(({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}})),Rv.freezeMethods(Jv);var Yv=Jv;function Qv(e,t){const r=this||$v,n=t||r,i=Yv.from(n.headers);let s=n.data;return Rv.forEach(e,(function(e){s=e.call(r,s,i.normalize(),t?t.status:void 0)})),i.normalize(),s}function Xv(e){return!(!e||!e.__CANCEL__)}function Zv(e,t,r){Tv.call(this,null==e?"canceled":e,Tv.ERR_CANCELED,t,r),this.name="CanceledError"}Rv.inherits(Zv,Tv,{__CANCEL__:!0});var ey=Uv.isStandardBrowserEnv?{write:function(e,t,r,n,i,s){const a=[];a.push(e+"="+encodeURIComponent(t)),Rv.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),Rv.isString(n)&&a.push("path="+n),Rv.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function ty(e,t){return e&&!function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var ry=Uv.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function n(r){let n=r;return e&&(t.setAttribute("href",n),n=t.href),t.setAttribute("href",n),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return r=n(window.location.href),function(e){const t=Rv.isString(e)?n(e):e;return t.protocol===r.protocol&&t.host===r.host}}():function(){return!0};function ny(e,t){let r=0;const n=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let i,s=0,a=0;return t=void 0!==t?t:1e3,function(o){const c=Date.now(),d=n[a];i||(i=c),r[s]=o,n[s]=c;let l=a,p=0;for(;l!==s;)p+=r[l++],l%=e;if(s=(s+1)%e,s===a&&(a=(a+1)%e),c-i<t)return;const u=d&&c-d;return u?Math.round(1e3*p/u):void 0}}(50,250);return i=>{const s=i.loaded,a=i.lengthComputable?i.total:void 0,o=s-r,c=n(o);r=s;const d={loaded:s,total:a,progress:a?s/a:void 0,bytes:o,rate:c||void 0,estimated:c&&a&&s<=a?(a-s)/c:void 0,event:i};d[t?"download":"upload"]=!0,e(d)}}var iy="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,r){let n=e.data;const i=Yv.from(e.headers).normalize(),s=e.responseType;let a,o;function c(){e.cancelToken&&e.cancelToken.unsubscribe(a),e.signal&&e.signal.removeEventListener("abort",a)}Rv.isFormData(n)&&(Uv.isStandardBrowserEnv||Uv.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.getContentType(/^\s*multipart\/form-data/)?Rv.isString(o=i.getContentType())&&i.setContentType(o.replace(/^\s*(multipart\/form-data);+/,"$1")):i.setContentType("multipart/form-data"));let d=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",r=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+r))}const l=ty(e.baseURL,e.url);function p(){if(!d)return;const n=Yv.from("getAllResponseHeaders"in d&&d.getAllResponseHeaders());!function(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new Tv("Request failed with status code "+r.status,[Tv.ERR_BAD_REQUEST,Tv.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}((function(e){t(e),c()}),(function(e){r(e),c()}),{data:s&&"text"!==s&&"json"!==s?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:n,config:e,request:d}),d=null}if(d.open(e.method.toUpperCase(),Nv(l,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=p:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(p)},d.onabort=function(){d&&(r(new Tv("Request aborted",Tv.ECONNABORTED,e,d)),d=null)},d.onerror=function(){r(new Tv("Network Error",Tv.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const n=e.transitional||Bv;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new Tv(t,n.clarifyTimeoutError?Tv.ETIMEDOUT:Tv.ECONNABORTED,e,d)),d=null},Uv.isStandardBrowserEnv){const t=ry(l)&&e.xsrfCookieName&&ey.read(e.xsrfCookieName);t&&i.set(e.xsrfHeaderName,t)}void 0===n&&i.setContentType(null),"setRequestHeader"in d&&Rv.forEach(i.toJSON(),(function(e,t){d.setRequestHeader(t,e)})),Rv.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),s&&"json"!==s&&(d.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",ny(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",ny(e.onUploadProgress)),(e.cancelToken||e.signal)&&(a=t=>{d&&(r(!t||t.type?new Zv(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(a),e.signal&&(e.signal.aborted?a():e.signal.addEventListener("abort",a)));const u=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(l);u&&-1===Uv.protocols.indexOf(u)?r(new Tv("Unsupported protocol "+u+":",Tv.ERR_BAD_REQUEST,e)):d.send(n||null)}))};const sy={http:null,xhr:iy};Rv.forEach(sy,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const ay=e=>`- ${e}`,oy=e=>Rv.isFunction(e)||null===e||!1===e;var cy=e=>{e=Rv.isArray(e)?e:[e];const{length:t}=e;let r,n;const i={};for(let s=0;s<t;s++){let t;if(r=e[s],n=r,!oy(r)&&(n=sy[(t=String(r)).toLowerCase()],void 0===n))throw new Tv(`Unknown adapter '${t}'`);if(n)break;i[t||"#"+s]=n}if(!n){const e=Object.entries(i).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new Tv("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(ay).join("\n"):" "+ay(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function dy(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Zv(null,e)}function ly(e){dy(e),e.headers=Yv.from(e.headers),e.data=Qv.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return cy(e.adapter||$v.adapter)(e).then((function(t){return dy(e),t.data=Qv.call(e,e.transformResponse,t),t.headers=Yv.from(t.headers),t}),(function(t){return Xv(t)||(dy(e),t&&t.response&&(t.response.data=Qv.call(e,e.transformResponse,t.response),t.response.headers=Yv.from(t.response.headers))),Promise.reject(t)}))}const py=e=>e instanceof Yv?e.toJSON():e;function uy(e,t){t=t||{};const r={};function n(e,t,r){return Rv.isPlainObject(e)&&Rv.isPlainObject(t)?Rv.merge.call({caseless:r},e,t):Rv.isPlainObject(t)?Rv.merge({},t):Rv.isArray(t)?t.slice():t}function i(e,t,r){return Rv.isUndefined(t)?Rv.isUndefined(e)?void 0:n(void 0,e,r):n(e,t,r)}function s(e,t){if(!Rv.isUndefined(t))return n(void 0,t)}function a(e,t){return Rv.isUndefined(t)?Rv.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function o(r,i,s){return s in t?n(r,i):s in e?n(void 0,r):void 0}const c={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:o,headers:(e,t)=>i(py(e),py(t),!0)};return Rv.forEach(Object.keys(Object.assign({},e,t)),(function(n){const s=c[n]||i,a=s(e[n],t[n],n);Rv.isUndefined(a)&&s!==o||(r[n]=a)})),r}const hy="1.6.0",my={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{my[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));const fy={};my.transitional=function(e,t,r){function n(e,t){return"[Axios v1.6.0] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,i,s)=>{if(!1===e)throw new Tv(n(i," has been removed"+(t?" in "+t:"")),Tv.ERR_DEPRECATED);return t&&!fy[i]&&(fy[i]=!0,console.warn(n(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,i,s)}};var gy={assertOptions:function(e,t,r){if("object"!=typeof e)throw new Tv("options must be an object",Tv.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let i=n.length;for(;i-- >0;){const s=n[i],a=t[s];if(a){const t=e[s],r=void 0===t||a(t,s,e);if(!0!==r)throw new Tv("option "+s+" must be "+r,Tv.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new Tv("Unknown option "+s,Tv.ERR_BAD_OPTION)}},validators:my};const vy=gy.validators;class yy{constructor(e){this.defaults=e,this.interceptors={request:new Fv,response:new Fv}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=uy(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:i}=t;void 0!==r&&gy.assertOptions(r,{silentJSONParsing:vy.transitional(vy.boolean),forcedJSONParsing:vy.transitional(vy.boolean),clarifyTimeoutError:vy.transitional(vy.boolean)},!1),null!=n&&(Rv.isFunction(n)?t.paramsSerializer={serialize:n}:gy.assertOptions(n,{encode:vy.function,serialize:vy.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=i&&Rv.merge(i.common,i[t.method]);i&&Rv.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=Yv.concat(s,i);const a=[];let o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const c=[];let d;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let l,p=0;if(!o){const e=[ly.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,c),l=e.length,d=Promise.resolve(t);p<l;)d=d.then(e[p++],e[p++]);return d}l=a.length;let u=t;for(p=0;p<l;){const e=a[p++],t=a[p++];try{u=e(u)}catch(e){t.call(this,e);break}}try{d=ly.call(this,u)}catch(e){return Promise.reject(e)}for(p=0,l=c.length;p<l;)d=d.then(c[p++],c[p++]);return d}getUri(e){return Nv(ty((e=uy(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}Rv.forEach(["delete","get","head","options"],(function(e){yy.prototype[e]=function(t,r){return this.request(uy(r||{},{method:e,url:t,data:(r||{}).data}))}})),Rv.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,i){return this.request(uy(i||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}yy.prototype[e]=t(),yy.prototype[e+"Form"]=t(!0)}));var _y=yy;class by{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const r=this;this.promise.then((e=>{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null})),this.promise.then=e=>{let t;const n=new Promise((e=>{r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,i){r.reason||(r.reason=new Zv(e,n,i),t(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new by((function(t){e=t})),cancel:e}}}var wy=by;const Sy={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Sy).forEach((([e,t])=>{Sy[t]=e}));var Cy=Sy;const Ry=function e(t){const r=new _y(t),n=qg(_y.prototype.request,r);return Rv.extend(n,_y.prototype,r,{allOwnKeys:!0}),Rv.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e(uy(t,r))},n}($v);Ry.Axios=_y,Ry.CanceledError=Zv,Ry.CancelToken=wy,Ry.isCancel=Xv,Ry.VERSION=hy,Ry.toFormData=xv,Ry.AxiosError=Tv,Ry.Cancel=Ry.CanceledError,Ry.all=function(e){return Promise.all(e)},Ry.spread=function(e){return function(t){return e.apply(null,t)}},Ry.isAxiosError=function(e){return Rv.isObject(e)&&!0===e.isAxiosError},Ry.mergeConfig=uy,Ry.AxiosHeaders=Yv,Ry.formToJSON=e=>zv(Rv.isHTMLForm(e)?new FormData(e):e),Ry.getAdapter=cy,Ry.HttpStatusCode=Cy,Ry.default=Ry;var Ty=Ry;class Py{constructor(e={}){this.data=void 0===e.data?{}:e.data,this.headers=e.headers||{},this.status=e.status||200,this.statusText=e.statusText||"OK",this.url=e.url||null}}function ky(e,t){return ya.ok(e,`${t} is required`),e}function Ey(e,t){return ya.ok("boolean"==typeof e,`${t}<boolean> is required`),e}function Dy(e,t){return ya.ok("number"==typeof e,`${t}<number> is required`),e}function Oy(e,t){return ya.ok("string"==typeof e,`${t}<string> is required`),e}function Iy(e,t,r){const n=r||t.name[0].toLowerCase()+t.name.substring(1);return ya.ok(e instanceof t,`${n}<${t.name}> is required`),e}function xy(e,t){return ya.ok(Array.isArray(e),`${t}<array> is required`),e}function My(e,t){if(null==e||"object"!=typeof e||Array.isArray(e))throw new Error(`${t} must be a record. ${JSON.stringify(e)}`);return e}function jy(e,t,r){Oy(t,"name"),function(e,t,r,n){Oy(r,"name");const i=n||`${r} must be null or of type ${t}`;ya.ok(null===e||typeof e===t,i)}(e,"string",t,r)}function Ly({baseUrl:e,url:t}){return e?e+t:t}class Ay{constructor({baseUrl:e}){Oy(e,"baseUrl"),this._baseUrl=e}_requestAxios(e,t){const r=Object.assign({},t,{url:e,baseURL:this._baseUrl});return Ty.request(r)}request(e,t){return Oy(e,"url"),ya.ok("/"===e[0],'url<String> only accepts relative URLs beginning with "/".'),ya.ok(t,"options are required"),this._requestAxios(e,t).then((e=>{const{data:t,headers:r,status:n,statusText:i,config:s}=e,a=s&&s.url?Ly({baseUrl:s.baseURL,url:s.url}):null;return new Py({data:t,headers:r,status:n,statusText:i,url:a})})).catch((e=>{const t=e.response;if(!t)throw new Error("Could not make the request.");const{data:r,headers:n,status:i,statusText:s,config:a}=t,o=a&&a.url?Ly({baseUrl:a.baseURL,url:a.url}):null;return Promise.reject(new Py({data:r,headers:n,status:i,statusText:s,url:o}))}))}}class Ny{constructor({httpClient:e}){ya.ok(e,"httpClient is required"),this._httpClient=e}static dataToFormData(e){ya.ok(e,"data is required");const t=new FormData;return Object.keys(e).forEach((r=>{const n=e[r];t.append(r,n)})),t}request(e,t={}){const r=Object.assign(t.headers||{},{"Content-Type":void 0});return this._httpClient.request(e,Object.assign(t,{headers:r,transformRequest:Ny.dataToFormData}))}}let Fy;Fy="object"==typeof window?window.btoa||Gg:"object"==typeof global&&global.btoa||Gg;const By=()=>Promise.resolve(null);class Uy{constructor({httpClient:e,fetchDeviceCredentials:t}){this._httpClient=e,this._fetchDeviceCredentials=t}request(e,t){return this._fetchDeviceCredentials().then((r=>{const n=Object.assign({},t.headers,function(e){if(e&&e.credentials){const t=`${e.credentials.uuid}:${e.hmac}`;return{Authorization:`Basic ${Fy(t)}`}}return{}}(r),{"X-Appearin-Device-Platform":"web"}),i=Object.assign({},t,{headers:n});return this._httpClient.request(e,i)}))}}class zy{constructor({baseUrl:e="https://api.appearin.net",fetchDeviceCredentials:t=By}={}){this.authenticatedHttpClient=new Uy({httpClient:new Ay({baseUrl:e}),fetchDeviceCredentials:t}),this.authenticatedFormDataHttpClient=new Ny({httpClient:this.authenticatedHttpClient})}request(e,t){return Oy(e,"url"),ya.ok("/"===e[0],'url<String> only accepts relative URLs beginning with "/".'),ya.ok(t,"options are required"),this.authenticatedHttpClient.request(e,t)}requestMultipart(e,t){return Oy(e,"url"),ya.ok("/"===e[0],'url<String> only accepts relative URLs beginning with "/".'),ya.ok(t,"options are required"),this.authenticatedFormDataHttpClient.request(e,t)}}function Vy(e,t){return Oy(My(e,"data")[t],t)}const $y=(Gy=Vy,(e,t)=>{const r=My(e,"data")[t];return null==r?null:Gy(e,t)});var Gy;function qy(e,t,r){return function(e,t){return xy(My(e,"data")[t],t)}(e,t).map((e=>r(e)))}class Wy{constructor(e,t,r=void 0){this.credentials={uuid:e},this.hmac=t,this.userId=r}toJson(){return Object.assign({credentials:this.credentials,hmac:this.hmac},this.userId&&{userId:this.userId})}static fromJson(e){return new Wy(Vy(function(e,t){const r=My(e,"data")[t];return void 0===r?null:r}(e,"credentials"),"uuid"),Vy(e,"hmac"),$y(e,"userId")||void 0)}}class Hy{constructor({apiClient:e}){this._apiClient=e}getCredentials(){return this._apiClient.request("/devices",{method:"post"}).then((({data:e})=>Wy.fromJson(e))).catch((e=>{if(e.response&&404===e.response.status)return null;throw e}))}}class Ky{constructor(e,t){this._key=e,this._chromeStorage=t}loadOrDefault(e){return new Promise((t=>{this._chromeStorage.get(this._key,(r=>{t(r[this._key]||e)}))}))}save(e){return new Promise((t=>{this._chromeStorage.set({[this._key]:e},(()=>{t()}))}))}}class Jy{constructor(e,t){ky(t,"localStorage"),this._key=Oy(e,"key"),this._localStorage=t}loadOrDefault(e){try{const t=this._localStorage.getItem(this._key);if(t)try{return Promise.resolve(JSON.parse(t))}catch(e){}return Promise.resolve(e)}catch(t){return console.warn("Error getting access to storage. Are cookies blocked?",t),Promise.resolve(e)}}save(e){try{return this._localStorage.setItem(this._key,JSON.stringify(e)),Promise.resolve()}catch(e){return console.warn("Error getting access to storage. Are cookies blocked?",e),Promise.reject(e)}}}let Yy;try{Yy=self.localStorage}catch(e){Yy={getItem:()=>{},key:()=>{},setItem:()=>{},removeItem:()=>{},hasOwnProperty:()=>{},length:0}}var Qy=Yy;const Xy="credentials_saved";class Zy extends qd{constructor({deviceService:e,credentialsStore:t}){super(),this._deviceService=e,this._credentialsStore=t}static create({baseUrl:e,storeName:t="CredentialsStorage",storeType:r="localStorage"}){const n=new Hy({apiClient:new zy({baseUrl:e})});let i=null;if("localStorage"===r)i=new Jy(t,Qy);else{if("chromeStorage"!==r)throw new Error(`Unknown store type: ${r}`);i=new Ky(t,window.chrome.storage.local)}return new Zy({deviceService:n,credentialsStore:i})}_fetchNewCredentialsFromApi(){const e=this._credentialsStore;return new Promise((t=>{const r=()=>{this._deviceService.getCredentials().then((r=>e.save(r?r.toJson():null).then((()=>t(r))))).catch((()=>{setTimeout(r,2e3)}))};r()}))}getCurrentCredentials(){return this._credentialsStore.loadOrDefault(null).then((e=>e?Wy.fromJson(e):null))}getCredentials(){return this.credentialsPromise||(this.credentialsPromise=this.getCurrentCredentials().then((e=>e||this._fetchNewCredentialsFromApi()))),this.credentialsPromise}saveCredentials(e){return this.credentialsPromise=void 0,this._credentialsStore.save(e.toJson()).then((()=>(this.emit(Xy,e),e)))}setUserId(e){return this.getCurrentCredentials().then((t=>{t||console.error("Illegal state: no credentials to set user id for.");if(null===t||t.userId!==e)return this._credentialsStore.save(Object.assign({},null==t?void 0:t.toJson(),{userId:e}))})).then((()=>{}))}}class e_{constructor({isExhausted:e,renewsAt:t,totalMinutesLimit:r,totalMinutesUsed:n}){this.isExhausted=e,this.renewsAt=t,this.totalMinutesLimit=r,this.totalMinutesUsed=n}static fromJson(e){return new e_({isExhausted:Ey(e.isExhausted,"isExhausted"),renewsAt:new Date(Oy(e.renewsAt,"renewsAt")),totalMinutesLimit:Dy(e.totalMinutesLimit,"totalMinutesLimit"),totalMinutesUsed:Dy(e.totalMinutesUsed,"totalMinutesUsed")})}}class t_{constructor({basePlanId:e,embeddedFreeTierStatus:t,isDeactivated:r,isOnTrial:n,onTrialUntil:i,trialStatus:s}){this.basePlanId=e,this.isDeactivated=r,this.isOnTrial=n,this.onTrialUntil=i||null,this.trialStatus=s||null,this.embeddedFreeTierStatus=t||null}static fromJson(e){return new t_({basePlanId:"string"==typeof e.basePlanId?e.basePlanId:null,isDeactivated:Ey(e.isDeactivated,"isDeactivated"),isOnTrial:Ey(e.isOnTrial,"isOnTrial"),onTrialUntil:"string"==typeof e.onTrialUntil?new Date(e.onTrialUntil):null,trialStatus:"string"==typeof e.trialStatus?e.trialStatus:null,embeddedFreeTierStatus:e.embeddedFreeTierStatus?e_.fromJson(e.embeddedFreeTierStatus):null})}}function r_(e){return null!=e}function n_(e={}){return{maxNumberOfInvitationsAndUsers:r_(null==e?void 0:e.maxNumberOfInvitationsAndUsers)?Number(null==e?void 0:e.maxNumberOfInvitationsAndUsers):null,maxNumberOfClaimedRooms:r_(null==e?void 0:e.maxNumberOfClaimedRooms)?Number(null==e?void 0:e.maxNumberOfClaimedRooms):null,maxRoomLimitPerOrganization:r_(null==e?void 0:e.maxRoomLimitPerOrganization)?Number(null==e?void 0:e.maxRoomLimitPerOrganization):null,trialMinutesLimit:r_(null==e?void 0:e.trialMinutesLimit)?Number(null==e?void 0:e.trialMinutesLimit):null,includedUnits:r_(null==e?void 0:e.includedUnits)?Number(null==e?void 0:e.includedUnits):null}}class i_{constructor(e){this.logoImageUrl=null,this.roomBackgroundImageUrl=null,this.roomBackgroundThumbnailUrl=null,this.roomKnockPageBackgroundImageUrl=null,this.roomKnockPageBackgroundThumbnailUrl=null,this.preferences=null,this.onboardingSurvey=null,this.type=null,Iy(e,Object,"properties"),Oy(e.organizationId,"organizationId"),Oy(e.organizationName,"organizationName"),Oy(e.subdomain,"subdomain"),Iy(e.permissions,Object,"permissions"),Iy(e.limits,Object,"limits"),this.organizationId=e.organizationId,this.organizationName=e.organizationName,this.subdomain=e.subdomain,this.permissions=e.permissions,this.limits=e.limits,this.account=e.account?new t_(e.account):null,this.logoImageUrl=e.logoImageUrl,this.roomBackgroundImageUrl=e.roomBackgroundImageUrl,this.roomBackgroundThumbnailUrl=e.roomBackgroundThumbnailUrl,this.roomKnockPageBackgroundImageUrl=e.roomKnockPageBackgroundImageUrl,this.roomKnockPageBackgroundThumbnailUrl=e.roomKnockPageBackgroundThumbnailUrl,this.preferences=e.preferences,this.onboardingSurvey=e.onboardingSurvey,this.type=e.type}static fromJson(e){const t=Iy(e,Object,"data"),r=(null==t?void 0:t.preferences)||{},n=(null==t?void 0:t.onboardingSurvey)||null,i=Iy(t.permissions,Object,"permissions");return new i_({organizationId:Oy(t.organizationId,"organizationId"),organizationName:Oy(t.organizationName,"organizationName"),subdomain:Oy(t.subdomain,"subdomain"),permissions:i,limits:n_(Iy(t.limits,Object,"limits")),account:t.account?t_.fromJson(t.account):null,logoImageUrl:"string"==typeof t.logoImageUrl?t.logoImageUrl:null,roomBackgroundImageUrl:"string"==typeof t.roomBackgroundImageUrl?t.roomBackgroundImageUrl:null,roomBackgroundThumbnailUrl:"string"==typeof t.roomBackgroundThumbnailUrl?t.roomBackgroundThumbnailUrl:null,roomKnockPageBackgroundImageUrl:"string"==typeof t.roomKnockPageBackgroundImageUrl?t.roomKnockPageBackgroundImageUrl:null,roomKnockPageBackgroundThumbnailUrl:"string"==typeof t.roomKnockPageBackgroundThumbnailUrl?t.roomKnockPageBackgroundThumbnailUrl:null,preferences:r,onboardingSurvey:n,type:"string"==typeof t.type?t.type:null})}}i_.GLOBAL_ORGANIZATION_ID="1";class s_{constructor({apiClient:e}){this._apiClient=e}createOrganization({organizationName:e,subdomain:t,owner:r}){const{displayName:n,consents:i}=r||{},s="email"in r?{value:r.email,verificationCode:Oy(r.verificationCode,"owner.verificationCode")}:null,a="idToken"in r?r.idToken:null;if(Oy(t,"subdomain"),Oy(e,"organizationName"),Oy(n,"owner.displayName"),ya.ok(s||a,"owner.email or owner.idToken is required"),i){xy(i,"consents");for(const{consentRevisionId:e,action:t}of i)Oy(e,"consentRevisionId"),jy(t,"action")}return this._apiClient.request("/organizations",{method:"POST",data:{organizationName:e,type:"private",subdomain:t,owner:Object.assign(Object.assign(Object.assign(Object.assign({},s&&{email:s}),a&&{idToken:a}),i&&{consents:i}),{displayName:n})}}).then((({data:e})=>Vy(e,"organizationId")))}getOrganizationBySubdomain(e){return Oy(e,"subdomain"),this._apiClient.request(`/organization-subdomains/${encodeURIComponent(e)}/?fields=permissions,account,onboardingSurvey`,{method:"GET"}).then((({data:e})=>i_.fromJson(e))).catch((e=>{if(e instanceof Py){if(404===e.status)return null;throw new Error(e.statusText)}throw e}))}getOrganizationByOrganizationId(e){return Oy(e,"organizationId"),this._apiClient.request(`/organizations/${encodeURIComponent(e)}?fields=permissions,account`,{method:"GET"}).then((({data:e})=>i_.fromJson(e))).catch((e=>{if(e instanceof Py){if(404===e.status)return null;throw new Error(e.statusText)}throw e}))}getOrganizationsByContactPoint(e){const{code:t}=e,r="email"in e?e.email:null,n="phoneNumber"in e?e.phoneNumber:null;ya.ok((r||n)&&!(r&&n),"either email or phoneNumber is required"),Oy(t,"code");const i=r?{type:"email",value:r}:{type:"phoneNumber",value:n};return this._apiClient.request("/organization-queries",{method:"POST",data:{contactPoint:i,code:t}}).then((({data:e})=>qy(e,"organizations",(e=>i_.fromJson(e)))))}getOrganizationsByIdToken({idToken:e}){return Oy(e,"idToken"),this._apiClient.request("/organization-queries",{method:"POST",data:{idToken:e}}).then((({data:e})=>qy(e,"organizations",(e=>i_.fromJson(Object.assign({permissions:{},limits:{}},My(e,"organization")))))))}getOrganizationsByLoggedInUser(){return this._apiClient.request("/user/organizations",{method:"GET"}).then((({data:e})=>qy(e,"organizations",(e=>i_.fromJson(Object.assign({permissions:{},limits:{}},My(e,"organization")))))))}getSubdomainAvailability(e){return Oy(e,"subdomain"),this._apiClient.request(`/organization-subdomains/${encodeURIComponent(e)}/availability`,{method:"GET"}).then((({data:e})=>(Iy(e,Object,"data"),{status:Vy(e,"status")})))}updatePreferences({organizationId:e,preferences:t}){return ky(e,"organizationId"),ky(t,"preferences"),this._apiClient.request(`/organizations/${encodeURIComponent(e)}/preferences`,{method:"PATCH",data:t}).then((()=>{}))}deleteOrganization({organizationId:e}){return ky(e,"organizationId"),this._apiClient.request(`/organizations/${encodeURIComponent(e)}`,{method:"DELETE"}).then((()=>{}))}}class a_{constructor({organizationService:e,subdomain:t}){this._organizationService=e,this._subdomain=t,this._organizationPromise=null}initOrganization(){return this.fetchOrganization().then((()=>{}))}fetchOrganization(){return this._organizationPromise||(this._organizationPromise=this._organizationService.getOrganizationBySubdomain(this._subdomain)),this._organizationPromise}}const o_="https://api.whereby.dev";function c_(){const e=Zy.create({baseUrl:o_}),t=new zy({fetchDeviceCredentials:e.getCredentials.bind(e),baseUrl:o_}),r=new s_({apiClient:t});return{credentialsService:e,apiClient:t,organizationService:r,fetchOrganizationFromRoomUrl:e=>{const t=Vg({host:new URL(e).host});return new a_({organizationService:r,subdomain:t.subdomain}).fetchOrganization()}}}const d_=Se((e=>e.chat.chatMessages),(e=>e.cloudRecording),po,Xa,Mo,jo,Bo,(e=>e.streaming),(e=>e.waitingParticipants.waitingParticipants),((e,t,r,n,i,s,a,o,c)=>({chatMessages:e,cloudRecording:t.isRecording?{status:"recording"}:void 0,localScreenshareStatus:r.isScreenSharing?"active":void 0,localParticipant:Object.assign(Object.assign({},r),{stream:n}),remoteParticipants:i,screenshares:s,connectionStatus:a,liveStream:o.isStreaming?{status:"streaming",startedAt:o.startedAt}:void 0,waitingParticipants:c}))),l_="2.1.0-beta2",p_={chatMessages:[],remoteParticipants:[],connectionStatus:"initializing",screenshares:[],waitingParticipants:[]},u_={localMediaOptions:{audio:!0,video:!0}};const h_=Se((e=>e.localMedia.cameraDeviceError),ro,$a,Ga,(e=>e.localMedia.isSettingCameraDevice),(e=>e.localMedia.isSettingMicrophoneDevice),to,Xa,(e=>e.localMedia.microphoneDeviceError),no,io,(e=>e.localMedia.startError),((e,t,r,n,i,s,a,o,c,d,l,p)=>({cameraDeviceError:e,cameraDevices:t,currentCameraDeviceId:r,currentMicrophoneDeviceId:n,isSettingCameraDevice:i,isSettingMicrophoneDevice:s,isStarting:a,localStream:o,microphoneDeviceError:c,microphoneDevices:d,speakerDevices:l,startError:p}))),m_={cameraDeviceError:null,cameraDevices:[],isSettingCameraDevice:!1,isSettingMicrophoneDevice:!1,isStarting:!1,microphoneDeviceError:null,microphoneDevices:[],speakerDevices:[],startError:null};var f_={MIN_WINDOW_HEIGHT:320,MIN_WINDOW_WIDTH:320,DESKTOP_BREAKPOINT:1025,TABLET_BREAKPOINT:750,PHONE_BREAKPOINT:500,TOP_TOOLBAR_HEIGHT:56,BOTTOM_TOOLBAR_HEIGHT:82,SIDEBAR_WIDTH:375,VIDEO_CONTROLS_MIN_WIDTH:420,ROOM_FOOTER_MIN_WIDTH:600,FLOATING_VIDEO_CONTROLS_BOTTOM_MARGIN:20,WATERMARK_BAR_HEIGHT:32,BREAKOUT_STAGE_BACKDROP_HEADER_HEIGHT:28,BREAKOUT_STAGE_BACKDROP_FOOTER_HEIGHT:56,SUBGRID_EMPTY_STAGE_MAX_WIDTH:800,GROUPS_CELL_MARGIN:8,GROUPS_CELL_PADDING:12,GROUPS_CELL_NAV_HEIGHT:56,GROUPS_CELL_AVATAR_WRAPPER_BOTTOM_MARGIN:8,GROUPS_CELL_AVATAR_GRID_GAP:8,GROUPS_CELL_MIN_WIDTH:360,GROUPS_CELL_MAX_WIDTH:600,GROUPS_ROW_HEIGHT:72,GROUPS_ROW_GAP:1,FOLDABLE_SCREEN_STAGE_PADDING:8};function g_({top:e=0,left:t=0}={}){return{top:e,left:t}}function v_({width:e=0,height:t=0}={}){return{width:Math.max(e,0),height:Math.max(t,0)}}function y_({top:e=0,left:t=0,width:r=0,height:n=0}={}){return{bounds:v_({width:r,height:n}),origin:g_({top:e,left:t})}}function __({top:e=0,left:t=0,bottom:r=0,right:n=0}={}){return{top:e,left:t,bottom:r,right:n}}function b_(e,t){const{width:r,height:n}=t,i=n,s=i*e,a=Math.min(r/s,n/i);return{width:s*a,height:i*a}}const w_=({vertical:e,width:t,height:r,count:n,aspectRatio:i})=>{const s=[1,2,3].map((s=>(({width:e,height:t,rows:r,cols:n,aspectRatio:i})=>{const s=b_(i,{width:e/n,height:t/r});return Math.round(s.width*s.height)})({width:t,height:r,rows:e?Math.ceil(n/s):s,cols:e?s:Math.ceil(n/s),aspectRatio:i}))),a=Math.max(...s);return{splits:s.indexOf(a)+1,weight:a}},S_=({width:e,height:t,count:r,aspectRatio:n})=>{const i=w_({vertical:!0,width:e,height:t,count:r,aspectRatio:n}),s=w_({vertical:!1,width:e,height:t,count:r,aspectRatio:n});return i.weight>s.weight?{splits:i.splits,vertical:!0}:{splits:s.splits,vertical:!1}};const C_=16/9,R_=4/3,T_=({value:e,min:t,max:r})=>Math.min(Math.max(e,t),r);function P_({choices:e=[]}){const t=Math.min(...e),r=Math.max(...e);let n=null;if(t===r)n=t;else{const t=function(...e){return new Set(e).size!==e.length}(e)?(i=e).sort(((e,t)=>i.filter((t=>t===e)).length-i.filter((e=>e===t)).length)).pop():r;n=T_({value:t||r,min:R_,max:C_})}var i;return{minAr:t,maxAr:r,chosenAr:n}}function k_({width:e,height:t,cellCount:r,gridGap:n,cellAspectRatios:i=[R_],paddings:s=__()}){if(!r)return{cellCount:r,cellHeight:0,cellWidth:0,cols:0,rows:0,extraHorizontalPadding:0,extraVerticalPadding:0,gridGap:n,paddings:s};const a=e-(s.left+s.right),o=t-(s.top+s.bottom),c=P_({choices:i});let d=c.chosenAr;const{rows:l,cols:p}=function({count:e,width:t,height:r,aspectRatio:n}){if(e<=1)return{rows:1,cols:1};const{splits:i,vertical:s}=S_({width:t,height:r,count:e,aspectRatio:n});return s?{rows:Math.ceil(e/i),cols:i}:{rows:i,cols:Math.ceil(e/i)}}({count:r,width:a,height:o,aspectRatio:d});1===l?d=T_({value:a/p/o,min:Math.min(c.chosenAr,c.maxAr),max:Math.max(c.chosenAr,c.maxAr)}):1===p&&(d=T_({value:a/(o/l),min:Math.min(c.chosenAr,c.maxAr),max:Math.max(c.chosenAr,c.maxAr)}));const{cellWidth:u,cellHeight:h,extraHorizontalPadding:m,extraVerticalPadding:f}=function({width:e,height:t,rows:r,cols:n,gridGap:i,aspectRatio:s}){const a=(e-(n-1)*i)/n,o=(t-(r-1)*i)/r,c=a/o;let d=0,l=0;return s<c?d=a-o*s:s>c&&(l=o-a/s),{cellWidth:a-d,cellHeight:o-l,extraHorizontalPadding:d*n/2,extraVerticalPadding:l*r/2}}({width:a,height:o,rows:l,cols:p,gridGap:n,aspectRatio:d});return{cellCount:r,cellHeight:h,cellWidth:u,cols:p,rows:l,extraHorizontalPadding:m,extraVerticalPadding:f,gridGap:n,paddings:s}}const{BOTTOM_TOOLBAR_HEIGHT:E_,VIDEO_CONTROLS_MIN_WIDTH:D_,TABLET_BREAKPOINT:O_}=f_,I_=200,x_=300,M_=200,j_=12;function L_({cellCount:e}){const t=e<=6;return v_({width:t?x_-50:x_,height:t?I_-50:I_})}function A_({containerBounds:e,containerOrigin:t,hasConstrainedOverflow:r,hasPresentationContent:n,hasVideoContent:i,isPortrait:s}){return n||i?{isPortrait:s,videosContainer:y_(Object.assign(Object.assign({},e),t)),hasOverflow:r}:{isPortrait:s,videosContainer:y_(),hasOverflow:!1}}function N_({containerBounds:e,containerOrigin:t,gridGap:r,supersizedContentAspectRatio:n,hasPresentationContent:i,hasPresentationGrid:s,hasVideoContent:a,minGridBounds:o}){const{width:c,height:d}=e;let l=c<=d,p=v_(),u=g_(),h=a?Object.assign({},e):v_(),m=a?Object.assign({},t):g_();if(i){const i=function({bounds:e,aspectRatio:t,minGridContainerBounds:r,hasPresentationGrid:n}){const{width:i,height:s}=e;if(!(r.width>0))return{isPortrait:i<=s,supersizedContentBounds:e};const a=Math.round(i/2),o=Math.round(s/2),c=Math.max(i-r.width,0),d=Math.max(s-r.height,0);let l=c<=d,p=0,u=0;if(t){const e=b_(t,{width:c,height:s}),r=b_(t,{width:i,height:d});if(l=t<=1?r.height>e.height:r.width>e.width,l){const e=d-Math.max(r.height,o);u=Math.max(e,0)}else{const t=c-Math.max(e.width,a);p=Math.max(t,0)}}else n&&(l=c/d>=5);return{isPortrait:l,supersizedContentBounds:{width:l?i:c-p,height:l?d-u:s}}}({bounds:e,aspectRatio:n,minGridContainerBounds:v_({width:a?o.width+r:0,height:a?o.height+r:0}),hasPresentationGrid:s});l=i.isPortrait,p=i.supersizedContentBounds,u=Object.assign({},t),a&&(h=v_({width:l?e.width:e.width-p.width-r,height:l?e.height-p.height-r:e.height}),m=g_({top:l?t.top+p.height+r:t.top,left:l?t.left:t.left+p.width+r}))}return{isPortrait:l,presentationGrid:Object.assign({},y_(Object.assign(Object.assign({},p),u))),videoGrid:y_(Object.assign(Object.assign({},h),m))}}function F_({containerBounds:e,paddings:t=__(),videos:r,isConstrained:n,maxGridWidth:i,gridGap:s}){const{width:a,height:o}=e,c=i?Math.min(a,i):a,d=r.length;let l=null;const p=r.map((e=>e.aspectRatio)),u=L_({cellCount:d}),h=k_({width:c,height:o,cellCount:d,gridGap:s,cellAspectRatios:p,paddings:t});return l=r.map(((e,t)=>{const r=function({index:e,layout:t}){const{cellWidth:r,cellHeight:n,rows:i,cols:s,cellCount:a,gridGap:o}=t,c=Math.floor(e/s),d=Math.floor(e%s),l=function({rows:e,cols:t,cellWidth:r,index:n,cellCount:i,gridGap:s}){const a=e*t,o=a-i;if(!o)return 0;const c=a-o-1;return n>=c-(t-o)+1&&n<=c?o*r/2+s:0}({rows:i,cols:s,cellWidth:r,index:e,cellCount:a,gridGap:o});return{top:c*n+c*o,left:d*r+d*o+l,width:r,height:n}}({index:t,layout:h}),i=h.cellWidth<u.width,s=n||i?h.cellWidth/h.cellHeight:e.aspectRatio;return{clientId:e.clientId,isDraggable:e.isDraggable,origin:g_({top:r.top,left:r.left}),bounds:v_({width:r.width,height:r.height}),aspectRatio:s,isSmallCell:i}})),{videoCells:l,extraHorizontalPadding:a!==c?h.extraHorizontalPadding+(a-c)/2:h.extraHorizontalPadding,extraVerticalPadding:h.extraVerticalPadding,paddings:h.paddings,gridGap:s}}function B_({floatingVideo:e=null,frame:t,gridGap:r=0,isConstrained:n=!1,isMaximizeMode:i=!1,paddings:s=__(),presentationVideos:a=[],rebalanceLayout:o=!1,roomBounds:c,roomLayoutHasOverlow:d=!1,videoControlsHeight:l=0,videos:p=[],videoGridGap:u=0}){const h=!!a.length,m=a.length>1,f=h&&!m?a[0].aspectRatio:1,g=!!p.length,v=t.bounds.width-s.left-s.right;let y=t.bounds.height-s.top-s.bottom;const _=Math.max(2200,.8*v),b=n&&p.length>j_||!1,w=y/4,S=Math.ceil((p.length-j_)/3);y=b?y+w*S:y;const C=v_({width:v,height:y}),R=g_({top:s.top,left:s.left}),T=L_({cellCount:p.length}),P=c.width<O_||c.height<O_,k=i||!(h||g)||C.width<=C.height,E={cellPaddings:{top:4,left:4,bottom:4,right:4},containerBounds:C,containerOrigin:R,gridGap:r,hasPresentationContent:h,hasVideoContent:g,isConstrained:n,isMaximizeMode:i,isSmallScreen:P,maxGridWidth:_};let D=A_(Object.assign(Object.assign({},E),{isPortrait:k,hasConstrainedOverflow:b})),O=!1;if(d&&!D.hasOverflow){A_(Object.assign(Object.assign({},E),{containerBounds:v_({width:C.width,height:C.height-E_}),isPortrait:k,hasConstrainedOverflow:b})).hasOverflow&&(O=!0)}(O||D.hasOverflow)&&(D=A_(Object.assign(Object.assign({},E),{isPortrait:!0,hasConstrainedOverflow:b})));const I=N_({containerBounds:D.videosContainer.bounds,containerOrigin:D.videosContainer.origin,gridGap:r,supersizedContentAspectRatio:f,hasPresentationContent:h,hasPresentationGrid:m,hasVideoContent:g,minGridBounds:T}),{gridLayout:x,presentationGridLayout:M}=function({gridGap:e,isConstrained:t,presentationVideos:r,videos:n,videosContainerLayout:i,gridLayoutPaddings:s=__(),presentationGridLayoutPaddings:a=__(),maxGridWidth:o}){return{gridLayout:F_({containerBounds:i.videoGrid.bounds,gridGap:e,isConstrained:t,maxGridWidth:o,paddings:s,videos:n}),presentationGridLayout:F_({containerBounds:i.presentationGrid.bounds,gridGap:e,isConstrained:t,maxGridWidth:o,paddings:a,videos:r})}}({gridGap:u,isConstrained:n,presentationVideos:a,videos:p,videosContainerLayout:I,maxGridWidth:_}),j=function({roomBounds:e,containerFrame:t,floatingVideo:r,videoControlsHeight:n,margin:i=8}){if(!r)return null;const s=b_(r.aspectRatio,{width:M_,height:M_}),a=!(e.height-t.bounds.height-t.origin.top),o=t.bounds.width-2*(s.width+i)<D_;let c=0;a&&o?c=-1*n:a||o||(c=n);const d=g_({top:t.origin.top+(t.bounds.height-s.height-i)+c,left:t.origin.left+(t.bounds.width-s.width-i)});return{clientId:r.clientId,isDraggable:r.isDraggable,origin:d,bounds:s,aspectRatio:r.aspectRatio,isSmallCell:!0}}({roomBounds:c,containerFrame:t,floatingVideo:e,videoControlsHeight:l});return o&&function({videosContainerLayout:e,gridLayout:t,presentationGridLayout:r,gridGap:n}){const i=e.presentationGrid.bounds.width>0,s=e.videoGrid.bounds.width>0;if(i&&s){const i=function({a:e,b:t,gridGap:r,isPortrait:n}){const i=n?e.vertical:e.horizontal,s=n?t.vertical:t.horizontal;if(i===s)return{a:0,b:0};const a=i<s?e:t,o=n?a.vertical:a.horizontal,c=(r+(i+s)+o)/2-o;return{a:a===e?c:0,b:a===t?c:0}}({a:{horizontal:r.extraHorizontalPadding,vertical:r.extraVerticalPadding},b:{horizontal:t.extraHorizontalPadding,vertical:t.extraVerticalPadding},gridGap:n,isPortrait:e.isPortrait});e.isPortrait?(e.presentationGrid.origin.top+=i.a,e.videoGrid.origin.top-=i.b,i.b):(e.presentationGrid.origin.left+=i.a,e.videoGrid.origin.left-=i.b,i.b)}}({videosContainerLayout:I,gridLayout:x,presentationGridLayout:M,gridGap:r}),{isPortrait:D.isPortrait,hasOverflow:D.hasOverflow,bounds:v_({height:t.bounds.height,width:t.bounds.width}),gridGap:r,presentationGrid:Object.assign(Object.assign({},I.presentationGrid),{cells:M.videoCells,paddings:__({top:M.paddings.top+M.extraVerticalPadding,bottom:M.paddings.bottom+M.extraVerticalPadding,left:M.paddings.left+M.extraHorizontalPadding,right:M.paddings.right+M.extraHorizontalPadding})}),videoGrid:Object.assign(Object.assign({},I.videoGrid),{cells:x.videoCells,paddings:__({top:x.paddings.top+x.extraVerticalPadding,bottom:x.paddings.bottom+x.extraVerticalPadding,left:x.paddings.left+x.extraHorizontalPadding,right:x.paddings.right+x.extraHorizontalPadding})}),floatingContent:Object.assign(Object.assign({},j),e)}}function U_({cell:e,participant:t,render:r,onSetAspectRatio:i,onResize:s}){const a=n.useCallback((({ar:t})=>{t!==e.aspectRatio&&i({aspectRatio:t})}),[e.aspectRatio,i]);return n.createElement("div",{style:{position:"absolute",width:e.bounds.width,height:e.bounds.height,boxSizing:"border-box",top:e.origin.top,left:e.origin.left}},r?r():t.stream?n.createElement(o,{stream:t.stream,onSetAspectRatio:({aspectRatio:e})=>a({ar:e}),onResize:s}):null)}return e.VideoGrid=function({roomConnection:e,renderParticipant:t,videoGridGap:r=0}){const{remoteParticipants:i,localParticipant:s}=e.state,o=n.useRef(null),[c,d]=n.useState(null),[l,p]=n.useState([]);n.useEffect((()=>{if(!o.current)return;const e=new ResizeObserver(a((()=>{var e,t;d(y_({width:null===(e=o.current)||void 0===e?void 0:e.clientWidth,height:null===(t=o.current)||void 0===t?void 0:t.clientHeight}))}),{delay:60}));return e.observe(o.current),()=>{e.disconnect()}}),[]);const u=n.useMemo((()=>[...s?[s]:[],...i]),[i,s]),h=n.useMemo((()=>u.map((e=>{var t;const r=null===(t=l.find((t=>t.clientId===(null==e?void 0:e.id))))||void 0===t?void 0:t.aspectRatio;return function({aspectRatio:e,avatarSize:t,cellPaddings:r,client:n,isDraggable:i=!0,isPlaceholder:s=!1,isSubgrid:a=!1}){return{aspectRatio:e||16/9,avatarSize:t,cellPaddings:r,client:n,clientId:(null==n?void 0:n.id)||"",isDraggable:i,isPlaceholder:s,isSubgrid:a,type:"video"}}({aspectRatio:null!=r?r:16/9,avatarSize:0,cellPaddings:10,client:e})}))),[u,l]),m=n.useMemo((()=>c?B_({frame:c,gridGap:0,isConstrained:!1,roomBounds:c.bounds,videos:h,videoGridGap:r}):null),[c,h,r]),f=n.useCallback((({width:t,height:r,stream:n})=>{e._ref&&e._ref.dispatch(_g({streamId:n.id,width:t,height:r}))}),[s,e._ref]);return n.createElement("div",{ref:o,style:{width:"100%",height:"100%",position:"relative"}},u.map(((e,r)=>{const i=null==m?void 0:m.videoGrid.cells[r];return i&&e&&e.stream&&i.clientId?n.createElement(U_,{key:i.clientId,cell:i,participant:e,render:t?()=>t({cell:i,participant:e}):void 0,onResize:f,onSetAspectRatio:({aspectRatio:e})=>{p((t=>{const r=t.findIndex((e=>e.clientId===i.clientId));return-1===r?[...t,{clientId:i.clientId,aspectRatio:e}]:[...t.slice(0,r),{clientId:i.clientId,aspectRatio:e},...t.slice(r+1)]}))}}):null})))},e.VideoView=o,e.sdkVersion=l_,e.useLocalMedia=function(e={audio:!0,video:!0}){const[r]=t.useState((()=>{const e=c_();return Bg({injectServices:e})})),[n,i]=t.useState(m_);return t.useEffect((()=>{const t=Ug(r,h_,i);return r.dispatch(Ua(e)),()=>{t(),r.dispatch(za())}}),[]),{state:n,actions:{setCameraDevice:t.useCallback((e=>r.dispatch(ka({deviceId:e}))),[r]),setMicrophoneDevice:t.useCallback((e=>r.dispatch(Ea({deviceId:e}))),[r]),toggleCameraEnabled:t.useCallback((e=>r.dispatch(Da({enabled:e}))),[r]),toggleMicrophoneEnabled:t.useCallback((e=>r.dispatch(Oa({enabled:e}))),[r])},store:r}},e.useRoomConnection=function(e,t=u_){const[r]=n.useState((()=>{if(t.localMedia)return t.localMedia.store;const e=c_();return Bg({injectServices:e})})),[i,s]=n.useState(),[a,c]=n.useState(p_);return n.useEffect((()=>{const n=Ug(r,d_,c),i=new URL(e),s=new URLSearchParams(i.search).get("roomKey");return r.dispatch(zt({displayName:t.displayName||"Guest",localMediaOptions:t.localMedia?void 0:t.localMediaOptions,roomKey:s,roomUrl:e,sdkVersion:l_,externalId:t.externalId||null})),()=>{n(),r.dispatch(Vt())}}),[]),n.useEffect((()=>{r&&!i&&s((()=>e=>n.createElement(o,Object.assign({},e,{onResize:({stream:e,width:t,height:n})=>{r.dispatch(_g({streamId:e.id,width:t,height:n}))}}))))}),[r,i]),{state:a,actions:{sendChatMessage:n.useCallback((e=>r.dispatch(aa({text:e}))),[r]),knock:n.useCallback((()=>r.dispatch(No())),[r]),setDisplayName:n.useCallback((e=>r.dispatch(co({displayName:e}))),[r]),toggleCamera:n.useCallback((e=>r.dispatch(Da({enabled:e}))),[r]),toggleMicrophone:n.useCallback((e=>r.dispatch(Oa({enabled:e}))),[r]),acceptWaitingParticipant:n.useCallback((e=>r.dispatch(Lg({participantId:e}))),[r]),rejectWaitingParticipant:n.useCallback((e=>r.dispatch(Ag({participantId:e}))),[r]),startCloudRecording:n.useCallback((()=>r.dispatch(da())),[r]),startScreenshare:n.useCallback((()=>r.dispatch(fo())),[r]),stopCloudRecording:n.useCallback((()=>r.dispatch(la())),[r]),stopScreenshare:n.useCallback((()=>r.dispatch(go())),[r])},components:{VideoView:i||o},_ref:r}},e}({},React);
|