@signalwire/web-components 4.0.0-rc.1 → 4.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/embed/signalwire-web-components-embed.iife.js +175 -174
- package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -1
- package/dist/embed/signalwire-web-components-embed.umd.cjs +175 -174
- package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/node_modules/dompurify/dist/purify.es.js +692 -423
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
var SignalWireUI=(function(l){"use strict";var
|
|
1
|
+
var SignalWireUI=(function(l){"use strict";var zy=Object.defineProperty;var pu=l=>{throw TypeError(l)};var Vy=(l,Ce,Ve)=>Ce in l?zy(l,Ce,{enumerable:!0,configurable:!0,writable:!0,value:Ve}):l[Ce]=Ve;var pe=(l,Ce,Ve)=>Vy(l,typeof Ce!="symbol"?Ce+"":Ce,Ve),Hy=(l,Ce,Ve)=>Ce.has(l)||pu("Cannot "+Ve);var gu=(l,Ce,Ve)=>Ce.has(l)?pu("Cannot add the same private member more than once"):Ce instanceof WeakSet?Ce.add(l):Ce.set(l,Ve);var Bn=(l,Ce,Ve)=>(Hy(l,Ce,"access private method"),Ve);var Wl,qe,Ai,mt,Ti,oa,vu;function Ce(t,e){for(var i=0;i<e.length;i++){const r=e[i];if(typeof r!="string"&&!Array.isArray(r)){for(const n in r)if(n!=="default"&&!(n in t)){const s=Object.getOwnPropertyDescriptor(r,n);s&&Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:()=>r[n]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}/**
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
-
*/const
|
|
5
|
+
*/const Ve=globalThis,zn=Ve.ShadowRoot&&(Ve.ShadyCSS===void 0||Ve.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Vn=Symbol(),ca=new WeakMap;let la=class{constructor(e,i,r){if(this._$cssResult$=!0,r!==Vn)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=i}get styleSheet(){let e=this.o;const i=this.t;if(zn&&e===void 0){const r=i!==void 0&&i.length===1;r&&(e=ca.get(i)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),r&&ca.set(i,e))}return e}toString(){return this.cssText}};const bu=t=>new la(typeof t=="string"?t:t+"",void 0,Vn),ae=(t,...e)=>{const i=t.length===1?t[0]:e.reduce(((r,n,s)=>r+(a=>{if(a._$cssResult$===!0)return a.cssText;if(typeof a=="number")return a;throw Error("Value passed to 'css' function must be a 'css' function result: "+a+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[s+1]),t[0]);return new la(i,t,Vn)},mu=(t,e)=>{if(zn)t.adoptedStyleSheets=e.map((i=>i instanceof CSSStyleSheet?i:i.styleSheet));else for(const i of e){const r=document.createElement("style"),n=Ve.litNonce;n!==void 0&&r.setAttribute("nonce",n),r.textContent=i.cssText,t.appendChild(r)}},ua=zn?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let i="";for(const r of e.cssRules)i+=r.cssText;return bu(i)})(t):t;/**
|
|
6
6
|
* @license
|
|
7
7
|
* Copyright 2017 Google LLC
|
|
8
8
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
9
|
-
*/const{is:
|
|
9
|
+
*/const{is:yu,defineProperty:wu,getOwnPropertyDescriptor:Su,getOwnPropertyNames:Cu,getOwnPropertySymbols:Au,getPrototypeOf:Tu}=Object,Bt=globalThis,da=Bt.trustedTypes,Eu=da?da.emptyScript:"",Hn=Bt.reactiveElementPolyfillSupport,lr=(t,e)=>t,jr={toAttribute(t,e){switch(e){case Boolean:t=t?Eu:null;break;case Object:case Array:t=t==null?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=t!==null;break;case Number:i=t===null?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch{i=null}}return i}},jn=(t,e)=>!yu(t,e),ha={attribute:!0,type:String,converter:jr,reflect:!1,useDefault:!1,hasChanged:jn};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),Bt.litPropertyMetadata??(Bt.litPropertyMetadata=new WeakMap);let Ii=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??(this.l=[])).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,i=ha){if(i.state&&(i.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((i=Object.create(i)).wrapped=!0),this.elementProperties.set(e,i),!i.noAccessor){const r=Symbol(),n=this.getPropertyDescriptor(e,r,i);n!==void 0&&wu(this.prototype,e,n)}}static getPropertyDescriptor(e,i,r){const{get:n,set:s}=Su(this.prototype,e)??{get(){return this[i]},set(a){this[i]=a}};return{get:n,set(a){const o=n==null?void 0:n.call(this);s==null||s.call(this,a),this.requestUpdate(e,o,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??ha}static _$Ei(){if(this.hasOwnProperty(lr("elementProperties")))return;const e=Tu(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(lr("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(lr("properties"))){const i=this.properties,r=[...Cu(i),...Au(i)];for(const n of r)this.createProperty(n,i[n])}const e=this[Symbol.metadata];if(e!==null){const i=litPropertyMetadata.get(e);if(i!==void 0)for(const[r,n]of i)this.elementProperties.set(r,n)}this._$Eh=new Map;for(const[i,r]of this.elementProperties){const n=this._$Eu(i,r);n!==void 0&&this._$Eh.set(n,i)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const i=[];if(Array.isArray(e)){const r=new Set(e.flat(1/0).reverse());for(const n of r)i.unshift(ua(n))}else e!==void 0&&i.push(ua(e));return i}static _$Eu(e,i){const r=i.attribute;return r===!1?void 0:typeof r=="string"?r:typeof e=="string"?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){var e;this._$ES=new Promise((i=>this.enableUpdating=i)),this._$AL=new Map,this._$E_(),this.requestUpdate(),(e=this.constructor.l)==null||e.forEach((i=>i(this)))}addController(e){var i;(this._$EO??(this._$EO=new Set)).add(e),this.renderRoot!==void 0&&this.isConnected&&((i=e.hostConnected)==null||i.call(e))}removeController(e){var i;(i=this._$EO)==null||i.delete(e)}_$E_(){const e=new Map,i=this.constructor.elementProperties;for(const r of i.keys())this.hasOwnProperty(r)&&(e.set(r,this[r]),delete this[r]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return mu(e,this.constructor.elementStyles),e}connectedCallback(){var e;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$EO)==null||e.forEach((i=>{var r;return(r=i.hostConnected)==null?void 0:r.call(i)}))}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$EO)==null||e.forEach((i=>{var r;return(r=i.hostDisconnected)==null?void 0:r.call(i)}))}attributeChangedCallback(e,i,r){this._$AK(e,r)}_$ET(e,i){var s;const r=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,r);if(n!==void 0&&r.reflect===!0){const a=(((s=r.converter)==null?void 0:s.toAttribute)!==void 0?r.converter:jr).toAttribute(i,r.type);this._$Em=e,a==null?this.removeAttribute(n):this.setAttribute(n,a),this._$Em=null}}_$AK(e,i){var s,a;const r=this.constructor,n=r._$Eh.get(e);if(n!==void 0&&this._$Em!==n){const o=r.getPropertyOptions(n),c=typeof o.converter=="function"?{fromAttribute:o.converter}:((s=o.converter)==null?void 0:s.fromAttribute)!==void 0?o.converter:jr;this._$Em=n;const u=c.fromAttribute(i,o.type);this[n]=u??((a=this._$Ej)==null?void 0:a.get(n))??u,this._$Em=null}}requestUpdate(e,i,r){var n;if(e!==void 0){const s=this.constructor,a=this[e];if(r??(r=s.getPropertyOptions(e)),!((r.hasChanged??jn)(a,i)||r.useDefault&&r.reflect&&a===((n=this._$Ej)==null?void 0:n.get(e))&&!this.hasAttribute(s._$Eu(e,r))))return;this.C(e,i,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,i,{useDefault:r,reflect:n,wrapped:s},a){r&&!(this._$Ej??(this._$Ej=new Map)).has(e)&&(this._$Ej.set(e,a??i??this[e]),s!==!0||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||r||(i=void 0),this._$AL.set(e,i)),n===!0&&this._$Em!==e&&(this._$Eq??(this._$Eq=new Set)).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(i){Promise.reject(i)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var r;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[s,a]of this._$Ep)this[s]=a;this._$Ep=void 0}const n=this.constructor.elementProperties;if(n.size>0)for(const[s,a]of n){const{wrapped:o}=a,c=this[s];o!==!0||this._$AL.has(s)||c===void 0||this.C(s,void 0,a,c)}}let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),(r=this._$EO)==null||r.forEach((n=>{var s;return(s=n.hostUpdate)==null?void 0:s.call(n)})),this.update(i)):this._$EM()}catch(n){throw e=!1,this._$EM(),n}e&&this._$AE(i)}willUpdate(e){}_$AE(e){var i;(i=this._$EO)==null||i.forEach((r=>{var n;return(n=r.hostUpdated)==null?void 0:n.call(r)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&(this._$Eq=this._$Eq.forEach((i=>this._$ET(i,this[i])))),this._$EM()}updated(e){}firstUpdated(e){}};Ii.elementStyles=[],Ii.shadowRootOptions={mode:"open"},Ii[lr("elementProperties")]=new Map,Ii[lr("finalized")]=new Map,Hn==null||Hn({ReactiveElement:Ii}),(Bt.reactiveElementVersions??(Bt.reactiveElementVersions=[])).push("2.1.1");/**
|
|
10
10
|
* @license
|
|
11
11
|
* Copyright 2017 Google LLC
|
|
12
12
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
13
|
-
*/const
|
|
14
|
-
\f\r]`,
|
|
15
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),
|
|
13
|
+
*/const ur=globalThis,Wr=ur.trustedTypes,pa=Wr?Wr.createPolicy("lit-html",{createHTML:t=>t}):void 0,ga="$lit$",zt=`lit$${Math.random().toFixed(9).slice(2)}$`,fa="?"+zt,ku=`<${fa}>`,ii=document,dr=()=>ii.createComment(""),hr=t=>t===null||typeof t!="object"&&typeof t!="function",Wn=Array.isArray,xu=t=>Wn(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Gn=`[
|
|
14
|
+
\f\r]`,pr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,va=/-->/g,ba=/>/g,ri=RegExp(`>|${Gn}(?:([^\\s"'>=/]+)(${Gn}*=${Gn}*(?:[^
|
|
15
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),ma=/'/g,ya=/"/g,wa=/^(?:script|style|textarea|title)$/i,Du=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),I=Du(1),Vt=Symbol.for("lit-noChange"),W=Symbol.for("lit-nothing"),Sa=new WeakMap,ni=ii.createTreeWalker(ii,129);function Ca(t,e){if(!Wn(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return pa!==void 0?pa.createHTML(e):e}const Iu=(t,e)=>{const i=t.length-1,r=[];let n,s=e===2?"<svg>":e===3?"<math>":"",a=pr;for(let o=0;o<i;o++){const c=t[o];let u,h,p=-1,v=0;for(;v<c.length&&(a.lastIndex=v,h=a.exec(c),h!==null);)v=a.lastIndex,a===pr?h[1]==="!--"?a=va:h[1]!==void 0?a=ba:h[2]!==void 0?(wa.test(h[2])&&(n=RegExp("</"+h[2],"g")),a=ri):h[3]!==void 0&&(a=ri):a===ri?h[0]===">"?(a=n??pr,p=-1):h[1]===void 0?p=-2:(p=a.lastIndex-h[2].length,u=h[1],a=h[3]===void 0?ri:h[3]==='"'?ya:ma):a===ya||a===ma?a=ri:a===va||a===ba?a=pr:(a=ri,n=void 0);const C=a===ri&&t[o+1].startsWith("/>")?" ":"";s+=a===pr?c+ku:p>=0?(r.push(u),c.slice(0,p)+ga+c.slice(p)+zt+C):c+zt+(p===-2?o:C)}return[Ca(t,s+(t[i]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),r]};class gr{constructor({strings:e,_$litType$:i},r){let n;this.parts=[];let s=0,a=0;const o=e.length-1,c=this.parts,[u,h]=Iu(e,i);if(this.el=gr.createElement(u,r),ni.currentNode=this.el.content,i===2||i===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(n=ni.nextNode())!==null&&c.length<o;){if(n.nodeType===1){if(n.hasAttributes())for(const p of n.getAttributeNames())if(p.endsWith(ga)){const v=h[a++],C=n.getAttribute(p).split(zt),O=/([.?@])?(.*)/.exec(v);c.push({type:1,index:s,name:O[2],strings:C,ctor:O[1]==="."?Ru:O[1]==="?"?Pu:O[1]==="@"?Ou:Gr}),n.removeAttribute(p)}else p.startsWith(zt)&&(c.push({type:6,index:s}),n.removeAttribute(p));if(wa.test(n.tagName)){const p=n.textContent.split(zt),v=p.length-1;if(v>0){n.textContent=Wr?Wr.emptyScript:"";for(let C=0;C<v;C++)n.append(p[C],dr()),ni.nextNode(),c.push({type:2,index:++s});n.append(p[v],dr())}}}else if(n.nodeType===8)if(n.data===fa)c.push({type:2,index:s});else{let p=-1;for(;(p=n.data.indexOf(zt,p+1))!==-1;)c.push({type:7,index:s}),p+=zt.length-1}s++}}static createElement(e,i){const r=ii.createElement("template");return r.innerHTML=e,r}}function Mi(t,e,i=t,r){var a,o;if(e===Vt)return e;let n=r!==void 0?(a=i._$Co)==null?void 0:a[r]:i._$Cl;const s=hr(e)?void 0:e._$litDirective$;return(n==null?void 0:n.constructor)!==s&&((o=n==null?void 0:n._$AO)==null||o.call(n,!1),s===void 0?n=void 0:(n=new s(t),n._$AT(t,i,r)),r!==void 0?(i._$Co??(i._$Co=[]))[r]=n:i._$Cl=n),n!==void 0&&(e=Mi(t,n._$AS(t,e.values),n,r)),e}class Mu{constructor(e,i){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){const{el:{content:i},parts:r}=this._$AD,n=((e==null?void 0:e.creationScope)??ii).importNode(i,!0);ni.currentNode=n;let s=ni.nextNode(),a=0,o=0,c=r[0];for(;c!==void 0;){if(a===c.index){let u;c.type===2?u=new fr(s,s.nextSibling,this,e):c.type===1?u=new c.ctor(s,c.name,c.strings,this,e):c.type===6&&(u=new _u(s,this,e)),this._$AV.push(u),c=r[++o]}a!==(c==null?void 0:c.index)&&(s=ni.nextNode(),a++)}return ni.currentNode=ii,n}p(e){let i=0;for(const r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,i),i+=r.strings.length-2):r._$AI(e[i])),i++}}class fr{get _$AU(){var e;return((e=this._$AM)==null?void 0:e._$AU)??this._$Cv}constructor(e,i,r,n){this.type=2,this._$AH=W,this._$AN=void 0,this._$AA=e,this._$AB=i,this._$AM=r,this.options=n,this._$Cv=(n==null?void 0:n.isConnected)??!0}get parentNode(){let e=this._$AA.parentNode;const i=this._$AM;return i!==void 0&&(e==null?void 0:e.nodeType)===11&&(e=i.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,i=this){e=Mi(this,e,i),hr(e)?e===W||e==null||e===""?(this._$AH!==W&&this._$AR(),this._$AH=W):e!==this._$AH&&e!==Vt&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):xu(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==W&&hr(this._$AH)?this._$AA.nextSibling.data=e:this.T(ii.createTextNode(e)),this._$AH=e}$(e){var s;const{values:i,_$litType$:r}=e,n=typeof r=="number"?this._$AC(e):(r.el===void 0&&(r.el=gr.createElement(Ca(r.h,r.h[0]),this.options)),r);if(((s=this._$AH)==null?void 0:s._$AD)===n)this._$AH.p(i);else{const a=new Mu(n,this),o=a.u(this.options);a.p(i),this.T(o),this._$AH=a}}_$AC(e){let i=Sa.get(e.strings);return i===void 0&&Sa.set(e.strings,i=new gr(e)),i}k(e){Wn(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let r,n=0;for(const s of e)n===i.length?i.push(r=new fr(this.O(dr()),this.O(dr()),this,this.options)):r=i[n],r._$AI(s),n++;n<i.length&&(this._$AR(r&&r._$AB.nextSibling,n),i.length=n)}_$AR(e=this._$AA.nextSibling,i){var r;for((r=this._$AP)==null?void 0:r.call(this,!1,!0,i);e!==this._$AB;){const n=e.nextSibling;e.remove(),e=n}}setConnected(e){var i;this._$AM===void 0&&(this._$Cv=e,(i=this._$AP)==null||i.call(this,e))}}class Gr{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,i,r,n,s){this.type=1,this._$AH=W,this._$AN=void 0,this.element=e,this.name=i,this._$AM=n,this.options=s,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=W}_$AI(e,i=this,r,n){const s=this.strings;let a=!1;if(s===void 0)e=Mi(this,e,i,0),a=!hr(e)||e!==this._$AH&&e!==Vt,a&&(this._$AH=e);else{const o=e;let c,u;for(e=s[0],c=0;c<s.length-1;c++)u=Mi(this,o[r+c],i,c),u===Vt&&(u=this._$AH[c]),a||(a=!hr(u)||u!==this._$AH[c]),u===W?e=W:e!==W&&(e+=(u??"")+s[c+1]),this._$AH[c]=u}a&&!n&&this.j(e)}j(e){e===W?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}}class Ru extends Gr{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===W?void 0:e}}class Pu extends Gr{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==W)}}class Ou extends Gr{constructor(e,i,r,n,s){super(e,i,r,n,s),this.type=5}_$AI(e,i=this){if((e=Mi(this,e,i,0)??W)===Vt)return;const r=this._$AH,n=e===W&&r!==W||e.capture!==r.capture||e.once!==r.once||e.passive!==r.passive,s=e!==W&&(r===W||n);n&&this.element.removeEventListener(this.name,this,r),s&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var i;typeof this._$AH=="function"?this._$AH.call(((i=this.options)==null?void 0:i.host)??this.element,e):this._$AH.handleEvent(e)}}class _u{constructor(e,i,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=i,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){Mi(this,e)}}const qn=ur.litHtmlPolyfillSupport;qn==null||qn(gr,fr),(ur.litHtmlVersions??(ur.litHtmlVersions=[])).push("3.3.1");const Lu=(t,e,i)=>{const r=(i==null?void 0:i.renderBefore)??e;let n=r._$litPart$;if(n===void 0){const s=(i==null?void 0:i.renderBefore)??null;r._$litPart$=n=new fr(e.insertBefore(dr(),s),s,void 0,i??{})}return n._$AI(t),n};/**
|
|
16
16
|
* @license
|
|
17
17
|
* Copyright 2017 Google LLC
|
|
18
18
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
19
|
-
*/const
|
|
19
|
+
*/const si=globalThis;let ee=class extends Ii{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var i;const e=super.createRenderRoot();return(i=this.renderOptions).renderBefore??(i.renderBefore=e.firstChild),e}update(e){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Lu(i,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),(e=this._$Do)==null||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._$Do)==null||e.setConnected(!1)}render(){return Vt}};ee._$litElement$=!0,ee.finalized=!0,(Wl=si.litElementHydrateSupport)==null||Wl.call(si,{LitElement:ee});const Xn=si.litElementPolyfillSupport;Xn==null||Xn({LitElement:ee}),(si.litElementVersions??(si.litElementVersions=[])).push("4.2.1");/**
|
|
20
20
|
* @license
|
|
21
21
|
* Copyright 2017 Google LLC
|
|
22
22
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
23
|
-
*/const
|
|
23
|
+
*/const le=t=>(e,i)=>{i!==void 0?i.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};/**
|
|
24
24
|
* @license
|
|
25
25
|
* Copyright 2017 Google LLC
|
|
26
26
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
27
|
-
*/const
|
|
27
|
+
*/const Fu={attribute:!0,type:String,converter:jr,reflect:!1,hasChanged:jn},Nu=(t=Fu,e,i)=>{const{kind:r,metadata:n}=i;let s=globalThis.litPropertyMetadata.get(n);if(s===void 0&&globalThis.litPropertyMetadata.set(n,s=new Map),r==="setter"&&((t=Object.create(t)).wrapped=!0),s.set(i.name,t),r==="accessor"){const{name:a}=i;return{set(o){const c=e.get.call(this);e.set.call(this,o),this.requestUpdate(a,c,t)},init(o){return o!==void 0&&this.C(a,void 0,t,o),o}}}if(r==="setter"){const{name:a}=i;return function(o){const c=this[a];e.call(this,o),this.requestUpdate(a,c,t)}}throw Error("Unsupported decorator location: "+r)};function E(t){return(e,i)=>typeof i=="object"?Nu(t,e,i):((r,n,s)=>{const a=n.hasOwnProperty(s);return n.constructor.createProperty(s,r),a?Object.getOwnPropertyDescriptor(n,s):void 0})(t,e,i)}/**
|
|
28
28
|
* @license
|
|
29
29
|
* Copyright 2017 Google LLC
|
|
30
30
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
31
|
-
*/function
|
|
31
|
+
*/function _(t){return E({...t,state:!0,attribute:!1})}/**
|
|
32
32
|
* @license
|
|
33
33
|
* Copyright 2017 Google LLC
|
|
34
34
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
35
|
-
*/const
|
|
35
|
+
*/const Uu=(t,e,i)=>(i.configurable=!0,i.enumerable=!0,Reflect.decorate&&typeof e!="object"&&Object.defineProperty(t,e,i),i);/**
|
|
36
36
|
* @license
|
|
37
37
|
* Copyright 2017 Google LLC
|
|
38
38
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
39
|
-
*/function
|
|
39
|
+
*/function qr(t,e){return(i,r,n)=>{const s=a=>{var o;return((o=a.renderRoot)==null?void 0:o.querySelector(t))??null};return Uu(i,r,{get(){return s(this)}})}}/**
|
|
40
40
|
* @license
|
|
41
41
|
* Copyright 2021 Google LLC
|
|
42
42
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
43
|
-
*/let
|
|
43
|
+
*/let Aa=class extends Event{constructor(e,i,r,n){super("context-request",{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=i,this.callback=r,this.subscribe=n??!1}};/**
|
|
44
44
|
* @license
|
|
45
45
|
* Copyright 2021 Google LLC
|
|
46
46
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
47
|
-
*/function
|
|
47
|
+
*/function jy(t){return t}/**
|
|
48
48
|
* @license
|
|
49
49
|
* Copyright 2021 Google LLC
|
|
50
50
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
51
|
-
*/let
|
|
51
|
+
*/let Ta=class{constructor(e,i,r,n){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(s,a)=>{this.unsubscribe&&(this.unsubscribe!==a&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=s,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(s,a)),this.unsubscribe=a},this.host=e,i.context!==void 0){const s=i;this.context=s.context,this.callback=s.callback,this.subscribe=s.subscribe??!1}else this.context=i,this.callback=r,this.subscribe=n??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new Aa(this.context,this.host,this.t,this.subscribe))}};/**
|
|
52
52
|
* @license
|
|
53
53
|
* Copyright 2021 Google LLC
|
|
54
54
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
55
|
-
*/class
|
|
55
|
+
*/class Bu{get value(){return this.o}set value(e){this.setValue(e)}setValue(e,i=!1){const r=i||!Object.is(e,this.o);this.o=e,r&&this.updateObservers()}constructor(e){this.subscriptions=new Map,this.updateObservers=()=>{for(const[i,{disposer:r}]of this.subscriptions)i(this.o,r)},e!==void 0&&(this.value=e)}addCallback(e,i,r){if(!r)return void e(this.value);this.subscriptions.has(e)||this.subscriptions.set(e,{disposer:()=>{this.subscriptions.delete(e)},consumerHost:i});const{disposer:n}=this.subscriptions.get(e);e(this.value,n)}clearCallbacks(){this.subscriptions.clear()}}/**
|
|
56
56
|
* @license
|
|
57
57
|
* Copyright 2021 Google LLC
|
|
58
58
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
59
|
-
*/let
|
|
59
|
+
*/let zu=class extends Event{constructor(e,i){super("context-provider",{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=i}},Yn=class extends Bu{constructor(e,i,r){var n,s;super(i.context!==void 0?i.initialValue:r),this.onContextRequest=a=>{if(a.context!==this.context)return;const o=a.contextTarget??a.composedPath()[0];o!==this.host&&(a.stopPropagation(),this.addCallback(a.callback,o,a.subscribe))},this.onProviderRequest=a=>{if(a.context!==this.context||(a.contextTarget??a.composedPath()[0])===this.host)return;const o=new Set;for(const[c,{consumerHost:u}]of this.subscriptions)o.has(c)||(o.add(c),u.dispatchEvent(new Aa(this.context,u,c,!0)));a.stopPropagation()},this.host=e,i.context!==void 0?this.context=i.context:this.context=i,this.attachListeners(),(s=(n=this.host).addController)==null||s.call(n,this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new zu(this.context,this.host))}};/**
|
|
60
60
|
* @license
|
|
61
61
|
* Copyright 2022 Google LLC
|
|
62
62
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
63
|
-
*/function
|
|
63
|
+
*/function nt({context:t,subscribe:e}){return(i,r)=>{typeof r=="object"?r.addInitializer((function(){new Ta(this,{context:t,callback:n=>{i.set.call(this,n)},subscribe:e})})):i.constructor.addInitializer((n=>{new Ta(n,{context:t,callback:s=>{n[r]=s},subscribe:e})}))}}const pt="sw-call-state";class Ea{constructor(e){this._subscription=null,this._seenCallIds=new Set,this._callback=null,e.addController(this)}hostConnected(){}hostDisconnected(){this.disconnect()}set onIncomingCall(e){this._callback=e}connect(e){this.disconnect(),this._subscription=e.subscribe(i=>{var r;for(const n of i)this._seenCallIds.has(n.id)||(this._seenCallIds.add(n.id),(r=this._callback)==null||r.call(this,{call:n,callerName:n.fromName,callerNumber:n.from}))})}disconnect(){var e;(e=this._subscription)==null||e.unsubscribe(),this._subscription=null,this._seenCallIds.clear()}}const vr="sw-devices";function Xr(t,e){t.srcObject=e}function ka(t){t.srcObject&&(t.srcObject=null)}var Kn=function(t,e){return Kn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,r){i.__proto__=r}||function(i,r){for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(i[n]=r[n])},Kn(t,e)};function Ye(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");Kn(t,e);function i(){this.constructor=t}t.prototype=e===null?Object.create(e):(i.prototype=e.prototype,new i)}function Vu(t,e,i,r){function n(s){return s instanceof i?s:new i(function(a){a(s)})}return new(i||(i=Promise))(function(s,a){function o(h){try{u(r.next(h))}catch(p){a(p)}}function c(h){try{u(r.throw(h))}catch(p){a(p)}}function u(h){h.done?s(h.value):n(h.value).then(o,c)}u((r=r.apply(t,e||[])).next())})}function xa(t,e){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,n,s,a=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return a.next=o(0),a.throw=o(1),a.return=o(2),typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function o(u){return function(h){return c([u,h])}}function c(u){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(r=1,n&&(s=u[0]&2?n.return:u[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,u[1])).done)return s;switch(n=0,s&&(u=[u[0]&2,s.value]),u[0]){case 0:case 1:s=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,n=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(u[0]===6||u[0]===2)){i=0;continue}if(u[0]===3&&(!s||u[1]>s[0]&&u[1]<s[3])){i.label=u[1];break}if(u[0]===6&&i.label<s[1]){i.label=s[1],s=u;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(u);break}s[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(h){u=[6,h],n=0}finally{r=s=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}function Ri(t){var e=typeof Symbol=="function"&&Symbol.iterator,i=e&&t[e],r=0;if(i)return i.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function gt(t,e){var i=typeof Symbol=="function"&&t[Symbol.iterator];if(!i)return t;var r=i.call(t),n,s=[],a;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)s.push(n.value)}catch(o){a={error:o}}finally{try{n&&!n.done&&(i=r.return)&&i.call(r)}finally{if(a)throw a.error}}return s}function ft(t,e,i){if(i||arguments.length===2)for(var r=0,n=e.length,s;r<n;r++)(s||!(r in e))&&(s||(s=Array.prototype.slice.call(e,0,r)),s[r]=e[r]);return t.concat(s||Array.prototype.slice.call(e))}function Pi(t){return this instanceof Pi?(this.v=t,this):new Pi(t)}function Hu(t,e,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=i.apply(t,e||[]),n,s=[];return n=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),o("next"),o("throw"),o("return",a),n[Symbol.asyncIterator]=function(){return this},n;function a(C){return function(O){return Promise.resolve(O).then(C,p)}}function o(C,O){r[C]&&(n[C]=function(A){return new Promise(function(R,D){s.push([C,A,R,D])>1||c(C,A)})},O&&(n[C]=O(n[C])))}function c(C,O){try{u(r[C](O))}catch(A){v(s[0][3],A)}}function u(C){C.value instanceof Pi?Promise.resolve(C.value.v).then(h,p):v(s[0][2],C)}function h(C){c("next",C)}function p(C){c("throw",C)}function v(C,O){C(O),s.shift(),s.length&&c(s[0][0],s[0][1])}}function ju(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],i;return e?e.call(t):(t=typeof Ri=="function"?Ri(t):t[Symbol.iterator](),i={},r("next"),r("throw"),r("return"),i[Symbol.asyncIterator]=function(){return this},i);function r(s){i[s]=t[s]&&function(a){return new Promise(function(o,c){a=t[s](a),n(o,c,a.done,a.value)})}}function n(s,a,o,c){Promise.resolve(c).then(function(u){s({value:u,done:o})},a)}}typeof SuppressedError=="function"&&SuppressedError;function be(t){return typeof t=="function"}function Yr(t){var e=function(r){Error.call(r),r.stack=new Error().stack},i=t(e);return i.prototype=Object.create(Error.prototype),i.prototype.constructor=i,i}var Zn=Yr(function(t){return function(i){t(this),this.message=i?i.length+` errors occurred during unsubscription:
|
|
64
64
|
`+i.map(function(r,n){return n+1+") "+r.toString()}).join(`
|
|
65
|
-
`):"",this.name="UnsubscriptionError",this.errors=i}});function Nr(t,e){if(t){var i=t.indexOf(e);0<=i&&t.splice(i,1)}}var Ei=(function(){function t(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return t.prototype.unsubscribe=function(){var e,i,r,n,s;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var o=Ai(a),c=o.next();!c.done;c=o.next()){var u=c.value;u.remove(this)}}catch(C){e={error:C}}finally{try{c&&!c.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}else a.remove(this);var h=this.initialTeardown;if(pe(h))try{h()}catch(C){s=C instanceof Un?C.errors:[C]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var v=Ai(p),m=v.next();!m.done;m=v.next()){var R=m.value;try{ha(R)}catch(C){s=s??[],C instanceof Un?s=ft(ft([],gt(s)),gt(C.errors)):s.push(C)}}}catch(C){r={error:C}}finally{try{m&&!m.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}}if(s)throw new Un(s)}},t.prototype.add=function(e){var i;if(e&&e!==this)if(this.closed)ha(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(i=this._finalizers)!==null&&i!==void 0?i:[]).push(e)}},t.prototype._hasParent=function(e){var i=this._parentage;return i===e||Array.isArray(i)&&i.includes(e)},t.prototype._addParent=function(e){var i=this._parentage;this._parentage=Array.isArray(i)?(i.push(e),i):i?[i,e]:e},t.prototype._removeParent=function(e){var i=this._parentage;i===e?this._parentage=null:Array.isArray(i)&&Nr(i,e)},t.prototype.remove=function(e){var i=this._finalizers;i&&Nr(i,e),e instanceof t&&e._removeParent(this)},t.EMPTY=(function(){var e=new t;return e.closed=!0,e})(),t})(),ua=Ei.EMPTY;function da(t){return t instanceof Ei||t&&"closed"in t&&pe(t.remove)&&pe(t.add)&&pe(t.unsubscribe)}function ha(t){pe(t)?t():t.unsubscribe()}var wu={Promise:void 0},Su={setTimeout:function(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];return setTimeout.apply(void 0,ft([t,e],gt(i)))},clearTimeout:function(t){return clearTimeout(t)},delegate:void 0};function pa(t){Su.setTimeout(function(){throw t})}function sr(){}function Br(t){t()}var Nn=(function(t){We(e,t);function e(i){var r=t.call(this)||this;return r.isStopped=!1,i?(r.destination=i,da(i)&&i.add(r)):r.destination=Tu,r}return e.create=function(i,r,n){return new ki(i,r,n)},e.prototype.next=function(i){this.isStopped||this._next(i)},e.prototype.error=function(i){this.isStopped||(this.isStopped=!0,this._error(i))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this),this.destination=null)},e.prototype._next=function(i){this.destination.next(i)},e.prototype._error=function(i){try{this.destination.error(i)}finally{this.unsubscribe()}},e.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},e})(Ei),Cu=(function(){function t(e){this.partialObserver=e}return t.prototype.next=function(e){var i=this.partialObserver;if(i.next)try{i.next(e)}catch(r){zr(r)}},t.prototype.error=function(e){var i=this.partialObserver;if(i.error)try{i.error(e)}catch(r){zr(r)}else zr(e)},t.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(i){zr(i)}},t})(),ki=(function(t){We(e,t);function e(i,r,n){var s=t.call(this)||this,a;return pe(i)||!i?a={next:i??void 0,error:r??void 0,complete:n??void 0}:a=i,s.destination=new Cu(a),s}return e})(Nn);function zr(t){pa(t)}function Au(t){throw t}var Tu={closed:!0,next:sr,error:Au,complete:sr},Bn=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Gt(t){return t}function Vr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return ga(t)}function ga(t){return t.length===0?Gt:t.length===1?t[0]:function(i){return t.reduce(function(r,n){return n(r)},i)}}var me=(function(){function t(e){e&&(this._subscribe=e)}return t.prototype.lift=function(e){var i=new t;return i.source=this,i.operator=e,i},t.prototype.subscribe=function(e,i,r){var n=this,s=ku(e)?e:new ki(e,i,r);return Br(function(){var a=n,o=a.operator,c=a.source;s.add(o?o.call(s,c):c?n._subscribe(s):n._trySubscribe(s))}),s},t.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(i){e.error(i)}},t.prototype.forEach=function(e,i){var r=this;return i=fa(i),new i(function(n,s){var a=new ki({next:function(o){try{e(o)}catch(c){s(c),a.unsubscribe()}},error:s,complete:n});r.subscribe(a)})},t.prototype._subscribe=function(e){var i;return(i=this.source)===null||i===void 0?void 0:i.subscribe(e)},t.prototype[Bn]=function(){return this},t.prototype.pipe=function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];return ga(e)(this)},t.prototype.toPromise=function(e){var i=this;return e=fa(e),new e(function(r,n){var s;i.subscribe(function(a){return s=a},function(a){return n(a)},function(){return r(s)})})},t.create=function(e){return new t(e)},t})();function fa(t){var e;return(e=t??wu.Promise)!==null&&e!==void 0?e:Promise}function Eu(t){return t&&pe(t.next)&&pe(t.error)&&pe(t.complete)}function ku(t){return t&&t instanceof Nn||Eu(t)&&da(t)}function xu(t){return pe(t==null?void 0:t.lift)}function le(t){return function(e){if(xu(e))return e.lift(function(i){try{return t(i,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function ae(t,e,i,r,n){return new Du(t,e,i,r,n)}var Du=(function(t){We(e,t);function e(i,r,n,s,a,o){var c=t.call(this,i)||this;return c.onFinalize=a,c.shouldUnsubscribe=o,c._next=r?function(u){try{r(u)}catch(h){i.error(h)}}:t.prototype._next,c._error=s?function(u){try{s(u)}catch(h){i.error(h)}finally{this.unsubscribe()}}:t.prototype._error,c._complete=n?function(){try{n()}catch(u){i.error(u)}finally{this.unsubscribe()}}:t.prototype._complete,c}return e.prototype.unsubscribe=function(){var i;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;t.prototype.unsubscribe.call(this),!r&&((i=this.onFinalize)===null||i===void 0||i.call(this))}},e})(Nn),va={schedule:function(t){var e=requestAnimationFrame,i=cancelAnimationFrame,r=e(function(n){i=void 0,t(n)});return new Ei(function(){return i==null?void 0:i(r)})},requestAnimationFrame:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return requestAnimationFrame.apply(void 0,ft([],gt(t)))},cancelAnimationFrame:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return cancelAnimationFrame.apply(void 0,ft([],gt(t)))},delegate:void 0},Iu=Ur(function(t){return function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),xi=(function(t){We(e,t);function e(){var i=t.call(this)||this;return i.closed=!1,i.currentObservers=null,i.observers=[],i.isStopped=!1,i.hasError=!1,i.thrownError=null,i}return e.prototype.lift=function(i){var r=new ba(this,this);return r.operator=i,r},e.prototype._throwIfClosed=function(){if(this.closed)throw new Iu},e.prototype.next=function(i){var r=this;Br(function(){var n,s;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var a=Ai(r.currentObservers),o=a.next();!o.done;o=a.next()){var c=o.value;c.next(i)}}catch(u){n={error:u}}finally{try{o&&!o.done&&(s=a.return)&&s.call(a)}finally{if(n)throw n.error}}}})},e.prototype.error=function(i){var r=this;Br(function(){if(r._throwIfClosed(),!r.isStopped){r.hasError=r.isStopped=!0,r.thrownError=i;for(var n=r.observers;n.length;)n.shift().error(i)}})},e.prototype.complete=function(){var i=this;Br(function(){if(i._throwIfClosed(),!i.isStopped){i.isStopped=!0;for(var r=i.observers;r.length;)r.shift().complete()}})},e.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(e.prototype,"observed",{get:function(){var i;return((i=this.observers)===null||i===void 0?void 0:i.length)>0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(i){return this._throwIfClosed(),t.prototype._trySubscribe.call(this,i)},e.prototype._subscribe=function(i){return this._throwIfClosed(),this._checkFinalizedStatuses(i),this._innerSubscribe(i)},e.prototype._innerSubscribe=function(i){var r=this,n=this,s=n.hasError,a=n.isStopped,o=n.observers;return s||a?ua:(this.currentObservers=null,o.push(i),new Ei(function(){r.currentObservers=null,Nr(o,i)}))},e.prototype._checkFinalizedStatuses=function(i){var r=this,n=r.hasError,s=r.thrownError,a=r.isStopped;n?i.error(s):a&&i.complete()},e.prototype.asObservable=function(){var i=new me;return i.source=this,i},e.create=function(i,r){return new ba(i,r)},e})(me),ba=(function(t){We(e,t);function e(i,r){var n=t.call(this)||this;return n.destination=i,n.source=r,n}return e.prototype.next=function(i){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.next)===null||n===void 0||n.call(r,i)},e.prototype.error=function(i){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.error)===null||n===void 0||n.call(r,i)},e.prototype.complete=function(){var i,r;(r=(i=this.destination)===null||i===void 0?void 0:i.complete)===null||r===void 0||r.call(i)},e.prototype._subscribe=function(i){var r,n;return(n=(r=this.source)===null||r===void 0?void 0:r.subscribe(i))!==null&&n!==void 0?n:ua},e})(xi),Mu=(function(t){We(e,t);function e(i){var r=t.call(this)||this;return r._value=i,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(i){var r=t.prototype._subscribe.call(this,i);return!r.closed&&i.next(this._value),r},e.prototype.getValue=function(){var i=this,r=i.hasError,n=i.thrownError,s=i._value;if(r)throw n;return this._throwIfClosed(),s},e.prototype.next=function(i){t.prototype.next.call(this,this._value=i)},e})(xi),zn={now:function(){return(zn.delegate||Date).now()},delegate:void 0},Vn=(function(t){We(e,t);function e(i,r,n){i===void 0&&(i=1/0),r===void 0&&(r=1/0),n===void 0&&(n=zn);var s=t.call(this)||this;return s._bufferSize=i,s._windowTime=r,s._timestampProvider=n,s._buffer=[],s._infiniteTimeWindow=!0,s._infiniteTimeWindow=r===1/0,s._bufferSize=Math.max(1,i),s._windowTime=Math.max(1,r),s}return e.prototype.next=function(i){var r=this,n=r.isStopped,s=r._buffer,a=r._infiniteTimeWindow,o=r._timestampProvider,c=r._windowTime;n||(s.push(i),!a&&s.push(o.now()+c)),this._trimBuffer(),t.prototype.next.call(this,i)},e.prototype._subscribe=function(i){this._throwIfClosed(),this._trimBuffer();for(var r=this._innerSubscribe(i),n=this,s=n._infiniteTimeWindow,a=n._buffer,o=a.slice(),c=0;c<o.length&&!i.closed;c+=s?1:2)i.next(o[c]);return this._checkFinalizedStatuses(i),r},e.prototype._trimBuffer=function(){var i=this,r=i._bufferSize,n=i._timestampProvider,s=i._buffer,a=i._infiniteTimeWindow,o=(a?1:2)*r;if(r<1/0&&o<s.length&&s.splice(0,s.length-o),!a){for(var c=n.now(),u=0,h=1;h<s.length&&s[h]<=c;h+=2)u=h;u&&s.splice(0,u+1)}},e})(xi),Ru=(function(t){We(e,t);function e(i,r){return t.call(this)||this}return e.prototype.schedule=function(i,r){return this},e})(Ei),ma={setInterval:function(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];return setInterval.apply(void 0,ft([t,e],gt(i)))},clearInterval:function(t){return clearInterval(t)},delegate:void 0},Hn=(function(t){We(e,t);function e(i,r){var n=t.call(this,i,r)||this;return n.scheduler=i,n.work=r,n.pending=!1,n}return e.prototype.schedule=function(i,r){var n;if(r===void 0&&(r=0),this.closed)return this;this.state=i;var s=this.id,a=this.scheduler;return s!=null&&(this.id=this.recycleAsyncId(a,s,r)),this.pending=!0,this.delay=r,this.id=(n=this.id)!==null&&n!==void 0?n:this.requestAsyncId(a,this.id,r),this},e.prototype.requestAsyncId=function(i,r,n){return n===void 0&&(n=0),ma.setInterval(i.flush.bind(i,this),n)},e.prototype.recycleAsyncId=function(i,r,n){if(n===void 0&&(n=0),n!=null&&this.delay===n&&this.pending===!1)return r;r!=null&&ma.clearInterval(r)},e.prototype.execute=function(i,r){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(i,r);if(n)return n;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(i,r){var n=!1,s;try{this.work(i)}catch(a){n=!0,s=a||new Error("Scheduled action threw falsy error")}if(n)return this.unsubscribe(),s},e.prototype.unsubscribe=function(){if(!this.closed){var i=this,r=i.id,n=i.scheduler,s=n.actions;this.work=this.state=this.scheduler=null,this.pending=!1,Nr(s,this),r!=null&&(this.id=this.recycleAsyncId(n,r,null)),this.delay=null,t.prototype.unsubscribe.call(this)}},e})(Ru),Pu=1,jn,Wn={};function ya(t){return t in Wn?(delete Wn[t],!0):!1}var wa={setImmediate:function(t){var e=Pu++;return Wn[e]=!0,jn||(jn=Promise.resolve()),jn.then(function(){return ya(e)&&t()}),e},clearImmediate:function(t){ya(t)}},Ou=wa.setImmediate,_u=wa.clearImmediate,Sa={setImmediate:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Ou.apply(void 0,ft([],gt(t)))},clearImmediate:function(t){return _u(t)},delegate:void 0},Lu=(function(t){We(e,t);function e(i,r){var n=t.call(this,i,r)||this;return n.scheduler=i,n.work=r,n}return e.prototype.requestAsyncId=function(i,r,n){return n===void 0&&(n=0),n!==null&&n>0?t.prototype.requestAsyncId.call(this,i,r,n):(i.actions.push(this),i._scheduled||(i._scheduled=Sa.setImmediate(i.flush.bind(i,void 0))))},e.prototype.recycleAsyncId=function(i,r,n){var s;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,i,r,n);var a=i.actions;r!=null&&((s=a[a.length-1])===null||s===void 0?void 0:s.id)!==r&&(Sa.clearImmediate(r),i._scheduled===r&&(i._scheduled=void 0))},e})(Hn),Ca=(function(){function t(e,i){i===void 0&&(i=t.now),this.schedulerActionCtor=e,this.now=i}return t.prototype.schedule=function(e,i,r){return i===void 0&&(i=0),new this.schedulerActionCtor(this,e).schedule(r,i)},t.now=zn.now,t})(),Gn=(function(t){We(e,t);function e(i,r){r===void 0&&(r=Ca.now);var n=t.call(this,i,r)||this;return n.actions=[],n._active=!1,n}return e.prototype.flush=function(i){var r=this.actions;if(this._active){r.push(i);return}var n;this._active=!0;do if(n=i.execute(i.state,i.delay))break;while(i=r.shift());if(this._active=!1,n){for(;i=r.shift();)i.unsubscribe();throw n}},e})(Ca),Fu=(function(t){We(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(i){this._active=!0;var r=this._scheduled;this._scheduled=void 0;var n=this.actions,s;i=i||n.shift();do if(s=i.execute(i.state,i.delay))break;while((i=n[0])&&i.id===r&&n.shift());if(this._active=!1,s){for(;(i=n[0])&&i.id===r&&n.shift();)i.unsubscribe();throw s}},e})(Gn),Aa=new Fu(Lu),ar=new Gn(Hn),Uu=ar,Nu=(function(t){We(e,t);function e(i,r){var n=t.call(this,i,r)||this;return n.scheduler=i,n.work=r,n}return e.prototype.requestAsyncId=function(i,r,n){return n===void 0&&(n=0),n!==null&&n>0?t.prototype.requestAsyncId.call(this,i,r,n):(i.actions.push(this),i._scheduled||(i._scheduled=va.requestAnimationFrame(function(){return i.flush(void 0)})))},e.prototype.recycleAsyncId=function(i,r,n){var s;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,i,r,n);var a=i.actions;r!=null&&r===i._scheduled&&((s=a[a.length-1])===null||s===void 0?void 0:s.id)!==r&&(va.cancelAnimationFrame(r),i._scheduled=void 0)},e})(Hn),Bu=(function(t){We(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(i){this._active=!0;var r;i?r=i.id:(r=this._scheduled,this._scheduled=void 0);var n=this.actions,s;i=i||n.shift();do if(s=i.execute(i.state,i.delay))break;while((i=n[0])&&i.id===r&&n.shift());if(this._active=!1,s){for(;(i=n[0])&&i.id===r&&n.shift();)i.unsubscribe();throw s}},e})(Gn),Ta=new Bu(Nu),ei=new me(function(t){return t.complete()});function Ea(t){return t&&pe(t.schedule)}function qn(t){return t[t.length-1]}function ka(t){return pe(qn(t))?t.pop():void 0}function or(t){return Ea(qn(t))?t.pop():void 0}function zu(t,e){return typeof qn(t)=="number"?t.pop():e}var xa=(function(t){return t&&typeof t.length=="number"&&typeof t!="function"});function Da(t){return pe(t==null?void 0:t.then)}function Ia(t){return pe(t[Bn])}function Ma(t){return Symbol.asyncIterator&&pe(t==null?void 0:t[Symbol.asyncIterator])}function Ra(t){return new TypeError("You provided "+(t!==null&&typeof t=="object"?"an invalid object":"'"+t+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Vu(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Pa=Vu();function Oa(t){return pe(t==null?void 0:t[Pa])}function _a(t){return mu(this,arguments,function(){var i,r,n,s;return la(this,function(a){switch(a.label){case 0:i=t.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Ti(i.read())];case 3:return r=a.sent(),n=r.value,s=r.done,s?[4,Ti(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Ti(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return i.releaseLock(),[7];case 10:return[2]}})})}function La(t){return pe(t==null?void 0:t.getReader)}function ke(t){if(t instanceof me)return t;if(t!=null){if(Ia(t))return Hu(t);if(xa(t))return ju(t);if(Da(t))return Wu(t);if(Ma(t))return Fa(t);if(Oa(t))return Gu(t);if(La(t))return qu(t)}throw Ra(t)}function Hu(t){return new me(function(e){var i=t[Bn]();if(pe(i.subscribe))return i.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function ju(t){return new me(function(e){for(var i=0;i<t.length&&!e.closed;i++)e.next(t[i]);e.complete()})}function Wu(t){return new me(function(e){t.then(function(i){e.closed||(e.next(i),e.complete())},function(i){return e.error(i)}).then(null,pa)})}function Gu(t){return new me(function(e){var i,r;try{for(var n=Ai(t),s=n.next();!s.done;s=n.next()){var a=s.value;if(e.next(a),e.closed)return}}catch(o){i={error:o}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}e.complete()})}function Fa(t){return new me(function(e){Xu(t,e).catch(function(i){return e.error(i)})})}function qu(t){return Fa(_a(t))}function Xu(t,e){var i,r,n,s;return bu(this,void 0,void 0,function(){var a,o;return la(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),i=yu(t),c.label=1;case 1:return[4,i.next()];case 2:if(r=c.sent(),!!r.done)return[3,4];if(a=r.value,e.next(a),e.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return o=c.sent(),n={error:o},[3,11];case 6:return c.trys.push([6,,9,10]),r&&!r.done&&(s=i.return)?[4,s.call(i)]:[3,8];case 7:c.sent(),c.label=8;case 8:return[3,10];case 9:if(n)throw n.error;return[7];case 10:return[7];case 11:return e.complete(),[2]}})})}function _t(t,e,i,r,n){r===void 0&&(r=0),n===void 0&&(n=!1);var s=e.schedule(function(){i(),n?t.add(this.schedule(null,r)):this.unsubscribe()},r);if(t.add(s),!n)return s}function Hr(t,e){return e===void 0&&(e=0),le(function(i,r){i.subscribe(ae(r,function(n){return _t(r,t,function(){return r.next(n)},e)},function(){return _t(r,t,function(){return r.complete()},e)},function(n){return _t(r,t,function(){return r.error(n)},e)}))})}function Ua(t,e){return e===void 0&&(e=0),le(function(i,r){r.add(t.schedule(function(){return i.subscribe(r)},e))})}function Yu(t,e){return ke(t).pipe(Ua(e),Hr(e))}function Ku(t,e){return ke(t).pipe(Ua(e),Hr(e))}function Zu(t,e){return new me(function(i){var r=0;return e.schedule(function(){r===t.length?i.complete():(i.next(t[r++]),i.closed||this.schedule())})})}function Qu(t,e){return new me(function(i){var r;return _t(i,e,function(){r=t[Pa](),_t(i,e,function(){var n,s,a;try{n=r.next(),s=n.value,a=n.done}catch(o){i.error(o);return}a?i.complete():i.next(s)},0,!0)}),function(){return pe(r==null?void 0:r.return)&&r.return()}})}function Na(t,e){if(!t)throw new Error("Iterable cannot be null");return new me(function(i){_t(i,e,function(){var r=t[Symbol.asyncIterator]();_t(i,e,function(){r.next().then(function(n){n.done?i.complete():i.next(n.value)})},0,!0)})})}function Ju(t,e){return Na(_a(t),e)}function $u(t,e){if(t!=null){if(Ia(t))return Yu(t,e);if(xa(t))return Zu(t,e);if(Da(t))return Ku(t,e);if(Ma(t))return Na(t,e);if(Oa(t))return Qu(t,e);if(La(t))return Ju(t,e)}throw Ra(t)}function Me(t,e){return e?$u(t,e):ke(t)}function Tt(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=or(t);return Me(t,i)}function ed(t,e){var i=pe(t)?t:function(){return t},r=function(n){return n.error(i())};return new me(r)}var jr=Ur(function(t){return function(){t(this),this.name="EmptyError",this.message="no elements in sequence"}});function Ba(t,e){return new Promise(function(i,r){var n=!1,s;t.subscribe({next:function(a){s=a,n=!0},error:r,complete:function(){n?i(s):r(new jr)}})})}function Ge(t,e){return new Promise(function(i,r){var n=new ki({next:function(s){i(s),n.unsubscribe()},error:r,complete:function(){r(new jr)}});t.subscribe(n)})}function za(t){return t instanceof Date&&!isNaN(t)}var Va=Ur(function(t){return function(i){i===void 0&&(i=null),t(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=i}});function cr(t,e){var i=za(t)?{first:t}:typeof t=="number"?{each:t}:t,r=i.first,n=i.each,s=i.with,a=s===void 0?td:s,o=i.scheduler,c=o===void 0?ar:o,u=i.meta,h=u===void 0?null:u;if(r==null&&n==null)throw new TypeError("No timeout provided.");return le(function(p,v){var m,R,C=null,I=0,x=function(f){R=_t(v,c,function(){try{m.unsubscribe(),ke(a({meta:h,lastValue:C,seen:I})).subscribe(v)}catch(b){v.error(b)}},f)};m=p.subscribe(ae(v,function(f){R==null||R.unsubscribe(),I++,v.next(C=f),n>0&&x(n)},void 0,void 0,function(){R!=null&&R.closed||R==null||R.unsubscribe(),C=null})),!I&&x(r!=null?typeof r=="number"?r:+r-c.now():n)})}function td(t){throw new Va(t)}function E(t,e){return le(function(i,r){var n=0;i.subscribe(ae(r,function(s){r.next(t.call(e,s,n++))}))})}var id=Array.isArray;function rd(t,e){return id(e)?t.apply(void 0,ft([],gt(e))):t(e)}function nd(t){return E(function(e){return rd(t,e)})}var sd=Array.isArray,ad=Object.getPrototypeOf,od=Object.prototype,cd=Object.keys;function ld(t){if(t.length===1){var e=t[0];if(sd(e))return{args:e,keys:null};if(ud(e)){var i=cd(e);return{args:i.map(function(r){return e[r]}),keys:i}}}return{args:t,keys:null}}function ud(t){return t&&typeof t=="object"&&ad(t)===od}function dd(t,e){return t.reduce(function(i,r,n){return i[r]=e[n],i},{})}function Ha(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=or(t),r=ka(t),n=ld(t),s=n.args,a=n.keys;if(s.length===0)return Me([],i);var o=new me(hd(s,i,a?function(c){return dd(a,c)}:Gt));return r?o.pipe(nd(r)):o}function hd(t,e,i){return i===void 0&&(i=Gt),function(r){ja(e,function(){for(var n=t.length,s=new Array(n),a=n,o=n,c=function(h){ja(e,function(){var p=Me(t[h],e),v=!1;p.subscribe(ae(r,function(m){s[h]=m,v||(v=!0,o--),o||r.next(i(s.slice()))},function(){--a||r.complete()}))},r)},u=0;u<n;u++)c(u)},r)}}function ja(t,e,i){t?_t(i,t,e):e()}function pd(t,e,i,r,n,s,a,o){var c=[],u=0,h=0,p=!1,v=function(){p&&!c.length&&!u&&e.complete()},m=function(C){return u<r?R(C):c.push(C)},R=function(C){u++;var I=!1;ke(i(C,h++)).subscribe(ae(e,function(x){e.next(x)},function(){I=!0},void 0,function(){if(I)try{u--;for(var x=function(){var f=c.shift();a||R(f)};c.length&&u<r;)x();v()}catch(f){e.error(f)}}))};return t.subscribe(ae(e,m,function(){p=!0,v()})),function(){}}function Xn(t,e,i){return i===void 0&&(i=1/0),pe(e)?Xn(function(r,n){return E(function(s,a){return e(r,s,n,a)})(ke(t(r,n)))},i):(typeof e=="number"&&(i=e),le(function(r,n){return pd(r,n,t,i)}))}function Wa(t){return t===void 0&&(t=1/0),Xn(Gt,t)}function gd(){return Wa(1)}function Ga(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return gd()(Me(t,or(t)))}function ti(t){return new me(function(e){ke(t()).subscribe(e)})}function Di(t,e,i){t===void 0&&(t=0),i===void 0&&(i=Uu);var r=-1;return e!=null&&(Ea(e)?i=e:r=e),new me(function(n){var s=za(t)?+t-i.now():t;s<0&&(s=0);var a=0;return i.schedule(function(){n.closed||(n.next(a++),0<=r?this.schedule(void 0,r):n.complete())},s)})}function Wr(t,e){return t===void 0&&(t=0),e===void 0&&(e=ar),t<0&&(t=0),Di(t,t,e)}function Ii(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=or(t),r=zu(t,1/0),n=t;return n.length?n.length===1?ke(n[0]):Wa(r)(Me(n,i)):ei}var fd=new me(sr),vd=Array.isArray;function bd(t){return t.length===1&&vd(t[0])?t[0]:t}function B(t,e){return le(function(i,r){var n=0;i.subscribe(ae(r,function(s){return t.call(e,s,n++)&&r.next(s)}))})}function lr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t=bd(t),t.length===1?ke(t[0]):new me(md(t))}function md(t){return function(e){for(var i=[],r=function(s){i.push(ke(t[s]).subscribe(ae(e,function(a){if(i){for(var o=0;o<i.length;o++)o!==s&&i[o].unsubscribe();i=null}e.next(a)})))},n=0;i&&!e.closed&&n<t.length;n++)r(n)}}function yd(t){return le(function(e,i){var r=!1,n=null,s=null,a=!1,o=function(){if(s==null||s.unsubscribe(),s=null,r){r=!1;var u=n;n=null,i.next(u)}a&&i.complete()},c=function(){s=null,a&&i.complete()};e.subscribe(ae(i,function(u){r=!0,n=u,s||ke(t(u)).subscribe(s=ae(i,o,c))},function(){a=!0,(!r||!s||s.closed)&&i.complete()}))})}function wd(t,e){return e===void 0&&(e=ar),yd(function(){return Di(t,e)})}function ii(t){return le(function(e,i){var r=null,n=!1,s;r=e.subscribe(ae(i,void 0,void 0,function(a){s=ke(t(a,ii(t)(e))),r?(r.unsubscribe(),r=null,s.subscribe(i)):n=!0})),n&&(r.unsubscribe(),r=null,s.subscribe(i))})}function qa(t,e,i,r,n){return function(s,a){var o=i,c=e,u=0;s.subscribe(ae(a,function(h){var p=u++;c=o?t(c,h,p):(o=!0,h),r&&a.next(c)},n&&(function(){o&&a.next(c),a.complete()})))}}function Sd(t,e){return le(qa(t,e,arguments.length>=2,!1,!0))}var Cd=function(t,e){return t.push(e),t};function Ad(){return le(function(t,e){Sd(Cd,[])(t).subscribe(e)})}function Xa(t,e){return e===void 0&&(e=ar),le(function(i,r){var n=null,s=null,a=null,o=function(){if(n){n.unsubscribe(),n=null;var u=s;s=null,r.next(u)}};function c(){var u=a+t,h=e.now();if(h<u){n=this.schedule(void 0,u-h),r.add(n);return}o()}i.subscribe(ae(r,function(u){s=u,a=e.now(),n||(n=e.schedule(c,t),r.add(n))},function(){o(),r.complete()},void 0,function(){s=n=null}))})}function Td(t){return le(function(e,i){var r=!1;e.subscribe(ae(i,function(n){r=!0,i.next(n)},function(){r||i.next(t),i.complete()}))})}function Re(t){return t<=0?function(){return ei}:le(function(e,i){var r=0;e.subscribe(ae(i,function(n){++r<=t&&(i.next(n),t<=r&&i.complete())}))})}function L(t,e){return e===void 0&&(e=Gt),t=t??Ed,le(function(i,r){var n,s=!0;i.subscribe(ae(r,function(a){var o=e(a);(s||!t(n,o))&&(s=!1,n=o,r.next(a))}))})}function Ed(t,e){return t===e}function kd(t){return t===void 0&&(t=xd),le(function(e,i){var r=!1;e.subscribe(ae(i,function(n){r=!0,i.next(n)},function(){return r?i.complete():i.error(t())}))})}function xd(){return new jr}function Yn(t,e){return le(function(i,r){var n=0,s=null,a=!1;i.subscribe(ae(r,function(o){s||(s=ae(r,void 0,function(){s=null,a&&r.complete()}),ke(t(o,n++)).subscribe(s))},function(){a=!0,!s&&r.complete()}))})}function Ya(t,e){var i=arguments.length>=2;return function(r){return r.pipe(Gt,Re(1),i?Td(e):kd(function(){return new jr}))}}function Ka(t,e){return le(qa(t,e,arguments.length>=2,!0))}function Et(t){t===void 0&&(t={});var e=t.connector,i=e===void 0?function(){return new xi}:e,r=t.resetOnError,n=r===void 0?!0:r,s=t.resetOnComplete,a=s===void 0?!0:s,o=t.resetOnRefCountZero,c=o===void 0?!0:o;return function(u){var h,p,v,m=0,R=!1,C=!1,I=function(){p==null||p.unsubscribe(),p=void 0},x=function(){I(),h=v=void 0,R=C=!1},f=function(){var b=h;x(),b==null||b.unsubscribe()};return le(function(b,y){m++,!C&&!R&&I();var A=v=v??i();y.add(function(){m--,m===0&&!C&&!R&&(p=Kn(f,c))}),A.subscribe(y),!h&&m>0&&(h=new ki({next:function(D){return A.next(D)},error:function(D){C=!0,I(),p=Kn(x,n,D),A.error(D)},complete:function(){R=!0,I(),p=Kn(x,a),A.complete()}}),ke(b).subscribe(h))})(u)}}function Kn(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];if(e===!0){t();return}if(e!==!1){var n=new ki({next:function(){n.unsubscribe(),t()}});return ke(e.apply(void 0,ft([],gt(i)))).subscribe(n)}}function tt(t,e,i){var r,n=!1;return r=t,Et({connector:function(){return new Vn(r,e,i)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function Gr(t){return B(function(e,i){return t<=i})}function Dd(t){return le(function(e,i){var r=!1,n=0;e.subscribe(ae(i,function(s){return(r||(r=!t(s,n++)))&&i.next(s)}))})}function Id(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=or(t);return le(function(r,n){(i?Ga(t,r,i):Ga(t,r)).subscribe(n)})}function Ze(t,e){return le(function(i,r){var n=null,s=0,a=!1,o=function(){return a&&!n&&r.complete()};i.subscribe(ae(r,function(c){n==null||n.unsubscribe();var u=0,h=s++;ke(t(c,h)).subscribe(n=ae(r,function(p){return r.next(e?e(c,p,h,u++):p)},function(){n=null,o()}))},function(){a=!0,o()}))})}function w(t){return le(function(e,i){ke(t).subscribe(ae(i,function(){return i.complete()},sr)),!i.closed&&e.subscribe(i)})}function Se(t,e,i){var r=pe(t)||e||i?{next:t,error:e,complete:i}:t;return r?le(function(n,s){var a;(a=r.subscribe)===null||a===void 0||a.call(r);var o=!0;n.subscribe(ae(s,function(c){var u;(u=r.next)===null||u===void 0||u.call(r,c),s.next(c)},function(){var c;o=!1,(c=r.complete)===null||c===void 0||c.call(r),s.complete()},function(c){var u;o=!1,(u=r.error)===null||u===void 0||u.call(r,c),s.error(c)},function(){var c,u;o&&((c=r.unsubscribe)===null||c===void 0||c.call(r)),(u=r.finalize)===null||u===void 0||u.call(r)}))}):Gt}function Za(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=ka(t);return le(function(r,n){for(var s=t.length,a=new Array(s),o=t.map(function(){return!1}),c=!1,u=function(p){ke(t[p]).subscribe(ae(n,function(v){a[p]=v,!c&&!o[p]&&(o[p]=!0,(c=o.every(Gt))&&(o=null))},sr))},h=0;h<s;h++)u(h);r.subscribe(ae(n,function(p){if(c){var v=ft([p],gt(a));n.next(i?i.apply(void 0,ft([],gt(v))):v)}}))})}var Qa=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function qr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Xr={exports:{}},Md=Xr.exports,Ja;function Rd(){return Ja||(Ja=1,(function(t){(function(e,i){t.exports?t.exports=i():e.log=i()})(Md,function(){var e=function(){},i="undefined",r=typeof window!==i&&typeof window.navigator!==i&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],s={},a=null;function o(C,I){var x=C[I];if(typeof x.bind=="function")return x.bind(C);try{return Function.prototype.bind.call(x,C)}catch{return function(){return Function.prototype.apply.apply(x,[C,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(C){return C==="debug"&&(C="log"),typeof console===i?!1:C==="trace"&&r?c:console[C]!==void 0?o(console,C):console.log!==void 0?o(console,"log"):e}function h(){for(var C=this.getLevel(),I=0;I<n.length;I++){var x=n[I];this[x]=I<C?e:this.methodFactory(x,C,this.name)}if(this.log=this.debug,typeof console===i&&C<this.levels.SILENT)return"No console available for logging"}function p(C){return function(){typeof console!==i&&(h.call(this),this[C].apply(this,arguments))}}function v(C,I,x){return u(C)||p.apply(this,arguments)}function m(C,I){var x=this,f,b,y,A="loglevel";typeof C=="string"?A+=":"+C:typeof C=="symbol"&&(A=void 0);function D(F){var ee=(n[F]||"silent").toUpperCase();if(!(typeof window===i||!A)){try{window.localStorage[A]=ee;return}catch{}try{window.document.cookie=encodeURIComponent(A)+"="+ee+";"}catch{}}}function N(){var F;if(!(typeof window===i||!A)){try{F=window.localStorage[A]}catch{}if(typeof F===i)try{var ee=window.document.cookie,lt=encodeURIComponent(A),Mt=ee.indexOf(lt+"=");Mt!==-1&&(F=/^([^;]+)/.exec(ee.slice(Mt+lt.length+1))[1])}catch{}return x.levels[F]===void 0&&(F=void 0),F}}function Y(){if(!(typeof window===i||!A)){try{window.localStorage.removeItem(A)}catch{}try{window.document.cookie=encodeURIComponent(A)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function _(F){var ee=F;if(typeof ee=="string"&&x.levels[ee.toUpperCase()]!==void 0&&(ee=x.levels[ee.toUpperCase()]),typeof ee=="number"&&ee>=0&&ee<=x.levels.SILENT)return ee;throw new TypeError("log.setLevel() called with invalid level: "+F)}x.name=C,x.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},x.methodFactory=I||v,x.getLevel=function(){return y??b??f},x.setLevel=function(F,ee){return y=_(F),ee!==!1&&D(y),h.call(x)},x.setDefaultLevel=function(F){b=_(F),N()||x.setLevel(F,!1)},x.resetLevel=function(){y=null,Y(),h.call(x)},x.enableAll=function(F){x.setLevel(x.levels.TRACE,F)},x.disableAll=function(F){x.setLevel(x.levels.SILENT,F)},x.rebuild=function(){if(a!==x&&(f=_(a.getLevel())),h.call(x),a===x)for(var F in s)s[F].rebuild()},f=_(a?a.getLevel():"WARN");var re=N();re!=null&&(y=_(re)),h.call(x)}a=new m,a.getLogger=function(I){if(typeof I!="symbol"&&typeof I!="string"||I==="")throw new TypeError("You must supply a name when creating a logger.");var x=s[I];return x||(x=s[I]=new m(I,a.methodFactory)),x};var R=typeof window!==i?window.log:void 0;return a.noConflict=function(){return typeof window!==i&&window.log===a&&(window.log=R),a},a.getLoggers=function(){return s},a.default=a,a})})(Xr)),Xr.exports}var Pd=Rd();const Od=qr(Pd);var Mi=class extends Error{constructor(t,e){super(`Unexpected Error${t?` at ${t}`:""}`,e),this.at=t,this.name="UnexpectedError"}},kt=class extends Error{constructor(t="Not Implemented",e){super(t,e),this.reason=t,this.name="UnimplementedError"}},ri=class extends Error{constructor(t="Invalid Credentials",e){super(t,e),this.reason=t,this.name="InvalidCredentialsError"}},$a=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketConnectionError"}},eo=class extends Error{constructor(t,e){super(t,e),this.name="TransportConnectionError"}},_d=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketTimeoutError"}},to=class extends Error{constructor(t,e){super(t,e),this.name="RequestTimeoutError"}},Ld=class extends Error{constructor(t,e){super(t,e),this.name="RequestError"}},Yr=class extends Error{constructor(t,e,i){super(`RPC request ${t} timed out after ${e}ms`,i),this.requestId=t,this.timeoutMs=e,this.name="RPCTimeoutError"}},Zn=class extends Error{constructor(t=null,e){super("Error handling authorization state update",{...e,cause:(e==null?void 0:e.cause)??(t instanceof Error?t:void 0)}),this.error=t,this.name="AuthStateHandlerError"}},Qn=class extends Error{constructor(t="localStorage",e){super(`${t} is not available in this environment`,e),this.storageType=t,this.name="StorageNotAvailableError"}},Fd=class extends Error{constructor(t,e){super(`Failed to serialize value for key "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="SerializationError"}},Ud=class extends Error{constructor(t,e){super(`Failed to deserialize value for key "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="DeserializationError"}},Jn=class extends Error{constructor(t,e){super(`Failed to write to storage for key "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="StorageWriteError"}},Nd=class extends Error{constructor(t,e){super(`Failed to read from storage "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="StorageReadError"}},Q=class extends Error{constructor(t,e){super(`Dependency ${t} is not set or available.`,e),this.description=t,this.name="DependencyError"}},io=class extends Error{constructor(t,e=null,i="outbound",r){super(t,{...r,cause:(r==null?void 0:r.cause)??(e instanceof Error?e:void 0)}),this.message=t,this.error=e,this.direction=i,this.name="CallCreateError"}},Lt=class extends Error{constructor(t,e,i,r,n){super(e,r),this.code=t,this.data=i,this.requestId=n,this.name="JSONRPCError"}},ro=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="InvalidParams"}},no=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="ConversationError"}},Bd=class extends Error{constructor(t=null,e){super("Error handling Verto invite",{...e,cause:(e==null?void 0:e.cause)??(t instanceof Error?t:void 0)}),this.error=t,this.name="VertoInviteHandlerError"}},zd=class extends Error{constructor(t=null,e){super("Error handling Verto attach",{...e,cause:(e==null?void 0:e.cause)??(t instanceof Error?t:void 0)}),this.error=t,this.name="VertoAttachHandlerError"}},Kr=class extends Error{constructor(t,e){super(t,e),this.name="ValidationError"}},so=class extends Error{constructor(t){super("Failed to send Verto pong - call may disconnect",{cause:t instanceof Error?t:void 0}),this.originalError=t,this.name="VertoPongError"}},Vd=class extends Error{constructor(t){super("Failed to parse incoming WebSocket message",{cause:t instanceof Error?t:void 0}),this.originalError=t,this.name="MessageParseError"}},ao=class extends Error{constructor(t,e){super(`Collection fetch failed during ${t}`,{cause:e instanceof Error?e:void 0}),this.operation=t,this.originalError=e,this.name="CollectionFetchError"}},Ri=class extends Error{constructor(t,e,i){super(`Media track ${t} failed for ${e}`,{cause:i instanceof Error?i:void 0}),this.operation=t,this.kind=e,this.originalError=i,this.name="MediaTrackError"}},Zr=class extends Error{constructor(t,e="Failed to initialize DPoP key pair"){super(e,{cause:t instanceof Error?t:void 0}),this.originalError=t,this.name="DPoPInitError"}},Hd=class extends Error{constructor(t,e){super(`Preflight test failed during ${t}`,{cause:e instanceof Error?e:void 0}),this.phase=t,this.originalError=e,this.name="PreflightError"}},oo=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="DeviceTokenError"}},ni=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="TokenRefreshError"}};const jd=()=>new Date().toISOString(),Pi=Od.getLogger("signalwire"),Wd=Pi.methodFactory;Pi.methodFactory=(t,e,i)=>{const r=Wd(t,e,i);return function(...n){const s=[jd(),"-",...n];r.apply(void 0,s)}};const Gd=Pi.levels.WARN;Pi.setLevel(Gd);let co=null;const qd=t=>{co=t};let Qr={};const Xd=t=>{if(t==null){Qr={};return}Qr={...Qr,...t}},Yd=t=>{Pi.setLevel(t)},$n=()=>co??Pi,Kd=t=>t!=null&&typeof t=="object"&&"method"in t?t.method!=="signalwire.ping":!0,Zd=t=>{const{logWsTraffic:e}=Qr;if(!e)return;const i=$n();let r;if("raw"in t)try{r=JSON.parse(t.raw)}catch{i.debug(`[WebSocket] ${t.type.toUpperCase()}: non-JSON message`);return}else({payload:r}=t);const n=Kd(r)?JSON.stringify(r,null,2):r;i.debug(`${t.type.toUpperCase()}:
|
|
65
|
+
`):"",this.name="UnsubscriptionError",this.errors=i}});function Kr(t,e){if(t){var i=t.indexOf(e);0<=i&&t.splice(i,1)}}var Oi=(function(){function t(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return t.prototype.unsubscribe=function(){var e,i,r,n,s;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var o=Ri(a),c=o.next();!c.done;c=o.next()){var u=c.value;u.remove(this)}}catch(A){e={error:A}}finally{try{c&&!c.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}else a.remove(this);var h=this.initialTeardown;if(be(h))try{h()}catch(A){s=A instanceof Zn?A.errors:[A]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var v=Ri(p),C=v.next();!C.done;C=v.next()){var O=C.value;try{Ma(O)}catch(A){s=s??[],A instanceof Zn?s=ft(ft([],gt(s)),gt(A.errors)):s.push(A)}}}catch(A){r={error:A}}finally{try{C&&!C.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}}if(s)throw new Zn(s)}},t.prototype.add=function(e){var i;if(e&&e!==this)if(this.closed)Ma(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(i=this._finalizers)!==null&&i!==void 0?i:[]).push(e)}},t.prototype._hasParent=function(e){var i=this._parentage;return i===e||Array.isArray(i)&&i.includes(e)},t.prototype._addParent=function(e){var i=this._parentage;this._parentage=Array.isArray(i)?(i.push(e),i):i?[i,e]:e},t.prototype._removeParent=function(e){var i=this._parentage;i===e?this._parentage=null:Array.isArray(i)&&Kr(i,e)},t.prototype.remove=function(e){var i=this._finalizers;i&&Kr(i,e),e instanceof t&&e._removeParent(this)},t.EMPTY=(function(){var e=new t;return e.closed=!0,e})(),t})(),Da=Oi.EMPTY;function Ia(t){return t instanceof Oi||t&&"closed"in t&&be(t.remove)&&be(t.add)&&be(t.unsubscribe)}function Ma(t){be(t)?t():t.unsubscribe()}var Wu={Promise:void 0},Gu={setTimeout:function(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];return setTimeout.apply(void 0,ft([t,e],gt(i)))},clearTimeout:function(t){return clearTimeout(t)},delegate:void 0};function Ra(t){Gu.setTimeout(function(){throw t})}function br(){}function Zr(t){t()}var Qn=(function(t){Ye(e,t);function e(i){var r=t.call(this)||this;return r.isStopped=!1,i?(r.destination=i,Ia(i)&&i.add(r)):r.destination=Yu,r}return e.create=function(i,r,n){return new _i(i,r,n)},e.prototype.next=function(i){this.isStopped||this._next(i)},e.prototype.error=function(i){this.isStopped||(this.isStopped=!0,this._error(i))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this),this.destination=null)},e.prototype._next=function(i){this.destination.next(i)},e.prototype._error=function(i){try{this.destination.error(i)}finally{this.unsubscribe()}},e.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},e})(Oi),qu=(function(){function t(e){this.partialObserver=e}return t.prototype.next=function(e){var i=this.partialObserver;if(i.next)try{i.next(e)}catch(r){Qr(r)}},t.prototype.error=function(e){var i=this.partialObserver;if(i.error)try{i.error(e)}catch(r){Qr(r)}else Qr(e)},t.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(i){Qr(i)}},t})(),_i=(function(t){Ye(e,t);function e(i,r,n){var s=t.call(this)||this,a;return be(i)||!i?a={next:i??void 0,error:r??void 0,complete:n??void 0}:a=i,s.destination=new qu(a),s}return e})(Qn);function Qr(t){Ra(t)}function Xu(t){throw t}var Yu={closed:!0,next:br,error:Xu,complete:br},Jn=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Ht(t){return t}function Jr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Pa(t)}function Pa(t){return t.length===0?Ht:t.length===1?t[0]:function(i){return t.reduce(function(r,n){return n(r)},i)}}var Ae=(function(){function t(e){e&&(this._subscribe=e)}return t.prototype.lift=function(e){var i=new t;return i.source=this,i.operator=e,i},t.prototype.subscribe=function(e,i,r){var n=this,s=Zu(e)?e:new _i(e,i,r);return Zr(function(){var a=n,o=a.operator,c=a.source;s.add(o?o.call(s,c):c?n._subscribe(s):n._trySubscribe(s))}),s},t.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(i){e.error(i)}},t.prototype.forEach=function(e,i){var r=this;return i=Oa(i),new i(function(n,s){var a=new _i({next:function(o){try{e(o)}catch(c){s(c),a.unsubscribe()}},error:s,complete:n});r.subscribe(a)})},t.prototype._subscribe=function(e){var i;return(i=this.source)===null||i===void 0?void 0:i.subscribe(e)},t.prototype[Jn]=function(){return this},t.prototype.pipe=function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];return Pa(e)(this)},t.prototype.toPromise=function(e){var i=this;return e=Oa(e),new e(function(r,n){var s;i.subscribe(function(a){return s=a},function(a){return n(a)},function(){return r(s)})})},t.create=function(e){return new t(e)},t})();function Oa(t){var e;return(e=t??Wu.Promise)!==null&&e!==void 0?e:Promise}function Ku(t){return t&&be(t.next)&&be(t.error)&&be(t.complete)}function Zu(t){return t&&t instanceof Qn||Ku(t)&&Ia(t)}function Qu(t){return be(t==null?void 0:t.lift)}function ge(t){return function(e){if(Qu(e))return e.lift(function(i){try{return t(i,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function ue(t,e,i,r,n){return new Ju(t,e,i,r,n)}var Ju=(function(t){Ye(e,t);function e(i,r,n,s,a,o){var c=t.call(this,i)||this;return c.onFinalize=a,c.shouldUnsubscribe=o,c._next=r?function(u){try{r(u)}catch(h){i.error(h)}}:t.prototype._next,c._error=s?function(u){try{s(u)}catch(h){i.error(h)}finally{this.unsubscribe()}}:t.prototype._error,c._complete=n?function(){try{n()}catch(u){i.error(u)}finally{this.unsubscribe()}}:t.prototype._complete,c}return e.prototype.unsubscribe=function(){var i;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;t.prototype.unsubscribe.call(this),!r&&((i=this.onFinalize)===null||i===void 0||i.call(this))}},e})(Qn),_a={schedule:function(t){var e=requestAnimationFrame,i=cancelAnimationFrame,r=e(function(n){i=void 0,t(n)});return new Oi(function(){return i==null?void 0:i(r)})},requestAnimationFrame:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return requestAnimationFrame.apply(void 0,ft([],gt(t)))},cancelAnimationFrame:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return cancelAnimationFrame.apply(void 0,ft([],gt(t)))},delegate:void 0},$u=Yr(function(t){return function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),Li=(function(t){Ye(e,t);function e(){var i=t.call(this)||this;return i.closed=!1,i.currentObservers=null,i.observers=[],i.isStopped=!1,i.hasError=!1,i.thrownError=null,i}return e.prototype.lift=function(i){var r=new La(this,this);return r.operator=i,r},e.prototype._throwIfClosed=function(){if(this.closed)throw new $u},e.prototype.next=function(i){var r=this;Zr(function(){var n,s;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var a=Ri(r.currentObservers),o=a.next();!o.done;o=a.next()){var c=o.value;c.next(i)}}catch(u){n={error:u}}finally{try{o&&!o.done&&(s=a.return)&&s.call(a)}finally{if(n)throw n.error}}}})},e.prototype.error=function(i){var r=this;Zr(function(){if(r._throwIfClosed(),!r.isStopped){r.hasError=r.isStopped=!0,r.thrownError=i;for(var n=r.observers;n.length;)n.shift().error(i)}})},e.prototype.complete=function(){var i=this;Zr(function(){if(i._throwIfClosed(),!i.isStopped){i.isStopped=!0;for(var r=i.observers;r.length;)r.shift().complete()}})},e.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(e.prototype,"observed",{get:function(){var i;return((i=this.observers)===null||i===void 0?void 0:i.length)>0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(i){return this._throwIfClosed(),t.prototype._trySubscribe.call(this,i)},e.prototype._subscribe=function(i){return this._throwIfClosed(),this._checkFinalizedStatuses(i),this._innerSubscribe(i)},e.prototype._innerSubscribe=function(i){var r=this,n=this,s=n.hasError,a=n.isStopped,o=n.observers;return s||a?Da:(this.currentObservers=null,o.push(i),new Oi(function(){r.currentObservers=null,Kr(o,i)}))},e.prototype._checkFinalizedStatuses=function(i){var r=this,n=r.hasError,s=r.thrownError,a=r.isStopped;n?i.error(s):a&&i.complete()},e.prototype.asObservable=function(){var i=new Ae;return i.source=this,i},e.create=function(i,r){return new La(i,r)},e})(Ae),La=(function(t){Ye(e,t);function e(i,r){var n=t.call(this)||this;return n.destination=i,n.source=r,n}return e.prototype.next=function(i){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.next)===null||n===void 0||n.call(r,i)},e.prototype.error=function(i){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.error)===null||n===void 0||n.call(r,i)},e.prototype.complete=function(){var i,r;(r=(i=this.destination)===null||i===void 0?void 0:i.complete)===null||r===void 0||r.call(i)},e.prototype._subscribe=function(i){var r,n;return(n=(r=this.source)===null||r===void 0?void 0:r.subscribe(i))!==null&&n!==void 0?n:Da},e})(Li),ed=(function(t){Ye(e,t);function e(i){var r=t.call(this)||this;return r._value=i,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(i){var r=t.prototype._subscribe.call(this,i);return!r.closed&&i.next(this._value),r},e.prototype.getValue=function(){var i=this,r=i.hasError,n=i.thrownError,s=i._value;if(r)throw n;return this._throwIfClosed(),s},e.prototype.next=function(i){t.prototype.next.call(this,this._value=i)},e})(Li),$n={now:function(){return($n.delegate||Date).now()},delegate:void 0},es=(function(t){Ye(e,t);function e(i,r,n){i===void 0&&(i=1/0),r===void 0&&(r=1/0),n===void 0&&(n=$n);var s=t.call(this)||this;return s._bufferSize=i,s._windowTime=r,s._timestampProvider=n,s._buffer=[],s._infiniteTimeWindow=!0,s._infiniteTimeWindow=r===1/0,s._bufferSize=Math.max(1,i),s._windowTime=Math.max(1,r),s}return e.prototype.next=function(i){var r=this,n=r.isStopped,s=r._buffer,a=r._infiniteTimeWindow,o=r._timestampProvider,c=r._windowTime;n||(s.push(i),!a&&s.push(o.now()+c)),this._trimBuffer(),t.prototype.next.call(this,i)},e.prototype._subscribe=function(i){this._throwIfClosed(),this._trimBuffer();for(var r=this._innerSubscribe(i),n=this,s=n._infiniteTimeWindow,a=n._buffer,o=a.slice(),c=0;c<o.length&&!i.closed;c+=s?1:2)i.next(o[c]);return this._checkFinalizedStatuses(i),r},e.prototype._trimBuffer=function(){var i=this,r=i._bufferSize,n=i._timestampProvider,s=i._buffer,a=i._infiniteTimeWindow,o=(a?1:2)*r;if(r<1/0&&o<s.length&&s.splice(0,s.length-o),!a){for(var c=n.now(),u=0,h=1;h<s.length&&s[h]<=c;h+=2)u=h;u&&s.splice(0,u+1)}},e})(Li),td=(function(t){Ye(e,t);function e(i,r){return t.call(this)||this}return e.prototype.schedule=function(i,r){return this},e})(Oi),Fa={setInterval:function(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];return setInterval.apply(void 0,ft([t,e],gt(i)))},clearInterval:function(t){return clearInterval(t)},delegate:void 0},ts=(function(t){Ye(e,t);function e(i,r){var n=t.call(this,i,r)||this;return n.scheduler=i,n.work=r,n.pending=!1,n}return e.prototype.schedule=function(i,r){var n;if(r===void 0&&(r=0),this.closed)return this;this.state=i;var s=this.id,a=this.scheduler;return s!=null&&(this.id=this.recycleAsyncId(a,s,r)),this.pending=!0,this.delay=r,this.id=(n=this.id)!==null&&n!==void 0?n:this.requestAsyncId(a,this.id,r),this},e.prototype.requestAsyncId=function(i,r,n){return n===void 0&&(n=0),Fa.setInterval(i.flush.bind(i,this),n)},e.prototype.recycleAsyncId=function(i,r,n){if(n===void 0&&(n=0),n!=null&&this.delay===n&&this.pending===!1)return r;r!=null&&Fa.clearInterval(r)},e.prototype.execute=function(i,r){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(i,r);if(n)return n;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(i,r){var n=!1,s;try{this.work(i)}catch(a){n=!0,s=a||new Error("Scheduled action threw falsy error")}if(n)return this.unsubscribe(),s},e.prototype.unsubscribe=function(){if(!this.closed){var i=this,r=i.id,n=i.scheduler,s=n.actions;this.work=this.state=this.scheduler=null,this.pending=!1,Kr(s,this),r!=null&&(this.id=this.recycleAsyncId(n,r,null)),this.delay=null,t.prototype.unsubscribe.call(this)}},e})(td),id=1,is,rs={};function Na(t){return t in rs?(delete rs[t],!0):!1}var Ua={setImmediate:function(t){var e=id++;return rs[e]=!0,is||(is=Promise.resolve()),is.then(function(){return Na(e)&&t()}),e},clearImmediate:function(t){Na(t)}},rd=Ua.setImmediate,nd=Ua.clearImmediate,Ba={setImmediate:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return rd.apply(void 0,ft([],gt(t)))},clearImmediate:function(t){return nd(t)},delegate:void 0},sd=(function(t){Ye(e,t);function e(i,r){var n=t.call(this,i,r)||this;return n.scheduler=i,n.work=r,n}return e.prototype.requestAsyncId=function(i,r,n){return n===void 0&&(n=0),n!==null&&n>0?t.prototype.requestAsyncId.call(this,i,r,n):(i.actions.push(this),i._scheduled||(i._scheduled=Ba.setImmediate(i.flush.bind(i,void 0))))},e.prototype.recycleAsyncId=function(i,r,n){var s;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,i,r,n);var a=i.actions;r!=null&&((s=a[a.length-1])===null||s===void 0?void 0:s.id)!==r&&(Ba.clearImmediate(r),i._scheduled===r&&(i._scheduled=void 0))},e})(ts),za=(function(){function t(e,i){i===void 0&&(i=t.now),this.schedulerActionCtor=e,this.now=i}return t.prototype.schedule=function(e,i,r){return i===void 0&&(i=0),new this.schedulerActionCtor(this,e).schedule(r,i)},t.now=$n.now,t})(),ns=(function(t){Ye(e,t);function e(i,r){r===void 0&&(r=za.now);var n=t.call(this,i,r)||this;return n.actions=[],n._active=!1,n}return e.prototype.flush=function(i){var r=this.actions;if(this._active){r.push(i);return}var n;this._active=!0;do if(n=i.execute(i.state,i.delay))break;while(i=r.shift());if(this._active=!1,n){for(;i=r.shift();)i.unsubscribe();throw n}},e})(za),ad=(function(t){Ye(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(i){this._active=!0;var r=this._scheduled;this._scheduled=void 0;var n=this.actions,s;i=i||n.shift();do if(s=i.execute(i.state,i.delay))break;while((i=n[0])&&i.id===r&&n.shift());if(this._active=!1,s){for(;(i=n[0])&&i.id===r&&n.shift();)i.unsubscribe();throw s}},e})(ns),Va=new ad(sd),mr=new ns(ts),od=mr,cd=(function(t){Ye(e,t);function e(i,r){var n=t.call(this,i,r)||this;return n.scheduler=i,n.work=r,n}return e.prototype.requestAsyncId=function(i,r,n){return n===void 0&&(n=0),n!==null&&n>0?t.prototype.requestAsyncId.call(this,i,r,n):(i.actions.push(this),i._scheduled||(i._scheduled=_a.requestAnimationFrame(function(){return i.flush(void 0)})))},e.prototype.recycleAsyncId=function(i,r,n){var s;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,i,r,n);var a=i.actions;r!=null&&r===i._scheduled&&((s=a[a.length-1])===null||s===void 0?void 0:s.id)!==r&&(_a.cancelAnimationFrame(r),i._scheduled=void 0)},e})(ts),ld=(function(t){Ye(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.flush=function(i){this._active=!0;var r;i?r=i.id:(r=this._scheduled,this._scheduled=void 0);var n=this.actions,s;i=i||n.shift();do if(s=i.execute(i.state,i.delay))break;while((i=n[0])&&i.id===r&&n.shift());if(this._active=!1,s){for(;(i=n[0])&&i.id===r&&n.shift();)i.unsubscribe();throw s}},e})(ns),Ha=new ld(cd),ai=new Ae(function(t){return t.complete()});function ja(t){return t&&be(t.schedule)}function ss(t){return t[t.length-1]}function Wa(t){return be(ss(t))?t.pop():void 0}function yr(t){return ja(ss(t))?t.pop():void 0}function ud(t,e){return typeof ss(t)=="number"?t.pop():e}var Ga=(function(t){return t&&typeof t.length=="number"&&typeof t!="function"});function qa(t){return be(t==null?void 0:t.then)}function Xa(t){return be(t[Jn])}function Ya(t){return Symbol.asyncIterator&&be(t==null?void 0:t[Symbol.asyncIterator])}function Ka(t){return new TypeError("You provided "+(t!==null&&typeof t=="object"?"an invalid object":"'"+t+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function dd(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Za=dd();function Qa(t){return be(t==null?void 0:t[Za])}function Ja(t){return Hu(this,arguments,function(){var i,r,n,s;return xa(this,function(a){switch(a.label){case 0:i=t.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Pi(i.read())];case 3:return r=a.sent(),n=r.value,s=r.done,s?[4,Pi(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Pi(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return i.releaseLock(),[7];case 10:return[2]}})})}function $a(t){return be(t==null?void 0:t.getReader)}function xe(t){if(t instanceof Ae)return t;if(t!=null){if(Xa(t))return hd(t);if(Ga(t))return pd(t);if(qa(t))return gd(t);if(Ya(t))return eo(t);if(Qa(t))return fd(t);if($a(t))return vd(t)}throw Ka(t)}function hd(t){return new Ae(function(e){var i=t[Jn]();if(be(i.subscribe))return i.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function pd(t){return new Ae(function(e){for(var i=0;i<t.length&&!e.closed;i++)e.next(t[i]);e.complete()})}function gd(t){return new Ae(function(e){t.then(function(i){e.closed||(e.next(i),e.complete())},function(i){return e.error(i)}).then(null,Ra)})}function fd(t){return new Ae(function(e){var i,r;try{for(var n=Ri(t),s=n.next();!s.done;s=n.next()){var a=s.value;if(e.next(a),e.closed)return}}catch(o){i={error:o}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}e.complete()})}function eo(t){return new Ae(function(e){bd(t,e).catch(function(i){return e.error(i)})})}function vd(t){return eo(Ja(t))}function bd(t,e){var i,r,n,s;return Vu(this,void 0,void 0,function(){var a,o;return xa(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),i=ju(t),c.label=1;case 1:return[4,i.next()];case 2:if(r=c.sent(),!!r.done)return[3,4];if(a=r.value,e.next(a),e.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return o=c.sent(),n={error:o},[3,11];case 6:return c.trys.push([6,,9,10]),r&&!r.done&&(s=i.return)?[4,s.call(i)]:[3,8];case 7:c.sent(),c.label=8;case 8:return[3,10];case 9:if(n)throw n.error;return[7];case 10:return[7];case 11:return e.complete(),[2]}})})}function Ot(t,e,i,r,n){r===void 0&&(r=0),n===void 0&&(n=!1);var s=e.schedule(function(){i(),n?t.add(this.schedule(null,r)):this.unsubscribe()},r);if(t.add(s),!n)return s}function $r(t,e){return e===void 0&&(e=0),ge(function(i,r){i.subscribe(ue(r,function(n){return Ot(r,t,function(){return r.next(n)},e)},function(){return Ot(r,t,function(){return r.complete()},e)},function(n){return Ot(r,t,function(){return r.error(n)},e)}))})}function to(t,e){return e===void 0&&(e=0),ge(function(i,r){r.add(t.schedule(function(){return i.subscribe(r)},e))})}function md(t,e){return xe(t).pipe(to(e),$r(e))}function yd(t,e){return xe(t).pipe(to(e),$r(e))}function wd(t,e){return new Ae(function(i){var r=0;return e.schedule(function(){r===t.length?i.complete():(i.next(t[r++]),i.closed||this.schedule())})})}function Sd(t,e){return new Ae(function(i){var r;return Ot(i,e,function(){r=t[Za](),Ot(i,e,function(){var n,s,a;try{n=r.next(),s=n.value,a=n.done}catch(o){i.error(o);return}a?i.complete():i.next(s)},0,!0)}),function(){return be(r==null?void 0:r.return)&&r.return()}})}function io(t,e){if(!t)throw new Error("Iterable cannot be null");return new Ae(function(i){Ot(i,e,function(){var r=t[Symbol.asyncIterator]();Ot(i,e,function(){r.next().then(function(n){n.done?i.complete():i.next(n.value)})},0,!0)})})}function Cd(t,e){return io(Ja(t),e)}function Ad(t,e){if(t!=null){if(Xa(t))return md(t,e);if(Ga(t))return wd(t,e);if(qa(t))return yd(t,e);if(Ya(t))return io(t,e);if(Qa(t))return Sd(t,e);if($a(t))return Cd(t,e)}throw Ka(t)}function Oe(t,e){return e?Ad(t,e):xe(t)}function St(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t);return Oe(t,i)}function Td(t,e){var i=be(t)?t:function(){return t},r=function(n){return n.error(i())};return new Ae(r)}var wr=Yr(function(t){return function(){t(this),this.name="EmptyError",this.message="no elements in sequence"}});function ro(t,e){return new Promise(function(i,r){var n=!1,s;t.subscribe({next:function(a){s=a,n=!0},error:r,complete:function(){n?i(s):r(new wr)}})})}function Ke(t,e){return new Promise(function(i,r){var n=new _i({next:function(s){i(s),n.unsubscribe()},error:r,complete:function(){r(new wr)}});t.subscribe(n)})}function no(t){return t instanceof Date&&!isNaN(t)}var so=Yr(function(t){return function(i){i===void 0&&(i=null),t(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=i}});function Sr(t,e){var i=no(t)?{first:t}:typeof t=="number"?{each:t}:t,r=i.first,n=i.each,s=i.with,a=s===void 0?Ed:s,o=i.scheduler,c=o===void 0?mr:o,u=i.meta,h=u===void 0?null:u;if(r==null&&n==null)throw new TypeError("No timeout provided.");return ge(function(p,v){var C,O,A=null,R=0,D=function(b){O=Ot(v,c,function(){try{C.unsubscribe(),xe(a({meta:h,lastValue:A,seen:R})).subscribe(v)}catch(m){v.error(m)}},b)};C=p.subscribe(ue(v,function(b){O==null||O.unsubscribe(),R++,v.next(A=b),n>0&&D(n)},void 0,void 0,function(){O!=null&&O.closed||O==null||O.unsubscribe(),A=null})),!R&&D(r!=null?typeof r=="number"?r:+r-c.now():n)})}function Ed(t){throw new so(t)}function x(t,e){return ge(function(i,r){var n=0;i.subscribe(ue(r,function(s){r.next(t.call(e,s,n++))}))})}var kd=Array.isArray;function xd(t,e){return kd(e)?t.apply(void 0,ft([],gt(e))):t(e)}function Dd(t){return x(function(e){return xd(t,e)})}var Id=Array.isArray,Md=Object.getPrototypeOf,Rd=Object.prototype,Pd=Object.keys;function Od(t){if(t.length===1){var e=t[0];if(Id(e))return{args:e,keys:null};if(_d(e)){var i=Pd(e);return{args:i.map(function(r){return e[r]}),keys:i}}}return{args:t,keys:null}}function _d(t){return t&&typeof t=="object"&&Md(t)===Rd}function Ld(t,e){return t.reduce(function(i,r,n){return i[r]=e[n],i},{})}function ao(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t),r=Wa(t),n=Od(t),s=n.args,a=n.keys;if(s.length===0)return Oe([],i);var o=new Ae(Fd(s,i,a?function(c){return Ld(a,c)}:Ht));return r?o.pipe(Dd(r)):o}function Fd(t,e,i){return i===void 0&&(i=Ht),function(r){oo(e,function(){for(var n=t.length,s=new Array(n),a=n,o=n,c=function(h){oo(e,function(){var p=Oe(t[h],e),v=!1;p.subscribe(ue(r,function(C){s[h]=C,v||(v=!0,o--),o||r.next(i(s.slice()))},function(){--a||r.complete()}))},r)},u=0;u<n;u++)c(u)},r)}}function oo(t,e,i){t?Ot(i,t,e):e()}function Nd(t,e,i,r,n,s,a,o){var c=[],u=0,h=0,p=!1,v=function(){p&&!c.length&&!u&&e.complete()},C=function(A){return u<r?O(A):c.push(A)},O=function(A){u++;var R=!1;xe(i(A,h++)).subscribe(ue(e,function(D){e.next(D)},function(){R=!0},void 0,function(){if(R)try{u--;for(var D=function(){var b=c.shift();a||O(b)};c.length&&u<r;)D();v()}catch(b){e.error(b)}}))};return t.subscribe(ue(e,C,function(){p=!0,v()})),function(){}}function as(t,e,i){return i===void 0&&(i=1/0),be(e)?as(function(r,n){return x(function(s,a){return e(r,s,n,a)})(xe(t(r,n)))},i):(typeof e=="number"&&(i=e),ge(function(r,n){return Nd(r,n,t,i)}))}function co(t){return t===void 0&&(t=1/0),as(Ht,t)}function Ud(){return co(1)}function lo(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Ud()(Oe(t,yr(t)))}function oi(t){return new Ae(function(e){xe(t()).subscribe(e)})}function Fi(t,e,i){t===void 0&&(t=0),i===void 0&&(i=od);var r=-1;return e!=null&&(ja(e)?i=e:r=e),new Ae(function(n){var s=no(t)?+t-i.now():t;s<0&&(s=0);var a=0;return i.schedule(function(){n.closed||(n.next(a++),0<=r?this.schedule(void 0,r):n.complete())},s)})}function en(t,e){return t===void 0&&(t=0),e===void 0&&(e=mr),t<0&&(t=0),Fi(t,t,e)}function Ni(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t),r=ud(t,1/0),n=t;return n.length?n.length===1?xe(n[0]):co(r)(Oe(n,i)):ai}var Bd=new Ae(br),zd=Array.isArray;function Vd(t){return t.length===1&&zd(t[0])?t[0]:t}function z(t,e){return ge(function(i,r){var n=0;i.subscribe(ue(r,function(s){return t.call(e,s,n++)&&r.next(s)}))})}function Cr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t=Vd(t),t.length===1?xe(t[0]):new Ae(Hd(t))}function Hd(t){return function(e){for(var i=[],r=function(s){i.push(xe(t[s]).subscribe(ue(e,function(a){if(i){for(var o=0;o<i.length;o++)o!==s&&i[o].unsubscribe();i=null}e.next(a)})))},n=0;i&&!e.closed&&n<t.length;n++)r(n)}}function jd(t){return ge(function(e,i){var r=!1,n=null,s=null,a=!1,o=function(){if(s==null||s.unsubscribe(),s=null,r){r=!1;var u=n;n=null,i.next(u)}a&&i.complete()},c=function(){s=null,a&&i.complete()};e.subscribe(ue(i,function(u){r=!0,n=u,s||xe(t(u)).subscribe(s=ue(i,o,c))},function(){a=!0,(!r||!s||s.closed)&&i.complete()}))})}function Wd(t,e){return e===void 0&&(e=mr),jd(function(){return Fi(t,e)})}function ci(t){return ge(function(e,i){var r=null,n=!1,s;r=e.subscribe(ue(i,void 0,void 0,function(a){s=xe(t(a,ci(t)(e))),r?(r.unsubscribe(),r=null,s.subscribe(i)):n=!0})),n&&(r.unsubscribe(),r=null,s.subscribe(i))})}function uo(t,e,i,r,n){return function(s,a){var o=i,c=e,u=0;s.subscribe(ue(a,function(h){var p=u++;c=o?t(c,h,p):(o=!0,h),r&&a.next(c)},n&&(function(){o&&a.next(c),a.complete()})))}}function Gd(t,e){return ge(uo(t,e,arguments.length>=2,!1,!0))}var qd=function(t,e){return t.push(e),t};function Xd(){return ge(function(t,e){Gd(qd,[])(t).subscribe(e)})}function ho(t,e){return e===void 0&&(e=mr),ge(function(i,r){var n=null,s=null,a=null,o=function(){if(n){n.unsubscribe(),n=null;var u=s;s=null,r.next(u)}};function c(){var u=a+t,h=e.now();if(h<u){n=this.schedule(void 0,u-h),r.add(n);return}o()}i.subscribe(ue(r,function(u){s=u,a=e.now(),n||(n=e.schedule(c,t),r.add(n))},function(){o(),r.complete()},void 0,function(){s=n=null}))})}function Yd(t){return ge(function(e,i){var r=!1;e.subscribe(ue(i,function(n){r=!0,i.next(n)},function(){r||i.next(t),i.complete()}))})}function _e(t){return t<=0?function(){return ai}:ge(function(e,i){var r=0;e.subscribe(ue(i,function(n){++r<=t&&(i.next(n),t<=r&&i.complete())}))})}function U(t,e){return e===void 0&&(e=Ht),t=t??Kd,ge(function(i,r){var n,s=!0;i.subscribe(ue(r,function(a){var o=e(a);(s||!t(n,o))&&(s=!1,n=o,r.next(a))}))})}function Kd(t,e){return t===e}function Zd(t){return t===void 0&&(t=Qd),ge(function(e,i){var r=!1;e.subscribe(ue(i,function(n){r=!0,i.next(n)},function(){return r?i.complete():i.error(t())}))})}function Qd(){return new wr}function os(t,e){return ge(function(i,r){var n=0,s=null,a=!1;i.subscribe(ue(r,function(o){s||(s=ue(r,void 0,function(){s=null,a&&r.complete()}),xe(t(o,n++)).subscribe(s))},function(){a=!0,!s&&r.complete()}))})}function po(t,e){var i=arguments.length>=2;return function(r){return r.pipe(Ht,_e(1),i?Yd(e):Zd(function(){return new wr}))}}function go(t,e){return ge(uo(t,e,arguments.length>=2,!0))}function Ct(t){t===void 0&&(t={});var e=t.connector,i=e===void 0?function(){return new Li}:e,r=t.resetOnError,n=r===void 0?!0:r,s=t.resetOnComplete,a=s===void 0?!0:s,o=t.resetOnRefCountZero,c=o===void 0?!0:o;return function(u){var h,p,v,C=0,O=!1,A=!1,R=function(){p==null||p.unsubscribe(),p=void 0},D=function(){R(),h=v=void 0,O=A=!1},b=function(){var m=h;D(),m==null||m.unsubscribe()};return ge(function(m,y){C++,!A&&!O&&R();var w=v=v??i();y.add(function(){C--,C===0&&!A&&!O&&(p=cs(b,c))}),w.subscribe(y),!h&&C>0&&(h=new _i({next:function(k){return w.next(k)},error:function(k){A=!0,R(),p=cs(D,n,k),w.error(k)},complete:function(){O=!0,R(),p=cs(D,a),w.complete()}}),xe(m).subscribe(h))})(u)}}function cs(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];if(e===!0){t();return}if(e!==!1){var n=new _i({next:function(){n.unsubscribe(),t()}});return xe(e.apply(void 0,ft([],gt(i)))).subscribe(n)}}function st(t,e,i){var r,n=!1;return r=t,Ct({connector:function(){return new es(r,e,i)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function tn(t){return z(function(e,i){return t<=i})}function Jd(t){return ge(function(e,i){var r=!1,n=0;e.subscribe(ue(i,function(s){return(r||(r=!t(s,n++)))&&i.next(s)}))})}function $d(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t);return ge(function(r,n){(i?lo(t,r,i):lo(t,r)).subscribe(n)})}function Je(t,e){return ge(function(i,r){var n=null,s=0,a=!1,o=function(){return a&&!n&&r.complete()};i.subscribe(ue(r,function(c){n==null||n.unsubscribe();var u=0,h=s++;xe(t(c,h)).subscribe(n=ue(r,function(p){return r.next(e?e(c,p,h,u++):p)},function(){n=null,o()}))},function(){a=!0,o()}))})}function S(t){return ge(function(e,i){xe(t).subscribe(ue(i,function(){return i.complete()},br)),!i.closed&&e.subscribe(i)})}function Ee(t,e,i){var r=be(t)||e||i?{next:t,error:e,complete:i}:t;return r?ge(function(n,s){var a;(a=r.subscribe)===null||a===void 0||a.call(r);var o=!0;n.subscribe(ue(s,function(c){var u;(u=r.next)===null||u===void 0||u.call(r,c),s.next(c)},function(){var c;o=!1,(c=r.complete)===null||c===void 0||c.call(r),s.complete()},function(c){var u;o=!1,(u=r.error)===null||u===void 0||u.call(r,c),s.error(c)},function(){var c,u;o&&((c=r.unsubscribe)===null||c===void 0||c.call(r)),(u=r.finalize)===null||u===void 0||u.call(r)}))}):Ht}function fo(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=Wa(t);return ge(function(r,n){for(var s=t.length,a=new Array(s),o=t.map(function(){return!1}),c=!1,u=function(p){xe(t[p]).subscribe(ue(n,function(v){a[p]=v,!c&&!o[p]&&(o[p]=!0,(c=o.every(Ht))&&(o=null))},br))},h=0;h<s;h++)u(h);r.subscribe(ue(n,function(p){if(c){var v=ft([p],gt(a));n.next(i?i.apply(void 0,ft([],gt(v))):v)}}))})}var vo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function rn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var nn={exports:{}},eh=nn.exports,bo;function th(){return bo||(bo=1,(function(t){(function(e,i){t.exports?t.exports=i():e.log=i()})(eh,function(){var e=function(){},i="undefined",r=typeof window!==i&&typeof window.navigator!==i&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],s={},a=null;function o(A,R){var D=A[R];if(typeof D.bind=="function")return D.bind(A);try{return Function.prototype.bind.call(D,A)}catch{return function(){return Function.prototype.apply.apply(D,[A,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(A){return A==="debug"&&(A="log"),typeof console===i?!1:A==="trace"&&r?c:console[A]!==void 0?o(console,A):console.log!==void 0?o(console,"log"):e}function h(){for(var A=this.getLevel(),R=0;R<n.length;R++){var D=n[R];this[D]=R<A?e:this.methodFactory(D,A,this.name)}if(this.log=this.debug,typeof console===i&&A<this.levels.SILENT)return"No console available for logging"}function p(A){return function(){typeof console!==i&&(h.call(this),this[A].apply(this,arguments))}}function v(A,R,D){return u(A)||p.apply(this,arguments)}function C(A,R){var D=this,b,m,y,w="loglevel";typeof A=="string"?w+=":"+A:typeof A=="symbol"&&(w=void 0);function k(X){var $=(n[X]||"silent").toUpperCase();if(!(typeof window===i||!w)){try{window.localStorage[w]=$;return}catch{}try{window.document.cookie=encodeURIComponent(w)+"="+$+";"}catch{}}}function F(){var X;if(!(typeof window===i||!w)){try{X=window.localStorage[w]}catch{}if(typeof X===i)try{var $=window.document.cookie,Ut=encodeURIComponent(w),Ei=$.indexOf(Ut+"=");Ei!==-1&&(X=/^([^;]+)/.exec($.slice(Ei+Ut.length+1))[1])}catch{}return D.levels[X]===void 0&&(X=void 0),X}}function Z(){if(!(typeof window===i||!w)){try{window.localStorage.removeItem(w)}catch{}try{window.document.cookie=encodeURIComponent(w)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function N(X){var $=X;if(typeof $=="string"&&D.levels[$.toUpperCase()]!==void 0&&($=D.levels[$.toUpperCase()]),typeof $=="number"&&$>=0&&$<=D.levels.SILENT)return $;throw new TypeError("log.setLevel() called with invalid level: "+X)}D.name=A,D.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},D.methodFactory=R||v,D.getLevel=function(){return y??m??b},D.setLevel=function(X,$){return y=N(X),$!==!1&&k(y),h.call(D)},D.setDefaultLevel=function(X){m=N(X),F()||D.setLevel(X,!1)},D.resetLevel=function(){y=null,Z(),h.call(D)},D.enableAll=function(X){D.setLevel(D.levels.TRACE,X)},D.disableAll=function(X){D.setLevel(D.levels.SILENT,X)},D.rebuild=function(){if(a!==D&&(b=N(a.getLevel())),h.call(D),a===D)for(var X in s)s[X].rebuild()},b=N(a?a.getLevel():"WARN");var ie=F();ie!=null&&(y=N(ie)),h.call(D)}a=new C,a.getLogger=function(R){if(typeof R!="symbol"&&typeof R!="string"||R==="")throw new TypeError("You must supply a name when creating a logger.");var D=s[R];return D||(D=s[R]=new C(R,a.methodFactory)),D};var O=typeof window!==i?window.log:void 0;return a.noConflict=function(){return typeof window!==i&&window.log===a&&(window.log=O),a},a.getLoggers=function(){return s},a.default=a,a})})(nn)),nn.exports}var ih=th();const rh=rn(ih),nh=1e3,mo=600,yo=6e3,sh=300*1e3,ah=1e4,oh=100,ch=3e3,lh=1500,uh=0,wo="sw:preferences",dh="sat:refresh",So="/api/fabric/subscriber/devices/token",Co="/api/fabric/subscriber/devices/refresh",sn=900,Ao=3e4,To=3,hh=1e3,Eo=5,ph=1e3,gh=3e4,fh=5e3,vh=3e4,ko=-32003,xo=-32602,Do=-32002,bh=["NotAllowedError","SecurityError","PermissionDeniedError"],mh=1e3,yh=10,wh=2e3,Sh=3,Ch=.05,Ah=4,Th=30,Eh=3,kh=3e3,xh=1e4,Dh=1e4,Ih=3,Mh=5e3,Rh=2e3,Ph=1e4,Oh=3e3,_h=5e3,Lh=3,Fh=1e4,Nh=5e3,Uh=100,Io=33,Bh=.03,zh=250,Vh=!0,Hh=!0,jh="sw:device:audioinput",Wh="sw:device:audiooutput",Gh="sw:device:videoinput",qh=!1,Xh=!0,Yh=!0,Kh=!0,Zh=150,Qh=300,Jh=!0,$h=!0,ep=!0,tp=!1,ip=51e4;var Ui=class extends Error{constructor(t,e){super(`Unexpected Error${t?` at ${t}`:""}`,e),this.at=t,this.name="UnexpectedError"}},At=class extends Error{constructor(t="Not Implemented",e){super(t,e),this.reason=t,this.name="UnimplementedError"}},li=class extends Error{constructor(t="Invalid Credentials",e){super(t,e),this.reason=t,this.name="InvalidCredentialsError"}},Mo=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketConnectionError"}},Ro=class extends Error{constructor(t,e){super(t,e),this.name="TransportConnectionError"}},rp=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketTimeoutError"}},Po=class extends Error{constructor(t,e){super(t,e),this.name="RequestTimeoutError"}},np=class extends Error{constructor(t,e){super(t,e),this.name="RequestError"}},an=class extends Error{constructor(t,e,i){super(`RPC request ${t} timed out after ${e}ms`,i),this.requestId=t,this.timeoutMs=e,this.name="RPCTimeoutError"}},ls=class extends Error{constructor(t=null,e){super("Error handling authorization state update",{...e,cause:(e==null?void 0:e.cause)??(t instanceof Error?t:void 0)}),this.error=t,this.name="AuthStateHandlerError"}},us=class extends Error{constructor(t="localStorage",e){super(`${t} is not available in this environment`,e),this.storageType=t,this.name="StorageNotAvailableError"}},sp=class extends Error{constructor(t,e){super(`Failed to serialize value for key "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="SerializationError"}},ap=class extends Error{constructor(t,e){super(`Failed to deserialize value for key "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="DeserializationError"}},ds=class extends Error{constructor(t,e){super(`Failed to write to storage for key "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="StorageWriteError"}},op=class extends Error{constructor(t,e){super(`Failed to read from storage "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="StorageReadError"}},te=class extends Error{constructor(t,e){super(`Dependency ${t} is not set or available.`,e),this.description=t,this.name="DependencyError"}},Oo=class extends Error{constructor(t,e=null,i="outbound",r){super(t,{...r,cause:(r==null?void 0:r.cause)??(e instanceof Error?e:void 0)}),this.message=t,this.error=e,this.direction=i,this.name="CallCreateError"}},_t=class extends Error{constructor(t,e,i,r,n){super(e,r),this.code=t,this.data=i,this.requestId=n,this.name="JSONRPCError"}},hs=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="InvalidParams"}},_o=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="ConversationError"}},cp=class extends Error{constructor(t=null,e){super("Error handling Verto invite",{...e,cause:(e==null?void 0:e.cause)??(t instanceof Error?t:void 0)}),this.error=t,this.name="VertoInviteHandlerError"}},lp=class extends Error{constructor(t=null,e){super("Error handling Verto attach",{...e,cause:(e==null?void 0:e.cause)??(t instanceof Error?t:void 0)}),this.error=t,this.name="VertoAttachHandlerError"}},on=class extends Error{constructor(t,e){super(t,e),this.name="ValidationError"}},Lo=class extends Error{constructor(t){super("Failed to send Verto pong - call may disconnect",{cause:t instanceof Error?t:void 0}),this.originalError=t,this.name="VertoPongError"}},up=class extends Error{constructor(t){super("Failed to parse incoming WebSocket message",{cause:t instanceof Error?t:void 0}),this.originalError=t,this.name="MessageParseError"}},Fo=class extends Error{constructor(t,e){super(`Collection fetch failed during ${t}`,{cause:e instanceof Error?e:void 0}),this.operation=t,this.originalError=e,this.name="CollectionFetchError"}},Tt=class extends Error{constructor(t,e,i){super(`Media track ${t} failed for ${e}`,{cause:i instanceof Error?i:void 0}),this.operation=t,this.kind=e,this.originalError=i,this.name="MediaTrackError"}};function No(t){return t instanceof Error&&bh.includes(t.name)}var jt=class extends Error{constructor(t,e,i,r=!1){super(`Media access ${No(i)?"denied":"failed"} for ${t} (${e})`,{cause:i instanceof Error?i:void 0}),this.operation=t,this.media=e,this.originalError=i,this.fatal=r,this.name="MediaAccessError"}get denied(){return No(this.originalError)}},cn=class extends Error{constructor(t,e="Failed to initialize DPoP key pair"){super(e,{cause:t instanceof Error?t:void 0}),this.originalError=t,this.name="DPoPInitError"}},dp=class extends Error{constructor(t,e){super(`Preflight test failed during ${t}`,{cause:e instanceof Error?e:void 0}),this.phase=t,this.originalError=e,this.name="PreflightError"}},Uo=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="DeviceTokenError"}},ui=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="TokenRefreshError"}};const hp=()=>new Date().toISOString(),Bi=rh.getLogger("signalwire"),pp=Bi.methodFactory;Bi.methodFactory=(t,e,i)=>{const r=pp(t,e,i);return function(...n){const s=[hp(),"-",...n];r.apply(void 0,s)}};const gp=Bi.levels.WARN;Bi.setLevel(gp);let Bo=null;const fp=t=>{Bo=t};let ln={};const vp=t=>{if(t==null){ln={};return}ln={...ln,...t}},bp=t=>{Bi.setLevel(t)},ps=()=>Bo??Bi,mp=t=>t!=null&&typeof t=="object"&&"method"in t?t.method!=="signalwire.ping":!0,yp=t=>{const{logWsTraffic:e}=ln;if(!e)return;const i=ps();let r;if("raw"in t)try{r=JSON.parse(t.raw)}catch{i.debug(`[WebSocket] ${t.type.toUpperCase()}: non-JSON message`);return}else({payload:r}=t);const n=mp(r)?JSON.stringify(r,null,2):r;i.debug(`${t.type.toUpperCase()}:
|
|
66
66
|
`,n,`
|
|
67
|
-
`)},W=()=>{const t=$n();return new Proxy(t,{get(e,i,r){if(i==="wsTraffic")return Zd;const n=$n(),s=Reflect.get(n,i);return typeof s=="function"?s.bind(n):s}})};function ue(){return B(t=>t!=null)}const it=(t,e,i)=>{const r=e.split(".");let n=t;for(const s of r)if(n&&typeof n=="object"&&s in n)n=n[s];else return i;return n===void 0?i:n};function Qd(t,e){return Vr(B(t),E(e))}function fe(t,e){return Vr(Qd(t,i=>it(i,e)),B(i=>i!==void 0))}const lo=W();function uo(){return E(t=>{if(t.error)throw lo.error("[throwOnRPCError] RPC error response:",{code:t.error.code,message:t.error.message,data:t.error.data}),new Lt(t.error.code,t.error.message,t.error.data);return lo.debug("[throwOnRPCError] RPC successful response:",t),t})}class ur extends Error{}ur.prototype.name="InvalidTokenError";function Jd(t){return decodeURIComponent(atob(t).replace(/(.)/g,(e,i)=>{let r=i.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r}))}function $d(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return Jd(e)}catch{return atob(e)}}function eh(t,e){if(typeof t!="string")throw new ur("Invalid token specified: must be a string");e||(e={});const i=e.header===!0?0:1,r=t.split(".")[i];if(typeof r!="string")throw new ur(`Invalid token specified: missing part #${i+1}`);let n;try{n=$d(r)}catch(s){throw new ur(`Invalid token specified: invalid base64 for part #${i+1} (${s.message})`)}try{return JSON.parse(n)}catch(s){throw new ur(`Invalid token specified: invalid json for part #${i+1} (${s.message})`)}}const Pe=[];for(let t=0;t<256;++t)Pe.push((t+256).toString(16).slice(1));function th(t,e=0){return(Pe[t[e+0]]+Pe[t[e+1]]+Pe[t[e+2]]+Pe[t[e+3]]+"-"+Pe[t[e+4]]+Pe[t[e+5]]+"-"+Pe[t[e+6]]+Pe[t[e+7]]+"-"+Pe[t[e+8]]+Pe[t[e+9]]+"-"+Pe[t[e+10]]+Pe[t[e+11]]+Pe[t[e+12]]+Pe[t[e+13]]+Pe[t[e+14]]+Pe[t[e+15]]).toLowerCase()}const ih=new Uint8Array(16);function rh(){return crypto.getRandomValues(ih)}function Jr(t,e,i){return crypto.randomUUID?crypto.randomUUID():nh(t)}function nh(t,e,i){var n;t=t||{};const r=t.random??((n=t.rng)==null?void 0:n.call(t))??rh();if(r.length<16)throw new Error("Random bytes length must be >= 16");return r[6]=r[6]&15|64,r[8]=r[8]&63|128,th(r)}var te=class{constructor(){this.subscriptions=[],this.subjects=[],this._destroyed$=new xi}destroy(){var t;(t=this._observableCache)==null||t.clear(),this.subscriptions.forEach(e=>e.unsubscribe()),this.subjects.forEach(e=>e.complete()),this._destroyed$.next(),this._destroyed$.complete()}cachedObservable(t,e){this._observableCache??(this._observableCache=new Map);let i=this._observableCache.get(t);return i||(i=e(),this._observableCache.set(t,i)),i}publicCachedObservable(t,e){const i=`public:${t}`;this._observableCache??(this._observableCache=new Map);let r=this._observableCache.get(i);return r||(r=e().pipe(Hr(Aa)),this._observableCache.set(i,r)),r}deferEmission(t){return t.pipe(Hr(Aa))}subscribeTo(t,e){const i=t.subscribe(e);this.subscriptions.push(i)}createSubject(){const t=new xi;return this.subjects.push(t),t}createReplaySubject(t,e){const i=new Vn(t,e);return this.subjects.push(i),i}createBehaviorSubject(t){const e=new Mu(t);return this.subjects.push(e),e}get destroyed$(){return this._destroyed$.asObservable()}};const sh=10,ah=100,oh=1,ch=({delayLimit:t=Number.MAX_SAFE_INTEGER,initialDelay:e=ah,variation:i=oh})=>{if(e<0)throw new Kr("initialDelay must be gte 0");if(t<0)throw new Kr("upperDelayLimit must be gte 0");if(i<0)throw new Kr("variation must be gte 0");if(e>t)throw new Kr("initialDelay must be lte delayLimit");let r=Math.min(e,t);return()=>{if(r===t)return t;const n=r;return r=Math.min(r+i,t),n}},lh=async({asyncCallable:t,maxRetries:e=sh,delayFn:i,validator:r,expectedErrorHandler:n})=>{let s=e-1,a=0;const o=async()=>{try{let c;return a<=0?c=await t():c=await new Promise((u,h)=>setTimeout(()=>{t().then(u).catch(h)},a)),s&&(r==null||r(c)),c}catch(c){if(s-- >0&&!(n!=null&&n(c)))return a=(i==null?void 0:i())??0,W().debug(`Retrying request: ${e-s} of ${e}`),o();throw c}};return o()},Oi=W(),es={method:"GET",headers:{Accept:"application/json"}},$r={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};var uh=(je=class extends te{constructor(e,i,r={}){super(),this.baseURL=e,this.getCredential=i,this._responses$=this.createSubject(),this._errors$=this.createSubject(),this._status$=this.createBehaviorSubject("idle"),this.maxRetries=r.maxRetries??je.defaultMaxRetries,this.retryDelayMin=r.retryDelayMin??je.defaultRetryDelayMinMs,this.retryDelayMax=r.retryDelayMax??je.defaultRetryDelayMaxMs,this.requestTimeout=r.requestTimeout??je.defaultRequestTimeoutMs}get status$(){return this._status$.asObservable()}get status(){return this._status$.value}get responses$(){return this._responses$.asObservable()}get errors$(){return this._errors$.asObservable()}async request(e){this._status$.next("requesting");try{const i=await this.executeWithRetry(e);return this._status$.next("success"),this._responses$.next(i),i}catch(i){Oi.error("[HTTPRequestController] Request error:",i),this._status$.next("error");const r=i instanceof Error?i:new Error("HTTP request failed",{cause:i});throw this._errors$.next(r),r}}async executeWithRetry(e){const i=Math.ceil((this.retryDelayMax-this.retryDelayMin)/Math.max(this.maxRetries-1,1)),r=ch({initialDelay:this.retryDelayMin,variation:i,delayLimit:this.retryDelayMax});return lh({asyncCallable:async()=>this.executeRequest(e),maxRetries:this.maxRetries,delayFn:r,validator:n=>{if(n.status>=500&&n.status<600)throw new Mi(`Server error: ${n.status} ${n.statusText}`)}})}async executeRequest(e){const i=this.buildURL(e.url),r=this.buildHeaders(e.headers),n=e.timeout??this.requestTimeout;Oi.debug("[HTTPRequestController] Executing request:",{method:e.method,url:i,headers:Object.keys(r).reduce((o,c)=>(o[c]=c==="Authorization"?`${r[c].substring(0,20)}...`:r[c],o),{}),body:this.sanitizeBody(e.body)});const s=new AbortController,a=setTimeout(()=>s.abort(),n);try{const o=await fetch(i,{method:e.method,headers:r,body:e.body,signal:s.signal});clearTimeout(a);const c=await this.convertResponse(o);return Oi.debug("[HTTPRequestController] Response received:",{status:o.status,statusText:o.statusText,headers:[...o.headers.entries()],body:c.body?c.body.substring(0,200):"(empty)"}),c}catch(o){throw clearTimeout(a),o instanceof Error&&o.name==="AbortError"?new to(`Request timeout after ${n}ms`,{cause:o}):(Oi.error("[HTTPRequestController] Request failed:",o),o)}}buildURL(e){const i=typeof e=="string"?e:e.toString();return i.startsWith("http://")||i.startsWith("https://")?i:`${this.baseURL.endsWith("/")?this.baseURL.slice(0,-1):this.baseURL}${i.startsWith("/")?i:`/${i}`}`}buildHeaders(e){const i={...e??{}},r=this.getCredential();return r.token?(i.Authorization=`Bearer ${r.token}`,Oi.debug("[HTTPRequestController] Using Bearer token auth, token length:",r.token.length)):Oi.warn("[HTTPRequestController] No credentials available for authentication"),i}sanitizeBody(e){if(!e||typeof e!="string")return e?"(non-string body)":void 0;try{const i={...JSON.parse(e)};for(const r of Object.keys(i))je.SENSITIVE_BODY_FIELDS.has(r)&&typeof i[r]=="string"&&(i[r]=`${i[r].substring(0,20)}...[redacted]`);return JSON.stringify(i)}catch{return e.length>200?`${e.substring(0,200)}...`:e}}async convertResponse(e){const i={};e.headers.forEach((n,s)=>{i[s]=n});const r=await e.text();return{status:e.status,statusText:e.statusText,headers:i,body:r,ok:e.ok,url:e.url}}},je.defaultMaxRetries=3,je.defaultRetryDelayMinMs=1e3,je.defaultRetryDelayMaxMs=3e4,je.defaultRequestTimeoutMs=3e4,je.SENSITIVE_BODY_FIELDS=new Set(["dpop_token","token","jwt_token"]),je);const dh=5,hh=(t,e)=>({deviceId:t.deviceId,label:t.label,groupId:t.groupId,kind:e});var ph=class{constructor(){this._stacks={audioinput:[],audiooutput:[],videoinput:[]}}push(t,e){const i=hh(e,t),r=this._stacks[t];if(r.length>0&&r[0].deviceId===i.deviceId)return;const n=r.filter(s=>s.deviceId!==i.deviceId);this._stacks[t]=[i,...n].slice(0,dh)}pop(t){const e=this._stacks[t];if(e.length===0)return;const[i,...r]=e;return this._stacks[t]=r,i}findInHistory(t,e){const i=this._stacks[t];for(const r of i){const n=e.find(a=>a.deviceId===r.deviceId);if(n)return n;const s=e.find(a=>a.groupId===r.groupId&&a.label===r.label);if(s)return s}}getHistory(t){return this._stacks[t]}clear(){this._stacks.audioinput=[],this._stacks.audiooutput=[],this._stacks.videoinput=[]}};const gh=1e3,ho=600,po=6e3,fh=300*1e3,vh=1e4,bh=100,mh=3e3,yh=1500,wh=0,go="sw:preferences",Sh="sat:refresh",fo="/api/fabric/subscriber/devices/token",vo="/api/fabric/subscriber/devices/refresh",en=900,bo=3e4,mo=3,Ch=1e3,yo=5,Ah=1e3,Th=3e4,Eh=5e3,kh=3e4,wo=-32003,So=-32602,Co=-32002,xh=1e3,Dh=10,Ih=2e3,Mh=3,Rh=.05,Ph=4,Oh=30,_h=3,Lh=3e3,Fh=1e4,Uh=1e4,Nh=3,Bh=5e3,zh=2e3,Vh=1e4,Hh=3e3,jh=5e3,Wh=3,Gh=1e4,qh=5e3,Xh=100,Ao=33,Yh=.03,Kh=250,Zh=!0,Qh=!0,Jh="sw:device:audioinput",$h="sw:device:audiooutput",ep="sw:device:videoinput",tp=!1,ip=!0,rp=!0,np=!0,sp=150,ap=300,op=!0,cp=!0,lp=!0,up=!1,dp=51e4;function rt(t){return t*1e3}function nt(t){return Math.round(t/100)/10}const To=W();var g=class Gl{static get instance(){return this._instance??(this._instance=new Gl),this._instance}constructor(){this.deviceDebounceTime=yh,this.devicePollingInterval=wh,this.reconnectCallsTimeout=fh,this.connectionTimeout=vh,this.reconnectDelayMin=bh,this.reconnectDelayMax=mh,this.disableUdpIceServers=!1,this.relayOnly=!1,this.iceCandidateTimeout=ho,this.iceGatheringTimeout=po,this.defaultSignalWireOptions={skipConnection:!1,skipRegister:!1,reconnectAttachedCalls:!1,skipDeviceMonitoring:!1,savePreferences:!1},this.receiveVideo=!1,this.receiveAudio=!0,this.preferredAudioInput=null,this.preferredAudioOutput=null,this.preferredVideoInput=null,this.inviteSubscribeScreenshare=["video.room.screenshare"],this.inviteSubscribeAdditionalDevice=[],this.inviteSubscribeMainDevice=["track","destroy","member.updated.videoMuted","layout.changed","room.subscribed","member.updated.audioMuted","media.connected","room.updated","call.joined"],this.userVariables={},this.statsPollingInterval=xh,this.statsBaselineSamples=Dh,this.statsNoPacketThreshold=Ih,this.statsRttSpikeMultiplier=Mh,this.statsPacketLossThreshold=Rh,this.statsJitterSpikeMultiplier=Ph,this.statsHistorySize=Oh,this.keyframeMaxBurst=_h,this.keyframeBurstWindow=Lh,this.keyframeCooldown=Fh,this.reinviteDebounceTime=Uh,this.reinviteMaxAttempts=Nh,this.reinviteTimeout=Bh,this.recoveryDebounceTime=zh,this.recoveryCooldown=Vh,this.iceDisconnectedGracePeriod=Hh,this.iceRestartTimeout=jh,this.maxRecoveryAttempts=Wh,this.enableRelayFallback=op,this.enableNetworkChangeDetection=cp,this.enableServerHangupInterception=lp,this.persistDeviceSelection=Zh,this.syncDevicesToActiveCalls=Qh,this.autoMuteVideoOnHidden=tp,this.refreshDevicesOnVisible=ip,this.checkConnectionOnVisible=rp,this.defaultAudioConstraints=void 0,this.defaultVideoConstraints=void 0,this.stereoAudio=up,this.enableAutoDegradation=np,this.degradationBitrateThreshold=sp,this.degradationRecoveryThreshold=ap,this.preferredVideoCodecs=[],this.preferredAudioCodecs=[]}get preferredMediaOptions(){return{receiveVideo:this.receiveVideo,receiveAudio:this.receiveAudio,inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints}}get inputAudioDeviceConstraints(){return this._inputAudioDeviceConstraints}set inputAudioDeviceConstraints(e){this._inputAudioDeviceConstraints=e}get inputVideoDeviceConstraints(){return this._inputVideoDeviceConstraints}set inputVideoDeviceConstraints(e){this._inputVideoDeviceConstraints=e}};const hp=["connectionTimeout","reconnectCallsTimeout","reconnectDelayMin","reconnectDelayMax","iceCandidateTimeout","iceGatheringTimeout","deviceDebounceTime","devicePollingInterval","statsPollingInterval","statsBaselineSamples","statsNoPacketThreshold","statsRttSpikeMultiplier","statsPacketLossThreshold","statsJitterSpikeMultiplier","statsHistorySize","keyframeMaxBurst","keyframeBurstWindow","keyframeCooldown","reinviteDebounceTime","reinviteMaxAttempts","reinviteTimeout","recoveryDebounceTime","recoveryCooldown","iceDisconnectedGracePeriod","iceRestartTimeout","maxRecoveryAttempts","degradationBitrateThreshold","degradationRecoveryThreshold"],pp=["receiveVideo","receiveAudio","disableUdpIceServers","relayOnly","enableRelayFallback","enableNetworkChangeDetection","enableServerHangupInterception","persistDeviceSelection","syncDevicesToActiveCalls","autoMuteVideoOnHidden","refreshDevicesOnVisible","checkConnectionOnVisible","stereoAudio","enableAutoDegradation"];function gp(){const t=g.instance;return{connectionTimeout:t.connectionTimeout,reconnectCallsTimeout:t.reconnectCallsTimeout,reconnectDelayMin:t.reconnectDelayMin,reconnectDelayMax:t.reconnectDelayMax,relayHost:t.relayHost,receiveVideo:t.receiveVideo,receiveAudio:t.receiveAudio,disableUdpIceServers:t.disableUdpIceServers,relayOnly:t.relayOnly,iceCandidateTimeout:t.iceCandidateTimeout,iceGatheringTimeout:t.iceGatheringTimeout,deviceDebounceTime:t.deviceDebounceTime,devicePollingInterval:t.devicePollingInterval,iceServers:t.iceServers,userVariables:t.userVariables,statsPollingInterval:t.statsPollingInterval,statsBaselineSamples:t.statsBaselineSamples,statsNoPacketThreshold:t.statsNoPacketThreshold,statsRttSpikeMultiplier:t.statsRttSpikeMultiplier,statsPacketLossThreshold:t.statsPacketLossThreshold,statsJitterSpikeMultiplier:t.statsJitterSpikeMultiplier,statsHistorySize:t.statsHistorySize,keyframeMaxBurst:t.keyframeMaxBurst,keyframeBurstWindow:t.keyframeBurstWindow,keyframeCooldown:t.keyframeCooldown,reinviteDebounceTime:t.reinviteDebounceTime,reinviteMaxAttempts:t.reinviteMaxAttempts,reinviteTimeout:t.reinviteTimeout,recoveryDebounceTime:t.recoveryDebounceTime,recoveryCooldown:t.recoveryCooldown,iceDisconnectedGracePeriod:t.iceDisconnectedGracePeriod,iceRestartTimeout:t.iceRestartTimeout,maxRecoveryAttempts:t.maxRecoveryAttempts,enableRelayFallback:t.enableRelayFallback,enableNetworkChangeDetection:t.enableNetworkChangeDetection,enableServerHangupInterception:t.enableServerHangupInterception,persistDeviceSelection:t.persistDeviceSelection,syncDevicesToActiveCalls:t.syncDevicesToActiveCalls,autoMuteVideoOnHidden:t.autoMuteVideoOnHidden,refreshDevicesOnVisible:t.refreshDevicesOnVisible,checkConnectionOnVisible:t.checkConnectionOnVisible,stereoAudio:t.stereoAudio,enableAutoDegradation:t.enableAutoDegradation,degradationBitrateThreshold:t.degradationBitrateThreshold,degradationRecoveryThreshold:t.degradationRecoveryThreshold,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs}}function fp(t){const e=g.instance;for(const i of hp)t[i]!==void 0&&(e[i]=t[i]);for(const i of pp)t[i]!==void 0&&(e[i]=t[i]);t.relayHost!==void 0&&(e.relayHost=t.relayHost),t.iceServers!==void 0&&(e.iceServers=t.iceServers),t.userVariables!==void 0&&(e.userVariables=t.userVariables),t.preferredVideoCodecs!==void 0&&(e.preferredVideoCodecs=t.preferredVideoCodecs),t.preferredAudioCodecs!==void 0&&(e.preferredAudioCodecs=t.preferredAudioCodecs)}var vp=class{constructor(){this._storage=null}enableSavePreferences(t){this._storage=t,this._loadFromStorage()}get connectionTimeout(){return nt(g.instance.connectionTimeout)}set connectionTimeout(t){g.instance.connectionTimeout=rt(t),this._saveToStorage()}get reconnectCallsTimeout(){return nt(g.instance.reconnectCallsTimeout)}set reconnectCallsTimeout(t){g.instance.reconnectCallsTimeout=rt(t),this._saveToStorage()}get reconnectDelayMin(){return nt(g.instance.reconnectDelayMin)}set reconnectDelayMin(t){g.instance.reconnectDelayMin=rt(t),this._saveToStorage()}get reconnectDelayMax(){return nt(g.instance.reconnectDelayMax)}set reconnectDelayMax(t){g.instance.reconnectDelayMax=rt(t),this._saveToStorage()}get relayHost(){return g.instance.relayHost??""}set relayHost(t){g.instance.relayHost=t,this._saveToStorage()}get receiveVideo(){return g.instance.receiveVideo}set receiveVideo(t){g.instance.receiveVideo=t,this._saveToStorage()}get receiveAudio(){return g.instance.receiveAudio}set receiveAudio(t){g.instance.receiveAudio=t,this._saveToStorage()}get preferredAudioInput(){return g.instance.preferredAudioInput}set preferredAudioInput(t){g.instance.preferredAudioInput=t}get preferredAudioOutput(){return g.instance.preferredAudioOutput}set preferredAudioOutput(t){g.instance.preferredAudioOutput=t}get preferredVideoInput(){return g.instance.preferredVideoInput}set preferredVideoInput(t){g.instance.preferredVideoInput=t}get inputAudioConstraints(){return g.instance.inputAudioDeviceConstraints}set inputAudioConstraints(t){g.instance.inputAudioDeviceConstraints=t}get inputVideoConstraints(){return g.instance.inputVideoDeviceConstraints}set inputVideoConstraints(t){g.instance.inputVideoDeviceConstraints=t}get deviceDebounceTime(){return nt(g.instance.deviceDebounceTime)}set deviceDebounceTime(t){g.instance.deviceDebounceTime=rt(t),this._saveToStorage()}get devicePollingInterval(){return nt(g.instance.devicePollingInterval)}set devicePollingInterval(t){g.instance.devicePollingInterval=rt(t),this._saveToStorage()}get disableUdpIceServers(){return g.instance.disableUdpIceServers}set disableUdpIceServers(t){g.instance.disableUdpIceServers=t,this._saveToStorage()}get relayOnly(){return g.instance.relayOnly}set relayOnly(t){g.instance.relayOnly=t,this._saveToStorage()}get iceCandidateTimeout(){return nt(g.instance.iceCandidateTimeout)}set iceCandidateTimeout(t){g.instance.iceCandidateTimeout=rt(t),this._saveToStorage()}get iceGatheringTimeout(){return nt(g.instance.iceGatheringTimeout)}set iceGatheringTimeout(t){g.instance.iceGatheringTimeout=rt(t),this._saveToStorage()}get iceServers(){return g.instance.iceServers}set iceServers(t){g.instance.iceServers=t,this._saveToStorage()}get userVariables(){return g.instance.userVariables}set userVariables(t){g.instance.userVariables=t,this._saveToStorage()}get statsPollingInterval(){return g.instance.statsPollingInterval}set statsPollingInterval(t){g.instance.statsPollingInterval=t,this._saveToStorage()}get statsBaselineSamples(){return g.instance.statsBaselineSamples}set statsBaselineSamples(t){g.instance.statsBaselineSamples=t,this._saveToStorage()}get statsNoPacketThreshold(){return g.instance.statsNoPacketThreshold}set statsNoPacketThreshold(t){g.instance.statsNoPacketThreshold=t,this._saveToStorage()}get statsRttSpikeMultiplier(){return g.instance.statsRttSpikeMultiplier}set statsRttSpikeMultiplier(t){g.instance.statsRttSpikeMultiplier=t,this._saveToStorage()}get statsPacketLossThreshold(){return g.instance.statsPacketLossThreshold}set statsPacketLossThreshold(t){g.instance.statsPacketLossThreshold=t,this._saveToStorage()}get statsJitterSpikeMultiplier(){return g.instance.statsJitterSpikeMultiplier}set statsJitterSpikeMultiplier(t){g.instance.statsJitterSpikeMultiplier=t,this._saveToStorage()}get statsHistorySize(){return g.instance.statsHistorySize}set statsHistorySize(t){g.instance.statsHistorySize=t,this._saveToStorage()}get keyframeMaxBurst(){return g.instance.keyframeMaxBurst}set keyframeMaxBurst(t){g.instance.keyframeMaxBurst=t,this._saveToStorage()}get keyframeBurstWindow(){return g.instance.keyframeBurstWindow}set keyframeBurstWindow(t){g.instance.keyframeBurstWindow=t,this._saveToStorage()}get keyframeCooldown(){return g.instance.keyframeCooldown}set keyframeCooldown(t){g.instance.keyframeCooldown=t,this._saveToStorage()}get reinviteDebounceTime(){return g.instance.reinviteDebounceTime}set reinviteDebounceTime(t){g.instance.reinviteDebounceTime=t,this._saveToStorage()}get reinviteMaxAttempts(){return g.instance.reinviteMaxAttempts}set reinviteMaxAttempts(t){g.instance.reinviteMaxAttempts=t,this._saveToStorage()}get reinviteTimeout(){return g.instance.reinviteTimeout}set reinviteTimeout(t){g.instance.reinviteTimeout=t,this._saveToStorage()}get recoveryDebounceTime(){return nt(g.instance.recoveryDebounceTime)}set recoveryDebounceTime(t){g.instance.recoveryDebounceTime=rt(t),this._saveToStorage()}get recoveryCooldown(){return nt(g.instance.recoveryCooldown)}set recoveryCooldown(t){g.instance.recoveryCooldown=rt(t),this._saveToStorage()}get iceDisconnectedGracePeriod(){return nt(g.instance.iceDisconnectedGracePeriod)}set iceDisconnectedGracePeriod(t){g.instance.iceDisconnectedGracePeriod=rt(t),this._saveToStorage()}get iceRestartTimeout(){return nt(g.instance.iceRestartTimeout)}set iceRestartTimeout(t){g.instance.iceRestartTimeout=rt(t),this._saveToStorage()}get maxRecoveryAttempts(){return g.instance.maxRecoveryAttempts}set maxRecoveryAttempts(t){g.instance.maxRecoveryAttempts=t,this._saveToStorage()}get enableRelayFallback(){return g.instance.enableRelayFallback}set enableRelayFallback(t){g.instance.enableRelayFallback=t,this._saveToStorage()}get enableNetworkChangeDetection(){return g.instance.enableNetworkChangeDetection}set enableNetworkChangeDetection(t){g.instance.enableNetworkChangeDetection=t,this._saveToStorage()}get enableServerHangupInterception(){return g.instance.enableServerHangupInterception}set enableServerHangupInterception(t){g.instance.enableServerHangupInterception=t,this._saveToStorage()}get persistDeviceSelection(){return g.instance.persistDeviceSelection}set persistDeviceSelection(t){g.instance.persistDeviceSelection=t,this._saveToStorage()}get syncDevicesToActiveCalls(){return g.instance.syncDevicesToActiveCalls}set syncDevicesToActiveCalls(t){g.instance.syncDevicesToActiveCalls=t,this._saveToStorage()}get autoMuteVideoOnHidden(){return g.instance.autoMuteVideoOnHidden}set autoMuteVideoOnHidden(t){g.instance.autoMuteVideoOnHidden=t,this._saveToStorage()}get refreshDevicesOnVisible(){return g.instance.refreshDevicesOnVisible}set refreshDevicesOnVisible(t){g.instance.refreshDevicesOnVisible=t,this._saveToStorage()}get checkConnectionOnVisible(){return g.instance.checkConnectionOnVisible}set checkConnectionOnVisible(t){g.instance.checkConnectionOnVisible=t,this._saveToStorage()}get defaultAudioConstraints(){return g.instance.defaultAudioConstraints}set defaultAudioConstraints(t){g.instance.defaultAudioConstraints=t}get defaultVideoConstraints(){return g.instance.defaultVideoConstraints}set defaultVideoConstraints(t){g.instance.defaultVideoConstraints=t}get stereoAudio(){return g.instance.stereoAudio}set stereoAudio(t){g.instance.stereoAudio=t,this._saveToStorage()}get enableAutoDegradation(){return g.instance.enableAutoDegradation}set enableAutoDegradation(t){g.instance.enableAutoDegradation=t,this._saveToStorage()}get degradationBitrateThreshold(){return g.instance.degradationBitrateThreshold}set degradationBitrateThreshold(t){g.instance.degradationBitrateThreshold=t,this._saveToStorage()}get degradationRecoveryThreshold(){return g.instance.degradationRecoveryThreshold}set degradationRecoveryThreshold(t){g.instance.degradationRecoveryThreshold=t,this._saveToStorage()}get preferredVideoCodecs(){return g.instance.preferredVideoCodecs}set preferredVideoCodecs(t){g.instance.preferredVideoCodecs=t,this._saveToStorage()}get preferredAudioCodecs(){return g.instance.preferredAudioCodecs}set preferredAudioCodecs(t){g.instance.preferredAudioCodecs=t,this._saveToStorage()}_saveToStorage(){if(!this._storage)return;const t=gp();this._storage.setItem(go,t,"local").catch(e=>{To.error(`[ClientPreferences] Failed to save preferences: ${String(e)}`)})}_loadFromStorage(){this._storage&&this._storage.getItem(go,"local").then(t=>{t&&fp(t)}).catch(t=>{To.error(`[ClientPreferences] Failed to load preferences: ${String(t)}`)})}};function vt(t){return t instanceof Error?t:new Error(String(t))}const st=W(),Eo={audioinput:Jh,audiooutput:$h,videoinput:ep},bp={audioinput:[],audiooutput:[],videoinput:[]},ko={audioinput:null,audiooutput:null,videoinput:null};var mp=class extends te{constructor(t,e){super(),this.webRTCApiProvider=t,this.deviceChangeHandler=()=>{st.debug("[DeviceController] Device change detected"),this.enumerateDevices()},this._devicesState$=this.createBehaviorSubject(bp),this._selectedDevicesState$=this.createBehaviorSubject(ko),this._errors$=this.createReplaySubject(1),this._deviceHistory=new ph,this._deviceRecovered$=this.createSubject(),this._audioInputDisabled$=this.createBehaviorSubject(!1),this._videoInputDisabled$=this.createBehaviorSubject(!1),this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._persistedDevices={},this._storageManager=e,this.init()}setStorageManager(t){this._storageManager=t,this.loadPersistedDevices()}get selectedAudioInputDeviceConstraints(){return this._audioInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedAudioInputDevice)}get selectedVideoInputDeviceConstraints(){return this._videoInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedVideoInputDevice)}deviceInfoToConstraints(t){if(!(t!=null&&t.deviceId)||t.deviceId.trim()==="")return{};const e=t.kind==="audioinput"?this.audioInputDevices:this.videoInputDevices,i=e.find(r=>r.deviceId===t.deviceId)??e.find(r=>r.label===t.label);return i?{deviceId:{exact:i.deviceId}}:{}}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(w(this.destroyed$)))}get deviceRecovered$(){return this._deviceRecovered$.asObservable().pipe(w(this.destroyed$))}get videoInputDisabled$(){return this.cachedObservable("videoInputDisabled$",()=>this._videoInputDisabled$.asObservable().pipe(L(),w(this.destroyed$)))}get audioInputDisabled$(){return this.cachedObservable("audioInputDisabled$",()=>this._audioInputDisabled$.asObservable().pipe(L(),w(this.destroyed$)))}get videoInputDisabled(){return this._videoInputDisabled$.value}get audioInputDisabled(){return this._audioInputDisabled$.value}get audioInputDevices$(){return this.cachedObservable("audioInputDevices$",()=>this._devicesState$.pipe(E(t=>t.audioinput),L(),w(this.destroyed$)))}get audioOutputDevices$(){return this.cachedObservable("audioOutputDevices$",()=>this._devicesState$.pipe(E(t=>t.audiooutput),L(),w(this.destroyed$)))}get videoInputDevices$(){return this.cachedObservable("videoInputDevices$",()=>this._devicesState$.pipe(E(t=>t.videoinput),L(),w(this.destroyed$)))}get selectedAudioInputDevice$(){return this.cachedObservable("selectedAudioInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(E(t=>t.audioinput),L(),w(this.destroyed$),Se(t=>st.debug("[DeviceController] Selected audio input device changed:",t))))}get selectedAudioOutputDevice$(){return this.cachedObservable("selectedAudioOutputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(E(t=>t.audiooutput),L(),w(this.destroyed$),Se(t=>st.debug("[DeviceController] Selected audio output device changed:",t))))}get selectedVideoInputDevice$(){return this.cachedObservable("selectedVideoInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(E(t=>t.videoinput),L(),w(this.destroyed$),Se(t=>st.debug("[DeviceController] Selected video input device changed:",t))))}get selectedAudioInputDevice(){return this._audioInputDisabled$.value?null:this._selectedDevicesState$.value.audioinput}get selectedAudioOutputDevice(){return this._selectedDevicesState$.value.audiooutput}get selectedVideoInputDevice(){return this._videoInputDisabled$.value?null:this._selectedDevicesState$.value.videoinput}get audioInputDevices(){return this._devicesState$.value.audioinput}get audioOutputDevices(){return this._devicesState$.value.audiooutput}get videoInputDevices(){return this._devicesState$.value.videoinput}disableAudioInput(){this._audioInputDisabled$.value||(this._lastAudioInputBeforeDisable=this._selectedDevicesState$.value.audioinput,this._audioInputDisabled$.next(!0),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:null}))}enableAudioInput(){if(this._audioInputDisabled$.value){this._audioInputDisabled$.next(!1);const t=this._lastAudioInputBeforeDisable??this.audioInputDevices[0];this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:t}),this._lastAudioInputBeforeDisable=null}}disableVideoInput(){this._videoInputDisabled$.value||(this._lastVideoInputBeforeDisable=this._selectedDevicesState$.value.videoinput,this._videoInputDisabled$.next(!0),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:null}))}enableVideoInput(){if(this._videoInputDisabled$.value){this._videoInputDisabled$.next(!1);const t=this._lastVideoInputBeforeDisable??this.videoInputDevices[0];this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:t}),this._lastVideoInputBeforeDisable=null}}selectAudioInputDevice(t){this._audioInputDisabled$.value&&t&&this._audioInputDisabled$.next(!1);const e=this._selectedDevicesState$.value.audioinput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("audioinput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:t}),t&&this.persistDeviceSelection("audioinput",t)}selectVideoInputDevice(t){st.debug("[DeviceController] Setting selected video input device:",t),this._videoInputDisabled$.value&&t&&this._videoInputDisabled$.next(!1);const e=this._selectedDevicesState$.value.videoinput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("videoinput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:t}),t&&this.persistDeviceSelection("videoinput",t)}selectAudioOutputDevice(t){const e=this._selectedDevicesState$.value.audiooutput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("audiooutput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audiooutput:t}),t&&this.persistDeviceSelection("audiooutput",t)}init(){this.loadPersistedDevices(),this.subscribeTo(this._devicesState$.pipe(Xa(g.instance.deviceDebounceTime)),t=>{const e=this._selectedDevicesState$.value,i=this._audioInputDisabled$.value?null:this.resolveDevice("audioinput",t.audioinput,e.audioinput,g.instance.preferredAudioInput),r=this.resolveDevice("audiooutput",t.audiooutput,e.audiooutput,g.instance.preferredAudioOutput),n=this._videoInputDisabled$.value?null:this.resolveDevice("videoinput",t.videoinput,e.videoinput,g.instance.preferredVideoInput);if(i!==e.audioinput||r!==e.audiooutput||n!==e.videoinput){const s=g.instance.syncDevicesToActiveCalls;this._selectedDevicesState$.next({audioinput:s||!e.audioinput?i:e.audioinput,audiooutput:s||!e.audiooutput?r:e.audiooutput,videoinput:s||!e.videoinput?n:e.videoinput})}}),this.enumerateDevices()}resolveDevice(t,e,i,r){if(e.length===0)return null;if(i){if(e.find(c=>c.deviceId===i.deviceId))return i;const s=e.filter(c=>c.label===i.label);if(s.length===1)return s[0];if(s.length>1){const c=s.find(u=>u.groupId===i.groupId);return c||(this.emitDeviceRecovered(t,i,null,"ambiguous_match"),null)}const a=this._deviceHistory.findInHistory(t,e);if(a)return st.debug(`[DeviceController] Device disappeared, falling back to history: ${a.label}`),this.emitDeviceRecovered(t,i,a,"device_disconnected"),a;const o=(r?e.find(c=>c.deviceId===r.deviceId||c.label===r.label):void 0)??e[0];return this.emitDeviceRecovered(t,i,o,"fallback_to_default"),o}const n=this._persistedDevices[t];if(n){const s=this.resolvePersistedDevice(t,n,e);if(s)return s}if(r){const s=e.find(a=>a.deviceId===r.deviceId||a.label===r.label);if(s)return s}return e[0]}resolvePersistedDevice(t,e,i){const r=i.find(a=>a.deviceId===e.deviceId);if(r)return r;const n=i.find(a=>a.groupId===e.groupId&&a.label===e.label);if(n)return n;const s=i.filter(a=>a.label===e.label);return s.length===1?s[0]:null}emitDeviceRecovered(t,e,i,r){try{this._deviceRecovered$.next({kind:t,previousDevice:e,newDevice:i,reason:r})}catch{}}async persistDeviceSelection(t,e){if(!this._storageManager||!g.instance.persistDeviceSelection)return;const i={deviceId:e.deviceId,label:e.label,kind:e.kind,groupId:e.groupId};try{await this._storageManager.setItem(Eo[t],i,"local")}catch(r){st.error(`[DeviceController] Failed to persist device selection for ${t}:`,r)}}async loadPersistedDevices(){if(!(!this._storageManager||!g.instance.persistDeviceSelection))for(const t of["audioinput","audiooutput","videoinput"])try{const e=await this._storageManager.getItem(Eo[t],"local");e&&(this._persistedDevices={...this._persistedDevices,[t]:e})}catch(e){st.error(`[DeviceController] Failed to load persisted device for ${t}:`,e)}}async clearDeviceState(){this._deviceHistory.clear(),this._persistedDevices={},this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._audioInputDisabled$.next(!1),this._videoInputDisabled$.next(!1),this._selectedDevicesState$.next(ko),await this.enumerateDevices()}enableDeviceMonitoring(){this.disableDeviceMonitoring(),this.webRTCApiProvider.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler),g.instance.devicePollingInterval>0&&(this._devicesPoolingSubscription=Wr(g.instance.devicePollingInterval).subscribe(()=>{st.debug("[DeviceController] Polling devices due to interval"),this.enumerateDevices()})),this.enumerateDevices()}disableDeviceMonitoring(){this.webRTCApiProvider.mediaDevices.removeEventListener("devicechange",this.deviceChangeHandler),this._devicesPoolingSubscription&&(this._devicesPoolingSubscription.unsubscribe(),this._devicesPoolingSubscription=void 0)}async enumerateDevices(){try{const t=(await this.webRTCApiProvider.mediaDevices.enumerateDevices()).reduce((e,i)=>{const r=i.kind;return{...e,[r]:[...e[r],i]}},{audioinput:[],audiooutput:[],videoinput:[]});this._devicesState$.next(t),st.debug("[DeviceController] Devices enumerated:",{audioInputs:t.audioinput.length,audioOutputs:t.audiooutput.length,videoInputs:t.videoinput.length})}catch(t){st.error("[DeviceController] Failed to enumerate devices:",t),this._errors$.next(vt(t))}}async getDeviceCapabilities(t){if(t.kind==="audiooutput")return null;try{const e=this.deviceInfoToConstraints(t),i=await this.webRTCApiProvider.mediaDevices.getUserMedia({audio:t.kind==="audioinput"?e:!1,video:t.kind==="videoinput"?e:!1}),r=(t.kind==="audioinput"?i.getAudioTracks()[0]:i.getVideoTracks()[0]).getCapabilities();return i.getTracks().forEach(n=>n.stop()),r}catch(e){throw st.error("[DeviceController] Failed to get device capabilities:",e),this._errors$.next(vt(e)),e}}async isValidDevice(t){if(!t||t.kind==="audiooutput")return!1;try{return await this.getDeviceCapabilities(t)!==null}catch{return!1}}destroy(){this.disableDeviceMonitoring(),super.destroy()}},xo=class{constructor(){if(typeof localStorage>"u")throw new Qn("localStorage");if(typeof sessionStorage>"u")throw new Qn("sessionStorage");try{const t="__storage_test__";localStorage.setItem(t,"test"),localStorage.removeItem(t)}catch(t){throw W().error("LocalStorage is not accessible:",t),new Qn("localStorage")}}storage(t){return t==="local"?localStorage:sessionStorage}async setItem(t,e,i="session"){return this.storage(i).setItem(t,e),Promise.resolve()}async getItem(t,e="session"){return Promise.resolve(this.storage(e).getItem(t))}async removeItem(t,e="session"){return this.storage(e).removeItem(t),Promise.resolve()}async clear(t="session"){const e=this.storage(t),i=[];for(let r=0;r<e.length;r++){const n=e.key(r);n!=null&&n.startsWith("sw:")&&i.push(n)}for(const r of i)e.removeItem(r);return Promise.resolve()}},yp=class{constructor(t=new xo){this.storageImpl=t}serialize(t,e){if(t==null)return null;try{return JSON.stringify(t)}catch(i){throw new Fd(e??"unknown",i)}}async setItem(t,e,i="session"){const r=this.serialize(e,t);try{await this.storageImpl.setItem(t,r,i)}catch(n){throw new Jn(t,n)}}async getItem(t,e="session"){let i;try{i=await this.storageImpl.getItem(t,e)}catch(r){throw new Nd(t,r)}if(!i)return null;try{return JSON.parse(i)}catch(r){throw new Ud(t,r)}}async removeItem(t,e="session"){try{await this.storageImpl.removeItem(t,e)}catch(i){throw new Jn(t,i)}}async clearAll(){try{await this.storageImpl.clear("local"),await this.storageImpl.clear("session")}catch(t){throw new Jn("clearAll",t)}}},wp=class{constructor(){this.persistSession=!1,this._webSocketConstructor=typeof WebSocket<"u"?WebSocket:void 0,this._baseURL=this.apiHost,this._credential={}}get userId(){return this.user.id}get user(){if(!this._user)throw new Q("User");return this._user}set user(t){this._user=t}get storage(){return this._storageManager||(this._storageImpl??(this._storageImpl=new xo),this._storageManager=new yp(this._storageImpl)),this._storageManager}get http(){return this._httpRequestController??(this._httpRequestController=new uh(this._baseURL,()=>this._credential)),this._httpRequestController}get conversationManager(){if(!this._conversationManager)throw new Q("ConversationsManager");return this._conversationManager}set conversationManager(t){this._conversationManager=t}get WebSocket(){if(!this._webSocketConstructor)throw new Q("WebSocket constructor");return this._webSocketConstructor}set WebSocket(t){this._webSocketConstructor=t}get deviceController(){return this._deviceController??(this._deviceController=new mp(this.webRTCApiProvider,this.storage)),this._deviceController}get webRTCApiProvider(){if(!this._webRTCApiProvider){if(typeof RTCPeerConnection>"u"||typeof navigator>"u")throw new Q("WebRTCApiProvider: RTCPeerConnection or navigator.mediaDevices is not available. Please provide a custom webRTCApiProvider in SignalWireOptions.");this._webRTCApiProvider={RTCPeerConnection,mediaDevices:navigator.mediaDevices}}return this._webRTCApiProvider}set webRTCApiProvider(t){this._webRTCApiProvider=t,this._deviceController=void 0}get authorizationStateKey(){return`sw:${this.userId}:as`}get protocolKey(){return`sw:${this.userId}:pt`}get attachedCallsKey(){return`sw:${this.userId}:att`}getUserFromAddressId(){var t;return((t=this.user.addresses[0])==null?void 0:t.id)??""}set baseURL(t){this._baseURL=t,this._httpRequestController=void 0}get credential(){return this._credential}set credential(t){this._credential=t}set storageImpl(t){this._storageImpl=t,this._storageManager=void 0}set ch(t){if(!t)return;const e=t.indexOf(".");e!==-1&&(this._host=t.substring(0,e),this._domain=t.substring(e+1)),this._baseURL=this.apiHost,this._httpRequestController=void 0}get relayHost(){return`wss://${this._host??"puc"}.${this._domain??"signalwire.com"}`}get apiHost(){return`https://fabric.${this._domain??"signalwire.com"}`}};const qt=W(),Sp="sw-dpop",Cp=1,Xt="keys",ts="dpop-keypair",tn=t=>{const e=new Uint8Array(t);let i="";for(const r of e)i+=String.fromCharCode(r);return btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},Do=t=>tn(new TextEncoder().encode(t).buffer),Io=async t=>{if(t.kty!=="RSA")throw new Error(`Unsupported key type for JWK Thumbprint: ${t.kty}. Only RSA is supported.`);const e=JSON.stringify({e:t.e,kty:t.kty,n:t.n});return tn(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))};async function is(){return new Promise((t,e)=>{const i=indexedDB.open(Sp,Cp);i.onupgradeneeded=()=>{const r=i.result;r.objectStoreNames.contains(Xt)||r.createObjectStore(Xt)},i.onsuccess=()=>t(i.result),i.onerror=()=>e(i.error??new Error("Failed to open IndexedDB"))})}async function Ap(){try{const t=await is();return await new Promise((e,i)=>{const r=t.transaction(Xt,"readonly"),n=r.objectStore(Xt).get(ts);n.onsuccess=()=>e(n.result??null),n.onerror=()=>i(n.error??new Error("Failed to load key pair from IndexedDB")),r.oncomplete=()=>t.close()})}catch(t){return qt.warn("[DPoP] Failed to load key pair from IndexedDB:",t),null}}async function Tp(t){try{const e=await is();await new Promise((i,r)=>{const n=e.transaction(Xt,"readwrite");n.objectStore(Xt).put(t,ts),n.oncomplete=()=>{e.close(),i()},n.onerror=()=>{e.close(),r(n.error??new Error("Failed to save key pair to IndexedDB"))}})}catch(e){qt.warn("[DPoP] Failed to save key pair to IndexedDB:",e)}}async function Mo(){try{const t=await is();await new Promise((e,i)=>{const r=t.transaction(Xt,"readwrite");r.objectStore(Xt).delete(ts),r.oncomplete=()=>{t.close(),e()},r.onerror=()=>{t.close(),i(r.error??new Error("Failed to delete key pair from IndexedDB"))}})}catch(t){qt.warn("[DPoP] Failed to delete key pair from IndexedDB:",t)}}var Ep=class{constructor(){this._keyPair=null,this._publicJwk=null,this._fingerprint=null,this._initialized=!1}async init(){if(this._initialized)return this.fingerprint;const t=await Ap();if(t)try{const e=new TextEncoder().encode("dpop-key-check");return await crypto.subtle.sign("RSASSA-PKCS1-v1_5",t.privateKey,e),this._keyPair=t,this._publicJwk=await crypto.subtle.exportKey("jwk",t.publicKey),this._fingerprint=await Io(this._publicJwk),this._initialized=!0,qt.debug("[DPoP] Key pair restored from IndexedDB, fingerprint:",this._fingerprint),this._fingerprint}catch(e){qt.warn("[DPoP] Stored key pair unusable, generating new one:",e),await Mo()}return qt.debug("[DPoP] Generating RSA key pair"),this._keyPair=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!1,["sign","verify"]),this._publicJwk=await crypto.subtle.exportKey("jwk",this._keyPair.publicKey),this._fingerprint=await Io(this._publicJwk),this._initialized=!0,await Tp(this._keyPair),qt.debug("[DPoP] Key pair generated and persisted, fingerprint:",this._fingerprint),this._fingerprint}get fingerprint(){if(!this._fingerprint)throw new Zr("CryptoController not initialized. Call init() first.");return this._fingerprint}get initialized(){return this._initialized}async createHttpProof(t){const e={jti:crypto.randomUUID(),htm:t.method,htu:t.uri,iat:Math.floor(Date.now()/1e3)};return t.accessToken&&(e.ath=tn(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t.accessToken)))),this.signProof(e)}async createRpcProof(t){const e={jti:crypto.randomUUID(),rpc:"request",mth:t.method,iat:Math.floor(Date.now()/1e3)};return this.signProof(e)}destroy(){this._keyPair=null,this._publicJwk=null,this._fingerprint=null,this._initialized=!1,Mo(),qt.debug("[DPoP] Controller destroyed")}get publicJwk(){if(!this._publicJwk)throw new Zr("CryptoController not initialized. Call init() first.");return this._publicJwk}get privateKey(){if(!this._keyPair)throw new Zr("CryptoController not initialized. Call init() first.");return this._keyPair.privateKey}async signProof(t){const e={typ:"dpop+jwt",alg:"RS256",jwk:this.publicJwk},i=`${Do(JSON.stringify(e))}.${Do(JSON.stringify(t))}`;return`${i}.${tn(await crypto.subtle.sign("RSASSA-PKCS1-v1_5",this.privateKey,new TextEncoder().encode(i)))}`}};const _i=W();function Ro(){return typeof window<"u"&&typeof window.addEventListener=="function"}function Po(){if(typeof navigator>"u")return;const{connection:t}=navigator;return(t==null?void 0:t.effectiveType)??void 0}function Oo(){if(!(typeof navigator>"u"))return navigator.connection??void 0}var kp=class extends te{constructor(){super(),this._isOnline$=this.createBehaviorSubject(typeof navigator<"u"?navigator.onLine:!0),this._networkChange$=this.createSubject(),this._onOnline=this.handleOnline.bind(this),this._onOffline=this.handleOffline.bind(this),this._onConnectionChange=this.handleConnectionChange.bind(this),this._listenersAttached=!1,this.attachListeners()}get isOnline$(){return this._isOnline$.asObservable().pipe(w(this._destroyed$))}get isOnline(){return this._isOnline$.value}get networkChange$(){return this._networkChange$.asObservable().pipe(w(this._destroyed$))}destroy(){this.removeListeners(),super.destroy()}attachListeners(){if(!Ro()){_i.debug("NetworkMonitor: no browser environment detected, skipping event listeners");return}window.addEventListener("online",this._onOnline),window.addEventListener("offline",this._onOffline);const t=Oo();t&&t.addEventListener("change",this._onConnectionChange),this._listenersAttached=!0,_i.debug("NetworkMonitor: event listeners attached")}removeListeners(){if(this._listenersAttached){if(Ro()){window.removeEventListener("online",this._onOnline),window.removeEventListener("offline",this._onOffline);const t=Oo();t&&t.removeEventListener("change",this._onConnectionChange)}this._listenersAttached=!1,_i.debug("NetworkMonitor: event listeners removed")}}handleOnline(){_i.info("NetworkMonitor: browser went online"),this._isOnline$.next(!0),this._networkChange$.next({type:"online",timestamp:Date.now(),networkType:Po()})}handleOffline(){_i.info("NetworkMonitor: browser went offline"),this._isOnline$.next(!1),this._networkChange$.next({type:"offline",timestamp:Date.now()})}handleConnectionChange(){const t=Po();_i.info(`NetworkMonitor: connection changed — effectiveType=${t??"unknown"}`),this._networkChange$.next({type:"connection_change",timestamp:Date.now(),networkType:t})}};function _o(t){if(typeof RTCRtpSender>"u"||typeof RTCRtpSender.getCapabilities!="function")return[];const e=RTCRtpSender.getCapabilities(t);if(!e)return[];const i=new Set,r=[];for(const n of e.codecs){const s=xp(n.mimeType);s&&!i.has(s)&&(i.add(s),r.push(s))}return r}function xp(t){const e=t.indexOf("/");return e>=0?t.substring(e+1):t}function Dp(){return typeof globalThis>"u"?!1:"RTCRtpScriptTransform"in globalThis||"MediaStreamTrackProcessor"in globalThis}function Ip(){return typeof HTMLMediaElement>"u"?!1:"setSinkId"in HTMLMediaElement.prototype}function Mp(){return typeof RTCRtpSender>"u"?!1:typeof RTCRtpSender.prototype.setParameters=="function"}function Lo(t){const e=(t==null?void 0:t.mediaDevices)??Fo(),i=typeof(e==null?void 0:e.getUserMedia)=="function",r=typeof(e==null?void 0:e.getDisplayMedia)=="function",n={webrtc:t?typeof t.RTCPeerConnection=="function":typeof globalThis<"u"&&"RTCPeerConnection"in globalThis,getUserMedia:i,getDisplayMedia:r,screenShare:r,screenShareAudio:Rp(),simulcast:Mp(),insertableStreams:Dp(),audioOutputSelection:Ip(),videoCodecs:_o("video"),audioCodecs:_o("audio")};return Object.freeze(n)}function Rp(){if(typeof navigator>"u")return!1;const t=Fo();return!t||typeof t.getDisplayMedia!="function"?!1:navigator.userAgent.includes("Chrome/")}function Fo(){return typeof navigator<"u"?navigator.mediaDevices:null}const rn=W(),Pp=10,Op=1e4,_p=5e3,Lp=5e3;var Fp=class extends te{constructor(t,e,i,r,n,s={}){super(),this.deviceController=t,this.iceServers=e,this.isConnected=i,this.transportRttMs=r,this.dialFn=n,this._options={duration:s.duration??Pp,skipMediaTest:s.skipMediaTest??!1,audioDevice:s.audioDevice,videoDevice:s.videoDevice}}async run(t){const e=[];try{const i=this.testSignaling();i.reachable||e.push("WebSocket not connected");const r=await this.testDevices();r.audioInput.working||e.push("Audio input device not working"),r.videoInput.working||e.push("Video input device not working");const n=await this.testIceConnectivity();n.type==="failed"?e.push("No ICE connectivity (neither STUN nor TURN reachable)"):n.type==="relay"&&e.push("Only TURN relay connectivity available (no direct path)"),n.turnReachable||e.push("TURN servers not reachable");let s=null;if(!this._options.skipMediaTest)try{s=await this.testMediaBandwidth(t)}catch(a){rn.warn("[PreflightRunner] Media bandwidth test failed:",a),e.push("Media bandwidth test failed")}return{ok:i.reachable&&n.type!=="failed"&&r.audioInput.working,signaling:i,connectivity:n,bandwidth:s,devices:r,warnings:e}}catch(i){throw rn.error("[PreflightRunner] Preflight test failed:",i),new Hd("preflight",i instanceof Error?i:new Error(String(i)))}finally{this.destroy()}}testSignaling(){return{reachable:this.isConnected,rttMs:this.transportRttMs}}async testDevices(){const t=this._options.audioDevice??this.deviceController.selectedAudioInputDevice,e=this._options.videoDevice??this.deviceController.selectedVideoInputDevice,i=this.deviceController.selectedAudioOutputDevice;let r=!1,n=!1,s;try{const a={};t?a.audio={deviceId:{exact:t.deviceId}}:a.audio=!0,e?a.video={deviceId:{exact:e.deviceId}}:a.video=!0,s=await Promise.race([navigator.mediaDevices.getUserMedia(a),new Promise((o,c)=>setTimeout(()=>c(new Error("getUserMedia timeout")),Lp))]);for(const o of s.getTracks())o.kind==="audio"&&o.readyState==="live"&&(r=!0),o.kind==="video"&&o.readyState==="live"&&(n=!0)}catch(a){rn.warn("[PreflightRunner] Device test failed:",a)}finally{s&&s.getTracks().forEach(a=>a.stop())}return{audioInput:{working:r,device:t},videoInput:{working:n,device:e},audioOutput:{available:!!i,device:i}}}async testIceConnectivity(){let t;try{t=new RTCPeerConnection({iceServers:this.iceServers});const e=t,i=new Set,r=Date.now(),n=new Promise(p=>{const v=setTimeout(p,Op);e.onicecandidate=m=>{if(m.candidate){const R=m.candidate.candidate;R.includes("typ host")&&i.add("host"),R.includes("typ srflx")&&i.add("srflx"),R.includes("typ relay")&&i.add("relay")}else clearTimeout(v),p()}});t.createDataChannel("preflight-test");const s=await t.createOffer();await t.setLocalDescription(s),await n;const a=Date.now()-r,o=i.has("srflx"),c=i.has("relay"),u=i.has("host");let h="failed";return u||o?h="direct":c&&(h="relay"),{type:h,turnReachable:c,stunReachable:o,rttMs:a}}catch(e){return rn.warn("[PreflightRunner] ICE connectivity test failed:",e),{type:"failed",turnReachable:!1,stunReachable:!1,rttMs:0}}finally{t&&t.close()}}async testMediaBandwidth(t){let e;try{e=await this.dialFn(t,{audio:!0,video:!1}),await Ge(e.status$.pipe(B(a=>a==="connected"),Re(1),cr(_p)));const i=this._options.duration*1e3;await new Promise(a=>setTimeout(a,i));const r=e.networkMetrics;let n=0,s=0;if(r.length>0){const a=r[r.length-1];a.availableOutgoingBitrate!==void 0&&(n=Math.round(a.availableOutgoingBitrate/1e3));const o=a.audio.packetsReceived+a.video.packetsReceived;i>0&&o>0&&(s=n)}return{uploadKbps:n,downloadKbps:s}}finally{if(e)try{await e.hangup()}catch{}}}destroy(){super.destroy()}};const nn=W();function Up(){try{return typeof document<"u"&&typeof document.addEventListener=="function"&&typeof document.visibilityState=="string"}catch{return!1}}function Uo(){try{if(typeof document<"u"&&typeof document.visibilityState=="string")return document.visibilityState==="visible"?"visible":"hidden"}catch{}return"visible"}var Np=class extends te{constructor(){super(),this._visibility$=this.createBehaviorSubject(Uo()),this._visibilityChange$=this.createSubject(),this._hasVisibilityApi=Up(),this._boundHandler=this._handleVisibilityChange.bind(this),this._hasVisibilityApi?(document.addEventListener("visibilitychange",this._boundHandler),nn.debug("VisibilityController: listening for visibilitychange events")):nn.debug("VisibilityController: document visibility API not available, defaulting to visible")}get visibility$(){return this._visibility$.pipe(w(this._destroyed$))}get visibility(){return this._visibility$.value}get visibilityChange$(){return this._visibilityChange$.pipe(w(this._destroyed$))}destroy(){this._hasVisibilityApi&&(document.removeEventListener("visibilitychange",this._boundHandler),nn.debug("VisibilityController: removed visibilitychange listener")),super.destroy()}_handleVisibilityChange(){const t=Uo(),e=this._visibility$.value;if(t===e)return;this._visibility$.next(t);const i={from:e,to:t,timestamp:Date.now()};this._visibilityChange$.next(i),nn.debug("VisibilityController: visibility changed",{from:e,to:t})}},Bp=class extends te{constructor(t,e){super(),this.fromPath=t,this.http=e,this.fetched$=ti(()=>Me(this.fetch())).pipe(tt(1),w(this.destroyed$))}async fetch(){const t=await this.http.request({url:this.fromPath,method:"GET",headers:{Accept:"application/json"}});if(t.ok&&t.body){const e=JSON.parse(t.body);return this.populateInstance(e),!0}return!1}},zp=class extends Bp{constructor(t){super("/api/fabric/subscriber/info",t)}populateInstance(t){this.id=t.id,this.email=t.email,this.firstName=t.first_name,this.lastName=t.last_name,this.displayName=t.display_name,this.jobTitle=t.job_title,this.timeZone=t.time_zone,this.country=t.country,this.region=t.region,this.companyName=t.company_name,this.pushNotificationKey=t.push_notification_key,this.appSettings=t.app_settings?{displayName:t.app_settings.display_name,scopes:t.app_settings.scopes}:void 0,this.addresses=t.fabric_addresses,this.satClaims=t.sat_claims}};const Li=t=>({jsonrpc:"2.0",id:t.id??Jr(),...t}),No=t=>({jsonrpc:"2.0",...t}),Vp={major:4,minor:0,revision:0},Hp=t=>Li({method:"signalwire.connect",params:{version:Vp,event_acks:!0,...t}}),jp=t=>{const{dpop_token:e,...i}=t;return Li({method:"signalwire.reauthenticate",params:{authentication:i,...e?{dpop_token:e}:{}}})},Wp=(t,e)=>No({id:t,result:{timestamp:Date.now()/1e3}}),rs=({method:t,params:e})=>Li({method:t,params:e}),Gp={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number",fromCallAddressId:"from_fabric_address_id"},qp=new Set(["remoteSdp","localStream","remoteStream"]),Xp=t=>{if(!Object.prototype.hasOwnProperty.call(t,"dialogParams"))return t;const e=t.dialogParams,i=Object.entries(e).reduce((r,[n,s])=>{if(qp.has(n))return r;const a=Gp[n]??n;return{...r,[a]:s}},{});return{...t,dialogParams:i}},si=t=>(e={})=>Li({method:t,params:Xp(e)}),Bo=t=>Li({method:"webrtc.verto",params:t}),Yp=si("verto.invite"),Kp=si("verto.bye"),sn=si("verto.modify"),Zp=si("verto.info"),Qp=si("verto.answer"),Jp=si("verto.subscribe"),$p=si("verto.pong"),eg={NORMAL_CLEARING:"16",USER_BUSY:"17",MEDIA_TIMEOUT:"804"},tg=t=>No({id:t,result:{}}),Fi=W();var ig=class{constructor(t,e,i,r){this.storage=t,this.deviceController=e,this.reconnectCallsTimeout=i,this.attachKey=r,this.writeQueue=Promise.resolve()}async detachAll(){await this.mutate(t=>({}))}setSession(t){this.session=t}async readAttached(){try{return await this.storage.getItem(this.attachKey)??{}}catch(t){return Fi.warn("[AttachManager] Failed to retrieve attached calls from storage",t),{}}}async writeAttached(t){try{await this.storage.setItem(this.attachKey,t)}catch(e){Fi.warn("[AttachManager] Failed to write attached calls to storage",e)}}async mutate(t){const e=this.writeQueue.then(async()=>{const i=await t(await this.readAttached());await this.writeAttached(i)});return this.writeQueue=e.catch(()=>{}),e}async attach(t){if(!t.to){Fi.warn("[AttachManager] Skip attach for calls with no destination");return}const e=t.to,i={nodeId:t.nodeId,destination:e,mediaDirections:t.mediaDirections,audioInputDevice:t.mediaDirections.audio!=="inactive"?this.deviceController.selectedAudioInputDevice:null,videoInputDevice:t.mediaDirections.video!=="inactive"?this.deviceController.selectedVideoInputDevice:null,attachedAt:Date.now()};await this.mutate(r=>({...r,[t.id]:i}))}async detach(t){await this.mutate(e=>{const{[t.id]:i,...r}=e;return r})}async flush(){await this.mutate(()=>({}))}async reattachCalls(){const t=await this.readAttached();await this.detachExpired();for(const[e,i]of Object.entries(t)){const{destination:r}=i,n=this.buildCallOptions(i);let s=!1;for(let a=1;a<=3;a++)try{await this.session.createOutboundCall(r,{callId:e,...n}),Fi.info(`[AttachManager] Reattached call ${e} (attempt ${a})`),s=!0;break}catch(o){Fi.warn(`[AttachManager] Reattach attempt ${a}/3 failed for call ${e}:`,o),a<3&&await new Promise(c=>setTimeout(c,(a+1)*1e3))}s||(Fi.warn(`[AttachManager] Reattach failed after 3 attempts for call ${e}, removing reference`),await this.detach({id:e,mediaDirections:i.mediaDirections}))}}buildCallOptions(t){const{audio:e,video:i}=t.mediaDirections,{audioInputDevice:r,videoInputDevice:n,nodeId:s}=t,a=e.includes("recv"),o=i.includes("recv"),c=e.includes("send"),u=i.includes("send");return{nodeId:s,receiveAudio:a,receiveVideo:o,inputAudioDeviceConstraints:c?{audio:!0,...this.deviceController.deviceInfoToConstraints(r)}:void 0,inputVideoDeviceConstraints:u?{video:!0,...this.deviceController.deviceInfoToConstraints(n)}:void 0,reattach:!0}}async consumePendingAttachment(t){const e=await this.readAttached();if(Object.hasOwn(e,t))return this.buildCallOptions(e[t])}async detachExpired(){const t=Date.now(),e=this.reconnectCallsTimeout;await this.mutate(i=>{const r={...i};let n=!1;for(const[s,a]of Object.entries(i))t-a.attachedAt>e&&(delete r[s],n=!0);return n?r:i})}};const ai={on:!1,off:!1},ns={muteAudio:ai,muteVideo:ai,deaf:ai,raisehand:ai,microphoneVolume:!1,microphoneSensitivity:!1,speakerVolume:!1,position:!1,meta:!1,remove:!1,audioFlags:!1,denoise:!1,lowbitrate:!1},zo={self:ns,member:ns,end:!1,setLayout:!1,sendDigit:!1,vmutedHide:ai,lock:ai,device:!1,screenshare:!1};function Ui(t){return t.length===0?ai:{on:t.some(e=>!e.endsWith(".off")),off:t.some(e=>!e.endsWith(".on"))}}function Vo(t,e,i,r){return t.filter(n=>n===e||n===`${e}.${i}`||n.startsWith(`${e}.${i}.${r}`))}function Ft(t,e,i,r){return t.some(n=>n===e||i!==null&&n===`${e}.${i}`||n.startsWith(`${e}.${i?`${i}.`:""}${r}`))}function Ho(t,e){return t.filter(i=>i.startsWith(e)||i===e).length===0?ns:{muteAudio:Ui(Vo(t,e,"mute","audio")),muteVideo:Ui(Vo(t,e,"mute","video")),deaf:Ui(t.filter(i=>i===e||i.startsWith(`${e}.deaf`))),raisehand:Ui(t.filter(i=>i===e||i.startsWith(`${e}.raisehand`))),microphoneVolume:Ft(t,e,"microphone","volume"),microphoneSensitivity:Ft(t,e,"microphone","sensitivity"),speakerVolume:Ft(t,e,"speaker","volume"),position:Ft(t,e,null,"position"),meta:Ft(t,e,null,"meta"),remove:Ft(t,e,null,"remove"),audioFlags:Ft(t,e,null,"audioflags"),denoise:Ft(t,e,null,"denoise"),lowbitrate:Ft(t,e,null,"lowbitrate")}}function rg(t){return t.length===0?zo:{self:Ho(t,"self"),member:Ho(t,"member"),end:t.some(e=>e==="end"),setLayout:t.some(e=>e.startsWith("layout")),sendDigit:t.some(e=>e.startsWith("digit")),vmutedHide:Ui(t.filter(e=>e.startsWith("vmuted"))),lock:Ui(t.filter(e=>e.startsWith("lock"))),device:t.some(e=>e==="device"),screenshare:t.some(e=>e==="screenshare")}}var ng=class extends te{constructor(...t){super(...t),this._state$=this.createBehaviorSubject(zo)}updateFromRaw(t){const e=rg(t);this._state$.next(e)}get self$(){return this.cachedObservable("self$",()=>this._state$.pipe(E(t=>t.self),L()))}get self(){return this._state$.value.self}get member$(){return this.cachedObservable("member$",()=>this._state$.pipe(E(t=>t.member),L()))}get member(){return this._state$.value.member}get end$(){return this.cachedObservable("end$",()=>this._state$.pipe(E(t=>t.end),L()))}get end(){return this._state$.value.end}get setLayout$(){return this.cachedObservable("setLayout$",()=>this._state$.pipe(E(t=>t.setLayout),L()))}get setLayout(){return this._state$.value.setLayout}get sendDigit$(){return this.cachedObservable("sendDigit$",()=>this._state$.pipe(E(t=>t.sendDigit),L()))}get sendDigit(){return this._state$.value.sendDigit}get vmutedHide$(){return this.cachedObservable("vmutedHide$",()=>this._state$.pipe(E(t=>t.vmutedHide),L()))}get vmutedHide(){return this._state$.value.vmutedHide}get lock$(){return this.cachedObservable("lock$",()=>this._state$.pipe(E(t=>t.lock),L()))}get lock(){return this._state$.value.lock}get device$(){return this.cachedObservable("device$",()=>this._state$.pipe(E(t=>t.device),L()))}get device(){return this._state$.value.device}get screenshare$(){return this.cachedObservable("screenshare$",()=>this._state$.pipe(E(t=>t.screenshare),L()))}get screenshare(){return this._state$.value.screenshare}get state$(){return this._state$.asObservable()}get state(){return this._state$.value}};function sg(t){return t?"call.undeaf":"call.deaf"}function ag(t){return t?"call.lowerhand":"call.raisehand"}const oi=W(),og={};var jo=class extends te{constructor(t,e,i){super(),this.executeMethod=e,this.deviceController=i,this._state$=this.createBehaviorSubject(og),this.id=t}upnext(t){this._state$.next({...this._state$.value,...t})}get name$(){return this.cachedObservable("name$",()=>this._state$.pipe(E(t=>t.name),L()))}get type$(){return this.cachedObservable("type$",()=>this._state$.pipe(E(t=>t.type),L()))}get handraised$(){return this.cachedObservable("handraised$",()=>this._state$.pipe(E(t=>t.handraised),L()))}get visible$(){return this.cachedObservable("visible$",()=>this._state$.pipe(E(t=>t.visible),L()))}get audioMuted$(){return this.cachedObservable("audioMuted$",()=>this._state$.pipe(E(t=>t.audio_muted),L()))}get videoMuted$(){return this.cachedObservable("videoMuted$",()=>this._state$.pipe(E(t=>t.video_muted),L()))}get deaf$(){return this.cachedObservable("deaf$",()=>this._state$.pipe(E(t=>t.deaf),L()))}get inputVolume$(){return this.cachedObservable("inputVolume$",()=>this._state$.pipe(E(t=>t.input_volume),L()))}get outputVolume$(){return this.cachedObservable("outputVolume$",()=>this._state$.pipe(E(t=>t.output_volume),L()))}get inputSensitivity$(){return this.cachedObservable("inputSensitivity$",()=>this._state$.pipe(E(t=>t.input_sensitivity),L()))}get echoCancellation$(){return this.cachedObservable("echoCancellation$",()=>this._state$.pipe(E(t=>t.echo_cancellation),L()))}get autoGain$(){return this.cachedObservable("autoGain$",()=>this._state$.pipe(E(t=>t.auto_gain),L()))}get noiseSuppression$(){return this.cachedObservable("noiseSuppression$",()=>this._state$.pipe(E(t=>t.noise_suppression),L()))}get lowbitrate$(){return this.cachedObservable("lowbitrate$",()=>this._state$.pipe(E(t=>t.lowbitrate),L()))}get denoise$(){return this.cachedObservable("denoise$",()=>this._state$.pipe(E(t=>t.denoise),L()))}get meta$(){return this.cachedObservable("meta$",()=>this._state$.pipe(E(t=>t.meta),L()))}get userId$(){return this.cachedObservable("userId$",()=>this._state$.pipe(E(t=>t.subscriber_id),L()))}get addressId$(){return this.cachedObservable("addressId$",()=>this._state$.pipe(E(t=>t.address_id),L()))}get nodeId$(){return this.cachedObservable("nodeId$",()=>this._state$.pipe(E(t=>t.node_id),L()))}get isTalking$(){return this.cachedObservable("isTalking$",()=>this._state$.pipe(E(t=>t.talking),L()))}get isTalking(){return this._state$.value.talking??!1}get position$(){return this.cachedObservable("position$",()=>this._state$.pipe(E(t=>t.position),L()))}get position(){return this._state$.value.position}get isAudience(){return this._state$.value.isAudience??!1}get name(){return this._state$.value.name}get type(){return this._state$.value.type}get handraised(){return this._state$.value.handraised??!1}get visible(){return this._state$.value.visible??!1}get audioMuted(){return this._state$.value.audio_muted??!1}get videoMuted(){return this._state$.value.video_muted??!1}get deaf(){return this._state$.value.deaf??!1}get inputVolume(){return this._state$.value.input_volume}get outputVolume(){return this._state$.value.output_volume}get inputSensitivity(){return this._state$.value.input_sensitivity}get echoCancellation(){return this._state$.value.echo_cancellation??!1}get autoGain(){return this._state$.value.auto_gain??!1}get noiseSuppression(){return this._state$.value.noise_suppression??!1}get lowbitrate(){return this._state$.value.lowbitrate??!1}get denoise(){return this._state$.value.denoise??!1}get meta(){return this._state$.value.meta}get userId(){return this._state$.value.subscriber_id}get addressId(){return this._state$.value.address_id}get nodeId(){return this._state$.value.node_id}get callId(){return this._state$.value.call_id}get value(){return this._state$.value}async toggleDeaf(){const t=sg(this.deaf);await this.executeMethod(this.id,t,{})}async toggleHandraise(){await this.executeMethod(this.id,ag(this.handraised),{})}async mute(){await this.executeMethod(this.id,"call.mute",{channels:["audio"]})}async unmute(){await this.executeMethod(this.id,"call.unmute",{channels:["audio"]})}async toggleMute(){return this.audioMuted?this.unmute():this.mute()}async muteVideo(){await this.executeMethod(this.id,"call.mute",{channels:["video"]})}async unmuteVideo(){await this.executeMethod(this.id,"call.unmute",{channels:["video"]})}async toggleMuteVideo(){return this.videoMuted?this.unmuteVideo():this.muteVideo()}async toggleEchoCancellation(){await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:!this.echoCancellation,auto_gain:this.autoGain,noise_suppression:this.noiseSuppression})}async toggleAudioInputAutoGain(){await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:this.echoCancellation,auto_gain:!this.autoGain,noise_suppression:this.noiseSuppression})}async toggleNoiseSuppression(){await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:this.echoCancellation,auto_gain:this.autoGain,noise_suppression:!this.noiseSuppression})}async toggleLowbitrate(){await this.executeMethod(this.id,"call.lowbitrate.set",{lowbitrate:!this.lowbitrate})}async setAudioInputSensitivity(t){await this.executeMethod(this.id,"call.microphone.sensitivity.set",{sensitivity:t})}async setAudioInputVolume(t){await this.executeMethod(this.id,"call.microphone.volume.set",{volume:t})}async setAudioOutputVolume(t){await this.executeMethod(this.id,"call.speaker.volume.set",{volume:t})}async setPosition(t){const e=this._state$.value,i={member_id:this.id,call_id:e.call_id??"",node_id:e.node_id??""};await this.executeMethod(i,"call.member.position.set",{targets:[{target:i,position:t}]})}async remove(){const t=this._state$.value,e={member_id:this.id,call_id:t.call_id??"",node_id:t.node_id??""};await this.executeMethod(e,"call.member.remove",{})}async end(){await this.executeMethod(this.id,"call.end",{})}async setMeta(t){throw new kt}async updateMeta(t){throw new kt}destroy(){this.executeMethod=void 0,super.destroy()}},Wo=class extends jo{constructor(t,e,i,r){super(t,e,r),this.vertoManager=i,this._studioAudio$=this.createBehaviorSubject(!1),this.capabilities=new ng}destroy(){this.capabilities.destroy(),super.destroy()}get studioAudio$(){return this._studioAudio$.asObservable()}get studioAudio(){return this._studioAudio$.value}async enableStudioAudio(){this._studioAudio$.value||(this._studioAudio$.next(!0),await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:!1,auto_gain:!1,noise_suppression:!1}))}async disableStudioAudio(){this._studioAudio$.value&&(this._studioAudio$.next(!1),await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:!0,auto_gain:!0,noise_suppression:!0}))}async startScreenShare(){try{await this.vertoManager.addScreenMedia()}catch(t){oi.error("[Participant.startScreenShare] Screen share error:",t)}}get screenShareStatus$(){return this.vertoManager.screenShareStatus$}get screenShareStatus(){return this.vertoManager.screenShareStatus}async stopScreenShare(){return this.vertoManager.removeScreenMedia()}async addAdditionalDevice(t){try{await this.vertoManager.addInputDevice(t)}catch(e){oi.error("[Participant.startScreenShare] Screen share error:",e)}}async removeAdditionalDevice(t){return this.vertoManager.removeInputDevices(t)}async addAudioInputDevice({constraints:t,stream:e}={}){const i=t??e?void 0:!0;return this.vertoManager.addMainInputDevices({audio:i,inputAudioDeviceConstraints:t,inputAudioStream:e})}async addVideoInputDevice({constraints:t,stream:e}={}){const i=t??e?void 0:!0;return this.vertoManager.addMainInputDevices({video:i,inputVideoDeviceConstraints:t,inputVideoStream:e})}async addInputDevices(t={}){await this.vertoManager.addMainInputDevices(t)}selectAudioInputDevice(t,e={}){this.deviceController.selectAudioInputDevice(t),e.savePreference&&(g.instance.preferredAudioInput=t)}async setAudioInputDeviceConstraints(t){await this.vertoManager.updateMediaConstraints({audio:t})}async setInputDevicesConstraints(t){await this.vertoManager.updateMediaConstraints(t)}selectVideoInputDevice(t,e={}){this.deviceController.selectVideoInputDevice(t),e.savePreference&&(g.instance.preferredVideoInput=t)}async setVideoInputDeviceConstraints(t){await this.vertoManager.updateMediaConstraints({video:t})}selectAudioOutputDevice(t,e={}){this.deviceController.selectAudioOutputDevice(t),e.savePreference&&(g.instance.preferredAudioOutput=t)}exitStudioModeIfActive(){this._studioAudio$.value&&(oi.debug("[SelfParticipant] Exiting studio audio mode due to individual flag toggle"),this._studioAudio$.next(!1))}async toggleEchoCancellation(){this.exitStudioModeIfActive(),await super.toggleEchoCancellation()}async toggleAudioInputAutoGain(){this.exitStudioModeIfActive(),await super.toggleAudioInputAutoGain()}async toggleNoiseSuppression(){this.exitStudioModeIfActive(),await super.toggleNoiseSuppression()}async mute(){try{await super.mute()}catch(t){oi.warn("[Participant.toggleAudioInput] Server Error while muting audio input, proceeding with local toggle anyway",t)}finally{this.vertoManager.muteMainAudioInputDevice()}}async unmute(){try{await super.unmute()}catch(t){oi.warn("[Participant.toggleAudioInput] Server Error while unmuting audio input, proceeding with local toggle anyway",t)}finally{await this.vertoManager.unmuteMainAudioInputDevice()}}async muteVideo(){try{await super.muteVideo()}catch(t){oi.warn("[Participant.toggleVideoInput] Server Error while muting video input, proceeding with local toggle anyway",t)}finally{this.vertoManager.muteMainVideoInputDevice()}}async unmuteVideo(){try{await super.unmuteVideo()}catch(t){oi.warn("[Participant.toggleVideoInput] Server Error while unmuting video input, proceeding with local toggle anyway",t)}finally{await this.vertoManager.unmuteMainVideoInputDevice()}}};const Go=t=>t instanceof Wo;function Ce(t){return typeof t=="object"&&t!==null}function G(t,e){return e in t}function ss(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&G(t,"method")&&typeof t.method=="string"}function as(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&(G(t,"result")||G(t,"error"))}function cg(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&(G(t,"error")&&Ce(t.error)&&G(t.error,"code")&&G(t.error,"message")||G(t,"result")&&Ce(t.result)&&G(t.result,"code")&&t.result.code!=="200"&&G(t.result,"message"))}function Le(t){return e=>qo(e)&&e.event_type===t}function os(t){return ss(t)&&t.method==="signalwire.event"&&Ce(t.params)&&G(t.params,"event_type")}function qo(t){return Ce(t)&&G(t,"event_type")&&typeof t.event_type=="string"&&G(t,"params")}function lg(t){return qo(t)&&(dg(t)||hg(t)||Xo(t)||Yo(t)||pg(t)||gg(t)||fg(t)||Ko(t)||Zo(t)||Qo(t)||Jo(t)||cs(t)||an(t)||$o(t)||ec(t))}const ug=Le("signalwire.authorization.state"),an=Le("webrtc.message"),dg=Le("call.joined"),hg=Le("call.left"),Xo=Le("call.updated"),Yo=Le("call.state"),pg=Le("call.play"),gg=Le("call.connect"),fg=Le("room.updated"),Ko=Le("member.updated"),Zo=Le("member.joined"),Qo=Le("member.left"),Jo=Le("member.talking"),cs=Le("layout.changed"),$o=Le("conversation.message"),ec=Le("conversation.message.updated");function tc(t){return Ce(t)&&G(t,"room_session")&&G(t,"call_id")&&G(t,"member_id")&&G(t,"capabilities")}function vg(t){return Ce(t)&&G(t,"room_id")&&G(t,"room_session_id")&&G(t,"layout")}const Qe=W(),bg={};var mg=class extends te{constructor(t,e={}){super(),this.webRtcCallSession=t,this.options=e,this.callIds=new Set,this.roomSessionIds=new Set,this._participants$=this.createBehaviorSubject({}),this._self$=this.createBehaviorSubject(null),this._sessionState$=this.createBehaviorSubject(bg),this.initSubscriptions()}get participants$(){return this.cachedObservable("participants$",()=>this._participants$.asObservable().pipe(E(t=>Object.values(t))))}get participants(){return Object.values(this._participants$.value)}get self$(){return this.cachedObservable("self$",()=>this._self$.asObservable().pipe(ue()))}isRoomSessionIdValid(t){return this.roomSessionIds.has(t)}addCallId(t){this.callIds.add(t)}isCallIdValid(t){return this.callIds.has(t)}get recording$(){return this.cachedObservable("recording$",()=>this._sessionState$.pipe(E(t=>t.recording),L(),ue()))}get recordings$(){return this.cachedObservable("recordings$",()=>this._sessionState$.pipe(E(t=>t.recordings),L(),ue()))}get streaming$(){return this.cachedObservable("streaming$",()=>this._sessionState$.pipe(E(t=>t.streaming),L(),ue()))}get streams$(){return this.cachedObservable("streams$",()=>this._sessionState$.pipe(E(t=>t.streams),L(),ue()))}get playbacks$(){return this.cachedObservable("playbacks$",()=>this._sessionState$.pipe(E(t=>t.playbacks),L(),ue()))}get raiseHandPriority$(){return this.cachedObservable("raiseHandPriority$",()=>this._sessionState$.pipe(E(t=>t.prioritize_handraise),L(),ue()))}get locked$(){return this.cachedObservable("locked$",()=>this._sessionState$.pipe(E(t=>t.locked),L(),ue()))}get meta$(){return this.cachedObservable("meta$",()=>this._sessionState$.pipe(E(t=>t.meta),L(),ue()))}get capabilities$(){return this.cachedObservable("capabilities$",()=>this._sessionState$.pipe(E(t=>t.capabilities),L(),ue()))}get layout$(){return this.cachedObservable("layout$",()=>this._sessionState$.pipe(E(t=>t.layout_name),L(),ue()))}get layouts$(){return this.cachedObservable("layouts$",()=>this._sessionState$.pipe(E(t=>t.layouts),L(),ue()))}get layoutLayers$(){return this.cachedObservable("layoutLayers$",()=>this._sessionState$.pipe(E(t=>t.layout_layers),L(),ue()))}get self(){return this._self$.value}get layoutLayers(){return this._sessionState$.value.layout_layers??[]}get recording(){return this._sessionState$.value.recording??!1}get streaming(){return this._sessionState$.value.streaming??!1}get raiseHandPriority(){return this._sessionState$.value.prioritize_handraise??!1}get locked(){return this._sessionState$.value.locked??!1}get meta(){return this._sessionState$.value.meta??{}}get layout(){return this._sessionState$.value.layout_name}get layouts(){return this._sessionState$.value.layouts??[]}get capabilities(){return this._sessionState$.value.capabilities??[]}isSessionEvent(t){return this.callIds.has(t)||this.roomSessionIds.has(t)}initSubscriptions(){this.subscribeTo(this.callJoinedEvent$,t=>{var r,n;Qe.debug("[CallEventsManager] Handling call.joined event for call/session IDs:",{callId:t.call_id,roomSessionId:t.room_session_id});const e=t.room_session,i=t.capabilities;this.selfId=this.selfId??t.member_id,this.originCallId=this.originCallId??t.origin_call_id,this.callIds.add(t.call_id),this.roomSessionIds.add(t.room_session_id),this._sessionState$.next({...this._sessionState$.value,recording:e.recording,recordings:e.recordings,streaming:e.streaming,streams:e.streams,playbacks:e.playbacks,prioritize_handraise:e.prioritize_handraise,locked:e.locked,meta:e.meta,capabilities:i}),this.updateParticipants(e.members),(r=this._self$.value)==null||r.capabilities.updateFromRaw(i),(n=this._self$.value)!=null&&n.capabilities.setLayout&&this.updateLayouts()}),this.subscribeTo(this.memberUpdates$,t=>{Qe.debug("[CallEventsManager] Handling member update event for member ID:",t),this.upsertParticipant(t)}),this.subscribeTo(this.webRtcCallSession.memberLeft$,t=>{Qe.debug("[CallEventsManager] Handling member.left event for member ID:",t.member.member_id);const e={...this._participants$.value};t.member.member_id in e?(delete e[t.member.member_id],this._participants$.next(e)):Qe.warn(`[CallEventsManager] Received member.left event for unknown member ID: ${t.member.member_id}`)}),this.subscribeTo(this.webRtcCallSession.callUpdated$,t=>{Qe.debug("[CallEventsManager] Handling call.updated event:",t);const e=t.room_session;this._sessionState$.next({...this._sessionState$.value,recording:e.recording,recordings:e.recordings,streaming:e.streaming,streams:e.streams,playbacks:e.playbacks,prioritize_handraise:e.prioritize_handraise,locked:e.locked,meta:e.meta})}),this.subscribeTo(this.layoutChangedEvent$,t=>{Qe.debug("[CallEventsManager] Handling layout.changed event:",t),this._sessionState$.next({...this._sessionState$.value,layout_name:t.id,layout_layers:t.layers}),this.updateParticipantPositions(t)})}updateParticipantPositions(t){Object.keys(this._participants$.value).length>0&&!t.layers.some(e=>!!e.member_id)&&Qe.warn("[CallEventsManager] No layers with member_id found in layout.changed event. Nothing to update."),t.layers.filter(e=>!!e.member_id).filter(e=>e.member_id in this._participants$.value?!0:(Qe.warn(`[CallEventsManager] Skipping layout layer for unknown member_id: ${e.member_id}`),!1)).map(e=>(this._participants$.value[e.member_id].upnext({position:e}),this._participants$.value[e.member_id])).forEach(e=>{Go(e)&&this._self$.next(e),this._participants$.next({...this._participants$.value,[e.id]:e})})}updateLayouts(){this.selfId&&this.webRtcCallSession.executeMethod(this.selfId,"call.layout.list",{}).then(t=>{this._sessionState$.next({...this._sessionState$.value,layouts:t.result.layouts})}).catch(t=>{Qe.error("[CallEventsManager] Error fetching layouts:",t)})}updateParticipants(t){t.forEach(e=>this.upsertParticipant(e))}upsertParticipant(t){if(!(t.member_id in this._participants$.value)){const r=this.webRtcCallSession.createParticipant(t.member_id,this.selfId);this._participants$.next({...this._participants$.value,[t.member_id]:r})}const e=this._participants$.value[t.member_id],i=e.value;Qe.debug("[CallEventsManager] Updating participant:",t.member_id,{oldValue:i,newValue:t}),e.upnext({...i,...t}),Go(e)&&this._self$.next(e),this._participants$.next(this._participants$.value)}get callJoinedEvent$(){return this.cachedObservable("callJoinedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(B(tc),Se(t=>{Qe.debug("[CallEventsManager] Call joined event:",t)})))}get layoutChangedEvent$(){return this.cachedObservable("layoutChangedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(fe(vg,"layout"),Se(t=>{Qe.debug("[CallEventsManager] Layout changed event:",t)})))}get memberUpdates$(){return this.cachedObservable("memberUpdates$",()=>Ii(this.webRtcCallSession.memberJoined$,this.webRtcCallSession.memberUpdated$,this.webRtcCallSession.memberTalking$).pipe(E(t=>t.member),Se(t=>{Qe.debug("[CallEventsManager] Member update event:",t)})))}destroy(){Object.values(this._participants$.value).forEach(t=>{t.destroy()}),this._participants$.next({}),this._self$.next(null),this.callIds.clear(),this.roomSessionIds.clear(),this.selfId=void 0,this.originCallId=void 0,this.webRtcCallSession=void 0,this.callSession=void 0,super.destroy()}};const yg=new Set(["sendrecv","sendonly","recvonly","inactive"]);function wg(t){const e={audio:"inactive",video:"inactive"};if(!t)return e;const i=t.split(/\r?\n/);let r=null,n=null;for(const s of i)if(s.startsWith("m="))r&&(e[r]=n??"sendrecv"),s.startsWith("m=audio")?r="audio":s.startsWith("m=video")?r="video":r=null,n=null;else if(r&&s.startsWith("a=")){const a=s.substring(2).trim();yg.has(a)&&(n=a)}return r&&(e[r]=n??"sendrecv"),e}function ic(t){if(!t)return!1;const e=t.split(`\r
|
|
68
|
-
`),i=[];let r=-1;for(const n of e)if(n.startsWith("m="))r+=1,i[r]=0;else if(n.startsWith("a=candidate:")){const s=/\styp\s+(host|srflx|prflx|relay)/.exec(n);s&&s[1]!=="host"&&(i[r]+=1)}return!i.length||i.every(n=>n>0)}function
|
|
67
|
+
`)},G=()=>{const t=ps();return new Proxy(t,{get(e,i,r){if(i==="wsTraffic")return yp;const n=ps(),s=Reflect.get(n,i);return typeof s=="function"?s.bind(n):s}})};function fe(){return z(t=>t!=null)}const at=(t,e,i)=>{const r=e.split(".");let n=t;for(const s of r)if(n&&typeof n=="object"&&s in n)n=n[s];else return i;return n===void 0?i:n};function wp(t,e){return Jr(z(t),x(e))}function we(t,e){return Jr(wp(t,i=>at(i,e)),z(i=>i!==void 0))}const zo=G();function Vo(){return x(t=>{if(t.error)throw zo.error("[throwOnRPCError] RPC error response:",{code:t.error.code,message:t.error.message,data:t.error.data}),new _t(t.error.code,t.error.message,t.error.data);return zo.debug("[throwOnRPCError] RPC successful response:",t),t})}class Ar extends Error{}Ar.prototype.name="InvalidTokenError";function Sp(t){return decodeURIComponent(atob(t).replace(/(.)/g,(e,i)=>{let r=i.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r}))}function Cp(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return Sp(e)}catch{return atob(e)}}function Ap(t,e){if(typeof t!="string")throw new Ar("Invalid token specified: must be a string");e||(e={});const i=e.header===!0?0:1,r=t.split(".")[i];if(typeof r!="string")throw new Ar(`Invalid token specified: missing part #${i+1}`);let n;try{n=Cp(r)}catch(s){throw new Ar(`Invalid token specified: invalid base64 for part #${i+1} (${s.message})`)}try{return JSON.parse(n)}catch(s){throw new Ar(`Invalid token specified: invalid json for part #${i+1} (${s.message})`)}}const Le=[];for(let t=0;t<256;++t)Le.push((t+256).toString(16).slice(1));function Tp(t,e=0){return(Le[t[e+0]]+Le[t[e+1]]+Le[t[e+2]]+Le[t[e+3]]+"-"+Le[t[e+4]]+Le[t[e+5]]+"-"+Le[t[e+6]]+Le[t[e+7]]+"-"+Le[t[e+8]]+Le[t[e+9]]+"-"+Le[t[e+10]]+Le[t[e+11]]+Le[t[e+12]]+Le[t[e+13]]+Le[t[e+14]]+Le[t[e+15]]).toLowerCase()}const Ep=new Uint8Array(16);function kp(){return crypto.getRandomValues(Ep)}function un(t,e,i){return crypto.randomUUID?crypto.randomUUID():xp(t)}function xp(t,e,i){var n;t=t||{};const r=t.random??((n=t.rng)==null?void 0:n.call(t))??kp();if(r.length<16)throw new Error("Random bytes length must be >= 16");return r[6]=r[6]&15|64,r[8]=r[8]&63|128,Tp(r)}var se=class{constructor(){this.subscriptions=[],this.subjects=[],this._destroyed$=new Li}destroy(){var t;(t=this._observableCache)==null||t.clear(),this.subscriptions.forEach(e=>e.unsubscribe()),this.subjects.forEach(e=>e.complete()),this._destroyed$.next(),this._destroyed$.complete()}cachedObservable(t,e){this._observableCache??(this._observableCache=new Map);let i=this._observableCache.get(t);return i||(i=e(),this._observableCache.set(t,i)),i}publicCachedObservable(t,e){const i=`public:${t}`;this._observableCache??(this._observableCache=new Map);let r=this._observableCache.get(i);return r||(r=e().pipe($r(Va)),this._observableCache.set(i,r)),r}deferEmission(t){return t.pipe($r(Va))}subscribeTo(t,e){const i=t.subscribe(e);this.subscriptions.push(i)}createSubject(){const t=new Li;return this.subjects.push(t),t}createReplaySubject(t,e){const i=new es(t,e);return this.subjects.push(i),i}createBehaviorSubject(t){const e=new ed(t);return this.subjects.push(e),e}get destroyed$(){return this._destroyed$.asObservable()}};const Dp=10,Ip=100,Mp=1,Rp=({delayLimit:t=Number.MAX_SAFE_INTEGER,initialDelay:e=Ip,variation:i=Mp})=>{if(e<0)throw new on("initialDelay must be gte 0");if(t<0)throw new on("upperDelayLimit must be gte 0");if(i<0)throw new on("variation must be gte 0");if(e>t)throw new on("initialDelay must be lte delayLimit");let r=Math.min(e,t);return()=>{if(r===t)return t;const n=r;return r=Math.min(r+i,t),n}},Pp=async({asyncCallable:t,maxRetries:e=Dp,delayFn:i,validator:r,expectedErrorHandler:n})=>{let s=e-1,a=0;const o=async()=>{try{let c;return a<=0?c=await t():c=await new Promise((u,h)=>setTimeout(()=>{t().then(u).catch(h)},a)),s&&(r==null||r(c)),c}catch(c){if(s-- >0&&!(n!=null&&n(c)))return a=(i==null?void 0:i())??0,G().debug(`Retrying request: ${e-s} of ${e}`),o();throw c}};return o()},zi=G(),gs={method:"GET",headers:{Accept:"application/json"}},dn={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};var Op=(qe=class extends se{constructor(e,i,r={}){super(),this.baseURL=e,this.getCredential=i,this._responses$=this.createSubject(),this._errors$=this.createSubject(),this._status$=this.createBehaviorSubject("idle"),this.maxRetries=r.maxRetries??qe.defaultMaxRetries,this.retryDelayMin=r.retryDelayMin??qe.defaultRetryDelayMinMs,this.retryDelayMax=r.retryDelayMax??qe.defaultRetryDelayMaxMs,this.requestTimeout=r.requestTimeout??qe.defaultRequestTimeoutMs}get status$(){return this._status$.asObservable()}get status(){return this._status$.value}get responses$(){return this._responses$.asObservable()}get errors$(){return this._errors$.asObservable()}async request(e){this._status$.next("requesting");try{const i=await this.executeWithRetry(e);return this._status$.next("success"),this._responses$.next(i),i}catch(i){zi.error("[HTTPRequestController] Request error:",i),this._status$.next("error");const r=i instanceof Error?i:new Error("HTTP request failed",{cause:i});throw this._errors$.next(r),r}}async executeWithRetry(e){const i=Math.ceil((this.retryDelayMax-this.retryDelayMin)/Math.max(this.maxRetries-1,1)),r=Rp({initialDelay:this.retryDelayMin,variation:i,delayLimit:this.retryDelayMax});return Pp({asyncCallable:async()=>this.executeRequest(e),maxRetries:this.maxRetries,delayFn:r,validator:n=>{if(n.status>=500&&n.status<600)throw new Ui(`Server error: ${n.status} ${n.statusText}`)}})}async executeRequest(e){const i=this.buildURL(e.url),r=this.buildHeaders(e.headers),n=e.timeout??this.requestTimeout;zi.debug("[HTTPRequestController] Executing request:",{method:e.method,url:i,headers:Object.keys(r).reduce((o,c)=>(o[c]=c==="Authorization"?`${r[c].substring(0,20)}...`:r[c],o),{}),body:this.sanitizeBody(e.body)});const s=new AbortController,a=setTimeout(()=>s.abort(),n);try{const o=await fetch(i,{method:e.method,headers:r,body:e.body,signal:s.signal});clearTimeout(a);const c=await this.convertResponse(o);return zi.debug("[HTTPRequestController] Response received:",{status:o.status,statusText:o.statusText,headers:[...o.headers.entries()],body:c.body?c.body.substring(0,200):"(empty)"}),c}catch(o){throw clearTimeout(a),o instanceof Error&&o.name==="AbortError"?new Po(`Request timeout after ${n}ms`,{cause:o}):(zi.error("[HTTPRequestController] Request failed:",o),o)}}buildURL(e){const i=typeof e=="string"?e:e.toString();return i.startsWith("http://")||i.startsWith("https://")?i:`${this.baseURL.endsWith("/")?this.baseURL.slice(0,-1):this.baseURL}${i.startsWith("/")?i:`/${i}`}`}buildHeaders(e){const i={...e??{}},r=this.getCredential();return r.token?(i.Authorization=`Bearer ${r.token}`,zi.debug("[HTTPRequestController] Using Bearer token auth, token length:",r.token.length)):zi.warn("[HTTPRequestController] No credentials available for authentication"),i}sanitizeBody(e){if(!e||typeof e!="string")return e?"(non-string body)":void 0;try{const i={...JSON.parse(e)};for(const r of Object.keys(i))qe.SENSITIVE_BODY_FIELDS.has(r)&&typeof i[r]=="string"&&(i[r]=`${i[r].substring(0,20)}...[redacted]`);return JSON.stringify(i)}catch{return e.length>200?`${e.substring(0,200)}...`:e}}async convertResponse(e){const i={};e.headers.forEach((n,s)=>{i[s]=n});const r=await e.text();return{status:e.status,statusText:e.statusText,headers:i,body:r,ok:e.ok,url:e.url}}},qe.defaultMaxRetries=3,qe.defaultRetryDelayMinMs=1e3,qe.defaultRetryDelayMaxMs=3e4,qe.defaultRequestTimeoutMs=3e4,qe.SENSITIVE_BODY_FIELDS=new Set(["dpop_token","token","jwt_token"]),qe);const _p=5,Lp=(t,e)=>({deviceId:t.deviceId,label:t.label,groupId:t.groupId,kind:e});var Fp=class{constructor(){this._stacks={audioinput:[],audiooutput:[],videoinput:[]}}push(t,e){const i=Lp(e,t),r=this._stacks[t];if(r.length>0&&r[0].deviceId===i.deviceId)return;const n=r.filter(s=>s.deviceId!==i.deviceId);this._stacks[t]=[i,...n].slice(0,_p)}pop(t){const e=this._stacks[t];if(e.length===0)return;const[i,...r]=e;return this._stacks[t]=r,i}findInHistory(t,e){const i=this._stacks[t];for(const r of i){const n=e.find(a=>a.deviceId===r.deviceId);if(n)return n;const s=e.find(a=>a.groupId===r.groupId&&a.label===r.label);if(s)return s}}getHistory(t){return this._stacks[t]}clear(){this._stacks.audioinput=[],this._stacks.audiooutput=[],this._stacks.videoinput=[]}};function ot(t){return t*1e3}function ct(t){return Math.round(t/100)/10}const Ho=G();var f=class fu{static get instance(){return this._instance??(this._instance=new fu),this._instance}constructor(){this.deviceDebounceTime=lh,this.devicePollingInterval=uh,this.reconnectCallsTimeout=sh,this.connectionTimeout=ah,this.reconnectDelayMin=oh,this.reconnectDelayMax=ch,this.disableUdpIceServers=!1,this.relayOnly=!1,this.iceCandidateTimeout=mo,this.iceGatheringTimeout=yo,this.defaultSignalWireOptions={skipConnection:!1,skipRegister:!1,reconnectAttachedCalls:!1,skipDeviceMonitoring:!1,savePreferences:!1},this.receiveVideo=!1,this.receiveAudio=!0,this.preferredAudioInput=null,this.preferredAudioOutput=null,this.preferredVideoInput=null,this.inviteSubscribeScreenshare=["video.room.screenshare"],this.inviteSubscribeAdditionalDevice=[],this.inviteSubscribeMainDevice=["track","destroy","member.updated.videoMuted","layout.changed","room.subscribed","member.updated.audioMuted","media.connected","room.updated","call.joined"],this.userVariables={},this.statsPollingInterval=mh,this.statsBaselineSamples=yh,this.statsNoPacketThreshold=wh,this.statsRttSpikeMultiplier=Sh,this.statsPacketLossThreshold=Ch,this.statsJitterSpikeMultiplier=Ah,this.statsHistorySize=Th,this.keyframeMaxBurst=Eh,this.keyframeBurstWindow=kh,this.keyframeCooldown=xh,this.reinviteDebounceTime=Dh,this.reinviteMaxAttempts=Ih,this.reinviteTimeout=Mh,this.recoveryDebounceTime=Rh,this.recoveryCooldown=Ph,this.iceDisconnectedGracePeriod=Oh,this.iceRestartTimeout=_h,this.maxRecoveryAttempts=Lh,this.enableRelayFallback=Jh,this.enableNetworkChangeDetection=$h,this.enableServerHangupInterception=ep,this.persistDeviceSelection=Vh,this.syncDevicesToActiveCalls=Hh,this.autoMuteVideoOnHidden=qh,this.refreshDevicesOnVisible=Xh,this.checkConnectionOnVisible=Yh,this.defaultAudioConstraints=void 0,this.defaultVideoConstraints=void 0,this.stereoAudio=tp,this.enableAutoDegradation=Kh,this.degradationBitrateThreshold=Zh,this.degradationRecoveryThreshold=Qh,this.preferredVideoCodecs=[],this.preferredAudioCodecs=[]}get preferredMediaOptions(){return{receiveVideo:this.receiveVideo,receiveAudio:this.receiveAudio,inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints}}get inputAudioDeviceConstraints(){return this._inputAudioDeviceConstraints}set inputAudioDeviceConstraints(e){this._inputAudioDeviceConstraints=e}get inputVideoDeviceConstraints(){return this._inputVideoDeviceConstraints}set inputVideoDeviceConstraints(e){this._inputVideoDeviceConstraints=e}};const Np=["connectionTimeout","reconnectCallsTimeout","reconnectDelayMin","reconnectDelayMax","iceCandidateTimeout","iceGatheringTimeout","deviceDebounceTime","devicePollingInterval","statsPollingInterval","statsBaselineSamples","statsNoPacketThreshold","statsRttSpikeMultiplier","statsPacketLossThreshold","statsJitterSpikeMultiplier","statsHistorySize","keyframeMaxBurst","keyframeBurstWindow","keyframeCooldown","reinviteDebounceTime","reinviteMaxAttempts","reinviteTimeout","recoveryDebounceTime","recoveryCooldown","iceDisconnectedGracePeriod","iceRestartTimeout","maxRecoveryAttempts","degradationBitrateThreshold","degradationRecoveryThreshold"],Up=["receiveVideo","receiveAudio","disableUdpIceServers","relayOnly","enableRelayFallback","enableNetworkChangeDetection","enableServerHangupInterception","persistDeviceSelection","syncDevicesToActiveCalls","autoMuteVideoOnHidden","refreshDevicesOnVisible","checkConnectionOnVisible","stereoAudio","enableAutoDegradation"];function Bp(){const t=f.instance;return{connectionTimeout:t.connectionTimeout,reconnectCallsTimeout:t.reconnectCallsTimeout,reconnectDelayMin:t.reconnectDelayMin,reconnectDelayMax:t.reconnectDelayMax,relayHost:t.relayHost,receiveVideo:t.receiveVideo,receiveAudio:t.receiveAudio,disableUdpIceServers:t.disableUdpIceServers,relayOnly:t.relayOnly,iceCandidateTimeout:t.iceCandidateTimeout,iceGatheringTimeout:t.iceGatheringTimeout,deviceDebounceTime:t.deviceDebounceTime,devicePollingInterval:t.devicePollingInterval,iceServers:t.iceServers,userVariables:t.userVariables,statsPollingInterval:t.statsPollingInterval,statsBaselineSamples:t.statsBaselineSamples,statsNoPacketThreshold:t.statsNoPacketThreshold,statsRttSpikeMultiplier:t.statsRttSpikeMultiplier,statsPacketLossThreshold:t.statsPacketLossThreshold,statsJitterSpikeMultiplier:t.statsJitterSpikeMultiplier,statsHistorySize:t.statsHistorySize,keyframeMaxBurst:t.keyframeMaxBurst,keyframeBurstWindow:t.keyframeBurstWindow,keyframeCooldown:t.keyframeCooldown,reinviteDebounceTime:t.reinviteDebounceTime,reinviteMaxAttempts:t.reinviteMaxAttempts,reinviteTimeout:t.reinviteTimeout,recoveryDebounceTime:t.recoveryDebounceTime,recoveryCooldown:t.recoveryCooldown,iceDisconnectedGracePeriod:t.iceDisconnectedGracePeriod,iceRestartTimeout:t.iceRestartTimeout,maxRecoveryAttempts:t.maxRecoveryAttempts,enableRelayFallback:t.enableRelayFallback,enableNetworkChangeDetection:t.enableNetworkChangeDetection,enableServerHangupInterception:t.enableServerHangupInterception,persistDeviceSelection:t.persistDeviceSelection,syncDevicesToActiveCalls:t.syncDevicesToActiveCalls,autoMuteVideoOnHidden:t.autoMuteVideoOnHidden,refreshDevicesOnVisible:t.refreshDevicesOnVisible,checkConnectionOnVisible:t.checkConnectionOnVisible,stereoAudio:t.stereoAudio,enableAutoDegradation:t.enableAutoDegradation,degradationBitrateThreshold:t.degradationBitrateThreshold,degradationRecoveryThreshold:t.degradationRecoveryThreshold,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs}}function zp(t){const e=f.instance;for(const i of Np)t[i]!==void 0&&(e[i]=t[i]);for(const i of Up)t[i]!==void 0&&(e[i]=t[i]);t.relayHost!==void 0&&(e.relayHost=t.relayHost),t.iceServers!==void 0&&(e.iceServers=t.iceServers),t.userVariables!==void 0&&(e.userVariables=t.userVariables),t.preferredVideoCodecs!==void 0&&(e.preferredVideoCodecs=t.preferredVideoCodecs),t.preferredAudioCodecs!==void 0&&(e.preferredAudioCodecs=t.preferredAudioCodecs)}var Vp=class{constructor(){this._storage=null}enableSavePreferences(t){this._storage=t,this._loadFromStorage()}get connectionTimeout(){return ct(f.instance.connectionTimeout)}set connectionTimeout(t){f.instance.connectionTimeout=ot(t),this._saveToStorage()}get reconnectCallsTimeout(){return ct(f.instance.reconnectCallsTimeout)}set reconnectCallsTimeout(t){f.instance.reconnectCallsTimeout=ot(t),this._saveToStorage()}get reconnectDelayMin(){return ct(f.instance.reconnectDelayMin)}set reconnectDelayMin(t){f.instance.reconnectDelayMin=ot(t),this._saveToStorage()}get reconnectDelayMax(){return ct(f.instance.reconnectDelayMax)}set reconnectDelayMax(t){f.instance.reconnectDelayMax=ot(t),this._saveToStorage()}get relayHost(){return f.instance.relayHost??""}set relayHost(t){f.instance.relayHost=t,this._saveToStorage()}get receiveVideo(){return f.instance.receiveVideo}set receiveVideo(t){f.instance.receiveVideo=t,this._saveToStorage()}get receiveAudio(){return f.instance.receiveAudio}set receiveAudio(t){f.instance.receiveAudio=t,this._saveToStorage()}get preferredAudioInput(){return f.instance.preferredAudioInput}set preferredAudioInput(t){f.instance.preferredAudioInput=t}get preferredAudioOutput(){return f.instance.preferredAudioOutput}set preferredAudioOutput(t){f.instance.preferredAudioOutput=t}get preferredVideoInput(){return f.instance.preferredVideoInput}set preferredVideoInput(t){f.instance.preferredVideoInput=t}get inputAudioConstraints(){return f.instance.inputAudioDeviceConstraints}set inputAudioConstraints(t){f.instance.inputAudioDeviceConstraints=t}get inputVideoConstraints(){return f.instance.inputVideoDeviceConstraints}set inputVideoConstraints(t){f.instance.inputVideoDeviceConstraints=t}get deviceDebounceTime(){return ct(f.instance.deviceDebounceTime)}set deviceDebounceTime(t){f.instance.deviceDebounceTime=ot(t),this._saveToStorage()}get devicePollingInterval(){return ct(f.instance.devicePollingInterval)}set devicePollingInterval(t){f.instance.devicePollingInterval=ot(t),this._saveToStorage()}get disableUdpIceServers(){return f.instance.disableUdpIceServers}set disableUdpIceServers(t){f.instance.disableUdpIceServers=t,this._saveToStorage()}get relayOnly(){return f.instance.relayOnly}set relayOnly(t){f.instance.relayOnly=t,this._saveToStorage()}get iceCandidateTimeout(){return ct(f.instance.iceCandidateTimeout)}set iceCandidateTimeout(t){f.instance.iceCandidateTimeout=ot(t),this._saveToStorage()}get iceGatheringTimeout(){return ct(f.instance.iceGatheringTimeout)}set iceGatheringTimeout(t){f.instance.iceGatheringTimeout=ot(t),this._saveToStorage()}get iceServers(){return f.instance.iceServers}set iceServers(t){f.instance.iceServers=t,this._saveToStorage()}get userVariables(){return f.instance.userVariables}set userVariables(t){f.instance.userVariables=t,this._saveToStorage()}get statsPollingInterval(){return f.instance.statsPollingInterval}set statsPollingInterval(t){f.instance.statsPollingInterval=t,this._saveToStorage()}get statsBaselineSamples(){return f.instance.statsBaselineSamples}set statsBaselineSamples(t){f.instance.statsBaselineSamples=t,this._saveToStorage()}get statsNoPacketThreshold(){return f.instance.statsNoPacketThreshold}set statsNoPacketThreshold(t){f.instance.statsNoPacketThreshold=t,this._saveToStorage()}get statsRttSpikeMultiplier(){return f.instance.statsRttSpikeMultiplier}set statsRttSpikeMultiplier(t){f.instance.statsRttSpikeMultiplier=t,this._saveToStorage()}get statsPacketLossThreshold(){return f.instance.statsPacketLossThreshold}set statsPacketLossThreshold(t){f.instance.statsPacketLossThreshold=t,this._saveToStorage()}get statsJitterSpikeMultiplier(){return f.instance.statsJitterSpikeMultiplier}set statsJitterSpikeMultiplier(t){f.instance.statsJitterSpikeMultiplier=t,this._saveToStorage()}get statsHistorySize(){return f.instance.statsHistorySize}set statsHistorySize(t){f.instance.statsHistorySize=t,this._saveToStorage()}get keyframeMaxBurst(){return f.instance.keyframeMaxBurst}set keyframeMaxBurst(t){f.instance.keyframeMaxBurst=t,this._saveToStorage()}get keyframeBurstWindow(){return f.instance.keyframeBurstWindow}set keyframeBurstWindow(t){f.instance.keyframeBurstWindow=t,this._saveToStorage()}get keyframeCooldown(){return f.instance.keyframeCooldown}set keyframeCooldown(t){f.instance.keyframeCooldown=t,this._saveToStorage()}get reinviteDebounceTime(){return f.instance.reinviteDebounceTime}set reinviteDebounceTime(t){f.instance.reinviteDebounceTime=t,this._saveToStorage()}get reinviteMaxAttempts(){return f.instance.reinviteMaxAttempts}set reinviteMaxAttempts(t){f.instance.reinviteMaxAttempts=t,this._saveToStorage()}get reinviteTimeout(){return f.instance.reinviteTimeout}set reinviteTimeout(t){f.instance.reinviteTimeout=t,this._saveToStorage()}get recoveryDebounceTime(){return ct(f.instance.recoveryDebounceTime)}set recoveryDebounceTime(t){f.instance.recoveryDebounceTime=ot(t),this._saveToStorage()}get recoveryCooldown(){return ct(f.instance.recoveryCooldown)}set recoveryCooldown(t){f.instance.recoveryCooldown=ot(t),this._saveToStorage()}get iceDisconnectedGracePeriod(){return ct(f.instance.iceDisconnectedGracePeriod)}set iceDisconnectedGracePeriod(t){f.instance.iceDisconnectedGracePeriod=ot(t),this._saveToStorage()}get iceRestartTimeout(){return ct(f.instance.iceRestartTimeout)}set iceRestartTimeout(t){f.instance.iceRestartTimeout=ot(t),this._saveToStorage()}get maxRecoveryAttempts(){return f.instance.maxRecoveryAttempts}set maxRecoveryAttempts(t){f.instance.maxRecoveryAttempts=t,this._saveToStorage()}get enableRelayFallback(){return f.instance.enableRelayFallback}set enableRelayFallback(t){f.instance.enableRelayFallback=t,this._saveToStorage()}get enableNetworkChangeDetection(){return f.instance.enableNetworkChangeDetection}set enableNetworkChangeDetection(t){f.instance.enableNetworkChangeDetection=t,this._saveToStorage()}get enableServerHangupInterception(){return f.instance.enableServerHangupInterception}set enableServerHangupInterception(t){f.instance.enableServerHangupInterception=t,this._saveToStorage()}get persistDeviceSelection(){return f.instance.persistDeviceSelection}set persistDeviceSelection(t){f.instance.persistDeviceSelection=t,this._saveToStorage()}get syncDevicesToActiveCalls(){return f.instance.syncDevicesToActiveCalls}set syncDevicesToActiveCalls(t){f.instance.syncDevicesToActiveCalls=t,this._saveToStorage()}get autoMuteVideoOnHidden(){return f.instance.autoMuteVideoOnHidden}set autoMuteVideoOnHidden(t){f.instance.autoMuteVideoOnHidden=t,this._saveToStorage()}get refreshDevicesOnVisible(){return f.instance.refreshDevicesOnVisible}set refreshDevicesOnVisible(t){f.instance.refreshDevicesOnVisible=t,this._saveToStorage()}get checkConnectionOnVisible(){return f.instance.checkConnectionOnVisible}set checkConnectionOnVisible(t){f.instance.checkConnectionOnVisible=t,this._saveToStorage()}get defaultAudioConstraints(){return f.instance.defaultAudioConstraints}set defaultAudioConstraints(t){f.instance.defaultAudioConstraints=t}get defaultVideoConstraints(){return f.instance.defaultVideoConstraints}set defaultVideoConstraints(t){f.instance.defaultVideoConstraints=t}get stereoAudio(){return f.instance.stereoAudio}set stereoAudio(t){f.instance.stereoAudio=t,this._saveToStorage()}get enableAutoDegradation(){return f.instance.enableAutoDegradation}set enableAutoDegradation(t){f.instance.enableAutoDegradation=t,this._saveToStorage()}get degradationBitrateThreshold(){return f.instance.degradationBitrateThreshold}set degradationBitrateThreshold(t){f.instance.degradationBitrateThreshold=t,this._saveToStorage()}get degradationRecoveryThreshold(){return f.instance.degradationRecoveryThreshold}set degradationRecoveryThreshold(t){f.instance.degradationRecoveryThreshold=t,this._saveToStorage()}get preferredVideoCodecs(){return f.instance.preferredVideoCodecs}set preferredVideoCodecs(t){f.instance.preferredVideoCodecs=t,this._saveToStorage()}get preferredAudioCodecs(){return f.instance.preferredAudioCodecs}set preferredAudioCodecs(t){f.instance.preferredAudioCodecs=t,this._saveToStorage()}_saveToStorage(){if(!this._storage)return;const t=Bp();this._storage.setItem(wo,t,"local").catch(e=>{Ho.error(`[ClientPreferences] Failed to save preferences: ${String(e)}`)})}_loadFromStorage(){this._storage&&this._storage.getItem(wo,"local").then(t=>{t&&zp(t)}).catch(t=>{Ho.error(`[ClientPreferences] Failed to load preferences: ${String(t)}`)})}};function di(t){return t instanceof Error?t:new Error(String(t))}const lt=G(),jo={audioinput:jh,audiooutput:Wh,videoinput:Gh},Hp={audioinput:[],audiooutput:[],videoinput:[]},Wo={audioinput:null,audiooutput:null,videoinput:null};var jp=class extends se{constructor(t,e){super(),this.webRTCApiProvider=t,this.deviceChangeHandler=()=>{lt.debug("[DeviceController] Device change detected"),this.enumerateDevices()},this._devicesState$=this.createBehaviorSubject(Hp),this._selectedDevicesState$=this.createBehaviorSubject(Wo),this._errors$=this.createReplaySubject(1),this._deviceHistory=new Fp,this._deviceRecovered$=this.createSubject(),this._audioInputDisabled$=this.createBehaviorSubject(!1),this._videoInputDisabled$=this.createBehaviorSubject(!1),this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._persistedDevices={},this._storageManager=e,this.init()}setStorageManager(t){this._storageManager=t,this.loadPersistedDevices()}get selectedAudioInputDeviceConstraints(){return this._audioInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedAudioInputDevice)}get selectedVideoInputDeviceConstraints(){return this._videoInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedVideoInputDevice)}deviceInfoToConstraints(t){if(!(t!=null&&t.deviceId)||t.deviceId.trim()==="")return{};const e=t.kind==="audioinput"?this.audioInputDevices:this.videoInputDevices,i=e.find(r=>r.deviceId===t.deviceId)??e.find(r=>r.label===t.label);return i?{deviceId:{exact:i.deviceId}}:{}}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(S(this.destroyed$)))}get deviceRecovered$(){return this._deviceRecovered$.asObservable().pipe(S(this.destroyed$))}get videoInputDisabled$(){return this.cachedObservable("videoInputDisabled$",()=>this._videoInputDisabled$.asObservable().pipe(U(),S(this.destroyed$)))}get audioInputDisabled$(){return this.cachedObservable("audioInputDisabled$",()=>this._audioInputDisabled$.asObservable().pipe(U(),S(this.destroyed$)))}get videoInputDisabled(){return this._videoInputDisabled$.value}get audioInputDisabled(){return this._audioInputDisabled$.value}get audioInputDevices$(){return this.cachedObservable("audioInputDevices$",()=>this._devicesState$.pipe(x(t=>t.audioinput),U(),S(this.destroyed$)))}get audioOutputDevices$(){return this.cachedObservable("audioOutputDevices$",()=>this._devicesState$.pipe(x(t=>t.audiooutput),U(),S(this.destroyed$)))}get videoInputDevices$(){return this.cachedObservable("videoInputDevices$",()=>this._devicesState$.pipe(x(t=>t.videoinput),U(),S(this.destroyed$)))}get selectedAudioInputDevice$(){return this.cachedObservable("selectedAudioInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(x(t=>t.audioinput),U(),S(this.destroyed$),Ee(t=>lt.debug("[DeviceController] Selected audio input device changed:",t))))}get selectedAudioOutputDevice$(){return this.cachedObservable("selectedAudioOutputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(x(t=>t.audiooutput),U(),S(this.destroyed$),Ee(t=>lt.debug("[DeviceController] Selected audio output device changed:",t))))}get selectedVideoInputDevice$(){return this.cachedObservable("selectedVideoInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(x(t=>t.videoinput),U(),S(this.destroyed$),Ee(t=>lt.debug("[DeviceController] Selected video input device changed:",t))))}get selectedAudioInputDevice(){return this._audioInputDisabled$.value?null:this._selectedDevicesState$.value.audioinput}get selectedAudioOutputDevice(){return this._selectedDevicesState$.value.audiooutput}get selectedVideoInputDevice(){return this._videoInputDisabled$.value?null:this._selectedDevicesState$.value.videoinput}get audioInputDevices(){return this._devicesState$.value.audioinput}get audioOutputDevices(){return this._devicesState$.value.audiooutput}get videoInputDevices(){return this._devicesState$.value.videoinput}disableAudioInput(){this._audioInputDisabled$.value||(this._lastAudioInputBeforeDisable=this._selectedDevicesState$.value.audioinput,this._audioInputDisabled$.next(!0),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:null}))}enableAudioInput(){if(this._audioInputDisabled$.value){this._audioInputDisabled$.next(!1);const t=this._lastAudioInputBeforeDisable??this.audioInputDevices[0];this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:t}),this._lastAudioInputBeforeDisable=null}}disableVideoInput(){this._videoInputDisabled$.value||(this._lastVideoInputBeforeDisable=this._selectedDevicesState$.value.videoinput,this._videoInputDisabled$.next(!0),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:null}))}enableVideoInput(){if(this._videoInputDisabled$.value){this._videoInputDisabled$.next(!1);const t=this._lastVideoInputBeforeDisable??this.videoInputDevices[0];this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:t}),this._lastVideoInputBeforeDisable=null}}selectAudioInputDevice(t){this._audioInputDisabled$.value&&t&&this._audioInputDisabled$.next(!1);const e=this._selectedDevicesState$.value.audioinput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("audioinput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:t}),t&&this.persistDeviceSelection("audioinput",t)}selectVideoInputDevice(t){lt.debug("[DeviceController] Setting selected video input device:",t),this._videoInputDisabled$.value&&t&&this._videoInputDisabled$.next(!1);const e=this._selectedDevicesState$.value.videoinput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("videoinput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:t}),t&&this.persistDeviceSelection("videoinput",t)}selectAudioOutputDevice(t){const e=this._selectedDevicesState$.value.audiooutput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("audiooutput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audiooutput:t}),t&&this.persistDeviceSelection("audiooutput",t)}init(){this.loadPersistedDevices(),this.subscribeTo(this._devicesState$.pipe(ho(f.instance.deviceDebounceTime)),t=>{const e=this._selectedDevicesState$.value,i=this._audioInputDisabled$.value?null:this.resolveDevice("audioinput",t.audioinput,e.audioinput,f.instance.preferredAudioInput),r=this.resolveDevice("audiooutput",t.audiooutput,e.audiooutput,f.instance.preferredAudioOutput),n=this._videoInputDisabled$.value?null:this.resolveDevice("videoinput",t.videoinput,e.videoinput,f.instance.preferredVideoInput);if(i!==e.audioinput||r!==e.audiooutput||n!==e.videoinput){const s=f.instance.syncDevicesToActiveCalls;this._selectedDevicesState$.next({audioinput:s||!e.audioinput?i:e.audioinput,audiooutput:s||!e.audiooutput?r:e.audiooutput,videoinput:s||!e.videoinput?n:e.videoinput})}}),this.enumerateDevices()}resolveDevice(t,e,i,r){if(e.length===0)return null;if(i){if(e.find(c=>c.deviceId===i.deviceId))return i;const s=e.filter(c=>c.label===i.label);if(s.length===1)return s[0];if(s.length>1){const c=s.find(u=>u.groupId===i.groupId);return c||(this.emitDeviceRecovered(t,i,null,"ambiguous_match"),null)}const a=this._deviceHistory.findInHistory(t,e);if(a)return lt.debug(`[DeviceController] Device disappeared, falling back to history: ${a.label}`),this.emitDeviceRecovered(t,i,a,"device_disconnected"),a;const o=(r?e.find(c=>c.deviceId===r.deviceId||c.label===r.label):void 0)??e[0];return this.emitDeviceRecovered(t,i,o,"fallback_to_default"),o}const n=this._persistedDevices[t];if(n){const s=this.resolvePersistedDevice(t,n,e);if(s)return s}if(r){const s=e.find(a=>a.deviceId===r.deviceId||a.label===r.label);if(s)return s}return e[0]}resolvePersistedDevice(t,e,i){const r=i.find(a=>a.deviceId===e.deviceId);if(r)return r;const n=i.find(a=>a.groupId===e.groupId&&a.label===e.label);if(n)return n;const s=i.filter(a=>a.label===e.label);return s.length===1?s[0]:null}emitDeviceRecovered(t,e,i,r){try{this._deviceRecovered$.next({kind:t,previousDevice:e,newDevice:i,reason:r})}catch{}}async persistDeviceSelection(t,e){if(!this._storageManager||!f.instance.persistDeviceSelection)return;const i={deviceId:e.deviceId,label:e.label,kind:e.kind,groupId:e.groupId};try{await this._storageManager.setItem(jo[t],i,"local")}catch(r){lt.error(`[DeviceController] Failed to persist device selection for ${t}:`,r)}}async loadPersistedDevices(){if(!(!this._storageManager||!f.instance.persistDeviceSelection))for(const t of["audioinput","audiooutput","videoinput"])try{const e=await this._storageManager.getItem(jo[t],"local");e&&(this._persistedDevices={...this._persistedDevices,[t]:e})}catch(e){lt.error(`[DeviceController] Failed to load persisted device for ${t}:`,e)}}async clearDeviceState(){this._deviceHistory.clear(),this._persistedDevices={},this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._audioInputDisabled$.next(!1),this._videoInputDisabled$.next(!1),this._selectedDevicesState$.next(Wo),await this.enumerateDevices()}enableDeviceMonitoring(){this.disableDeviceMonitoring(),this.webRTCApiProvider.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler),f.instance.devicePollingInterval>0&&(this._devicesPoolingSubscription=en(f.instance.devicePollingInterval).subscribe(()=>{lt.debug("[DeviceController] Polling devices due to interval"),this.enumerateDevices()})),this.enumerateDevices()}disableDeviceMonitoring(){this.webRTCApiProvider.mediaDevices.removeEventListener("devicechange",this.deviceChangeHandler),this._devicesPoolingSubscription&&(this._devicesPoolingSubscription.unsubscribe(),this._devicesPoolingSubscription=void 0)}async enumerateDevices(){try{const t=(await this.webRTCApiProvider.mediaDevices.enumerateDevices()).reduce((e,i)=>{const r=i.kind;return{...e,[r]:[...e[r],i]}},{audioinput:[],audiooutput:[],videoinput:[]});this._devicesState$.next(t),lt.debug("[DeviceController] Devices enumerated:",{audioInputs:t.audioinput.length,audioOutputs:t.audiooutput.length,videoInputs:t.videoinput.length})}catch(t){lt.error("[DeviceController] Failed to enumerate devices:",t),this._errors$.next(di(t))}}async getDeviceCapabilities(t){if(t.kind==="audiooutput")return null;try{const e=this.deviceInfoToConstraints(t),i=await this.webRTCApiProvider.mediaDevices.getUserMedia({audio:t.kind==="audioinput"?e:!1,video:t.kind==="videoinput"?e:!1}),r=(t.kind==="audioinput"?i.getAudioTracks()[0]:i.getVideoTracks()[0]).getCapabilities();return i.getTracks().forEach(n=>n.stop()),r}catch(e){throw lt.error("[DeviceController] Failed to get device capabilities:",e),this._errors$.next(di(e)),e}}async isValidDevice(t){if(!t||t.kind==="audiooutput")return!1;try{return await this.getDeviceCapabilities(t)!==null}catch{return!1}}destroy(){this.disableDeviceMonitoring(),super.destroy()}},Go=class{constructor(){if(typeof localStorage>"u")throw new us("localStorage");if(typeof sessionStorage>"u")throw new us("sessionStorage");try{const t="__storage_test__";localStorage.setItem(t,"test"),localStorage.removeItem(t)}catch(t){throw G().error("LocalStorage is not accessible:",t),new us("localStorage")}}storage(t){return t==="local"?localStorage:sessionStorage}async setItem(t,e,i="session"){return this.storage(i).setItem(t,e),Promise.resolve()}async getItem(t,e="session"){return Promise.resolve(this.storage(e).getItem(t))}async removeItem(t,e="session"){return this.storage(e).removeItem(t),Promise.resolve()}async clear(t="session"){const e=this.storage(t),i=[];for(let r=0;r<e.length;r++){const n=e.key(r);n!=null&&n.startsWith("sw:")&&i.push(n)}for(const r of i)e.removeItem(r);return Promise.resolve()}},Wp=class{constructor(t=new Go){this.storageImpl=t}serialize(t,e){if(t==null)return null;try{return JSON.stringify(t)}catch(i){throw new sp(e??"unknown",i)}}async setItem(t,e,i="session"){const r=this.serialize(e,t);try{await this.storageImpl.setItem(t,r,i)}catch(n){throw new ds(t,n)}}async getItem(t,e="session"){let i;try{i=await this.storageImpl.getItem(t,e)}catch(r){throw new op(t,r)}if(!i)return null;try{return JSON.parse(i)}catch(r){throw new ap(t,r)}}async removeItem(t,e="session"){try{await this.storageImpl.removeItem(t,e)}catch(i){throw new ds(t,i)}}async clearAll(){try{await this.storageImpl.clear("local"),await this.storageImpl.clear("session")}catch(t){throw new ds("clearAll",t)}}},Gp=class{constructor(){this.persistSession=!1,this._webSocketConstructor=typeof WebSocket<"u"?WebSocket:void 0,this._baseURL=this.apiHost,this._credential={}}get userId(){return this.user.id}get user(){if(!this._user)throw new te("User");return this._user}set user(t){this._user=t}get storage(){return this._storageManager||(this._storageImpl??(this._storageImpl=new Go),this._storageManager=new Wp(this._storageImpl)),this._storageManager}get http(){return this._httpRequestController??(this._httpRequestController=new Op(this._baseURL,()=>this._credential)),this._httpRequestController}get conversationManager(){if(!this._conversationManager)throw new te("ConversationsManager");return this._conversationManager}set conversationManager(t){this._conversationManager=t}get WebSocket(){if(!this._webSocketConstructor)throw new te("WebSocket constructor");return this._webSocketConstructor}set WebSocket(t){this._webSocketConstructor=t}get deviceController(){return this._deviceController??(this._deviceController=new jp(this.webRTCApiProvider,this.storage)),this._deviceController}get webRTCApiProvider(){if(!this._webRTCApiProvider){if(typeof RTCPeerConnection>"u"||typeof navigator>"u")throw new te("WebRTCApiProvider: RTCPeerConnection or navigator.mediaDevices is not available. Please provide a custom webRTCApiProvider in SignalWireOptions.");this._webRTCApiProvider={RTCPeerConnection,mediaDevices:navigator.mediaDevices}}return this._webRTCApiProvider}set webRTCApiProvider(t){this._webRTCApiProvider=t,this._deviceController=void 0}get authorizationStateKey(){return`sw:${this.userId}:as`}get protocolKey(){return`sw:${this.userId}:pt`}get attachedCallsKey(){return`sw:${this.userId}:att`}getUserFromAddressId(){var t;return((t=this.user.addresses[0])==null?void 0:t.id)??""}set baseURL(t){this._baseURL=t,this._httpRequestController=void 0}get credential(){return this._credential}set credential(t){this._credential=t}set storageImpl(t){this._storageImpl=t,this._storageManager=void 0}set ch(t){if(!t)return;const e=t.indexOf(".");e!==-1&&(this._host=t.substring(0,e),this._domain=t.substring(e+1)),this._baseURL=this.apiHost,this._httpRequestController=void 0}get relayHost(){return`wss://${this._host??"puc"}.${this._domain??"signalwire.com"}`}get apiHost(){return`https://fabric.${this._domain??"signalwire.com"}`}};const Wt=G(),qp="sw-dpop",Xp=1,Gt="keys",fs="dpop-keypair",hn=t=>{const e=new Uint8Array(t);let i="";for(const r of e)i+=String.fromCharCode(r);return btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},qo=t=>hn(new TextEncoder().encode(t).buffer),Xo=async t=>{if(t.kty!=="RSA")throw new Error(`Unsupported key type for JWK Thumbprint: ${t.kty}. Only RSA is supported.`);const e=JSON.stringify({e:t.e,kty:t.kty,n:t.n});return hn(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))};async function vs(){return new Promise((t,e)=>{const i=indexedDB.open(qp,Xp);i.onupgradeneeded=()=>{const r=i.result;r.objectStoreNames.contains(Gt)||r.createObjectStore(Gt)},i.onsuccess=()=>t(i.result),i.onerror=()=>e(i.error??new Error("Failed to open IndexedDB"))})}async function Yp(){try{const t=await vs();return await new Promise((e,i)=>{const r=t.transaction(Gt,"readonly"),n=r.objectStore(Gt).get(fs);n.onsuccess=()=>e(n.result??null),n.onerror=()=>i(n.error??new Error("Failed to load key pair from IndexedDB")),r.oncomplete=()=>t.close()})}catch(t){return Wt.warn("[DPoP] Failed to load key pair from IndexedDB:",t),null}}async function Kp(t){try{const e=await vs();await new Promise((i,r)=>{const n=e.transaction(Gt,"readwrite");n.objectStore(Gt).put(t,fs),n.oncomplete=()=>{e.close(),i()},n.onerror=()=>{e.close(),r(n.error??new Error("Failed to save key pair to IndexedDB"))}})}catch(e){Wt.warn("[DPoP] Failed to save key pair to IndexedDB:",e)}}async function Yo(){try{const t=await vs();await new Promise((e,i)=>{const r=t.transaction(Gt,"readwrite");r.objectStore(Gt).delete(fs),r.oncomplete=()=>{t.close(),e()},r.onerror=()=>{t.close(),i(r.error??new Error("Failed to delete key pair from IndexedDB"))}})}catch(t){Wt.warn("[DPoP] Failed to delete key pair from IndexedDB:",t)}}var Zp=class{constructor(){this._keyPair=null,this._publicJwk=null,this._fingerprint=null,this._initialized=!1}async init(){if(this._initialized)return this.fingerprint;const t=await Yp();if(t)try{const e=new TextEncoder().encode("dpop-key-check");return await crypto.subtle.sign("RSASSA-PKCS1-v1_5",t.privateKey,e),this._keyPair=t,this._publicJwk=await crypto.subtle.exportKey("jwk",t.publicKey),this._fingerprint=await Xo(this._publicJwk),this._initialized=!0,Wt.debug("[DPoP] Key pair restored from IndexedDB, fingerprint:",this._fingerprint),this._fingerprint}catch(e){Wt.warn("[DPoP] Stored key pair unusable, generating new one:",e),await Yo()}return Wt.debug("[DPoP] Generating RSA key pair"),this._keyPair=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!1,["sign","verify"]),this._publicJwk=await crypto.subtle.exportKey("jwk",this._keyPair.publicKey),this._fingerprint=await Xo(this._publicJwk),this._initialized=!0,await Kp(this._keyPair),Wt.debug("[DPoP] Key pair generated and persisted, fingerprint:",this._fingerprint),this._fingerprint}get fingerprint(){if(!this._fingerprint)throw new cn("CryptoController not initialized. Call init() first.");return this._fingerprint}get initialized(){return this._initialized}async createHttpProof(t){const e={jti:crypto.randomUUID(),htm:t.method,htu:t.uri,iat:Math.floor(Date.now()/1e3)};return t.accessToken&&(e.ath=hn(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t.accessToken)))),this.signProof(e)}async createRpcProof(t){const e={jti:crypto.randomUUID(),rpc:"request",mth:t.method,iat:Math.floor(Date.now()/1e3)};return this.signProof(e)}destroy(){this._keyPair=null,this._publicJwk=null,this._fingerprint=null,this._initialized=!1,Yo(),Wt.debug("[DPoP] Controller destroyed")}get publicJwk(){if(!this._publicJwk)throw new cn("CryptoController not initialized. Call init() first.");return this._publicJwk}get privateKey(){if(!this._keyPair)throw new cn("CryptoController not initialized. Call init() first.");return this._keyPair.privateKey}async signProof(t){const e={typ:"dpop+jwt",alg:"RS256",jwk:this.publicJwk},i=`${qo(JSON.stringify(e))}.${qo(JSON.stringify(t))}`;return`${i}.${hn(await crypto.subtle.sign("RSASSA-PKCS1-v1_5",this.privateKey,new TextEncoder().encode(i)))}`}};const Vi=G();function Ko(){return typeof window<"u"&&typeof window.addEventListener=="function"}function Zo(){if(typeof navigator>"u")return;const{connection:t}=navigator;return(t==null?void 0:t.effectiveType)??void 0}function Qo(){if(!(typeof navigator>"u"))return navigator.connection??void 0}var Qp=class extends se{constructor(){super(),this._isOnline$=this.createBehaviorSubject(typeof navigator<"u"?navigator.onLine:!0),this._networkChange$=this.createSubject(),this._onOnline=this.handleOnline.bind(this),this._onOffline=this.handleOffline.bind(this),this._onConnectionChange=this.handleConnectionChange.bind(this),this._listenersAttached=!1,this.attachListeners()}get isOnline$(){return this._isOnline$.asObservable().pipe(S(this._destroyed$))}get isOnline(){return this._isOnline$.value}get networkChange$(){return this._networkChange$.asObservable().pipe(S(this._destroyed$))}destroy(){this.removeListeners(),super.destroy()}attachListeners(){if(!Ko()){Vi.debug("NetworkMonitor: no browser environment detected, skipping event listeners");return}window.addEventListener("online",this._onOnline),window.addEventListener("offline",this._onOffline);const t=Qo();t&&t.addEventListener("change",this._onConnectionChange),this._listenersAttached=!0,Vi.debug("NetworkMonitor: event listeners attached")}removeListeners(){if(this._listenersAttached){if(Ko()){window.removeEventListener("online",this._onOnline),window.removeEventListener("offline",this._onOffline);const t=Qo();t&&t.removeEventListener("change",this._onConnectionChange)}this._listenersAttached=!1,Vi.debug("NetworkMonitor: event listeners removed")}}handleOnline(){Vi.info("NetworkMonitor: browser went online"),this._isOnline$.next(!0),this._networkChange$.next({type:"online",timestamp:Date.now(),networkType:Zo()})}handleOffline(){Vi.info("NetworkMonitor: browser went offline"),this._isOnline$.next(!1),this._networkChange$.next({type:"offline",timestamp:Date.now()})}handleConnectionChange(){const t=Zo();Vi.info(`NetworkMonitor: connection changed — effectiveType=${t??"unknown"}`),this._networkChange$.next({type:"connection_change",timestamp:Date.now(),networkType:t})}};function Jo(t){if(typeof RTCRtpSender>"u"||typeof RTCRtpSender.getCapabilities!="function")return[];const e=RTCRtpSender.getCapabilities(t);if(!e)return[];const i=new Set,r=[];for(const n of e.codecs){const s=Jp(n.mimeType);s&&!i.has(s)&&(i.add(s),r.push(s))}return r}function Jp(t){const e=t.indexOf("/");return e>=0?t.substring(e+1):t}function $p(){return typeof globalThis>"u"?!1:"RTCRtpScriptTransform"in globalThis||"MediaStreamTrackProcessor"in globalThis}function eg(){return typeof HTMLMediaElement>"u"?!1:"setSinkId"in HTMLMediaElement.prototype}function tg(){return typeof RTCRtpSender>"u"?!1:typeof RTCRtpSender.prototype.setParameters=="function"}function $o(t){const e=(t==null?void 0:t.mediaDevices)??ec(),i=typeof(e==null?void 0:e.getUserMedia)=="function",r=typeof(e==null?void 0:e.getDisplayMedia)=="function",n={webrtc:t?typeof t.RTCPeerConnection=="function":typeof globalThis<"u"&&"RTCPeerConnection"in globalThis,getUserMedia:i,getDisplayMedia:r,screenShare:r,screenShareAudio:ig(),simulcast:tg(),insertableStreams:$p(),audioOutputSelection:eg(),videoCodecs:Jo("video"),audioCodecs:Jo("audio")};return Object.freeze(n)}function ig(){if(typeof navigator>"u")return!1;const t=ec();return!t||typeof t.getDisplayMedia!="function"?!1:navigator.userAgent.includes("Chrome/")}function ec(){return typeof navigator<"u"?navigator.mediaDevices:null}const pn=G(),rg=10,ng=1e4,sg=5e3,ag=5e3;var og=class extends se{constructor(t,e,i,r,n,s={}){super(),this.deviceController=t,this.iceServers=e,this.isConnected=i,this.transportRttMs=r,this.dialFn=n,this._options={duration:s.duration??rg,skipMediaTest:s.skipMediaTest??!1,audioDevice:s.audioDevice,videoDevice:s.videoDevice}}async run(t){const e=[];try{const i=this.testSignaling();i.reachable||e.push("WebSocket not connected");const r=await this.testDevices();r.audioInput.working||e.push("Audio input device not working"),r.videoInput.working||e.push("Video input device not working");const n=await this.testIceConnectivity();n.type==="failed"?e.push("No ICE connectivity (neither STUN nor TURN reachable)"):n.type==="relay"&&e.push("Only TURN relay connectivity available (no direct path)"),n.turnReachable||e.push("TURN servers not reachable");let s=null;if(!this._options.skipMediaTest)try{s=await this.testMediaBandwidth(t)}catch(a){pn.warn("[PreflightRunner] Media bandwidth test failed:",a),e.push("Media bandwidth test failed")}return{ok:i.reachable&&n.type!=="failed"&&r.audioInput.working,signaling:i,connectivity:n,bandwidth:s,devices:r,warnings:e}}catch(i){throw pn.error("[PreflightRunner] Preflight test failed:",i),new dp("preflight",i instanceof Error?i:new Error(String(i)))}finally{this.destroy()}}testSignaling(){return{reachable:this.isConnected,rttMs:this.transportRttMs}}async testDevices(){const t=this._options.audioDevice??this.deviceController.selectedAudioInputDevice,e=this._options.videoDevice??this.deviceController.selectedVideoInputDevice,i=this.deviceController.selectedAudioOutputDevice;let r=!1,n=!1,s;try{const a={};t?a.audio={deviceId:{exact:t.deviceId}}:a.audio=!0,e?a.video={deviceId:{exact:e.deviceId}}:a.video=!0,s=await Promise.race([navigator.mediaDevices.getUserMedia(a),new Promise((o,c)=>setTimeout(()=>c(new Error("getUserMedia timeout")),ag))]);for(const o of s.getTracks())o.kind==="audio"&&o.readyState==="live"&&(r=!0),o.kind==="video"&&o.readyState==="live"&&(n=!0)}catch(a){pn.warn("[PreflightRunner] Device test failed:",a)}finally{s&&s.getTracks().forEach(a=>a.stop())}return{audioInput:{working:r,device:t},videoInput:{working:n,device:e},audioOutput:{available:!!i,device:i}}}async testIceConnectivity(){let t;try{t=new RTCPeerConnection({iceServers:this.iceServers});const e=t,i=new Set,r=Date.now(),n=new Promise(p=>{const v=setTimeout(p,ng);e.onicecandidate=C=>{if(C.candidate){const O=C.candidate.candidate;O.includes("typ host")&&i.add("host"),O.includes("typ srflx")&&i.add("srflx"),O.includes("typ relay")&&i.add("relay")}else clearTimeout(v),p()}});t.createDataChannel("preflight-test");const s=await t.createOffer();await t.setLocalDescription(s),await n;const a=Date.now()-r,o=i.has("srflx"),c=i.has("relay"),u=i.has("host");let h="failed";return u||o?h="direct":c&&(h="relay"),{type:h,turnReachable:c,stunReachable:o,rttMs:a}}catch(e){return pn.warn("[PreflightRunner] ICE connectivity test failed:",e),{type:"failed",turnReachable:!1,stunReachable:!1,rttMs:0}}finally{t&&t.close()}}async testMediaBandwidth(t){let e;try{e=await this.dialFn(t,{audio:!0,video:!1}),await Ke(e.status$.pipe(z(a=>a==="connected"),_e(1),Sr(sg)));const i=this._options.duration*1e3;await new Promise(a=>setTimeout(a,i));const r=e.networkMetrics;let n=0,s=0;if(r.length>0){const a=r[r.length-1];a.availableOutgoingBitrate!==void 0&&(n=Math.round(a.availableOutgoingBitrate/1e3));const o=a.audio.packetsReceived+a.video.packetsReceived;i>0&&o>0&&(s=n)}return{uploadKbps:n,downloadKbps:s}}finally{if(e)try{await e.hangup()}catch{}}}destroy(){super.destroy()}};const gn=G();function cg(){try{return typeof document<"u"&&typeof document.addEventListener=="function"&&typeof document.visibilityState=="string"}catch{return!1}}function tc(){try{if(typeof document<"u"&&typeof document.visibilityState=="string")return document.visibilityState==="visible"?"visible":"hidden"}catch{}return"visible"}var lg=class extends se{constructor(){super(),this._visibility$=this.createBehaviorSubject(tc()),this._visibilityChange$=this.createSubject(),this._hasVisibilityApi=cg(),this._boundHandler=this._handleVisibilityChange.bind(this),this._hasVisibilityApi?(document.addEventListener("visibilitychange",this._boundHandler),gn.debug("VisibilityController: listening for visibilitychange events")):gn.debug("VisibilityController: document visibility API not available, defaulting to visible")}get visibility$(){return this._visibility$.pipe(S(this._destroyed$))}get visibility(){return this._visibility$.value}get visibilityChange$(){return this._visibilityChange$.pipe(S(this._destroyed$))}destroy(){this._hasVisibilityApi&&(document.removeEventListener("visibilitychange",this._boundHandler),gn.debug("VisibilityController: removed visibilitychange listener")),super.destroy()}_handleVisibilityChange(){const t=tc(),e=this._visibility$.value;if(t===e)return;this._visibility$.next(t);const i={from:e,to:t,timestamp:Date.now()};this._visibilityChange$.next(i),gn.debug("VisibilityController: visibility changed",{from:e,to:t})}},ug=class extends se{constructor(t,e){super(),this.fromPath=t,this.http=e,this.fetched$=oi(()=>Oe(this.fetch())).pipe(st(1),S(this.destroyed$))}async fetch(){const t=await this.http.request({url:this.fromPath,method:"GET",headers:{Accept:"application/json"}});if(t.ok&&t.body){const e=JSON.parse(t.body);return this.populateInstance(e),!0}return!1}},dg=class extends ug{constructor(t){super("/api/fabric/subscriber/info",t)}populateInstance(t){this.id=t.id,this.email=t.email,this.firstName=t.first_name,this.lastName=t.last_name,this.displayName=t.display_name,this.jobTitle=t.job_title,this.timeZone=t.time_zone,this.country=t.country,this.region=t.region,this.companyName=t.company_name,this.pushNotificationKey=t.push_notification_key,this.appSettings=t.app_settings?{displayName:t.app_settings.display_name,scopes:t.app_settings.scopes}:void 0,this.addresses=t.fabric_addresses,this.satClaims=t.sat_claims}};const Hi=t=>({jsonrpc:"2.0",id:t.id??un(),...t}),ic=t=>({jsonrpc:"2.0",...t}),hg={major:4,minor:0,revision:0},pg=t=>Hi({method:"signalwire.connect",params:{version:hg,event_acks:!0,...t}}),gg=t=>{const{dpop_token:e,...i}=t;return Hi({method:"signalwire.reauthenticate",params:{authentication:i,...e?{dpop_token:e}:{}}})},fg=(t,e)=>ic({id:t,result:{timestamp:Date.now()/1e3}}),bs=({method:t,params:e})=>Hi({method:t,params:e}),vg={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number",fromCallAddressId:"from_fabric_address_id"},bg=new Set(["remoteSdp","localStream","remoteStream"]),mg=t=>{if(!Object.prototype.hasOwnProperty.call(t,"dialogParams"))return t;const e=t.dialogParams,i=Object.entries(e).reduce((r,[n,s])=>{if(bg.has(n))return r;const a=vg[n]??n;return{...r,[a]:s}},{});return{...t,dialogParams:i}},hi=t=>(e={})=>Hi({method:t,params:mg(e)}),rc=t=>Hi({method:"webrtc.verto",params:t}),yg=hi("verto.invite"),wg=hi("verto.bye"),fn=hi("verto.modify"),Sg=hi("verto.info"),Cg=hi("verto.answer"),Ag=hi("verto.subscribe"),Tg=hi("verto.pong"),Eg={NORMAL_CLEARING:"16",USER_BUSY:"17",MEDIA_TIMEOUT:"804"},kg=t=>ic({id:t,result:{}}),ji=G();var xg=class{constructor(t,e,i,r){this.storage=t,this.deviceController=e,this.reconnectCallsTimeout=i,this.attachKey=r,this.writeQueue=Promise.resolve()}async detachAll(){await this.mutate(t=>({}))}setSession(t){this.session=t}async readAttached(){try{return await this.storage.getItem(this.attachKey)??{}}catch(t){return ji.warn("[AttachManager] Failed to retrieve attached calls from storage",t),{}}}async writeAttached(t){try{await this.storage.setItem(this.attachKey,t)}catch(e){ji.warn("[AttachManager] Failed to write attached calls to storage",e)}}async mutate(t){const e=this.writeQueue.then(async()=>{const i=await t(await this.readAttached());await this.writeAttached(i)});return this.writeQueue=e.catch(()=>{}),e}async attach(t){if(!t.to){ji.warn("[AttachManager] Skip attach for calls with no destination");return}const e=t.to,i={nodeId:t.nodeId,destination:e,mediaDirections:t.mediaDirections,audioInputDevice:t.mediaDirections.audio!=="inactive"?this.deviceController.selectedAudioInputDevice:null,videoInputDevice:t.mediaDirections.video!=="inactive"?this.deviceController.selectedVideoInputDevice:null,attachedAt:Date.now()};await this.mutate(r=>({...r,[t.id]:i}))}async detach(t){await this.mutate(e=>{const{[t.id]:i,...r}=e;return r})}async flush(){await this.mutate(()=>({}))}async reattachCalls(){const t=await this.readAttached();await this.detachExpired();for(const[e,i]of Object.entries(t)){const{destination:r}=i,n=this.buildCallOptions(i);let s=!1;for(let a=1;a<=3;a++)try{await this.session.createOutboundCall(r,{callId:e,...n}),ji.info(`[AttachManager] Reattached call ${e} (attempt ${a})`),s=!0;break}catch(o){ji.warn(`[AttachManager] Reattach attempt ${a}/3 failed for call ${e}:`,o),a<3&&await new Promise(c=>setTimeout(c,(a+1)*1e3))}s||(ji.warn(`[AttachManager] Reattach failed after 3 attempts for call ${e}, removing reference`),await this.detach({id:e,mediaDirections:i.mediaDirections}))}}buildCallOptions(t){const{audio:e,video:i}=t.mediaDirections,{audioInputDevice:r,videoInputDevice:n,nodeId:s}=t,a=e.includes("recv"),o=i.includes("recv"),c=e.includes("send"),u=i.includes("send");return{nodeId:s,receiveAudio:a,receiveVideo:o,inputAudioDeviceConstraints:c?{audio:!0,...this.deviceController.deviceInfoToConstraints(r)}:void 0,inputVideoDeviceConstraints:u?{video:!0,...this.deviceController.deviceInfoToConstraints(n)}:void 0,reattach:!0}}async consumePendingAttachment(t){const e=await this.readAttached();if(Object.hasOwn(e,t))return this.buildCallOptions(e[t])}async detachExpired(){const t=Date.now(),e=this.reconnectCallsTimeout;await this.mutate(i=>{const r={...i};let n=!1;for(const[s,a]of Object.entries(i))t-a.attachedAt>e&&(delete r[s],n=!0);return n?r:i})}};const pi={on:!1,off:!1},ms={muteAudio:pi,muteVideo:pi,deaf:pi,raisehand:pi,microphoneVolume:!1,microphoneSensitivity:!1,speakerVolume:!1,position:!1,meta:!1,remove:!1,audioFlags:!1,denoise:!1,lowbitrate:!1},nc={self:ms,member:ms,end:!1,setLayout:!1,sendDigit:!1,vmutedHide:pi,lock:pi,device:!1,screenshare:!1};function Wi(t){return t.length===0?pi:{on:t.some(e=>!e.endsWith(".off")),off:t.some(e=>!e.endsWith(".on"))}}function sc(t,e,i,r){return t.filter(n=>n===e||n===`${e}.${i}`||n.startsWith(`${e}.${i}.${r}`))}function Lt(t,e,i,r){return t.some(n=>n===e||i!==null&&n===`${e}.${i}`||n.startsWith(`${e}.${i?`${i}.`:""}${r}`))}function ac(t,e){return t.filter(i=>i.startsWith(e)||i===e).length===0?ms:{muteAudio:Wi(sc(t,e,"mute","audio")),muteVideo:Wi(sc(t,e,"mute","video")),deaf:Wi(t.filter(i=>i===e||i.startsWith(`${e}.deaf`))),raisehand:Wi(t.filter(i=>i===e||i.startsWith(`${e}.raisehand`))),microphoneVolume:Lt(t,e,"microphone","volume"),microphoneSensitivity:Lt(t,e,"microphone","sensitivity"),speakerVolume:Lt(t,e,"speaker","volume"),position:Lt(t,e,null,"position"),meta:Lt(t,e,null,"meta"),remove:Lt(t,e,null,"remove"),audioFlags:Lt(t,e,null,"audioflags"),denoise:Lt(t,e,null,"denoise"),lowbitrate:Lt(t,e,null,"lowbitrate")}}function Dg(t){return t.length===0?nc:{self:ac(t,"self"),member:ac(t,"member"),end:t.some(e=>e==="end"),setLayout:t.some(e=>e.startsWith("layout")),sendDigit:t.some(e=>e.startsWith("digit")),vmutedHide:Wi(t.filter(e=>e.startsWith("vmuted"))),lock:Wi(t.filter(e=>e.startsWith("lock"))),device:t.some(e=>e==="device"),screenshare:t.some(e=>e==="screenshare")}}var Ig=class extends se{constructor(...t){super(...t),this._state$=this.createBehaviorSubject(nc)}updateFromRaw(t){const e=Dg(t);this._state$.next(e)}get self$(){return this.cachedObservable("self$",()=>this._state$.pipe(x(t=>t.self),U()))}get self(){return this._state$.value.self}get member$(){return this.cachedObservable("member$",()=>this._state$.pipe(x(t=>t.member),U()))}get member(){return this._state$.value.member}get end$(){return this.cachedObservable("end$",()=>this._state$.pipe(x(t=>t.end),U()))}get end(){return this._state$.value.end}get setLayout$(){return this.cachedObservable("setLayout$",()=>this._state$.pipe(x(t=>t.setLayout),U()))}get setLayout(){return this._state$.value.setLayout}get sendDigit$(){return this.cachedObservable("sendDigit$",()=>this._state$.pipe(x(t=>t.sendDigit),U()))}get sendDigit(){return this._state$.value.sendDigit}get vmutedHide$(){return this.cachedObservable("vmutedHide$",()=>this._state$.pipe(x(t=>t.vmutedHide),U()))}get vmutedHide(){return this._state$.value.vmutedHide}get lock$(){return this.cachedObservable("lock$",()=>this._state$.pipe(x(t=>t.lock),U()))}get lock(){return this._state$.value.lock}get device$(){return this.cachedObservable("device$",()=>this._state$.pipe(x(t=>t.device),U()))}get device(){return this._state$.value.device}get screenshare$(){return this.cachedObservable("screenshare$",()=>this._state$.pipe(x(t=>t.screenshare),U()))}get screenshare(){return this._state$.value.screenshare}get state$(){return this._state$.asObservable()}get state(){return this._state$.value}};function Mg(t){return t?"call.undeaf":"call.deaf"}function Rg(t){return t?"call.lowerhand":"call.raisehand"}const gi=G(),Pg={};var oc=class extends se{constructor(t,e,i){super(),this.executeMethod=e,this.deviceController=i,this._state$=this.createBehaviorSubject(Pg),this.id=t}upnext(t){this._state$.next({...this._state$.value,...t})}get name$(){return this.cachedObservable("name$",()=>this._state$.pipe(x(t=>t.name),U()))}get type$(){return this.cachedObservable("type$",()=>this._state$.pipe(x(t=>t.type),U()))}get handraised$(){return this.cachedObservable("handraised$",()=>this._state$.pipe(x(t=>t.handraised),U()))}get visible$(){return this.cachedObservable("visible$",()=>this._state$.pipe(x(t=>t.visible),U()))}get audioMuted$(){return this.cachedObservable("audioMuted$",()=>this._state$.pipe(x(t=>t.audio_muted),U()))}get videoMuted$(){return this.cachedObservable("videoMuted$",()=>this._state$.pipe(x(t=>t.video_muted),U()))}get deaf$(){return this.cachedObservable("deaf$",()=>this._state$.pipe(x(t=>t.deaf),U()))}get inputVolume$(){return this.cachedObservable("inputVolume$",()=>this._state$.pipe(x(t=>t.input_volume),U()))}get outputVolume$(){return this.cachedObservable("outputVolume$",()=>this._state$.pipe(x(t=>t.output_volume),U()))}get inputSensitivity$(){return this.cachedObservable("inputSensitivity$",()=>this._state$.pipe(x(t=>t.input_sensitivity),U()))}get echoCancellation$(){return this.cachedObservable("echoCancellation$",()=>this._state$.pipe(x(t=>t.echo_cancellation),U()))}get autoGain$(){return this.cachedObservable("autoGain$",()=>this._state$.pipe(x(t=>t.auto_gain),U()))}get noiseSuppression$(){return this.cachedObservable("noiseSuppression$",()=>this._state$.pipe(x(t=>t.noise_suppression),U()))}get lowbitrate$(){return this.cachedObservable("lowbitrate$",()=>this._state$.pipe(x(t=>t.lowbitrate),U()))}get denoise$(){return this.cachedObservable("denoise$",()=>this._state$.pipe(x(t=>t.denoise),U()))}get meta$(){return this.cachedObservable("meta$",()=>this._state$.pipe(x(t=>t.meta),U()))}get userId$(){return this.cachedObservable("userId$",()=>this._state$.pipe(x(t=>t.subscriber_id),U()))}get addressId$(){return this.cachedObservable("addressId$",()=>this._state$.pipe(x(t=>t.address_id),U()))}get nodeId$(){return this.cachedObservable("nodeId$",()=>this._state$.pipe(x(t=>t.node_id),U()))}get isTalking$(){return this.cachedObservable("isTalking$",()=>this._state$.pipe(x(t=>t.talking),U()))}get isTalking(){return this._state$.value.talking??!1}get position$(){return this.cachedObservable("position$",()=>this._state$.pipe(x(t=>t.position),U()))}get position(){return this._state$.value.position}get isAudience(){return this._state$.value.isAudience??!1}get name(){return this._state$.value.name}get type(){return this._state$.value.type}get handraised(){return this._state$.value.handraised??!1}get visible(){return this._state$.value.visible??!1}get audioMuted(){return this._state$.value.audio_muted??!1}get videoMuted(){return this._state$.value.video_muted??!1}get deaf(){return this._state$.value.deaf??!1}get inputVolume(){return this._state$.value.input_volume}get outputVolume(){return this._state$.value.output_volume}get inputSensitivity(){return this._state$.value.input_sensitivity}get echoCancellation(){return this._state$.value.echo_cancellation??!1}get autoGain(){return this._state$.value.auto_gain??!1}get noiseSuppression(){return this._state$.value.noise_suppression??!1}get lowbitrate(){return this._state$.value.lowbitrate??!1}get denoise(){return this._state$.value.denoise??!1}get meta(){return this._state$.value.meta}get userId(){return this._state$.value.subscriber_id}get addressId(){return this._state$.value.address_id}get nodeId(){return this._state$.value.node_id}get callId(){return this._state$.value.call_id}get value(){return this._state$.value}async toggleDeaf(){const t=Mg(this.deaf);await this.executeMethod(this.id,t,{})}async toggleHandraise(){await this.executeMethod(this.id,Rg(this.handraised),{})}async mute(){await this.executeMethod(this.id,"call.mute",{channels:["audio"]})}async unmute(){await this.executeMethod(this.id,"call.unmute",{channels:["audio"]})}async toggleMute(){return this.audioMuted?this.unmute():this.mute()}async muteVideo(){await this.executeMethod(this.id,"call.mute",{channels:["video"]})}async unmuteVideo(){await this.executeMethod(this.id,"call.unmute",{channels:["video"]})}async toggleMuteVideo(){return this.videoMuted?this.unmuteVideo():this.muteVideo()}async toggleEchoCancellation(){await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:!this.echoCancellation,auto_gain:this.autoGain,noise_suppression:this.noiseSuppression})}async toggleAudioInputAutoGain(){await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:this.echoCancellation,auto_gain:!this.autoGain,noise_suppression:this.noiseSuppression})}async toggleNoiseSuppression(){await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:this.echoCancellation,auto_gain:this.autoGain,noise_suppression:!this.noiseSuppression})}async toggleLowbitrate(){await this.executeMethod(this.id,"call.lowbitrate.set",{lowbitrate:!this.lowbitrate})}async setAudioInputSensitivity(t){await this.executeMethod(this.id,"call.microphone.sensitivity.set",{sensitivity:t})}async setAudioInputVolume(t){await this.executeMethod(this.id,"call.microphone.volume.set",{volume:t})}async setAudioOutputVolume(t){await this.executeMethod(this.id,"call.speaker.volume.set",{volume:t})}async setPosition(t){const e=this._state$.value,i={member_id:this.id,call_id:e.call_id??"",node_id:e.node_id??""};await this.executeMethod(i,"call.member.position.set",{targets:[{target:i,position:t}]})}async remove(){const t=this._state$.value,e={member_id:this.id,call_id:t.call_id??"",node_id:t.node_id??""};await this.executeMethod(e,"call.member.remove",{})}async end(){await this.executeMethod(this.id,"call.end",{})}async setMeta(t){throw new At}async updateMeta(t){throw new At}destroy(){this.executeMethod=void 0,super.destroy()}},cc=class extends oc{constructor(t,e,i,r){super(t,e,r),this.vertoManager=i,this._studioAudio$=this.createBehaviorSubject(!1),this.capabilities=new Ig}destroy(){this.capabilities.destroy(),super.destroy()}get studioAudio$(){return this._studioAudio$.asObservable()}get studioAudio(){return this._studioAudio$.value}async enableStudioAudio(){this._studioAudio$.value||(this._studioAudio$.next(!0),await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:!1,auto_gain:!1,noise_suppression:!1}))}async disableStudioAudio(){this._studioAudio$.value&&(this._studioAudio$.next(!1),await this.executeMethod(this.id,"call.audioflags.set",{echo_cancellation:!0,auto_gain:!0,noise_suppression:!0}))}async startScreenShare(){try{await this.vertoManager.addScreenMedia()}catch(t){throw gi.error("[Participant.startScreenShare] Screen share error:",t),t}}get screenShareStatus$(){return this.vertoManager.screenShareStatus$}get screenShareStatus(){return this.vertoManager.screenShareStatus}async stopScreenShare(){return this.vertoManager.removeScreenMedia()}async addAdditionalDevice(t){try{await this.vertoManager.addInputDevice(t)}catch(e){throw gi.error("[Participant.addAdditionalDevice] Additional device error:",e),e}}async removeAdditionalDevice(t){return this.vertoManager.removeInputDevices(t)}async addAudioInputDevice({constraints:t,stream:e}={}){const i=t??e?void 0:!0;return this.vertoManager.addMainInputDevices({audio:i,inputAudioDeviceConstraints:t,inputAudioStream:e})}async addVideoInputDevice({constraints:t,stream:e}={}){const i=t??e?void 0:!0;return this.vertoManager.addMainInputDevices({video:i,inputVideoDeviceConstraints:t,inputVideoStream:e})}async addInputDevices(t={}){await this.vertoManager.addMainInputDevices(t)}selectAudioInputDevice(t,e={}){this.deviceController.selectAudioInputDevice(t),e.savePreference&&(f.instance.preferredAudioInput=t)}async setAudioInputDeviceConstraints(t){await this.vertoManager.updateMediaConstraints({audio:t})}async setInputDevicesConstraints(t){await this.vertoManager.updateMediaConstraints(t)}selectVideoInputDevice(t,e={}){this.deviceController.selectVideoInputDevice(t),e.savePreference&&(f.instance.preferredVideoInput=t)}async setVideoInputDeviceConstraints(t){await this.vertoManager.updateMediaConstraints({video:t})}selectAudioOutputDevice(t,e={}){this.deviceController.selectAudioOutputDevice(t),e.savePreference&&(f.instance.preferredAudioOutput=t)}exitStudioModeIfActive(){this._studioAudio$.value&&(gi.debug("[SelfParticipant] Exiting studio audio mode due to individual flag toggle"),this._studioAudio$.next(!1))}async toggleEchoCancellation(){this.exitStudioModeIfActive(),await super.toggleEchoCancellation()}async toggleAudioInputAutoGain(){this.exitStudioModeIfActive(),await super.toggleAudioInputAutoGain()}async toggleNoiseSuppression(){this.exitStudioModeIfActive(),await super.toggleNoiseSuppression()}async mute(){try{await super.mute()}catch(t){gi.warn("[Participant.toggleAudioInput] Server Error while muting audio input, proceeding with local toggle anyway",t)}finally{this.vertoManager.muteMainAudioInputDevice()}}async unmute(){try{await super.unmute()}catch(t){gi.warn("[Participant.toggleAudioInput] Server Error while unmuting audio input, proceeding with local toggle anyway",t)}finally{await this.vertoManager.unmuteMainAudioInputDevice()}}async muteVideo(){try{await super.muteVideo()}catch(t){gi.warn("[Participant.toggleVideoInput] Server Error while muting video input, proceeding with local toggle anyway",t)}finally{this.vertoManager.muteMainVideoInputDevice()}}async unmuteVideo(){try{await super.unmuteVideo()}catch(t){gi.warn("[Participant.toggleVideoInput] Server Error while unmuting video input, proceeding with local toggle anyway",t)}finally{await this.vertoManager.unmuteMainVideoInputDevice()}}};const lc=t=>t instanceof cc;function ke(t){return typeof t=="object"&&t!==null}function Y(t,e){return e in t}function ys(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"id")&&typeof t.id=="string"&&Y(t,"method")&&typeof t.method=="string"}function ws(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"id")&&typeof t.id=="string"&&(Y(t,"result")||Y(t,"error"))}function Og(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"id")&&typeof t.id=="string"&&(Y(t,"error")&&ke(t.error)&&Y(t.error,"code")&&Y(t.error,"message")||Y(t,"result")&&ke(t.result)&&Y(t.result,"code")&&t.result.code!=="200"&&Y(t.result,"message"))}function Be(t){return e=>uc(e)&&e.event_type===t}function Ss(t){return ys(t)&&t.method==="signalwire.event"&&ke(t.params)&&Y(t.params,"event_type")}function uc(t){return ke(t)&&Y(t,"event_type")&&typeof t.event_type=="string"&&Y(t,"params")}function _g(t){return uc(t)&&(Fg(t)||Ng(t)||dc(t)||hc(t)||Ug(t)||Bg(t)||zg(t)||pc(t)||gc(t)||fc(t)||vc(t)||Cs(t)||vn(t)||bc(t)||mc(t))}const Lg=Be("signalwire.authorization.state"),vn=Be("webrtc.message"),Fg=Be("call.joined"),Ng=Be("call.left"),dc=Be("call.updated"),hc=Be("call.state"),Ug=Be("call.play"),Bg=Be("call.connect"),zg=Be("room.updated"),pc=Be("member.updated"),gc=Be("member.joined"),fc=Be("member.left"),vc=Be("member.talking"),Cs=Be("layout.changed"),bc=Be("conversation.message"),mc=Be("conversation.message.updated");function yc(t){return ke(t)&&Y(t,"room_session")&&Y(t,"call_id")&&Y(t,"member_id")&&Y(t,"capabilities")}function Vg(t){return ke(t)&&Y(t,"room_id")&&Y(t,"room_session_id")&&Y(t,"layout")}const $e=G(),Hg={};var jg=class extends se{constructor(t,e={}){super(),this.webRtcCallSession=t,this.options=e,this.callIds=new Set,this.roomSessionIds=new Set,this._participants$=this.createBehaviorSubject({}),this._self$=this.createBehaviorSubject(null),this._sessionState$=this.createBehaviorSubject(Hg),this.initSubscriptions()}get participants$(){return this.cachedObservable("participants$",()=>this._participants$.asObservable().pipe(x(t=>Object.values(t))))}get participants(){return Object.values(this._participants$.value)}get self$(){return this.cachedObservable("self$",()=>this._self$.asObservable().pipe(fe()))}isRoomSessionIdValid(t){return this.roomSessionIds.has(t)}addCallId(t){this.callIds.add(t)}isCallIdValid(t){return this.callIds.has(t)}get recording$(){return this.cachedObservable("recording$",()=>this._sessionState$.pipe(x(t=>t.recording),U(),fe()))}get recordings$(){return this.cachedObservable("recordings$",()=>this._sessionState$.pipe(x(t=>t.recordings),U(),fe()))}get streaming$(){return this.cachedObservable("streaming$",()=>this._sessionState$.pipe(x(t=>t.streaming),U(),fe()))}get streams$(){return this.cachedObservable("streams$",()=>this._sessionState$.pipe(x(t=>t.streams),U(),fe()))}get playbacks$(){return this.cachedObservable("playbacks$",()=>this._sessionState$.pipe(x(t=>t.playbacks),U(),fe()))}get raiseHandPriority$(){return this.cachedObservable("raiseHandPriority$",()=>this._sessionState$.pipe(x(t=>t.prioritize_handraise),U(),fe()))}get locked$(){return this.cachedObservable("locked$",()=>this._sessionState$.pipe(x(t=>t.locked),U(),fe()))}get meta$(){return this.cachedObservable("meta$",()=>this._sessionState$.pipe(x(t=>t.meta),U(),fe()))}get capabilities$(){return this.cachedObservable("capabilities$",()=>this._sessionState$.pipe(x(t=>t.capabilities),U(),fe()))}get layout$(){return this.cachedObservable("layout$",()=>this._sessionState$.pipe(x(t=>t.layout_name),U(),fe()))}get layouts$(){return this.cachedObservable("layouts$",()=>this._sessionState$.pipe(x(t=>t.layouts),U(),fe()))}get layoutLayers$(){return this.cachedObservable("layoutLayers$",()=>this._sessionState$.pipe(x(t=>t.layout_layers),U(),fe()))}get self(){return this._self$.value}get layoutLayers(){return this._sessionState$.value.layout_layers??[]}get recording(){return this._sessionState$.value.recording??!1}get streaming(){return this._sessionState$.value.streaming??!1}get raiseHandPriority(){return this._sessionState$.value.prioritize_handraise??!1}get locked(){return this._sessionState$.value.locked??!1}get meta(){return this._sessionState$.value.meta??{}}get layout(){return this._sessionState$.value.layout_name}get layouts(){return this._sessionState$.value.layouts??[]}get capabilities(){return this._sessionState$.value.capabilities??[]}isSessionEvent(t){return this.callIds.has(t)||this.roomSessionIds.has(t)}initSubscriptions(){this.subscribeTo(this.callJoinedEvent$,t=>{var r,n;$e.debug("[CallEventsManager] Handling call.joined event for call/session IDs:",{callId:t.call_id,roomSessionId:t.room_session_id});const e=t.room_session,i=t.capabilities;this.selfId=this.selfId??t.member_id,this.originCallId=this.originCallId??t.origin_call_id,this.callIds.add(t.call_id),this.roomSessionIds.add(t.room_session_id),this._sessionState$.next({...this._sessionState$.value,recording:e.recording,recordings:e.recordings,streaming:e.streaming,streams:e.streams,playbacks:e.playbacks,prioritize_handraise:e.prioritize_handraise,locked:e.locked,meta:e.meta,capabilities:i}),this.updateParticipants(e.members),(r=this._self$.value)==null||r.capabilities.updateFromRaw(i),(n=this._self$.value)!=null&&n.capabilities.setLayout&&this.updateLayouts()}),this.subscribeTo(this.memberUpdates$,t=>{$e.debug("[CallEventsManager] Handling member update event for member ID:",t),this.upsertParticipant(t)}),this.subscribeTo(this.webRtcCallSession.memberLeft$,t=>{$e.debug("[CallEventsManager] Handling member.left event for member ID:",t.member.member_id);const e={...this._participants$.value};t.member.member_id in e?(delete e[t.member.member_id],this._participants$.next(e)):$e.warn(`[CallEventsManager] Received member.left event for unknown member ID: ${t.member.member_id}`)}),this.subscribeTo(this.webRtcCallSession.callUpdated$,t=>{$e.debug("[CallEventsManager] Handling call.updated event:",t);const e=t.room_session;this._sessionState$.next({...this._sessionState$.value,recording:e.recording,recordings:e.recordings,streaming:e.streaming,streams:e.streams,playbacks:e.playbacks,prioritize_handraise:e.prioritize_handraise,locked:e.locked,meta:e.meta})}),this.subscribeTo(this.layoutChangedEvent$,t=>{$e.debug("[CallEventsManager] Handling layout.changed event:",t),this._sessionState$.next({...this._sessionState$.value,layout_name:t.id,layout_layers:t.layers}),this.updateParticipantPositions(t)})}updateParticipantPositions(t){Object.keys(this._participants$.value).length>0&&!t.layers.some(e=>!!e.member_id)&&$e.warn("[CallEventsManager] No layers with member_id found in layout.changed event. Nothing to update."),t.layers.filter(e=>!!e.member_id).filter(e=>e.member_id in this._participants$.value?!0:($e.warn(`[CallEventsManager] Skipping layout layer for unknown member_id: ${e.member_id}`),!1)).map(e=>(this._participants$.value[e.member_id].upnext({position:e}),this._participants$.value[e.member_id])).forEach(e=>{lc(e)&&this._self$.next(e),this._participants$.next({...this._participants$.value,[e.id]:e})})}updateLayouts(){this.selfId&&this.webRtcCallSession.executeMethod(this.selfId,"call.layout.list",{}).then(t=>{this._sessionState$.next({...this._sessionState$.value,layouts:t.result.layouts})}).catch(t=>{$e.error("[CallEventsManager] Error fetching layouts:",t)})}updateParticipants(t){t.forEach(e=>this.upsertParticipant(e))}upsertParticipant(t){if(!(t.member_id in this._participants$.value)){const r=this.webRtcCallSession.createParticipant(t.member_id,this.selfId);this._participants$.next({...this._participants$.value,[t.member_id]:r})}const e=this._participants$.value[t.member_id],i=e.value;$e.debug("[CallEventsManager] Updating participant:",t.member_id,{oldValue:i,newValue:t}),e.upnext({...i,...t}),lc(e)&&this._self$.next(e),this._participants$.next(this._participants$.value)}get callJoinedEvent$(){return this.cachedObservable("callJoinedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(z(yc),Ee(t=>{$e.debug("[CallEventsManager] Call joined event:",t)})))}get layoutChangedEvent$(){return this.cachedObservable("layoutChangedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(we(Vg,"layout"),Ee(t=>{$e.debug("[CallEventsManager] Layout changed event:",t)})))}get memberUpdates$(){return this.cachedObservable("memberUpdates$",()=>Ni(this.webRtcCallSession.memberJoined$,this.webRtcCallSession.memberUpdated$,this.webRtcCallSession.memberTalking$).pipe(x(t=>t.member),Ee(t=>{$e.debug("[CallEventsManager] Member update event:",t)})))}destroy(){Object.values(this._participants$.value).forEach(t=>{t.destroy()}),this._participants$.next({}),this._self$.next(null),this.callIds.clear(),this.roomSessionIds.clear(),this.selfId=void 0,this.originCallId=void 0,this.webRtcCallSession=void 0,this.callSession=void 0,super.destroy()}};const Wg=new Set(["sendrecv","sendonly","recvonly","inactive"]);function Gg(t){const e={audio:"inactive",video:"inactive"};if(!t)return e;const i=t.split(/\r?\n/);let r=null,n=null;for(const s of i)if(s.startsWith("m="))r&&(e[r]=n??"sendrecv"),s.startsWith("m=audio")?r="audio":s.startsWith("m=video")?r="video":r=null,n=null;else if(r&&s.startsWith("a=")){const a=s.substring(2).trim();Wg.has(a)&&(n=a)}return r&&(e[r]=n??"sendrecv"),e}function wc(t){if(!t)return!1;const e=t.split(`\r
|
|
68
|
+
`),i=[];let r=-1;for(const n of e)if(n.startsWith("m="))r+=1,i[r]=0;else if(n.startsWith("a=candidate:")){const s=/\styp\s+(host|srflx|prflx|relay)/.exec(n);s&&s[1]!=="host"&&(i[r]+=1)}return!i.length||i.every(n=>n>0)}function qg(t,e=[],i=[]){if(!t||e.length===0&&i.length===0)return t;const r=Kg(t),n=[r[0]];for(let s=1;s<r.length;s++){const a=r[s],o=a.split(/\r?\n/)[0];o.startsWith("m=video")&&e.length>0?n.push(Sc(a,e)):o.startsWith("m=audio")&&i.length>0?n.push(Sc(a,i)):n.push(a)}return n.join("")}function Xg(t,e=ip){if(!t)return t;const i=Zg(t);if(i===null)return t;const r=t.split(/\r?\n/),n=[],s=`a=fmtp:${i} `;let a=!1;for(const o of r)o.startsWith(s)?(a=!0,n.push(Qg(o,e))):n.push(o);if(!a){const o=`a=rtpmap:${i} `,c=[];for(const u of n)c.push(u),u.startsWith(o)&&c.push(`a=fmtp:${i} stereo=1;sprop-stereo=1;maxaveragebitrate=${e}`);return c.join(`\r
|
|
69
69
|
`)}return n.join(`\r
|
|
70
|
-
`)}function
|
|
71
|
-
`)}function
|
|
72
|
-
`,(e=this.peerConnection.localDescription)==null?void 0:e.sdp)}handleICECandidateTimeout(){this.iceCandidateTimer&&this.removeTimer("iceCandidateTimer"),Ne.warn("[ICEGatheringController] ICE candidate timeout");const t=this.hasValidLocalDescriptionSDP;!t&&!this.relayOnly?this.restartICEGatheringWithRelayOnly():(Ne.debug("[ICEGatheringController] Using current SDP due to ICE candidate timeout"),this._iceCandidatesState.next({state:"timeout",validSDP:t}),this.stopGathering())}restartICEGatheringWithRelayOnly(){Ne.debug("[ICEGatheringController] Restarting ICE gathering with relay-only candidates"),this.relayOnly=!0,this.peerConnection.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:"relay"}),this.peerConnection.restartIce()}removeTimer(t){this[t]&&(clearTimeout(this[t]),this[t]=void 0)}clearAllTimers(){Ne.debug("[ICEGatheringController] Clearing all timers"),this.removeTimer("iceGatheringTimer"),this.removeTimer("iceCandidateTimer")}removeEventListeners(){this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler)}destroy(){Ne.debug("[ICEGatheringController] Destroying ICEGatheringController"),this.clearAllTimers(),this.removeEventListeners(),super.destroy()}};const ls=W();var Dg=class extends te{constructor(t={}){super(),this._inputSource=null,this._inputStream=null,this._lastSpokeAt=0,this._gain$=this.createBehaviorSubject(1),this._pttMultiplier=1,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._gainNode=this._audioContext.createGain(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._destination=this._audioContext.createMediaStreamDestination(),this._gainNode.connect(this._analyser),this._analyser.connect(this._destination),this._speakingThreshold=t.speakingThreshold??Yh,this._speakingHoldMs=t.speakingHoldMs??Kh,this._pollIntervalMs=t.pollIntervalMs??Ao;const e=t.initialGain??1;this._gain$.next(e),this.applyEffectiveGain()}get gain$(){return this._gain$.asObservable()}get gain(){return this._gain$.value}get outputTrack(){const[t]=this._destination.stream.getAudioTracks();return t}get level$(){return this.deferEmission(Wr(this._pollIntervalMs,Ta).pipe(E(()=>this.computeLevel())))}get speaking$(){return this.deferEmission(this.level$.pipe(E(t=>this.evaluateSpeaking(t)),L()))}setGain(t){const e=Math.max(0,Math.min(2,t));this._gain$.next(e),this.applyEffectiveGain()}setPTTActive(t){this._pttMultiplier=t?1:0,this.applyEffectiveGain()}applyEffectiveGain(){this._gainNode.gain.value=this._gain$.value*this._pttMultiplier}setInputTrack(t){if(this._inputSource){try{this._inputSource.disconnect()}catch(e){ls.debug("[LocalAudioPipeline] input disconnect warning:",e)}this._inputSource=null}this._inputStream&&(this._inputStream=null),t&&(this._inputStream=new MediaStream([t]),this._inputSource=this._audioContext.createMediaStreamSource(this._inputStream),this._inputSource.connect(this._gainNode),this._audioContext.state==="suspended"&&this._audioContext.resume().catch(e=>{ls.warn("[LocalAudioPipeline] AudioContext resume failed:",e)}))}destroy(){if(this._inputSource){try{this._inputSource.disconnect()}catch{}this._inputSource=null}try{this._gainNode.disconnect(),this._analyser.disconnect()}catch{}this._audioContext.close().catch(t=>{ls.debug("[LocalAudioPipeline] audio context close warning:",t)}),super.destroy()}computeLevel(){if(!this._inputSource)return 0;this._analyser.getByteTimeDomainData(this._analyserBuffer);let t=0;for(const e of this._analyserBuffer){const i=(e-128)/128;t+=i*i}return Math.sqrt(t/this._analyserBuffer.length)}evaluateSpeaking(t){const e=Date.now();return t>=this._speakingThreshold?(this._lastSpokeAt=e,!0):e-this._lastSpokeAt<this._speakingHoldMs}};const Ut=W();var Ig=class extends te{constructor(t){super(),this.options=t,this.mediaTrackEndedHandler=e=>{this._mediaTrackEnded$.next(e)},this._localStream$=this.createBehaviorSubject(null),this._localAudioTracks$=this.createBehaviorSubject([]),this._localVideoTracks$=this.createBehaviorSubject([]),this._mediaTrackEnded$=this.createSubject()}get localStream$(){return this._localStream$.asObservable().pipe(w(this.destroyed$))}get localAudioTracks$(){return this._localAudioTracks$.asObservable().pipe(w(this.destroyed$))}get localVideoTracks$(){return this._localVideoTracks$.asObservable().pipe(w(this.destroyed$))}get mediaTrackEnded$(){return this._mediaTrackEnded$.asObservable().pipe(w(this.destroyed$))}get localStream(){return this._localStream$.value}get localAudioTracks(){return this._localAudioTracks$.value}get localVideoTracks(){return this._localVideoTracks$.value}async buildLocalStream(){var e,i;Ut.debug("[LocalStreamController] Building local media stream.");let t;if(this.options.inputAudioStream??this.options.inputVideoStream){const r=[...((e=this.options.inputAudioStream)==null?void 0:e.getTracks())??[],...((i=this.options.inputVideoStream)==null?void 0:i.getTracks())??[]];t=new MediaStream(r)}else if(this.options.propose==="screenshare")Ut.debug("[LocalStreamController] Requesting display media for screen sharing with audio:",!!this.options.inputAudioDeviceConstraints),t=await this.options.getDisplayMedia({video:!0,audio:!!this.options.inputAudioDeviceConstraints}),Ut.debug("[LocalStreamController] Screen share media obtained:",t);else{const r={audio:this.options.inputAudioDeviceConstraints,video:this.options.inputVideoDeviceConstraints};Ut.debug("[LocalStreamController] Requesting user media with constraints:",r),t=await this.options.getUserMedia(r),Ut.debug("[LocalStreamController] User media obtained:",t)}return this._localStream$.next(t),this._localAudioTracks$.next(t.getAudioTracks()),this._localVideoTracks$.next(t.getVideoTracks()),t}addTrack(t){const e=this._localStream$.value??new MediaStream;return t.addEventListener("ended",this.mediaTrackEndedHandler),e.addTrack(t),this._localStream$.next(e),t.kind==="video"?this._localVideoTracks$.next(e.getVideoTracks()):this._localAudioTracks$.next(e.getAudioTracks()),Ut.debug(`[LocalStreamController] ${t.kind} track added:`,t.id),e}removeTrack(t){const e=this._localStream$.value,i=e==null?void 0:e.getTracks().find(r=>r.id===t);if(!i){Ut.debug(`[LocalStreamController] track not found: ${t}`);return}return i.removeEventListener("ended",this.mediaTrackEndedHandler),e==null||e.removeTrack(i),i.stop(),this._localStream$.next(e),i.kind==="video"?this._localVideoTracks$.next((e==null?void 0:e.getVideoTracks())??[]):this._localAudioTracks$.next((e==null?void 0:e.getAudioTracks())??[]),Ut.debug(`[LocalStreamController] ${i.kind} track removed:`,t),i}getOrCreateLocalStream(){return this._localStream$.value??new MediaStream}setLocalStream(t){this._localStream$.next(t)}addTrackEndedListener(t){t.addEventListener("ended",this.mediaTrackEndedHandler)}updateOptions(t){this.options={...this.options,...t}}stopAllTracks(){var t;(t=this._localStream$.value)==null||t.getTracks().forEach(e=>{Ut.debug(`[LocalStreamController] Stopping local track: ${e.kind}`),e.removeEventListener("ended",this.mediaTrackEndedHandler),e.stop()})}destroy(){this.stopAllTracks(),super.destroy()}};const Be=W(),nc=(t,e)=>t&&e?"sendrecv":t&&!e?"sendonly":!t&&e?"recvonly":"inactive";var Mg=class extends te{constructor(t){super(),this.peerConnection=t.peerConnection,this.options=t}get useAddTransceivers(){return typeof this.peerConnection.addTransceiver=="function"}get useAddTrack(){return typeof this.peerConnection.addTrack=="function"}get useAddStream(){return typeof this.peerConnection.addStream=="function"&&!this.useAddTransceivers&&!this.useAddTrack}get propose(){return this.options.propose}get isAdditionalDevice(){return this.propose==="additional-device"}get isScreenShare(){return this.propose==="screenshare"}get isSimulcast(){return!!this.options.simulcast}get isSFU(){return!!this.options.sfu}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.options.localStreamController.localStream}get inputAudioDeviceConstraints(){return this.options.getInputAudioDeviceConstraints()}get inputVideoDeviceConstraints(){return this.options.getInputVideoDeviceConstraints()}get audioDirection(){if(this.isAdditionalDevice)return"sendonly";const{localStream:t}=this,e=t==null?void 0:t.getAudioTracks().some(n=>n.enabled),i=!!this.inputAudioDeviceConstraints,r=!!this.receiveAudio;return nc(e||i,r)}get videoDirection(){if(this.isAdditionalDevice||this.isScreenShare)return"sendonly";if(this.isSFU)return"recvonly";const{localStream:t}=this,e=t==null?void 0:t.getVideoTracks().some(n=>n.enabled),i=!!this.inputVideoDeviceConstraints,r=!!this.receiveVideo;return nc(e||i,r)}get sendEncodings(){if(this.isSimulcast)return["0","1","2"].map(t=>({active:!0,rid:t,scaleResolutionDownBy:Number(t)*6||1}))}getConstraintsFor(t){const e=t==="audio"?this.inputAudioDeviceConstraints:this.inputVideoDeviceConstraints;return typeof e=="boolean"?{}:e}transceiverByKind(t){return this.peerConnection.getTransceivers().filter(e=>t==="both"||e.receiver.track.kind===t)}get audioTransceivers(){return this.transceiverByKind("audio")}get videoTransceivers(){return this.transceiverByKind("video")}async setupTransceiverSender(t,e,i){var a;const r=t.kind==="audio",n=r?this.audioDirection:this.videoDirection,s={direction:n,sendEncodings:r?void 0:this.sendEncodings,streams:n==="recvonly"?void 0:[e]};Be.debug(`[TransceiverController] Setting up transceiver sender for local ${t.kind} track:`,{transceiver:i,transceiverParams:s}),s.direction&&["sendonly","sendrecv"].includes(s.direction)&&(i?(await i.sender.replaceTrack(t),i.direction=s.direction,(a=s.streams)!=null&&a.some(o=>!!o)&&(Be.debug(`[TransceiverController] Setting streams for transceiver sender for local ${t.kind} track:`,s.streams),i.sender.setStreams(...s.streams))):(Be.debug(`[TransceiverController] Adding new transceiver for local ${t.kind} track:`,t.id),this.peerConnection.addTransceiver(t,s)))}stopTrackSender(t,e={updateTransceiverDirection:!1}){var i,r,n;try{const s=this.transceiverByKind(t);for(const a of s)if(((i=a.sender.track)==null?void 0:i.readyState)==="live"){const o=a.sender.track.id;a.sender.track.stop(),this.options.localStreamController.removeTrack(o),e.updateTransceiverDirection&&(a.direction="inactive")}}catch(s){Be.error("[TransceiverController] stopTrackSender error",t,s),(n=(r=this.options).onError)==null||n.call(r,new Ri("stopTrackSender",t,s))}}async restoreTrackSender(t){var e,i;try{Be.debug("[TransceiverController] restoreTrackSender called",t);const r={},n=this.transceiverByKind(t);for(const a of n){const{track:o}=a.sender;if(!o||o.readyState==="ended"){const c=(o==null?void 0:o.kind)??a.receiver.track.kind;(c==="audio"||c==="video")&&(r[c]=this.getConstraintsFor(c))}}if(Be.debug("[TransceiverController] restoreTrackSender constraints:",r),Object.keys(r).length===0){Be.warn("[TransceiverController] restoreTrackSender: no tracks need restoration",t);return}const s=(await this.options.getUserMedia(r)).getTracks();Be.debug("[TransceiverController] restoreTrackSender new tracks:",s);for(const a of s){this.options.localStreamController.addTrack(a);const o=a.kind,c=this.transceiverByKind(o)[0];c.direction=o==="audio"?this.audioDirection:this.videoDirection,Be.debug("[TransceiverController] restoreTrackSender setting direction for",o,c.direction),await c.sender.replaceTrack(a)}}catch(r){Be.error("[TransceiverController] restoreTrackSender error",t,r),(i=(e=this.options).onError)==null||i.call(e,new Ri("restoreTrackSender",t,r))}}async replaceSenderTrack(t,e){const i=t==="audio"?this.audioTransceivers:this.videoTransceivers;for(const r of i)await r.sender.replaceTrack(e)}async setupRemoteTransceivers(t){if(t!=="answer"){for(const e of["audio","video"]){const i=e==="audio"?this.audioTransceivers:this.videoTransceivers;for(const r of i){const n=e==="audio"?this.audioDirection:this.videoDirection;["inactive","recvonly"].includes(n)&&(r.direction=n,await r.sender.replaceTrack(null),r.sender.setStreams())}}if(this.videoDirection==="recvonly"&&this.isSFU&&this.useAddTransceivers){const{msStreamsNumber:e=5}=this.options;for(let i=0;i<Number(e);i++)this.peerConnection.addTransceiver("video",{direction:"recvonly"})}}}async updateSendersConstraints(t,e){var r,n;if(!e)return this.stopTrackSender(t),Promise.resolve();const i=this.peerConnection.getSenders().filter(s=>{var a;return((a=s.track)==null?void 0:a.kind)===t&&s.track.readyState==="live"});for(const s of i){const{track:a}=s;if(a){const o={...a.getConstraints(),...e};try{await a.applyConstraints(o),Be.debug(`[TransceiverController] Updated ${t} sender constraints:`,o),Be.debug(`[TransceiverController] Updated ${t} sender constraints:`,a.getConstraints())}catch(c){Be.warn(`[TransceiverController] applyConstraints failed for ${t} track ${a.id}, attempting track replacement fallback:`,c);try{await this.replaceTrackFallback(s,a,t,o)}catch(u){Be.warn(`[TransceiverController] Track replacement fallback also failed for ${t} track:`,u),(n=(r=this.options).onError)==null||n.call(r,new Ri("updateSendersConstraints",t,u))}}}}}async replaceTrackFallback(t,e,i,r){const{deviceId:n}=e.getSettings(),s={...r,...n?{deviceId:{exact:n}}:{}},a=e.id;e.stop(),this.options.localStreamController.removeTrack(a);const o=(await this.options.getUserMedia({[i]:s})).getTracks().find(c=>c.kind===i);if(!o)throw new Ri("replaceTrackFallback",i,new Error("getUserMedia returned no track of the requested kind"));await t.replaceTrack(o),this.options.localStreamController.addTrack(o),Be.debug(`[TransceiverController] Track replacement fallback succeeded for ${i}. New track: ${o.id}`)}getMediaDirections(){return this.peerConnection.connectionState==="connected"?this.peerConnection.getTransceivers().reduce((t,e)=>({...t,[e.receiver.track.kind]:e.direction}),{audio:"inactive",video:"inactive"}):{audio:this.audioDirection,video:this.videoDirection}}updatePeerConnection(t){this.peerConnection=t}updateOptions(t){this.options={...this.options,...t}}};const z=W();var sc=class extends te{constructor(t={},e,i){super(),this.options=t,this.firstSDPExchangeCompleted=!1,this.negotiationNeeded$=this.createSubject(),this.localDescription$=ti(()=>Me(this.init())).pipe(Ze(()=>this.iceGatheringController.iceCandidatesState$.pipe(B(n=>!["new","gathering"].includes(n)),Se(()=>{this.negotiationEnded()}),B(()=>this.shouldEmitLocalDescription),E(()=>{var n;return(n=this.peerConnection)==null?void 0:n.localDescription}),ue(),Se(n=>{n.type==="answer"&&(this._type="offer")}))),tt(1),w(this.destroyed$)),this.connectionTimeout=3e3,this.oniceconnectionstatechangeHandler=()=>{if(this.peerConnection){const{iceConnectionState:n}=this.peerConnection;z.debug(`[RTCPeerConnectionController] ICE connection state changed to: ${n}`),this._iceConnectionState$.next(this.peerConnection.iceConnectionState)}},this.onconnectionstatechangeHandler=()=>{if(this.peerConnection){const{connectionState:n}=this.peerConnection;z.debug(`[RTCPeerConnectionController] Connection state changed to: ${n}`),n==="connected"&&this.removeConnectionTimer(),this._connectionState$.next(this.peerConnection.connectionState)}},this.onsignalingstatechangeHandler=()=>{var n;z.debug(`[RTCPeerConnectionController] Signaling state changed to: ${(n=this.peerConnection)==null?void 0:n.signalingState}`)},this.onicegatheringstatechangeHandler=()=>{this.peerConnection&&this._iceGatheringState$.next(this.peerConnection.iceGatheringState)},this.onnegotiationneededHandler=n=>{z.debug("[RTCPeerConnectionController] Negotiation needed event received.",n),this.negotiationNeeded$.next()},this.updateSelectedInputDevice=async(n,s)=>{var a,o,c;try{const{localStream:u}=this;if(!u){z.warn("[RTCPeerConnectionController] No local stream available to update input device.");return}z.debug(`[RTCPeerConnectionController] Updating selected ${n} input device:`,u.getTracks());const h=u.getTracks().find(p=>p.kind===n);if(h){if((a=this.transceiverController)==null||a.stopTrackSender(n),this.localStreamController.removeTrack(h.id),z.debug(`[RTCPeerConnectionController] Stopped existing ${n} track: ${h.id}`,u.getTracks()),!s){z.debug(`[RTCPeerConnectionController] ${n} input device selected: none`);return}const p=(await this.getUserMedia({[n]:{...h.getConstraints(),...this.deviceController.deviceInfoToConstraints(s)}})).getTracks().find(v=>v.kind===n);p&&(z.debug(`[RTCPeerConnectionController] Adding new ${n} track: ${p.id}`),this.localStreamController.addTrack(p),await((o=this.transceiverController)==null?void 0:o.replaceSenderTrack(n,p)),z.debug(`[RTCPeerConnectionController] Added new ${n} track: ${p.id}`,(c=this.localStream)==null?void 0:c.getTracks()))}z.debug(`[RTCPeerConnectionController] ${n} input device selected:`,s==null?void 0:s.label)}catch(u){throw z.error(`[RTCPeerConnectionController] Failed to select ${n} input device:`,u),this._errors$.next(vt(u)),u}},this._isNegotiating$=this.createBehaviorSubject(!1),this._memberId=null,this._iceConnectionState$=this.createReplaySubject(1),this._connectionState$=this.createReplaySubject(1),this._signalingState$=this.createReplaySubject(1),this._iceGatheringState$=this.createReplaySubject(1),this._errors$=this.createReplaySubject(1),this._iceCandidates$=this.createReplaySubject(1),this._initialized$=this.createReplaySubject(1),this._remoteDescription$=this.createReplaySubject(1),this._remoteStream$=this.createBehaviorSubject(null),this._remoteOfferMediaDirections=null,this._localAudioPipeline=null,this.deviceController=i??{},this.id=t.callId??Jr(),this._type=e?"answer":"offer",this.sdpInit=e?{type:"offer",sdp:e}:void 0,this._remoteOfferMediaDirections=e?wg(e):null;const r=this._remoteOfferMediaDirections?{audio:this._remoteOfferMediaDirections.audio.includes("recv"),video:this._remoteOfferMediaDirections.video.includes("recv"),receiveAudio:this._remoteOfferMediaDirections.audio.includes("send"),receiveVideo:this._remoteOfferMediaDirections.video.includes("send")}:{};this.options={...t,audio:t.audio??r.audio,video:t.video??r.video,receiveAudio:t.receiveAudio??r.receiveAudio??g.instance.receiveAudio,receiveVideo:t.receiveVideo??r.receiveVideo??g.instance.receiveVideo},this.localStreamController=new Ig({propose:this.propose,inputAudioStream:this.options.inputAudioStream,inputVideoStream:this.options.inputVideoStream,inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints,getUserMedia:async n=>this.getUserMedia(n),getDisplayMedia:async n=>this.getDisplayMedia(n)})}get iceGatheringController(){if(!this._iceGatheringController)throw new Q("ICEGatheringController is not initialized");return this._iceGatheringController}get shouldEmitLocalDescription(){if(!this.peerConnection)return!1;const{localDescription:t,signalingState:e}=this.peerConnection;return!t||!ic(t.sdp)?!1:t.type==="offer"&&e==="have-local-offer"||t.type==="answer"&&e==="stable"}removeConnectionTimer(){this.connectionTimer&&(clearTimeout(this.connectionTimer),this.connectionTimer=void 0)}setMemberId(t){this._memberId=t}get memberId(){return this._memberId}stopTrackSender(t,e={updateTransceiverDirection:!1}){var r,n,s;const i=t==="audio"||t==="both";i&&this._localAudioPipeline&&this.stopRawAudioInputForPipeline(),i?t==="both"?(n=this.transceiverController)==null||n.stopTrackSender("video",e):this._localAudioPipeline||(s=this.transceiverController)==null||s.stopTrackSender(t,e):(r=this.transceiverController)==null||r.stopTrackSender(t,e)}stopRawAudioInputForPipeline(){var e;const t=this.localStreamController.localAudioTracks;for(const i of t)i.readyState==="live"&&(i.stop(),this.localStreamController.removeTrack(i.id));(e=this._localAudioPipeline)==null||e.setInputTrack(null)}get isNegotiating$(){return this._isNegotiating$.asObservable()}get isNegotiating(){return this._isNegotiating$.value}updateMediaDevicesOptions(t){this.options={...this.options,...t}}get iceGatheringState$(){return this.cachedObservable("iceGatheringState$",()=>this._iceGatheringState$.asObservable().pipe(w(this.destroyed$)))}get mediaTrackEnded$(){return this.cachedObservable("mediaTrackEnded$",()=>this.localStreamController.mediaTrackEnded$.pipe(w(this.destroyed$)))}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(w(this.destroyed$)))}get iceCandidates$(){return this.cachedObservable("iceCandidates$",()=>this._iceCandidates$.asObservable().pipe(w(this.destroyed$)))}get initialized$(){return this.cachedObservable("initialized$",()=>this._initialized$.asObservable().pipe(B(t=>t),w(this.destroyed$)))}get remoteDescription$(){return this.cachedObservable("remoteDescription$",()=>this._remoteDescription$.asObservable().pipe(w(this.destroyed$)))}get localStream$(){return this.cachedObservable("localStream$",()=>this.localStreamController.localStream$.pipe(w(this.destroyed$)))}get remoteStream$(){return this.cachedObservable("remoteStream$",()=>this._remoteStream$.asObservable().pipe(w(this.destroyed$)))}get localAudioTracks$(){return this.cachedObservable("localAudioTracks$",()=>this.localStreamController.localAudioTracks$.pipe(w(this.destroyed$)))}get localVideoTracks$(){return this.cachedObservable("localVideoTracks$",()=>this.localStreamController.localVideoTracks$.pipe(w(this.destroyed$)))}get iceConnectionState$(){return this.cachedObservable("iceConnectionState$",()=>this._iceConnectionState$.asObservable().pipe(w(this.destroyed$)))}get connectionState$(){return this.cachedObservable("connectionState$",()=>this._connectionState$.asObservable().pipe(w(this.destroyed$)))}get signalingState$(){return this.cachedObservable("signalingState$",()=>this._signalingState$.asObservable().pipe(w(this.destroyed$)))}get type(){return this._type}get propose(){return this.options.propose??"main"}get isAdditionalDevice(){return this.propose==="additional-device"}get isMainDevice(){return this.propose==="main"}get isScreenShare(){return this.propose==="screenshare"}get iceServers(){if(!this.options.disableUdpIceServers)return this.options.iceServers??[];const t="transport=tcp";return(this.options.iceServers??[]).map(e=>{const i=Array.isArray(e.urls)?e.urls:[e.urls];return{...e,urls:i.filter(r=>r.includes(t))}})}get rtcConfiguration(){const{iceServers:t,...e}=this.options;return{bundlePolicy:"max-compat",iceCandidatePoolSize:10,iceServers:this.iceServers,iceTransportPolicy:this.options.relayOnly?"relay":"all",sdpSemantics:"unified-plan",...e}}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.localStreamController.localStream}get remoteStream(){return this._remoteStream$.value}get inputAudioDeviceConstraints(){if(this.options.audio===!1&&!this.options.inputAudioDeviceConstraints)return!1;const t=this.deviceController.selectedAudioInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputAudioDeviceConstraints=="object"?this.options.inputAudioDeviceConstraints:{},...typeof t=="object"?t:{}}}get inputVideoDeviceConstraints(){if(!this.options.video&&!this.options.inputVideoDeviceConstraints)return!1;const t=this.deviceController.selectedVideoInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputVideoDeviceConstraints=="object"?this.options.inputVideoDeviceConstraints:{},...typeof t=="object"?t:{}}}get WebRTCPeerConnectionConstructor(){var t;return((t=this.options.webRTCApiProvider)==null?void 0:t.RTCPeerConnection)??RTCPeerConnection}get offerOptions(){const t={iceRestart:this.firstSDPExchangeCompleted?!0:void 0};switch(this.propose){case"screenshare":case"additional-device":return{...t,offerToReceiveAudio:!1,offerToReceiveVideo:!1};case"main":default:return{...t,offerToReceiveAudio:!0,offerToReceiveVideo:this.options.receiveVideo??!!this.inputVideoDeviceConstraints}}}get answerOptions(){return{iceRestart:this.firstSDPExchangeCompleted?!0:void 0}}async init(){return this.initPromise??(this.initPromise=this.doInit()),this.initPromise}async doInit(){try{this.setupPeerConnection(),this.subscribeTo(this.negotiationNeeded$.pipe(wd(0),Yn(async()=>this.startNegotiation())),{next:()=>{z.debug("[RTCPeerConnectionController] Start Negotiation completed successfully")},error:t=>{z.error("[RTCPeerConnectionController] Start Negotiation error:",t),this._errors$.next(vt(t))}}),this.subscribeTo(Ii(this.deviceController.selectedAudioInputDevice$.pipe(E(t=>["audio",t])),this.deviceController.selectedVideoInputDevice$.pipe(E(t=>["video",t]))).pipe(Dd(()=>!this.localStreamController.localStream)),async([t,e])=>{z.debug("[RTCPeerConnectionController] Selected input device changed for:",{kind:t,deviceInfo:e}),await this.updateSelectedInputDevice(t,e)}),this.type==="answer"&&this.sdpInit?(await this.setupRemoteTracks(),this._initialized$.next(!0),this.setupEventListeners(),this._isNegotiating$.next(!0),await this._setRemoteDescription(this.sdpInit)):(await this.setupTrackHandling(),this._initialized$.next(!0))}catch(t){z.error("[RTCPeerConnectionController] Initialization error:",t),this._errors$.next(vt(t)),this.destroy()}}setupPeerConnection(){this.peerConnection=new this.WebRTCPeerConnectionConstructor(this.rtcConfiguration),this.peerConnection.addEventListener("negotiationneeded",this.onnegotiationneededHandler),this._iceGatheringController=new xg(this.peerConnection,this.isNegotiating$,{iceCandidateTimeout:this.options.iceCandidateTimeout,iceGatheringTimeout:this.options.iceGatheringTimeout,relayOnly:this.options.relayOnly}),this.transceiverController=new Mg({peerConnection:this.peerConnection,propose:this.propose,simulcast:this.options.simulcast,sfu:this.options.sfu,msStreamsNumber:this.options.msStreamsNumber,receiveAudio:this.receiveAudio,receiveVideo:this.receiveVideo,localStreamController:this.localStreamController,getInputAudioDeviceConstraints:()=>this.inputAudioDeviceConstraints,getInputVideoDeviceConstraints:()=>this.inputVideoDeviceConstraints,getUserMedia:async t=>this.getUserMedia(t),onError:t=>{this._errors$.next(t)}})}async startNegotiation(){if(this.isNegotiating){z.debug("[RTCPeerConnectionController] Negotiation already in progress, skipping.");return}if(this.setupEventListeners(),this.type==="answer"){z.debug("[RTCPeerConnectionController] This is an answer type still, skipping offer creation.");return}this._isNegotiating$.next(!0),z.debug("[RTCPeerConnectionController] Starting negotiation.");try{const{offerOptions:t}=this;z.debug("[RTCPeerConnectionController] Creating offer with options:",t),await this.createOffer(t)}catch(t){z.error("[RTCPeerConnectionController] Error during negotiation:",t),this._errors$.next(vt(t))}}async createOffer(t){if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");const e=await this.peerConnection.createOffer(t);await this.setLocalDescription(e)}async updateAnswerStatus({status:t,sdp:e}){let i=t!=="failed";try{t==="received"&&e&&(z.debug("[RTCPeerConnectionController] Received answer SDP:",e),await this._setRemoteDescription({type:"answer",sdp:e}))}catch(r){z.error("[RTCPeerConnectionController] Error updating answer status:",r),this._errors$.next(vt(r)),i=!1}finally{i?this.readyToConnect():this.iceGatheringController.restartICEGatheringWithRelayOnly()}}async updateOfferStatus({status:t,sdp:e}){switch(t){case"received":this._type="answer",this.sdpInit={type:"offer",sdp:e},await this.handleOfferReceived();break;case"failed":z.error("[RTCPeerConnectionController] Offer failed to be processed by remote.");break}}async acceptInbound(t){var i;if(t){const{audio:r,video:n,receiveAudio:s,receiveVideo:a}=t;this.options={...this.options,...r!==void 0?{audio:r}:{},...n!==void 0?{video:n}:{},...s!==void 0?{receiveAudio:s}:{},...a!==void 0?{receiveVideo:a}:{}},(i=this.transceiverController)==null||i.updateOptions({receiveAudio:this.receiveAudio,receiveVideo:this.receiveVideo}),this.localStreamController.updateOptions({inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints})}await this.setupLocalTracks();const{answerOptions:e}=this;z.debug("[RTCPeerConnectionController] Creating inbound answer with options:",e),await this.createAnswer(e)}async handleOfferReceived(){if(!this.sdpInit)throw new Q("SDP initialization parameters are not set");this._isNegotiating$.next(!0),await this._setRemoteDescription(this.sdpInit);const{answerOptions:t}=this;z.debug("[RTCPeerConnectionController] Creating answer with options:",t),await this.createAnswer(t)}readyToConnect(){this.firstSDPExchangeCompleted=!0,this.connectionTimer=setTimeout(()=>{var t;this.removeConnectionTimer(),((t=this.peerConnection)==null?void 0:t.connectionState)!=="connected"&&(z.debug("[RTCPeerConnectionController] Connection timeout, restarting ICE gathering with relay only."),this.iceGatheringController.restartICEGatheringWithRelayOnly())},this.connectionTimeout)}async setRemoteDescriptionBefore(t=""){return Promise.resolve(t)}async setLocalDescription(t){var i;const e=await this.setLocalDescriptionBefore(t.sdp);return(i=this.peerConnection)==null?void 0:i.setLocalDescription({...t,sdp:e})}async setLocalDescriptionBefore(t=""){let e=t;const i=this.options.preferredAudioCodecs??g.instance.preferredAudioCodecs,r=this.options.preferredVideoCodecs??g.instance.preferredVideoCodecs,n=this.options.stereo??g.instance.stereoAudio;return(i.length>0||r.length>0)&&(e=Ag(e,i,r),z.debug("[RTCPeerConnectionController] Applied codec preferences to SDP",{preferredAudioCodecs:i,preferredVideoCodecs:r})),n&&(e=Cg(e),z.debug("[RTCPeerConnectionController] Applied stereo Opus to SDP")),Promise.resolve(e)}async createAnswer(t){if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");const e=await this.peerConnection.createAnswer(t);await this.setLocalDescription(e)}setupEventListeners(){if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");this._iceConnectionState$.next(this.peerConnection.iceConnectionState),this._connectionState$.next(this.peerConnection.connectionState),this._signalingState$.next(this.peerConnection.signalingState),this._iceGatheringState$.next(this.peerConnection.iceGatheringState),this._remoteDescription$.next(this.peerConnection.remoteDescription),this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.addEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.addEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.removeEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.addEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.removeEventListener("signalingstatechange",this.onsignalingstatechangeHandler),this.peerConnection.addEventListener("signalingstatechange",this.onsignalingstatechangeHandler)}negotiationEnded(){this._isNegotiating$.next(!1)}async triggerIceRestart(t){if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");const e=t&&!this.options.relayOnly;if(e)try{this.peerConnection.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:"relay"}),z.debug("[RTCPeerConnectionController] ICE transport policy set to relay-only")}catch(i){z.warn("[RTCPeerConnectionController] Failed to set relay-only policy:",i)}this.setupEventListeners(),this._isNegotiating$.next(!0),z.debug(`[RTCPeerConnectionController] Triggering ICE restart${t?" (relay-only)":""}.`);try{const i=await this.peerConnection.createOffer({iceRestart:!0});await this.setLocalDescription(i)}catch(i){throw z.error("[RTCPeerConnectionController] ICE restart offer failed:",i),this._errors$.next(vt(i)),this.negotiationEnded(),e&&this.restoreIceTransportPolicy(),i}e&&Ge(lr(this._iceGatheringState$.pipe(B(i=>i==="complete"),Re(1)),Di(Gh).pipe(E(()=>"timeout")))).then(()=>this.restoreIceTransportPolicy()).catch(i=>{z.warn("[RTCPeerConnectionController] Error waiting for ICE gathering to complete:",i),this.restoreIceTransportPolicy()})}restoreIceTransportPolicy(){var t;try{(t=this.peerConnection)==null||t.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:this.options.relayOnly?"relay":"all"}),z.debug("[RTCPeerConnectionController] ICE transport policy restored")}catch(e){z.warn("[RTCPeerConnectionController] Failed to restore ICE transport policy:",e)}}async setupTrackHandling(){if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");await this.setupLocalTracks(),await this.setupRemoteTracks()}async setupLocalTracks(){var e,i,r,n,s,a,o;z.debug("[RTCPeerConnectionController] Setting up local tracks/transceivers.");const t=this.localStream??await this.localStreamController.buildLocalStream();if(((e=this.transceiverController)==null?void 0:e.useAddStream)??!1){z.warn("[RTCPeerConnectionController] Using deprecated addStream API to add local stream."),(i=this.peerConnection)==null||i.addStream(t),this.isNegotiating||(z.debug("[RTCPeerConnectionController] Forcing negotiationneeded after local tracks setup."),this.negotiationNeeded$.next());return}for(const c of["audio","video"]){const u=(c==="audio"?t.getAudioTracks():t.getVideoTracks()).map((h,p)=>({index:p,track:h}));for(const{index:h,track:p}of u)if(this.localStreamController.addTrackEndedListener(p),((r=this.transceiverController)==null?void 0:r.useAddTransceivers)??!1){const v=(c==="audio"?(n=this.transceiverController)==null?void 0:n.audioTransceivers:(s=this.transceiverController)==null?void 0:s.videoTransceivers)??[];await((a=this.transceiverController)==null?void 0:a.setupTransceiverSender(p,t,v[h]))}else z.debug(`[RTCPeerConnectionController] Using addTrack for local ${c} track:`,p.id),(o=this.peerConnection)==null||o.addTrack(p,t)}}async getUserMedia(t){var e;return(((e=this.options.webRTCApiProvider)==null?void 0:e.mediaDevices)??navigator.mediaDevices).getUserMedia(t)}async getDisplayMedia(t){var i;const e=((i=this.options.webRTCApiProvider)==null?void 0:i.mediaDevices)??navigator.mediaDevices;if(!e.getDisplayMedia)throw new Q("getDisplayMedia is not supported by the current WebRTC provider");return e.getDisplayMedia(t)}async setupRemoteTracks(){var t;if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");this.peerConnection.ontrack=e=>{var i;if(z.debug("[RTCPeerConnectionController] Remote track received:",e.track.kind),e.streams[0])this._remoteStream$.next(e.streams[0]);else{const r=((i=this._remoteStream$.value)==null?void 0:i.getTracks())??[],n=new MediaStream([...r,e.track]);this._remoteStream$.next(n)}},await((t=this.transceiverController)==null?void 0:t.setupRemoteTransceivers(this.type))}async restoreTrackSender(t){var i,r,n;const e=t==="audio"||t==="both";e&&this._localAudioPipeline&&await this.restoreRawAudioInputForPipeline(),e?t==="both"?await((r=this.transceiverController)==null?void 0:r.restoreTrackSender("video")):this._localAudioPipeline||await((n=this.transceiverController)==null?void 0:n.restoreTrackSender(t)):await((i=this.transceiverController)==null?void 0:i.restoreTrackSender(t))}async restoreRawAudioInputForPipeline(){var r;if(!this._localAudioPipeline)return;const t=((r=this.transceiverController)==null?void 0:r.getConstraintsFor("audio"))??{};let e;try{e=await this.getUserMedia({audio:t})}catch(n){z.error("[RTCPeerConnectionController] Failed to re-acquire mic for pipeline restore:",n),this._errors$.next(vt(n));return}const i=e.getAudioTracks().at(0);i&&(this.localStreamController.addTrack(i),this._localAudioPipeline.setInputTrack(i))}ensureLocalAudioPipeline(){if(this._localAudioPipeline)return this._localAudioPipeline;if(!this.peerConnection)return null;try{this._localAudioPipeline=new Dg}catch(t){return z.warn("[RTCPeerConnectionController] Failed to create LocalAudioPipeline:",t),null}return this.subscribeTo(this.localStreamController.localAudioTracks$,()=>{this.applyLocalAudioPipelineToSender()}),this.applyLocalAudioPipelineToSender(),this._localAudioPipeline}get localAudioPipeline(){return this._localAudioPipeline}async applyLocalAudioPipelineToSender(){var i,r;if(!this._localAudioPipeline||!this.peerConnection)return;const t=this.localStreamController.localAudioTracks.at(0);this._localAudioPipeline.setInputTrack(t??null);const e=((r=(i=this.transceiverController)==null?void 0:i.audioTransceivers.at(0))==null?void 0:r.sender)??this.peerConnection.getSenders().find(n=>{var s;return((s=n.track)==null?void 0:s.kind)==="audio"});if(!(!e||!t))try{await e.replaceTrack(this._localAudioPipeline.outputTrack)}catch(n){z.warn("[RTCPeerConnectionController] Failed to route audio sender through pipeline:",n)}}addLocalTrack(t){if(!this.peerConnection){const e=new Q("RTCPeerConnection is not initialized");throw this._errors$.next(e),e}try{const e=this.localStreamController.addTrack(t);this.peerConnection.addTrack(t,e),z.debug(`[RTCPeerConnectionController] ${t.kind} track added:`,t.id)}catch(e){throw z.error(`[RTCPeerConnectionController] Failed to add ${t.kind} track:`,e),this._errors$.next(vt(e)),e}}removeLocalTrack(t){var i,r;if(!this.peerConnection){const n=new Q("RTCPeerConnection is not initialized");throw this._errors$.next(n),n}const e=this.peerConnection.getSenders().find(n=>{var s;return((s=n.track)==null?void 0:s.id)===t});if(!e){z.debug(`[RTCPeerConnectionController] track not found: ${t}`);return}try{this.peerConnection.removeTrack(e),this.localStreamController.removeTrack(t),z.debug(`[RTCPeerConnectionController] ${(i=e.track)==null?void 0:i.kind} track removed:`,t)}catch(n){throw z.error(`[RTCPeerConnectionController] Failed to remove ${(r=e.track)==null?void 0:r.kind} track:`,n),this._errors$.next(vt(n)),n}}setLocalTrack(t){const e=[...t.kind==="audio"?this.localStreamController.localAudioTracks:this.localStreamController.localVideoTracks];for(const i of e)this.removeLocalTrack(i.id);this.addLocalTrack(t)}async updateSendersConstraints(t,e){var i;await((i=this.transceiverController)==null?void 0:i.updateSendersConstraints(t,e))}async replaceAudioTrackWithConstraints(t){var i;const e=(i=this.peerConnection)==null?void 0:i.getSenders().filter(r=>{var n;return((n=r.track)==null?void 0:n.kind)==="audio"&&r.track.readyState==="live"});if(!e||e.length===0){z.warn("[RTCPeerConnectionController] No live audio sender to replace");return}for(const r of e){const n=r.track;if(!n)continue;const{deviceId:s}=n.getSettings(),a={...n.getConstraints(),...t,...s?{deviceId:{exact:s}}:{}},o=n.id;n.stop(),this.localStreamController.removeTrack(o);const c=(await this.getUserMedia({audio:a})).getAudioTracks()[0];await r.replaceTrack(c),this.localStreamController.addTrack(c),z.debug(`[RTCPeerConnectionController] Audio track replaced for server-pushed params. New track: ${c.id}`)}}destroy(){var t,e,i;z.debug(`[RTCPeerConnectionController] Destroying RTCPeerConnectionController. ${this.propose}`),this.removeConnectionTimer(),(t=this._iceGatheringController)==null||t.destroy(),(e=this._localAudioPipeline)==null||e.destroy(),this._localAudioPipeline=null,this.localStreamController.destroy(),(i=this.transceiverController)==null||i.destroy(),this.peerConnection&&(this.stopRemoteTracks(),this.removeAllListeners(),this.peerConnection.close(),this.peerConnection=void 0),super.destroy()}removeAllListeners(){this.peerConnection&&(this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.removeEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.removeEventListener("signalingstatechange",this.onsignalingstatechangeHandler),this.peerConnection.removeEventListener("negotiationneeded",this.onnegotiationneededHandler))}stopRemoteTracks(){var t;(t=this._remoteStream$.value)==null||t.getTracks().forEach(e=>{z.debug(`[RTCPeerConnectionController] Stopping remote track: ${e.kind}`),e.stop()})}get mediaDirections(){var t;return((t=this.transceiverController)==null?void 0:t.getMediaDirections())??this._remoteOfferMediaDirections??{audio:"inactive",video:"inactive"}}async _setRemoteDescription(t){if(!this.peerConnection)throw new Q("RTCPeerConnection is not initialized");const e=await this.setRemoteDescriptionBefore(t.sdp),i={...t,sdp:e};return z.debug("[RTCPeerConnectionController] Setting remote description:",i),this.peerConnection.setRemoteDescription(i)}};function us(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")}function ac(t){if(!us(t))return!1;const e=t;return e.method==="verto.invite"&&Ce(e.params)&&G(e.params,"sdp")&&G(e.params,"callID")}function Rg(t){return us(t)?t.method==="verto.bye":!1}function oc(t){return us(t)?t.method==="verto.attach":!1}function Pg(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.answer"&&Ce(t.params)&&G(t.params,"callID")}function Og(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.media"&&Ce(t.params)&&G(t.params,"callID")&&G(t.params,"sdp")}function _g(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.mediaParams"&&Ce(t.params)&&G(t.params,"mediaParams")}function Lg(t){return Ce(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.ping"}function cc(t){return Ce(t)&&G(t,"callID")&&typeof t.callID=="string"}const V=W();function Fg(t){return t.isInvite&&!t.reattach&&!t.explicitNodeId?"":t.currentNodeId??""}var Ug=class extends te{constructor(t){super(),this.callSession=t}destroy(){this.callSession=void 0,super.destroy()}},Ng=class extends Ug{constructor(t,e,i,r,n={}){super(t),this.webRtcCallSession=t,this.attachManager=e,this.deviceController=i,this.webRTCApiProvider=r,this._rtcPeerConnections$=this.createBehaviorSubject([]),this._selfId$=this.createBehaviorSubject(null),this._signalingStatus$=this.createReplaySubject(1),this._screenShareStatus$=this.createBehaviorSubject("none"),this._rtcPeerConnectionsMap=new Map,this._screenShareTimeoutMs=5e4,this._nodeId$=this.createBehaviorSubject(n.nodeId??null),this.onError=n.onError,this.onModifyFailed=n.onModifyFailed,this.initSubscriptions(),this.initMainPeerConnection()}async hold(){const t=sn({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},action:"hold"});try{await this.executeVerto(t)}catch(e){throw V.warn("[WebRTCManager] Call might already be disconnected, error sending Verto hold:",e),e}}async unhold(){const t=sn({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},action:"unhold"});try{await this.executeVerto(t)}catch(e){throw V.warn("[WebRTCManager] Call might already be disconnected, error sending Verto unhold:",e),e}}get mediaDirections(){return this.mainPeerConnection.mediaDirections}get rtcPeerConnections$(){return this._rtcPeerConnections$.asObservable()}get rtcPeerConnections(){return this._rtcPeerConnections$.value}get nodeId$(){return this._nodeId$.asObservable()}get selfId$(){return this._selfId$.asObservable()}get localStream(){var t;return((t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id))==null?void 0:t.localStream)??null}get remoteStream(){var t;return((t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id))==null?void 0:t.remoteStream)??null}get nodeId(){return this._nodeId$.value}get screenShareStatus(){return this._screenShareStatus$.value}get screenShareStatus$(){return this._screenShareStatus$.asObservable()}get mainPeerConnection(){const t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id);if(!t)throw new Q("Main peer connection not found");return t}get signalingStatus$(){return this.cachedObservable("signalingStatus$",()=>Ii(this._signalingStatus$.asObservable(),this.mainPeerConnection.connectionState$.pipe(B(t=>["connected","disconnected","failed"].includes(t)))))}initSubscriptions(){this.subscribeTo(this.callJoinedEvent$,t=>{var i;const e=(i=t.room_session.members.find(r=>r.call_id===t.call_id))==null?void 0:i.node_id;e&&this.setNodeIdIfNull(e),t.member_id&&this.setSelfIdIfNull(t.member_id)}),this.subscribeTo(this.vertoMedia$,t=>{var r;V.debug("[WebRTCManager] Received Verto media event (early media SDP):",t);const{sdp:e,callID:i}=t;this.emitMainSignalingStatus(i,"ringing"),(r=this._rtcPeerConnectionsMap.get(i))==null||r.updateAnswerStatus({status:"received",sdp:e})}),this.subscribeTo(this.vertoAnswer$,t=>{var r;V.debug("[WebRTCManager] Received Verto answer event:",t);const{sdp:e,callID:i}=t;this.emitMainSignalingStatus(i,"connecting"),(r=this._rtcPeerConnectionsMap.get(i))==null||r.updateAnswerStatus({status:"received",sdp:e})}),this.subscribeTo(this.vertoMediaParams$,t=>{V.debug("[WebRTCManager] Received Verto mediaParams event:",t);const{mediaParams:e,callID:i}=t,r=this._rtcPeerConnectionsMap.get(i),{audio:n,video:s}=e;(async()=>{var a;try{n&&r&&await r.replaceAudioTrackWithConstraints(n),s&&await(r==null?void 0:r.updateSendersConstraints("video",s)),this.webRtcCallSession.emitMediaParamsUpdated({audio:n,video:s,timestamp:Date.now()})}catch(o){V.warn("[WebRTCManager] Error applying server-pushed media params:",o),(a=this.onError)==null||a.call(this,o instanceof Error?o:new Error(String(o),{cause:o}))}})()}),this.subscribeTo(this.vertoPing$,t=>{this.attachManager.attach(this.buildAttachableCall()),this.sendVertoPong(t)})}setNodeIdIfNull(t){!this._nodeId$.value&&t&&(V.debug(`[WebRTCManager] Early node_id set: ${t}`),this._nodeId$.next(t))}setSelfIdIfNull(t){!this._selfId$.value&&t&&(V.debug(`[WebRTCManager] Early selfId set: ${t}`),this._selfId$.next(t))}async sendVertoPong(t){var e;try{const i=$p({...t});await this.executeVerto(i)}catch(i){V.warn("[WebRTCManager] Call might disconnect, error sending Verto pong:",i),(e=this.onError)==null||e.call(this,new so(i))}}async updateMediaConstraints(t={}){var r;const{audio:e,video:i}=t;try{e&&await this.mainPeerConnection.updateSendersConstraints("audio",e),i&&await this.mainPeerConnection.updateSendersConstraints("video",i)}catch(n){throw V.warn("[WebRTCManager] Error updating media constraints:",n),(r=this.onError)==null||r.call(this,n instanceof Error?n:new Error(String(n),{cause:n})),n}}get selfId(){return this._selfId$.value}buildAttachableCall(t){return{nodeId:this.nodeId??void 0,id:t??this.webRtcCallSession.id,to:this.webRtcCallSession.to,mediaDirections:this.webRtcCallSession.mediaDirections}}requestKeyframe(){try{const t=this.mainPeerConnection.peerConnection;if(!t){V.warn("[WebRTCManager] No peer connection for keyframe request");return}const e=t.getReceivers().find(i=>i.track.kind==="video");if(!e){V.warn("[WebRTCManager] No video receiver for keyframe request");return}typeof e.requestKeyFrame=="function"?(e.requestKeyFrame(),V.debug("[WebRTCManager] Keyframe requested via RTCRtpReceiver.requestKeyFrame()")):V.debug("[WebRTCManager] requestKeyFrame() not supported, skipping")}catch(t){V.warn("[WebRTCManager] Keyframe request failed (non-fatal):",t)}}async requestIceRestart(t){try{const e=this.mainPeerConnection;if(!e.peerConnection){V.warn("[WebRTCManager] No peer connection for ICE restart");return}await e.triggerIceRestart(t),V.info(`[WebRTCManager] ICE restart initiated${t?" (relay-only)":""}`)}catch(e){throw V.error("[WebRTCManager] ICE restart failed:",e),e}}async requestIceRestartAll(t){const e=Array.from(this._rtcPeerConnectionsMap.entries());for(const[i,r]of e)try{if(!r.peerConnection){V.debug(`[WebRTCManager] No peer connection for leg ${i}, skipping ICE restart`);continue}await r.triggerIceRestart(t),V.info(`[WebRTCManager] ICE restart initiated for leg ${i}${t?" (relay-only)":""}`)}catch(n){V.warn(`[WebRTCManager] ICE restart failed for leg ${i}:`,n)}}requestKeyframeAll(){for(const[t,e]of this._rtcPeerConnectionsMap){if(e.isScreenShare){V.debug(`[WebRTCManager] Skipping keyframe for send-only screen share leg ${t}`);continue}try{const i=e.peerConnection;if(!i)continue;const r=i.getReceivers().find(n=>n.track.kind==="video");if(!r)continue;typeof r.requestKeyFrame=="function"&&(r.requestKeyFrame(),V.debug(`[WebRTCManager] Keyframe requested for leg ${t}`))}catch(i){V.warn(`[WebRTCManager] Keyframe request failed for leg ${t} (non-fatal):`,i)}}}get callJoinedEvent$(){return this.webRtcCallSession.callEvent$.pipe(B(tc),w(this.destroyed$))}get vertoMedia$(){return this.webRtcCallSession.webrtcMessages$.pipe(fe(Og,"params"),w(this.destroyed$))}get vertoAnswer$(){return this.cachedObservable("vertoAnswer$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Pg,"params"),w(this.destroyed$)))}get vertoMediaParams$(){return this.cachedObservable("vertoMediaParams$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(_g,"params"),w(this.destroyed$)))}get vertoBye$(){return this.cachedObservable("vertoBye$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Rg,"params"),w(this.destroyed$)))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(oc,"params"),w(this.destroyed$)))}get vertoPing$(){return this.cachedObservable("vertoPing$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Lg,"params"),w(this.destroyed$)))}async executeVerto(t,e={}){var s,a;const i=Bo({callID:e.callID??this.webRtcCallSession.id,node_id:e.node_id??this._nodeId$.value??"",message:t,subscribe:e.subscribe}),r=await this.webRtcCallSession.execute(i);if(r.error){const o=new Lt(r.error.code,r.error.message,r.error.data);return(s=this.onError)==null||s.call(this,o),r}const n=it(r,"result.result");if(n!=null&&n.error){const o=new Lt(n.error.code,n.error.message,n.error.data);return(a=this.onError)==null||a.call(this,o),r}return r}async sendLocalDescription(t,e){var n,s;const i=t.method,r=this.getSendLocalSDPOptionalParams(e,t);try{const a=await this.executeVerto(t,r);switch(i){case"verto.invite":this.processInviteResponse(a,e);break;case"verto.modify":await this.processModifyResponse(a,e);break;default:}}catch(a){V.error(`[WebRTCManager] Error sending Verto ${i}:`,a),(n=this.onError)==null||n.call(this,a instanceof Error?a:new Error(String(a),{cause:a})),i==="verto.modify"&&((s=this.onModifyFailed)==null||s.call(this))}}async processModifyResponse(t,e){var i;if(!t.error){const r=it(t,"result.result.result.action"),n=it(t,"result.result.result.sdp");if(r==="updateMedia"&&n)try{await e.updateAnswerStatus({status:"received",sdp:n})}catch(s){V.warn("[WebRTCManager] Error processing modify response:",s);const a=s instanceof Error?s:new Error(String(s),{cause:s});(i=this.onError)==null||i.call(this,a)}}}emitMainSignalingStatus(t,e){var r;const i=this._rtcPeerConnectionsMap.get(t);if(!i){const n=new Q(`Cannot emit signaling status, RTCPeerConnectionController not found for callID: ${t}`);V.error("[WebRTCManager] Failed to emit signaling status:",{callId:t,status:e,signalingError:n}),(r=this.onError)==null||r.call(this,n);return}i.isMainDevice&&this._signalingStatus$.next(e)}processInviteResponse(t,e){var i;if(!t.error&&it(t,"result.result.result.message")==="CALL CREATED"){this.emitMainSignalingStatus(e.id,"trying"),this._nodeId$.next(it(t,"result.node_id")??null);const r=it(t,"result.result.result.memberID")??null,n=it(t,"result.result.result.callID")??null;V.debug("[WebRTCManager] Verto invite response:",{callId:n,memberId:r,response:t}),this._selfId$.next(r),e.setMemberId(r),n?(this.webRtcCallSession.addCallId(n),this.attachManager.attach(this.buildAttachableCall(n))):V.warn("[WebRTCManager] Cannot attach call, missing callId:",{nodeId:this.nodeId,callId:n}),V.info("[WebRTCManager] Verto invite successful"),V.debug(`[WebRTCManager] nodeid: ${this._nodeId$.value}, selfId: ${this._selfId$.value}`)}else{V.error("[WebRTCManager] Verto invite failed:",t);const r=t.error?new Lt(t.error.code,t.error.message,t.error.data):new Error("Verto invite failed: unexpected response");(i=this.onError)==null||i.call(this,r)}}get RTCPeerConnectionConfig(){return{iceServers:this.webRtcCallSession.clientSession.iceServers??g.instance.iceServers,relayOnly:g.instance.relayOnly||g.instance.disableUdpIceServers,disableUdpIceServers:g.instance.disableUdpIceServers,iceCandidateTimeout:g.instance.iceCandidateTimeout,iceGatheringTimeout:g.instance.iceGatheringTimeout}}initMainPeerConnection(){const{options:t}=this.webRtcCallSession,e=new sc({propose:"main",callId:this.webRtcCallSession.id,audio:t.audio,video:t.video,inputAudioDeviceConstraints:t.inputAudioDeviceConstraints,inputVideoDeviceConstraints:t.inputVideoDeviceConstraints,inputAudioStream:t.inputAudioStream,inputVideoStream:t.inputVideoStream,receiveAudio:t.receiveAudio,receiveVideo:t.receiveVideo,webRTCApiProvider:this.webRTCApiProvider,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs,stereo:t.stereo,...this.RTCPeerConnectionConfig},t.initOffer,this.deviceController);this.setupLocalDescriptionHandler(e),this.setupVertoByeHandler(),this.setupVertoAttachHandler(),this.initObservables(e),this._rtcPeerConnectionsMap.set(e.id,e),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(e.errors$,i=>{var r;(r=this.onError)==null||r.call(this,i)}),t.initOffer&&this.handleInboundAnswer(e)}async handleInboundAnswer(t){var i,r,n;V.debug("[WebRTCManager] Waiting for inbound call to be accepted or rejected");const e=await Ge(lr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(w(this.destroyed$))).catch(()=>null);if(e===null){V.debug("[WebRTCManager] Inbound answer handler aborted (destroyed).");return}if(cc(e))V.info("[WebRTCManager] Inbound call ended by remote before answer."),(i=this.callSession)==null||i.destroy();else if(e){V.debug("[WebRTCManager] Inbound call accepted, creating SDP answer");const s=this.webRtcCallSession.answerMediaOptions;try{await t.acceptInbound(s)}catch(a){V.error("[WebRTCManager] Error creating inbound answer:",a),(n=this.onError)==null||n.call(this,a instanceof Error?a:new Error(String(a),{cause:a}))}}else{V.info("[WebRTCManager] Inbound call rejected by user.");try{await this.bye("USER_BUSY")}finally{this._signalingStatus$.next("disconnected"),(r=this.callSession)==null||r.destroy()}}}setupVertoAttachHandler(){this.subscribeTo(this.vertoAttach$,async t=>{V.debug("[WebRTCManager] Received Verto attach event for existing call:",t);const{callID:e}=t;await this.attachManager.attach({nodeId:this.nodeId??void 0,id:e,to:t.callee_id_number,mediaDirections:{audio:"sendrecv",video:"inactive"}})})}initObservables(t){this.mediaDirections$=t.connectionState$.pipe(B(e=>e==="connected"),E(()=>t.mediaDirections),Id(t.mediaDirections),w(this.destroyed$)),this.localStream$=t.localStream$.pipe(ue(),w(this.destroyed$)),this.remoteStream$=t.remoteStream$.pipe(ue(),w(this.destroyed$))}setupLocalDescriptionHandler(t){this.subscribeTo(t.localDescription$.pipe(B(e=>e!==null),w(this.destroyed$)),e=>{const{type:i,sdp:r}=e,n=this.dialogParams(t),s=!t.firstSDPExchangeCompleted;if(i==="answer"){const a=Qp({dialogParams:n,sdp:r});this.sendLocalDescriptionOnceAccepted(a,t)}else if(s){const a=Yp({dialogParams:n,sdp:r});this.sendLocalDescription(a,t)}else{const a=sn({dialogParams:n,sdp:r,action:"updateMedia"});this.sendLocalDescription(a,t)}})}setupVertoByeHandler(){this.subscribeTo(this.vertoBye$,()=>{var t;this._signalingStatus$.next("disconnected"),this.attachManager.detach(this.buildAttachableCall()),(t=this.callSession)==null||t.destroy()})}getSendLocalSDPOptionalParams(t,e){let i;return t.firstSDPExchangeCompleted||(i=[],t.isMainDevice?i.push(...g.instance.inviteSubscribeMainDevice):t.isAdditionalDevice?i.push(...g.instance.inviteSubscribeAdditionalDevice):t.isScreenShare&&i.push(...g.instance.inviteSubscribeScreenshare)),{callID:t.id,node_id:Fg({isInvite:ac(e),reattach:this.webRtcCallSession.options.reattach===!0,explicitNodeId:this.webRtcCallSession.options.nodeId,currentNodeId:this._nodeId$.value}),subscribe:i}}async sendLocalDescriptionOnceAccepted(t,e){var r,n,s;V.debug("[WebRTCManager] Waiting for call to be accepted or ended before sending answer");const i=await Ge(lr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(w(this.destroyed$))).catch(()=>null);if(i===null){V.debug("[WebRTCManager] Destroyed while waiting for call acceptance");return}if(cc(i))V.info("[WebRTCManager] Call ended before answer was sent."),(r=this.callSession)==null||r.destroy();else if(i){V.debug("[WebRTCManager] Call accepted, sending answer");try{this.emitMainSignalingStatus(e.id,"connecting"),await this.sendLocalDescription(t,e),await e.updateAnswerStatus({status:"sent"}),await this.attachManager.attach(this.buildAttachableCall())}catch(a){V.error("[WebRTCManager] Error sending Verto answer:",a),(s=this.onError)==null||s.call(this,a instanceof Error?a:new Error(String(a),{cause:a})),await e.updateAnswerStatus({status:"failed"})}}else{V.info("[WebRTCManager] Call was not accepted, sending verto.bye.");try{await this.bye("USER_BUSY")}finally{this._signalingStatus$.next("disconnected"),(n=this.callSession)==null||n.destroy()}}}dialogParams(t){const e=t.memberId??this._selfId$.value??void 0,i=t.propose==="main"&&!t.firstSDPExchangeCompleted&&this.webRtcCallSession.options.reattach;return{id:t.isMainDevice?this.webRtcCallSession.id:t.id,destinationNumber:this.webRtcCallSession.to??this.webRtcCallSession.from,attach:i,reattaching:i,callerName:this.webRtcCallSession.fromName,callerNumber:this.webRtcCallSession.from,remoteCallerName:this.webRtcCallSession.toName,remoteCallerNumber:this.webRtcCallSession.to,userVariables:{memberCallId:this.webRtcCallSession.id,memberId:e,...this.webRtcCallSession.userVariables},screenShare:t.isScreenShare,additionalDevice:t.isAdditionalDevice,pingSupported:!0,version:gh}}muteMainAudioInputDevice(){return this.mainPeerConnection.stopTrackSender("audio")}muteMainVideoInputDevice(){return this.mainPeerConnection.stopTrackSender("video")}async unmuteMainAudioInputDevice(){return this.mainPeerConnection.restoreTrackSender("audio")}async unmuteMainVideoInputDevice(){return this.mainPeerConnection.restoreTrackSender("video")}ensureLocalAudioPipeline(){return this.mainPeerConnection.ensureLocalAudioPipeline()}get localAudioPipeline(){return this.mainPeerConnection.localAudioPipeline}async addInputDevice(t={audio:!1,video:!0}){return this.initAdditionalPeerConnection("additional-device",t)}async addMainInputDevices(t={audio:!0}){var r;let e;const{mediaDirections:i}=this.mainPeerConnection;if((t.audio??t.inputAudioDeviceConstraints??(t.inputAudioStream&&i.audio.startsWith("send")))&&(e="audio"),(t.video??t.inputVideoDeviceConstraints??(t.inputVideoStream&&!i.video.startsWith("send")))&&(e=e==="audio"?"both":"video"),e)this.mainPeerConnection.updateMediaDevicesOptions(t),await this.mainPeerConnection.restoreTrackSender(e);else{const n=new ro("No valid device to be added");throw(r=this.onError)==null||r.call(this,n),n}}async addScreenMedia(t={audio:!1}){await this.initAdditionalPeerConnection("screenshare",t)}async initAdditionalPeerConnection(t,e){var r;let i=null;try{return this._screenShareStatus$.next("starting"),i=new sc({...e,...this.RTCPeerConnectionConfig,propose:t,webRTCApiProvider:this.webRTCApiProvider},void 0,this.deviceController),this.setupLocalDescriptionHandler(i),t==="screenshare"&&(this._screenShareId=i.id),this._rtcPeerConnectionsMap.set(i.id,i),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(i.errors$,n=>{var s;(s=this.onError)==null||s.call(this,n)}),await Ge(i.connectionState$.pipe(B(n=>n==="connected"),Re(1),cr(this._screenShareTimeoutMs),w(this.destroyed$))),this._screenShareStatus$.next("started"),V.info("[WebRTCManager] Screen share started successfully."),i.id}catch(n){V.warn("[WebRTCManager] Error initializing additional peer connection:",n),(r=this.onError)==null||r.call(this,n instanceof Error?n:new Error(String(n),{cause:n})),i&&i.destroy(),this._screenShareStatus$.next("none")}}async removeInputDevices(t){return this.removeAdditionalPeerConnection(t)}removeMainInputDevice(t={removeAudio:!1,removeVideo:!0}){let e;if(t.removeAudio&&(e="audio"),t.removeVideo&&(e=e==="audio"?"both":"video"),e)return this.mainPeerConnection.stopTrackSender(e,{updateTransceiverDirection:!0})}async removeScreenMedia(){if(["starting","started"].includes(this._screenShareStatus$.value)||V.warn("[WebRTCManager] No active screen share to stop."),!this._screenShareId){V.debug("[WebRTCManager] No screen share peer connection found.");return}this._screenShareStatus$.next("stopping"),await this.removeAdditionalPeerConnection(this._screenShareId),this._screenShareId=void 0,this._screenShareStatus$.next("none")}async removeAdditionalPeerConnection(t){const e=this._rtcPeerConnectionsMap.get(t);try{e&&await this.executeVertoBye(e)}finally{e==null||e.destroy(),this._rtcPeerConnectionsMap.delete(t),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values()))}}async executeVertoBye(t,e){try{const i=e?{cause:e,causeCode:eg[e]}:{};await this.executeVerto(Kp({...i,dialogParams:this.dialogParams(t)}))}catch(i){throw V.warn("[WebRTCManager] Call might already be disconnected, error sending Verto bye:",i),i}}async bye(t){this.attachManager.detach(this.buildAttachableCall());const e=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id);e&&await this.executeVertoBye(e,t)}async sendDigits(t){const e=Zp({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},dtmf:t});try{await this.executeVerto(e)}catch(i){throw V.warn("[WebRTCManager] Error sending DTMF digits:",i),i}}async transfer(t){const e=sn({...t,dialogParams:this.dialogParams(this.mainPeerConnection),action:"transfer"});try{V.debug("[WebRTCManager] Transferring call with options:",t),await this.executeVerto(e)}catch(i){throw V.error("[WebRTCManager] Error transferring call:",i),i}}destroy(){this._rtcPeerConnectionsMap.forEach(t=>{t.destroy()}),this._rtcPeerConnectionsMap.clear(),this._rtcPeerConnections$.complete(),super.destroy()}};const lc=W();var Bg=class extends te{constructor(t={}){super(),this._source=null,this._stream=null,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._pollIntervalMs=t.pollIntervalMs??Ao}get level$(){return this.deferEmission(Wr(this._pollIntervalMs,Ta).pipe(E(()=>this.computeLevel())))}setStream(t){if(this._source){try{this._source.disconnect()}catch(e){lc.debug("[RemoteAudioMeter] source disconnect warning:",e)}this._source=null,this._stream=null}!t||t.getAudioTracks().length===0||(this._stream=new MediaStream(t.getAudioTracks()),this._source=this._audioContext.createMediaStreamSource(this._stream))}destroy(){if(this._source){try{this._source.disconnect()}catch{}this._source=null}this._audioContext.close().catch(t=>{lc.debug("[RemoteAudioMeter] audio context close warning:",t)}),super.destroy()}computeLevel(){if(!this._source)return 0;this._analyser.getByteTimeDomainData(this._analyserBuffer);let t=0;for(const e of this._analyserBuffer){const i=(e-128)/128;t+=i*i}return Math.sqrt(t/this._analyserBuffer.length)}};const dr=W(),zg=1e3,Vg=10,Hg=2e3,jg=3e3,Wg=3,Gg=5,qg=5,Xg=10,Yg=4,Kg=30;function Zg(t,e){const i=t+e;return i===0?0:t/i*100}function Qg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="inbound-rtp"}function Jg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="candidate-pair"}var $g=class extends te{constructor(t,e={}){super(),this.peerConnection=t,this.running=!1,this.lastAudioPacketsReceived=0,this.lastAudioPacketChangeTime=0,this.lastVideoPacketsReceived=0,this.lastVideoPacketChangeTime=0,this.lastRoundTripTime=0,this.lastAvailableOutgoingBitrate=void 0,this._sample$=this.createReplaySubject(1),this._baseline$=this.createBehaviorSubject({rtt:0,jitter:0,ready:!1}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this.pollingIntervalMs=e.pollingIntervalMs??zg,this.baselineSampleCount=e.baselineSamples??Vg,this.noAudioPacketThresholdMs=e.noAudioPacketThresholdMs??Hg,this.noVideoPacketThresholdMs=e.noVideoPacketThresholdMs??jg,this.rttSpikeWarningMultiplier=e.rttSpikeWarningMultiplier??Wg,this.rttSpikeCriticalMultiplier=e.rttSpikeCriticalMultiplier??Gg,this.packetLossWarningPercent=e.packetLossWarningPercent??qg,this.packetLossCriticalPercent=e.packetLossCriticalPercent??Xg,this.jitterSpikeMultiplier=e.jitterSpikeMultiplier??Yg,this.historyWindowSeconds=e.historyWindowSeconds??Kg}get networkIssues$(){return this._networkIssues$.asObservable()}get networkIssues(){return[...this._networkIssues$.value]}get isNetworkHealthy$(){return this.cachedObservable("isNetworkHealthy$",()=>this._networkIssues$.pipe(E(t=>t.length===0),L(),w(this.destroyed$)))}get isNetworkHealthy(){return this._networkIssues$.value.length===0}get networkMetrics$(){return this._networkMetrics$.asObservable()}get networkMetrics(){return[...this._networkMetrics$.value]}get criticalIssue$(){return this.cachedObservable("criticalIssue$",()=>this._networkIssues$.pipe(Xn(t=>Me(t.filter(e=>e.severity==="critical"))),w(this.destroyed$)))}get sample$(){return this._sample$.asObservable()}start(){if(this.running)return;this.running=!0;const t=Date.now();this.lastAudioPacketChangeTime=t,this.lastVideoPacketChangeTime=t,dr.debug("[RTCStatsMonitor] Starting stats monitoring"),this.subscribeTo(Wr(this.pollingIntervalMs).pipe(B(()=>this.running),Ze(()=>Me(this.peerConnection.getStats()).pipe(ii(e=>(dr.warn("[RTCStatsMonitor] Failed to get stats:",e),ei)))),B(()=>this.running),E(e=>this.extractSample(e))),e=>this._sample$.next(e)),this.subscribeTo(this._sample$.pipe(Re(this.baselineSampleCount),Ad(),E(e=>({rtt:e.reduce((i,r)=>i+r.roundTripTime,0)/e.length,jitter:e.reduce((i,r)=>i+r.audioJitter,0)/e.length,ready:!0}))),e=>{dr.debug(`[RTCStatsMonitor] Baseline established: rtt=${e.rtt.toFixed(1)}ms, jitter=${e.jitter.toFixed(1)}ms`),this._baseline$.next(e)}),this.subscribeTo(this._sample$.pipe(Ka((e,i)=>({prev:e.current,current:i}),{prev:null,current:null}),B(e=>e.current!==null)),({prev:e,current:i})=>{const r=i.timestamp;this.updatePacketTracking(i,r);const n=this.detectIssues(i,e,r);this._networkIssues$.next(n)}),this.subscribeTo(this._sample$.pipe(Ka((e,i)=>{const r=i.timestamp-this.historyWindowSeconds*1e3,n={timestamp:i.timestamp,audio:{packetsReceived:i.audioPacketsReceived,packetsLost:i.audioPacketsLost,jitter:i.audioJitter},video:{packetsReceived:i.videoPacketsReceived,packetsLost:i.videoPacketsLost},roundTripTime:i.roundTripTime,availableOutgoingBitrate:i.availableOutgoingBitrate};return[...e.filter(s=>s.timestamp>r),n]},[])),e=>this._networkMetrics$.next(e))}stop(){this.running&&(this.running=!1,dr.debug("[RTCStatsMonitor] Stopping stats monitoring"))}destroy(){dr.debug("[RTCStatsMonitor] Destroying RTCStatsMonitor"),this.stop(),super.destroy()}extractSample(t){let e=0,i=0,r=0,n=0,s=0,a=0,o;return t.forEach(c=>{Qg(c)&&(c.kind==="audio"?(e+=c.packetsReceived??0,i+=c.packetsLost??0,r=Math.max(r,(c.jitter??0)*1e3)):(n+=c.packetsReceived??0,s+=c.packetsLost??0)),Jg(c)&&c.state==="succeeded"&&c.nominated&&(a=c.currentRoundTripTime?c.currentRoundTripTime*1e3:this.lastRoundTripTime,o=c.availableOutgoingBitrate??this.lastAvailableOutgoingBitrate)}),{audioPacketsReceived:e,audioPacketsLost:i,audioJitter:r,videoPacketsReceived:n,videoPacketsLost:s,roundTripTime:a,availableOutgoingBitrate:o,timestamp:Date.now()}}updatePacketTracking(t,e){t.audioPacketsReceived!==this.lastAudioPacketsReceived&&(this.lastAudioPacketsReceived=t.audioPacketsReceived,this.lastAudioPacketChangeTime=e),t.videoPacketsReceived!==this.lastVideoPacketsReceived&&(this.lastVideoPacketsReceived=t.videoPacketsReceived,this.lastVideoPacketChangeTime=e),t.roundTripTime>0&&(this.lastRoundTripTime=t.roundTripTime),t.availableOutgoingBitrate!==void 0&&(this.lastAvailableOutgoingBitrate=t.availableOutgoingBitrate)}detectIssues(t,e,i){const r=[],n=this._baseline$.value,s=i-this.lastAudioPacketChangeTime;s>this.noAudioPacketThresholdMs&&r.push({type:"no_inbound_audio",severity:"critical",timestamp:i,value:s,threshold:this.noAudioPacketThresholdMs});const a=i-this.lastVideoPacketChangeTime;if(a>this.noVideoPacketThresholdMs&&r.push({type:"no_inbound_video",severity:"warning",timestamp:i,value:a,threshold:this.noVideoPacketThresholdMs}),n.ready){const o=t.roundTripTime,c=n.rtt;if(c>0){const p=o/c;p>this.rttSpikeCriticalMultiplier?r.push({type:"high_rtt",severity:"critical",timestamp:i,value:o,threshold:c*this.rttSpikeCriticalMultiplier}):p>this.rttSpikeWarningMultiplier&&r.push({type:"high_rtt",severity:"warning",timestamp:i,value:o,threshold:c*this.rttSpikeWarningMultiplier})}const u=t.audioJitter,h=n.jitter;h>0&&u/h>this.jitterSpikeMultiplier&&r.push({type:"high_jitter",severity:"warning",timestamp:i,value:u,threshold:h*this.jitterSpikeMultiplier})}if(e){const o=Math.max(0,t.audioPacketsReceived-e.audioPacketsReceived),c=Math.max(0,t.audioPacketsLost-e.audioPacketsLost),u=Math.max(0,t.videoPacketsReceived-e.videoPacketsReceived),h=Math.max(0,t.videoPacketsLost-e.videoPacketsLost),p=o+u,v=Zg(c+h,p);v>this.packetLossCriticalPercent?r.push({type:"high_packet_loss",severity:"critical",timestamp:i,value:v,threshold:this.packetLossCriticalPercent}):v>this.packetLossWarningPercent&&r.push({type:"high_packet_loss",severity:"warning",timestamp:i,value:v,threshold:this.packetLossWarningPercent})}return r}};const oe=W(),ef=2e3,tf=1e4,rf=3e3,nf=5e3,sf=3,af=3,of=3e3,cf=1e4,lf=150,uf=300,df=5,hf=new Set(["high_rtt","high_jitter","high_packet_loss"]);var pf=class extends te{constructor(t,e,i={}){super(),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._hasPacketLoss$=this.createBehaviorSubject(!1),this._trigger$=this.createSubject(),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this._pipelineStop$=this.createSubject(),this._callbacks=t,this._inputs=e,this._config={debounceTimeMs:i.debounceTimeMs??ef,cooldownMs:i.cooldownMs??tf,iceGracePeriodMs:i.iceGracePeriodMs??rf,iceRestartTimeoutMs:i.iceRestartTimeoutMs??nf,maxAttempts:i.maxAttempts??sf,enableRelayFallback:i.enableRelayFallback??!0,keyframeMaxBurst:i.keyframeMaxBurst??af,keyframeBurstWindowMs:i.keyframeBurstWindowMs??of,keyframeCooldownMs:i.keyframeCooldownMs??cf,degradationBitrateThreshold:i.degradationBitrateThreshold??lf,degradationRecoveryThreshold:i.degradationRecoveryThreshold??uf,enableAutoDegradation:i.enableAutoDegradation??!0,packetLossRecoveryDelaySec:i.packetLossRecoveryDelaySec??df},this.initPipeline(),this.initDegradationRecoveryPipeline()}get recoveryState$(){return this._recoveryState$.asObservable().pipe(w(this._destroyed$))}get recoveryState(){return this._recoveryState$.value}get recoveryEvent$(){return this._recoveryEvent$.asObservable().pipe(w(this._destroyed$))}get bandwidthConstrained$(){return this._bandwidthConstrained$.asObservable().pipe(w(this._destroyed$))}get bandwidthConstrained(){return this._bandwidthConstrained$.value}pushTrigger(t){this._trigger$.next(t)}async requestIceRestart(){if(this._recoveryState$.value==="recovering"){oe.info("CallRecoveryManager: manual ICE restart skipped — recovery already in progress");return}oe.info("CallRecoveryManager: manual ICE restart requested"),this.transitionTo("recovering"),await this.executeIceRestart(!1),this.startCooldown()}requestKeyframe(){this.executeKeyframe("manual request")}reset(){oe.info("CallRecoveryManager: resetting counters"),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this.transitionTo("idle")}notifyModifyFailed(){(this._recoveryState$.value==="cooldown"||this._recoveryState$.value==="idle")&&(oe.info("CallRecoveryManager: verto.modify failed — re-entering recovery"),this._cooldownUntil=0,this.transitionTo("idle"),this.pushTrigger({source:"network",detail:"modify_failed_during_recovery"}))}reportBandwidth(t){if(!this._config.enableAutoDegradation)return;const e=this._bandwidthConstrained$.value;!e&&t<this._config.degradationBitrateThreshold?(this._bandwidthConstrained$.next(!0),this._callbacks.disableVideo(),this.emitEvent({action:"video_disabled",reason:`bandwidth ${t}kbps below threshold ${this._config.degradationBitrateThreshold}kbps`,timestamp:Date.now()}),oe.warn(`CallRecoveryManager: disabling video — bandwidth ${t}kbps < ${this._config.degradationBitrateThreshold}kbps`)):e&&t>=this._config.degradationRecoveryThreshold&&(this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`bandwidth ${t}kbps recovered above ${this._config.degradationRecoveryThreshold}kbps`,timestamp:Date.now()}),oe.info(`CallRecoveryManager: restoring video — bandwidth ${t}kbps >= ${this._config.degradationRecoveryThreshold}kbps`))}reportNetworkIssues(t){const e=t.some(i=>i.type==="high_packet_loss");e!==this._hasPacketLoss$.value&&this._hasPacketLoss$.next(e)}handleWebSocketReconnect(){const t=this._callbacks.getPeerConnectionState();t==="connected"||t==="completed"?(oe.info("CallRecoveryManager: signal-only reconnect — peer connection still alive"),this.emitEvent({action:"signal_reconnect",reason:"WebSocket reconnected, peer connection still connected",timestamp:Date.now()})):(oe.info("CallRecoveryManager: full reconnect — peer connection also down"),this.emitEvent({action:"full_reconnect",reason:"WebSocket reconnected, peer connection not connected — ICE restart needed",timestamp:Date.now()}),this.pushTrigger({source:"network",detail:"full_reconnect_after_ws"})),this.reset()}destroy(){this._pipelineStop$.next(),this._pipelineStop$.complete(),super.destroy()}initPipeline(){this.subscribeTo(this._trigger$.pipe(Se(()=>{this._recoveryState$.value==="idle"&&this.transitionTo("debouncing")}),Xa(this._config.debounceTimeMs),Za(this._inputs.signalingReady$),B(([,t])=>this.passGateChecks(t)),E(([t])=>t),Yn(t=>this.executeTieredRecovery(t)),w(Ii(this._destroyed$,this._pipelineStop$))),{next:()=>{},error:t=>{oe.error("CallRecoveryManager: pipeline error",t),this.transitionTo("idle")}})}initDegradationRecoveryPipeline(){if(!this._config.enableAutoDegradation)return;const t=this._config.packetLossRecoveryDelaySec*1e3;this.subscribeTo(Ha([this._bandwidthConstrained$,this._hasPacketLoss$]).pipe(Ze(([e,i])=>e&&!i?Di(t):ei),w(this._destroyed$)),()=>{this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`no packet loss for ${this._config.packetLossRecoveryDelaySec}s — restoring video`,timestamp:Date.now()}),oe.info(`CallRecoveryManager: restoring video — no packet loss for ${this._config.packetLossRecoveryDelaySec}s`)})}passGateChecks(t){return this._callbacks.isNegotiating()?(oe.debug("CallRecoveryManager: gate blocked — negotiation in progress"),this.transitionTo("idle"),!1):t?this._callbacks.isCallConnected()?this.isCooldownActive()?(oe.debug("CallRecoveryManager: gate blocked — cooldown active"),this.transitionTo("cooldown"),!1):!0:(oe.debug("CallRecoveryManager: gate blocked — call not connected"),this.transitionTo("idle"),!1):(oe.debug("CallRecoveryManager: gate blocked — signaling not ready"),this.transitionTo("idle"),!1)}isCooldownActive(){return Date.now()<this._cooldownUntil}executeTieredRecovery(t){return this.transitionTo("recovering"),oe.info(`CallRecoveryManager: starting tiered recovery — source=${t.source} detail=${t.detail}`),Me(this.runTiers(t)).pipe(Se(()=>this.startCooldown()),ii(e=>(oe.error("CallRecoveryManager: tiered recovery failed",e),this.startCooldown(),ei)))}async runTiers(t){if(this.executeKeyframe(t.detail),t.issueType&&hf.has(t.issueType)){oe.debug(`CallRecoveryManager: degradation-only issue (${t.issueType}) — Tier 1 only, skipping ICE restart`);return}this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!1)||this._config.enableRelayFallback&&this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!0)||this._attemptCount>=this._config.maxAttempts&&(this.emitEvent({action:"max_attempts_reached",reason:`all ${this._config.maxAttempts} recovery attempts exhausted`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.warn("CallRecoveryManager: max recovery attempts reached"))}executeKeyframe(t){const e=Date.now();if(e<this._keyframeCooldownUntil){oe.debug("CallRecoveryManager: keyframe request skipped — cooldown active");return}if(e-this._keyframeBurstStart>this._config.keyframeBurstWindowMs&&(this._keyframeBurstCount=0,this._keyframeBurstStart=e),this._keyframeBurstCount>=this._config.keyframeMaxBurst){this._keyframeCooldownUntil=e+this._config.keyframeCooldownMs,oe.debug(`CallRecoveryManager: keyframe burst limit reached (${this._config.keyframeMaxBurst}), cooldown until ${this._keyframeCooldownUntil}`);return}this._keyframeBurstCount+=1,this._callbacks.requestKeyframe(),this.emitEvent({action:"keyframe_requested",reason:t,timestamp:e}),oe.debug(`CallRecoveryManager: keyframe requested (burst ${this._keyframeBurstCount}/${this._config.keyframeMaxBurst})`)}async executeIceRestart(t){this._attemptCount+=1;const e=t?"Tier 3 (relay-only)":"Tier 2 (standard)";oe.info(`CallRecoveryManager: ${e} ICE restart — attempt ${this._attemptCount}/${this._config.maxAttempts}`),this.emitEvent({action:"reinvite_started",reason:`${e} ICE restart`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()});try{return await this.withTimeout(this._callbacks.requestIceRestart(t),this._config.iceRestartTimeoutMs)?(this.emitEvent({action:"reinvite_succeeded",reason:`${e} ICE restart succeeded`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.info(`CallRecoveryManager: ${e} ICE restart succeeded`),this._attemptCount=0,!0):(this.emitEvent({action:"reinvite_failed",reason:`${e} ICE restart returned false`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.warn(`CallRecoveryManager: ${e} ICE restart failed`),!1)}catch{return this.emitEvent({action:"reinvite_timeout",reason:`${e} ICE restart timed out after ${this._config.iceRestartTimeoutMs}ms`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.warn(`CallRecoveryManager: ${e} ICE restart timed out`),!1}}async withTimeout(t,e){return new Promise((i,r)=>{const n=setTimeout(()=>{r(new Error(`Timeout after ${e}ms`))},e);t.then(s=>{clearTimeout(n),i(s)},s=>{clearTimeout(n),r(s instanceof Error?s:new Error(String(s)))})})}transitionTo(t){const e=this._recoveryState$.value;e!==t&&(oe.debug(`CallRecoveryManager: state ${e} -> ${t}`),this._recoveryState$.next(t))}startCooldown(){this._cooldownUntil=Date.now()+this._config.cooldownMs,this.transitionTo("cooldown"),this._cooldownSubscription&&this._cooldownSubscription.unsubscribe(),this._cooldownSubscription=Di(this._config.cooldownMs).pipe(Re(1),w(this._destroyed$),B(()=>this._recoveryState$.value==="cooldown")).subscribe(()=>this.transitionTo("idle"))}emitEvent(t){this._recoveryEvent$.next(t)}},gf=class{constructor(t,e,i){this.executeMethod=t,this.vertoManager=e,this.deviceController=i}createSelfParticipant(t){return new Wo(t,this.executeMethod,this.vertoManager,this.deviceController)}createParticipant(t){return new jo(t,this.executeMethod,this.deviceController)}};const ff=93.2,vf=.024,bf=2.5,mf=0,yf=100,wf=1,Sf=5,Cf=4,Af=3.5,Tf=3,Ef=2;function kf(t,e,i){const r=ff-(t/2+e)*vf-i*bf,n=Math.min(yf,Math.max(mf,r)),s=1+.035*n+n*(n-60)*(100-n)*7e-6;return Math.min(Sf,Math.max(wf,s))}function xf(t){return t>=Cf?"excellent":t>=Af?"good":t>=Tf?"fair":t>=Ef?"poor":"critical"}const ve=W(),Df="call.member.position.set",If=5/3,Mf=t=>{if(!t)return{};try{const e=new URL(`destination:${t}`),i={};return e.searchParams.forEach((r,n)=>{i[n]=r}),i}catch(e){return ve.warn(`Failed to parse destination URI: ${t}`,e),{}}};var Rf=class extends te{constructor(t,e,i,r){super(),this.clientSession=t,this.options=e,this.address=r,this._errors$=this.createReplaySubject(1),this._lastMergedStatus="new",this._answered$=this.createReplaySubject(),this._holdState=!1,this._userVariables$=this.createBehaviorSubject({...g.instance.userVariables}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this._isNetworkHealthy$=this.createBehaviorSubject(!0),this._qualityScore$=this.createBehaviorSubject(5),this._qualityLevel$=this.createBehaviorSubject("excellent"),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._mediaParamsUpdated$=this.createSubject(),this._customSubscriptions=new Map,this._pushToTalkEnabled=!1,this._remoteAudioMeter=null,this.id=e.callId??Jr(),this.to=e.to,this._userVariables$.next({...this._userVariables$.value,...Mf(e.to),...e.userVariables}),this.subscribeTo(this.webrtcMessages$,o=>{const c=it(o,"params.userVariables");c&&this._userVariables$.next({...this._userVariables$.value,...c})});const n=i.initializeManagers(this);this.vertoManager=n.vertoManager,this.callEventsManager=n.callEventsManager,e.initOffer?(this._status$=this.createBehaviorSubject("ringing"),this._lastMergedStatus="ringing"):this._status$=this.createBehaviorSubject("new");const{deviceController:s,networkChange$:a}=i;this._networkChange$=a,this.participantFactory=new gf(this.executeMethod.bind(this),this.vertoManager,s),this.subscribeTo(Ii(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(L(),w(this._destroyed$)),o=>{var c;this._lastMergedStatus=o,o==="connected"&&!this._statsMonitor?this.initResilienceSubsystems():o==="disconnected"?((c=this._statsMonitor)==null||c.destroy(),this._statsMonitor=void 0):(o==="destroyed"||o==="failed")&&this.stopResilienceSubsystems()})}get errors$(){return this.deferEmission(this._errors$.asObservable())}emitError(t){this._status$.value==="destroyed"||this._status$.value==="failed"||(this._errors$.next(t),t.fatal&&(this._status$.next("failed"),this.destroy()))}notifyModifyFailed(){var t;(t=this._recoveryManager)==null||t.notifyModifyFailed()}get direction(){return this.options.initOffer?"inbound":"outbound"}get address$(){return this.deferEmission(Me([this.address])).pipe(w(this._destroyed$))}get fromName(){return this.options.fromName}get from(){return this.options.from}get toName(){return this.options.toName}async toggleIncomingVideo(){throw new kt}async toggleIncomingAudio(){throw new kt}addCallId(t){this.callEventsManager.addCallId(t)}get capabilities(){return this.callEventsManager.capabilities}get participants(){return this.callEventsManager.participants}get self(){return this.callEventsManager.self}async toggleLock(){const t=this.locked?"call.unlock":"call.lock";await this.executeMethod(this.selfId??"",t,{})}async toggleHold(){this._holdState?await this.vertoManager.unhold():await this.vertoManager.hold(),this._holdState=!this._holdState}async startRecording(){throw new kt}async startStreaming(){throw new kt}async setMeta(t){throw new kt}async updateMeta(t){throw new kt}get layoutLayers$(){return this.deferEmission(this.callEventsManager.layoutLayers$).pipe(w(this._destroyed$))}get layoutLayers(){return this.callEventsManager.layoutLayers}async executeMethod(t,e,i){var s,a,o;const r=this.buildMethodParams(t,i,e),n=Li({method:e,params:r});try{const c=await this.clientSession.execute(n);if(cg(c))throw new Lt(parseInt(((s=c.result)==null?void 0:s.code)??"0"),`Error response from method ${e}: ${(a=c.result)==null?void 0:a.code} ${(o=c.result)==null?void 0:o.message}`,void 0,void 0,n.id);return c}catch(c){throw ve.error(`[Call] Error executing method ${e} with params`,r,c),c}}buildMethodParams(t,e,i){const r={node_id:this.nodeId??"",call_id:this.id,member_id:this.vertoManager.selfId??""};return i===Df?{...e,self:r}:typeof t=="object"?{...e,self:r,targets:[t]}:{...e,self:r,target:{node_id:this.nodeId??"",call_id:this.id,member_id:t}}}get status$(){return this.publicCachedObservable("status$",()=>Ii(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(L(),Se(t=>{this._lastMergedStatus=t})))}get participants$(){return this.deferEmission(this.callEventsManager.participants$).pipe(w(this._destroyed$))}get self$(){return this.deferEmission(this.callEventsManager.self$).pipe(w(this._destroyed$))}get recording$(){return this.deferEmission(this.callEventsManager.recording$).pipe(w(this._destroyed$))}get streaming$(){return this.deferEmission(this.callEventsManager.streaming$).pipe(w(this._destroyed$))}get raiseHandPriority$(){return this.deferEmission(this.callEventsManager.raiseHandPriority$).pipe(w(this._destroyed$))}get locked$(){return this.deferEmission(this.callEventsManager.locked$).pipe(w(this._destroyed$))}get meta$(){return this.deferEmission(this.callEventsManager.meta$).pipe(w(this._destroyed$))}get capabilities$(){return this.deferEmission(this.callEventsManager.capabilities$).pipe(w(this._destroyed$))}get layout$(){return this.deferEmission(this.callEventsManager.layout$).pipe(w(this._destroyed$))}get status(){return this._lastMergedStatus}get recording(){return this.callEventsManager.recording}get streaming(){return this.callEventsManager.streaming}get raiseHandPriority(){return this.callEventsManager.raiseHandPriority}get locked(){return this.callEventsManager.locked}get meta(){return this.callEventsManager.meta}get layout(){return this.callEventsManager.layout}get layouts$(){return this.deferEmission(this.callEventsManager.layouts$).pipe(w(this._destroyed$))}get layouts(){return this.callEventsManager.layouts}get localStream$(){return this.deferEmission(this.vertoManager.localStream$).pipe(w(this._destroyed$))}get localStream(){return this.vertoManager.localStream}get remoteStream$(){return this.deferEmission(this.vertoManager.remoteStream$).pipe(w(this._destroyed$))}get remoteStream(){return this.vertoManager.remoteStream}get userVariables$(){return this.deferEmission(this._userVariables$.asObservable())}get userVariables(){return{...this._userVariables$.value}}set userVariables(t){this._userVariables$.next({...this._userVariables$.value,...t})}get networkIssues$(){return this.deferEmission(this._networkIssues$.asObservable())}get networkIssues(){return this._networkIssues$.value}get isNetworkHealthy$(){return this.deferEmission(this._isNetworkHealthy$.asObservable())}get isNetworkHealthy(){return this._isNetworkHealthy$.value}get networkMetrics$(){return this.deferEmission(this._networkMetrics$.asObservable())}get networkMetrics(){return this._networkMetrics$.value}get qualityScore$(){return this.deferEmission(this._qualityScore$.asObservable())}get qualityLevel$(){return this.deferEmission(this._qualityLevel$.asObservable())}get recoveryState$(){return this.deferEmission(this._recoveryState$.asObservable())}get recoveryEvent$(){return this.deferEmission(this._recoveryEvent$.asObservable())}get bandwidthConstrained$(){return this.deferEmission(this._bandwidthConstrained$.asObservable())}get mediaParamsUpdated$(){return this.deferEmission(this._mediaParamsUpdated$.asObservable())}emitMediaParamsUpdated(t){this._mediaParamsUpdated$.next(t)}requestKeyframe(){var t,e;(e=(t=this.vertoManager).requestKeyframe)==null||e.call(t)}async requestIceRestart(){var t,e;await((e=(t=this.vertoManager).requestIceRestart)==null?void 0:e.call(t))}initResilienceSubsystems(){const t=this.rtcPeerConnection;if(ve.debug(`[Call] initResilienceSubsystems: pc=${t?"exists":"undefined"}, connectionState=${t==null?void 0:t.connectionState}`),!t){ve.warn("[Call] No peer connection available, skipping resilience init");return}try{const e=g.instance;this._statsMonitor=new $g(t,{pollingIntervalMs:e.statsPollingInterval,baselineSamples:e.statsBaselineSamples,noAudioPacketThresholdMs:e.statsNoPacketThreshold,rttSpikeWarningMultiplier:e.statsRttSpikeMultiplier,rttSpikeCriticalMultiplier:e.statsRttSpikeMultiplier*If,packetLossWarningPercent:e.statsPacketLossThreshold*100,packetLossCriticalPercent:e.statsPacketLossThreshold*200,jitterSpikeMultiplier:e.statsJitterSpikeMultiplier,historyWindowSeconds:e.statsHistorySize}),this._recoveryManager=new pf({requestKeyframe:()=>{var i,r;try{this.vertoManager.requestKeyframeAll?this.vertoManager.requestKeyframeAll():(r=(i=this.vertoManager).requestKeyframe)==null||r.call(i)}catch{}},requestIceRestart:async i=>{var r,n;try{this.vertoManager.requestIceRestartAll?await this.vertoManager.requestIceRestartAll(i):await((n=(r=this.vertoManager).requestIceRestart)==null?void 0:n.call(r,i))}catch{return!1}return this.waitForPeerConnectionConnected()},disableVideo:()=>{try{this.vertoManager.muteMainVideoInputDevice(),ve.debug("[Call] Recovery manager disabled video")}catch{ve.debug("[Call] Recovery manager failed to disable video")}},enableVideo:()=>{this.vertoManager.unmuteMainVideoInputDevice().catch(()=>{ve.debug("[Call] Recovery manager failed to enable video")})},isNegotiating:()=>this.vertoManager.mainPeerConnection.isNegotiating,isCallConnected:()=>this._lastMergedStatus==="connected",getPeerConnectionState:()=>t.connectionState},{signalingReady$:this.clientSession.authenticated$},{debounceTimeMs:e.recoveryDebounceTime,cooldownMs:e.recoveryCooldown,iceGracePeriodMs:e.iceDisconnectedGracePeriod,iceRestartTimeoutMs:e.iceRestartTimeout,maxAttempts:e.maxRecoveryAttempts,enableRelayFallback:e.enableRelayFallback,keyframeMaxBurst:e.keyframeMaxBurst,keyframeBurstWindowMs:e.keyframeBurstWindow,keyframeCooldownMs:e.keyframeCooldown}),this.subscribeTo(this._statsMonitor.networkIssues$,i=>{var r;this._networkIssues$.next(i),(r=this._recoveryManager)==null||r.reportNetworkIssues(i)}),this.subscribeTo(this._statsMonitor.isNetworkHealthy$,i=>{this._isNetworkHealthy$.next(i)}),this.subscribeTo(this._statsMonitor.networkMetrics$,i=>{var r;if(this._networkMetrics$.next(i),i.length>0){const n=i[i.length-1],s=n.audio.packetsReceived+n.video.packetsReceived,a=n.audio.packetsLost+n.video.packetsLost,o=s+a>0?a/(s+a)*100:0,c=kf(n.roundTripTime,n.audio.jitter,o);this._qualityScore$.next(c),this._qualityLevel$.next(xf(c)),n.availableOutgoingBitrate!==void 0&&((r=this._recoveryManager)==null||r.reportBandwidth(n.availableOutgoingBitrate/1e3))}}),this.subscribeTo(this._statsMonitor.criticalIssue$,i=>{var r;(r=this._recoveryManager)==null||r.pushTrigger({source:"stats",detail:`${i.type}: ${i.severity}`,issueType:i.type})}),this.subscribeTo(this._recoveryManager.recoveryState$,i=>{this._recoveryState$.next(i)}),this.subscribeTo(this._recoveryManager.recoveryEvent$,i=>{this._recoveryEvent$.next(i),i.action==="max_attempts_reached"&&(ve.warn("[Call] All recovery attempts exhausted, terminating call"),this.emitError({kind:"network",fatal:!0,error:new Error("Call recovery failed: all attempts exhausted"),callId:this.id}))}),this.subscribeTo(this._recoveryManager.bandwidthConstrained$,i=>{this._bandwidthConstrained$.next(i)}),this._networkChange$&&this.subscribeTo(this._networkChange$,i=>{var r,n;i.type==="offline"?(r=this._recoveryManager)==null||r.pushTrigger({source:"network",detail:"browser went offline"}):i.type==="online"&&((n=this._recoveryManager)==null||n.handleWebSocketReconnect())}),this.subscribeTo(this.clientSession.authenticated$.pipe(Gr(1),B(Boolean)),()=>{var i;ve.debug("[Call] WebSocket reconnected — notifying recovery manager"),(i=this._recoveryManager)==null||i.handleWebSocketReconnect()}),this._statsMonitor.start(),ve.debug("[Call] Resilience subsystems initialized for call",this.id)}catch(e){ve.warn("[Call] Failed to initialize resilience subsystems:",e)}}async waitForPeerConnectionConnected(){const t=this.rtcPeerConnection;if(!t)return!1;const e=Date.now()+qh;for(;;){const i=t.connectionState;if(i==="connected")return!0;if(i==="failed"||i==="closed"||Date.now()>=e)return!1;await new Promise(r=>setTimeout(r,Xh))}}stopResilienceSubsystems(){var t,e;try{(t=this._statsMonitor)==null||t.destroy(),(e=this._recoveryManager)==null||e.destroy()}catch{}this._statsMonitor=void 0,this._recoveryManager=void 0}createParticipant(t,e){return t===(e??this.vertoManager.selfId)?this.participantFactory.createSelfParticipant(t):this.participantFactory.createParticipant(t)}get mediaDirections$(){return this.deferEmission(this.vertoManager.mediaDirections$).pipe(w(this._destroyed$))}get mediaDirections(){return this.vertoManager.mediaDirections}get participantsId$(){return this.cachedObservable("participantsId$",()=>this.participants$.pipe(E(t=>t.map(e=>e.id))))}async execute(t,e){return this.clientSession.execute(t,e)}get selfId$(){return this.vertoManager.selfId$}get selfId(){return this.vertoManager.selfId}get nodeId$(){return this.vertoManager.nodeId$}get nodeId(){return this.vertoManager.nodeId}isCallSessionEvent(t){try{ve.debug("[Call] Checking if event is for this call session:",t);const e=it(t,"params.params.callID")??it(t,"params.call_id"),i=it(t,"params.room_session_id");return ve.debug(`[Call] Extracted session identifiers callID: ${e} and roomSessionID: ${i} from event:`),e===this.id||!!e&&this.callEventsManager.isCallIdValid(e)||!!i&&this.callEventsManager.isRoomSessionIdValid(i)}catch(e){return ve.error("[Call] Error checking if event is for this call session:",e),!1}}get callSessionEvents$(){return this.cachedObservable("callSessionEvents$",()=>this.clientSession.signalingEvent$.pipe(B(t=>this.isCallSessionEvent(t)),Se(t=>{ve.debug("[Call] Received call session event:",t)}),w(this.destroyed$),Et()))}get callUpdated$(){return this.publicCachedObservable("callUpdated$",()=>this.callSessionEvents$.pipe(fe(Xo,"params"),w(this.destroyed$)))}get memberJoined$(){return this.publicCachedObservable("memberJoined$",()=>this.callSessionEvents$.pipe(fe(Zo,"params"),w(this.destroyed$)))}get memberLeft$(){return this.publicCachedObservable("memberLeft$",()=>this.callSessionEvents$.pipe(fe(Qo,"params"),w(this.destroyed$)))}get memberUpdated$(){return this.publicCachedObservable("memberUpdated$",()=>this.callSessionEvents$.pipe(fe(Ko,"params"),w(this.destroyed$)))}get memberTalking$(){return this.publicCachedObservable("memberTalking$",()=>this.callSessionEvents$.pipe(fe(Jo,"params"),w(this.destroyed$)))}get callStates$(){return this.publicCachedObservable("callStates$",()=>this.callSessionEvents$.pipe(fe(Yo,"params"),w(this.destroyed$)))}get layoutUpdates$(){return this.publicCachedObservable("layoutUpdates$",()=>this.callSessionEvents$.pipe(fe(cs,"params"),w(this.destroyed$)))}get rtcPeerConnection(){return this.vertoManager.mainPeerConnection.peerConnection}get signalingEvent$(){return this.publicCachedObservable("signalingEvent$",()=>this.callEvent$.pipe(E(t=>JSON.parse(JSON.stringify(t)))))}subscribe(t){const e=this._customSubscriptions.get(t);if(e)return e;const i=this.callSessionEvents$.pipe(B(r=>r.event_type===t),E(r=>JSON.parse(JSON.stringify(r))),w(this._destroyed$));return this._sendVertoSubscribe(t).then(()=>{this._customSubscriptions.set(t,i)},r=>{this._customSubscriptions.delete(t),ve.warn(`[Call] verto.subscribe for '${t}' failed, not caching:`,r)}),this._customSubscriptions.set(t,i),i}get webrtcMessages$(){return this.cachedObservable("webrtcMessages$",()=>this.callSessionEvents$.pipe(fe(an,"params"),Se(t=>ve.debug("[Call] Event is a WebRTC message event:",t)),w(this.destroyed$),Et()))}get callEvent$(){return this.cachedObservable("callEvent$",()=>this.callSessionEvents$.pipe(fe(lg,"params"),Se(t=>ve.debug("[Call] Event is a call event:",t)),w(this.destroyed$),Et()))}get layoutEvent$(){return this.cachedObservable("layoutEvent$",()=>this.callEvent$.pipe(fe(cs,"params")))}async hangup(){this._status$.next("disconnecting");try{await this.vertoManager.bye()}finally{this.destroy()}}async sendDigits(t){return this.vertoManager.sendDigits(t)}answer(t){this._answerMediaOptions=t,this._answered$.next(!0)}get answerMediaOptions(){return this._answerMediaOptions}reject(){this._answered$.next(!1)}get answered$(){return this.deferEmission(this._answered$.asObservable())}async setLayout(t,e){if(!this.layouts.includes(t))throw new ro(`Layout ${t} is not available in the current call layouts: ${this.layouts.join(", ")}`);const i=await Ge(this.selfId$.pipe(B(n=>n!==null)));await this.executeMethod(i,"call.layout.set",{layout:t});const r=Object.entries(e??{});if(r.length!==0)for(const[n,s]of r){const a=this.participants.find(o=>o.id===n);if(!a){ve.warn(`[Call] setLayout: member ${n} not found in participants; skipping position ${s}`);continue}await a.setPosition(s)}}async transfer(t){return this.vertoManager.transfer(t)}setLocalMicrophoneGain(t){const e=this.vertoManager.ensureLocalAudioPipeline();if(!e){ve.warn("[Call] setLocalMicrophoneGain: audio pipeline unavailable");return}const i=Math.max(0,Math.min(200,t));e.setGain(i/100)}get localMicrophoneGain$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localMicrophoneGain$",()=>t.gain$.pipe(E(e=>e*100),w(this._destroyed$))):Tt(100).pipe(w(this._destroyed$))}get localAudioLevel$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localAudioLevel$",()=>t.level$.pipe(w(this._destroyed$),Et())):Tt(0).pipe(w(this._destroyed$))}get localSpeaking$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localSpeaking$",()=>t.speaking$.pipe(w(this._destroyed$),Et())):Tt(!1).pipe(w(this._destroyed$))}enablePushToTalk(){const t=this.vertoManager.ensureLocalAudioPipeline();if(!t){ve.warn("[Call] enablePushToTalk: audio pipeline unavailable");return}t.setPTTActive(!1),this._pushToTalkEnabled=!0}disablePushToTalk(){var t;(t=this.vertoManager.localAudioPipeline)==null||t.setPTTActive(!0),this._pushToTalkEnabled=!1}setPushToTalkActive(t){var e;this._pushToTalkEnabled&&((e=this.vertoManager.localAudioPipeline)==null||e.setPTTActive(t))}async setEchoCancellation(t){await this.vertoManager.updateMediaConstraints({audio:{echoCancellation:t}})}async setNoiseSuppression(t){await this.vertoManager.updateMediaConstraints({audio:{noiseSuppression:t}})}async setAutoGainControl(t){await this.vertoManager.updateMediaConstraints({audio:{autoGainControl:t}})}get remoteAudioLevel$(){return this.publicCachedObservable("remoteAudioLevel$",()=>{this._remoteAudioMeter??(this._remoteAudioMeter=new Bg);const t=this._remoteAudioMeter;return this.subscribeTo(this.vertoManager.remoteStream$,e=>{t.setStream(e)}),t.level$.pipe(w(this._destroyed$),Et())})}destroy(){var t;this._status$.value!=="destroyed"&&(this._status$.next("destroyed"),this.stopResilienceSubsystems(),(t=this._remoteAudioMeter)==null||t.destroy(),this._remoteAudioMeter=null,this.vertoManager.destroy(),this.callEventsManager.destroy(),super.destroy())}async _sendVertoSubscribe(t){const e=Jp({sessid:this.id,eventChannel:[t]}),i={callID:this.id,node_id:this.vertoManager.nodeId??"",message:e};await this.clientSession.execute(Bo(i))}};function Pf(t){return t instanceof Yr?"timeout":t instanceof Lt?"signaling":t instanceof Ri?"media":t instanceof $a||t instanceof eo?"network":"internal"}const Of=new Set([wo,Co,So]);function _f(t){return!(t instanceof so||t instanceof Ri||t instanceof Yr||t instanceof Lt&&Of.has(t.code))}var Lf=class{constructor(t,e,i,r,n){this.sessionManager=t,this.deviceController=e,this.attachManager=i,this.webRTCApiProvider=r,this.networkChange$=n}createCall(t,e){return new Rf(this.sessionManager,e,{initializeManagers:i=>({vertoManager:new Ng(i,this.attachManager,this.deviceController,this.webRTCApiProvider,{nodeId:e.nodeId,onError:r=>{const n={kind:Pf(r),fatal:_f(r),error:r,callId:i.id};i.emitError(n)},onModifyFailed:()=>{i.notifyModifyFailed()}}),callEventsManager:new mg(i)}),deviceController:this.deviceController,networkChange$:this.networkChange$},t)}};const ds=W();var uc=class{constructor(t,e,i){this.endpoint=t,this.http=i,this.filter=r=>!0,this.mapper=r=>r,this.nextUrl=`${this.endpoint}?${e}`}async next(){if(!this.nextUrl)return this.hasMore=!1,[];const t=await this.http.request({...es,url:this.nextUrl});if(t.ok&&t.body){const e=JSON.parse(t.body);return this.nextUrl=e.links.next,this.hasMore=!!this.nextUrl,e.data.filter(this.filter).map(this.mapper)}return ds.error("Failed to fetch entity"),[]}async id(t){const e=await this.http.request({...es,url:`${this.endpoint}/${String(t)}`});if(e.ok&&e.body)return JSON.parse(e.body)}},dc=class extends te{constructor(t,e,i){super(),this.fetchController=t,this.update$=e,this.onError=i,this.collectionData=new Map,this.observablesRegistry=new Map,this.upsertData=r=>{var o;if(!r.id)return;const n=this.collectionData.get(r.id)??{},s={},a=new Set([...Object.keys(n),...Object.keys(r)]);for(const c of a){const u=n[c],h=r[c];h!==void 0&&u!==void 0&&typeof u=="object"&&u!==null&&!Array.isArray(u)&&typeof h=="object"&&h!==null&&!Array.isArray(h)?s[c]={...u,...h}:h!==void 0?s[c]=h:s[c]=u}this.collectionData.set(r.id,s),(o=this.observablesRegistry.get(r.id))==null||o.next(s),this._values$.next(Array.from(this.collectionData.values()))},this._loading$=this.createBehaviorSubject(!1),this._values$=this.createReplaySubject(1),this._hasMore$=this.createBehaviorSubject(!0),this.subscribeTo(this.update$,this.upsertData),this.hasMore$=ti(()=>Me(this.init())).pipe(Ze(()=>this._hasMore$),L(),tt(1),w(this.destroyed$))}get loading$(){return this._loading$.asObservable()}get loading(){return this._loading$.value}get values$(){return this._values$.asObservable()}get hasMore(){return this.fetchController.hasMore??!0}get updated$(){return this.cachedObservable("updated$",()=>this._loading$.pipe(L(),Gr(1),B(t=>!t),E(()=>{}),w(this.destroyed$)))}get values(){return Array.from(this.collectionData.values())}async init(){if(this.fetchController.hasMore===!1){this._hasMore$.next(!1);return}await this.fetchMore()}async fetchMore(){var t;try{this._loading$.next(!0),(await this.fetchController.next()).forEach(this.upsertData),this._hasMore$.next(this.fetchController.hasMore??!1),this._loading$.next(!1)}catch(e){ds.error("Failed to fetch initial collection data",e),this._hasMore$.next(this.fetchController.hasMore??!1),this._loading$.next(!1),(t=this.onError)==null||t.call(this,new ao("fetchMore",e))}}async tryFetch(t,e){var i,r,n;try{this._loading$.next(!0);const s=await((r=(i=this.fetchController)[t])==null?void 0:r.call(i,e));return this._loading$.next(!1),s&&this.upsertData(s),s}catch(s){ds.error(`Failed to fetch data for (${String(t)}:${String(e)}) :`,s),this._loading$.next(!1),(n=this.onError)==null||n.call(this,new ao(`tryFetch(${String(t)})`,s))}}get$(t){var e,i;if(!this.observablesRegistry.has(t)){this.observablesRegistry.set(t,new Vn(1));const r=this.collectionData.get(t);r?(e=this.observablesRegistry.get(t))==null||e.next(r):this.tryFetch("id",t)}return(i=this.observablesRegistry.get(t))==null?void 0:i.asObservable()}async find$(t,e){const i=Array.from(this.collectionData.values()).find(r=>r[t]===e)??await this.tryFetch(t,e);return i?this.get$(i.id):void 0}loadMore(){this.fetchController.hasMore!==!1&&this.fetchMore()}destroy(){this.observablesRegistry.forEach(t=>t.complete()),this.observablesRegistry.clear(),super.destroy()}},hc=class{constructor(t,e=r=>!!r,i=r=>r){this.originalCollection=t,this.filter=e,this.mapper=i}get loading$(){return this.originalCollection.loading$}get loading(){return this.originalCollection.loading}get hasMore$(){return this.originalCollection.hasMore$}get hasMore(){return this.originalCollection.hasMore}get values(){return this.originalCollection.values.filter(this.filter).map(this.mapper)}get values$(){return this._values$??(this._values$=this.originalCollection.values$.pipe(E(t=>t.filter(this.filter).map(this.mapper))))}get$(t){const e=this.originalCollection.get$(t);return e&&e.pipe(Vr(B(this.filter),E(this.mapper)))}async find$(t,e){const i=await this.originalCollection.find$(t,e);return i&&i.pipe(Vr(B(this.filter),E(this.mapper)))}loadMore(){this.originalCollection.loadMore()}destroy(){this.originalCollection.destroy()}},pc=class extends te{constructor(t,e,i){super(),this.addressId=t,this.conversationManager=e,this.addressProvider=i,this.initConversationMessages=async()=>(this._conversationMessages=this._conversationMessages??await this.conversationManager.getConversationMessageCollection(this.id),this._conversationMessages.hasMore&&this._conversationMessages.loadMore(),this._conversationMessages),this.textMessages$=ti(this.initConversationMessages).pipe(E(()=>this.textMessage),tt(1),w(this.destroyed$)),this.history$=ti(this.initConversationMessages).pipe(E(()=>this.history),tt(1),w(this.destroyed$)),this._state$=this.createBehaviorSubject(null)}upnext(t){const e={...this._state$.value,...t};this._state$.next(e)}get state(){return this._state$.value}get id(){return this.addressId}get name(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.name}get createdAt(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.created_at}get defaultChannel(){return this.type==="room"?this.channels.video:this.channels.audio}get displayName$(){return this.cachedObservable("displayName$",()=>this._state$.pipe(ue(),E(t=>t.display_name),w(this.destroyed$)))}get displayName(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.display_name}get previewUrl$(){return this.cachedObservable("previewUrl$",()=>this._state$.pipe(ue(),E(t=>t.preview_url),w(this.destroyed$)))}get previewUrl(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.preview_url}get coverUrl$(){return this.cachedObservable("coverUrl$",()=>this._state$.pipe(ue(),tt(1),E(t=>t.cover_url),w(this.destroyed$)))}get coverUrl(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.cover_url}get resourceId$(){return this.cachedObservable("resourceId$",()=>this._state$.pipe(ue(),tt(1),E(t=>t.resource_id),w(this.destroyed$)))}get resourceId(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.resource_id}get type$(){return this.cachedObservable("type$",()=>this._state$.pipe(ue(),tt(1),E(t=>t.type),w(this.destroyed$)))}get type(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.type}get channels$(){return this.cachedObservable("channels$",()=>this._state$.pipe(ue(),tt(1),E(t=>t.channels),w(this.destroyed$)))}get channels(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.channels}get locked(){if(!this._state$.value)throw new Q("state not initialized");return this._state$.value.locked}get locked$(){return this.cachedObservable("locked$",()=>this._state$.pipe(ue(),tt(1),E(t=>t.locked),w(this.destroyed$)))}async sendText(t){return this.conversationManager.sendText(t,this.id)}get textMessage(){if(this._conversationMessages)return this._textMessages$=this._textMessages$??new hc(this._conversationMessages,t=>t.subtype==="chat",t=>({id:t.id,text:t.text,created:t.ts,fromAddress$:this.addressProvider.get$(t.from_fabric_address_id)})),this._textMessages$}get history(){if(this._conversationMessages)return this._history$=this._history$??new hc(this._conversationMessages,t=>t.subtype==="log",t=>({id:t.id,kind:t.kind,status:t.details.status,started:t.details.start_time,ended:t.details.end_time,fromAddress$:this.addressProvider.get$(t.from_fabric_address_id)})),this._history$}get activity$(){throw new kt}get activity(){throw new kt}};const ci=W(),Ff=t=>{if(ci.debug("isRPCConnectResult check:",t),!t||typeof t!="object")return!1;const e=t,i=typeof e.identity=="string"&&typeof e.protocol=="string"&&typeof e.authorization=="object"&&typeof e.authorization.jti=="string"&&typeof e.authorization.project_id=="string"&&typeof e.authorization.fabric_subscriber=="object";return ci.debug("isRPCConnectResult check result:",i),i};var Uf=(fi=class{constructor(e,i,r){this.id=Jr(),ci.debug(`[PendingRPC(${this.id}) request:${e.id}: method:${e.method}] Creating PendingRPC`),this.request=e;const n=(r==null?void 0:r.timeoutMs)??fi.defaultTimeoutMs,s=r==null?void 0:r.signal;this.promise=new Promise((a,o)=>{if(s!=null&&s.aborted){o(new DOMException("The operation was aborted","AbortError"));return}let c=!1;const u=lr(i.pipe(B(h=>h.id===e.id),Re(1)),new me(h=>{const p=setTimeout(()=>{h.error(new Yr(e.id,n))},n);return()=>clearTimeout(p)}),s?new me(h=>{const p=()=>{h.error(new DOMException("The operation was aborted","AbortError"))};return s.addEventListener("abort",p),()=>s.removeEventListener("abort",p)}):fd).subscribe({next:h=>{if(c=!0,h.error){const p=new Lt(h.error.code,h.error.message,h.error.data,void 0,e.id);ci.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with RPC error:`,p),o(p)}else ci.debug(`[PendingRPC(${this.id}) request:${e.id}] Resolving promise with response:`,h),a(h);u.unsubscribe()},error:h=>{ci.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with error:`,h),c=!0,o(h),u.unsubscribe()},complete:()=>{ci.debug(`[PendingRPC(${this.id}) request:${e.id}] Observable completed`),c||o(new Yr(e.id,n)),u.unsubscribe()}})})}async then(e,i){return this.promise.then(e,i)}async catch(e){return this.promise.catch(e)}async finally(e){return this.promise.finally(e)}},fi.defaultTimeoutMs=5e3,fi);const X=W(),Nf=t=>{var n,s;const e=(n=t.to)==null?void 0:n.split("?")[0],i=(s=t.from)!=null&&s.startsWith("subscriber://")?t.from.replace("subscriber://",""):t.from,r=e??i;if(!r)throw new Mi("Error building Address name");return r};var Bf=class extends te{constructor(t,e,i,r,n,s,a,o,c){super(),this.getCredential=t,this.transport=e,this.storage=i,this.authorizationStateKey=r,this.attachManager=s,this.dpopManager=o,this.callCreateTimeout=6e3,this.agent="signalwire-js/4.0.0",this.eventAcks=!0,this.authorizationState$=this.createReplaySubject(1),this.connectVersion={major:4,minor:0,revision:0},this._authorization$=this.createBehaviorSubject(void 0),this._errors$=this.createReplaySubject(1),this._authState$=this.createBehaviorSubject({kind:"unauthenticated"}),this._wasClientBound=!1,this._userInfo$=this.createBehaviorSubject(null),this._calls$=this.createBehaviorSubject({}),this._iceServers$=this.createBehaviorSubject([]),s.setSession(this),this.callFactory=new Lf(this,n,s,a,c),this.initialized$=ti(()=>Me(this.init())).pipe(tt(1),w(this.destroyed$))}get incomingCalls$(){return this.cachedObservable("incomingCalls$",()=>this.calls$.pipe(E(t=>t.filter(e=>e.direction==="inbound"))))}get incomingCalls(){return Object.values(this._calls$.value).filter(t=>t.direction==="inbound")}get userInfo$(){return this._userInfo$.asObservable()}get userInfo(){return this._userInfo$.value}get calls$(){return this.cachedObservable("calls$",()=>this._calls$.pipe(E(t=>Object.values(t))))}get calls(){return Object.values(this._calls$.value)}get iceServers(){return this._iceServers$.value}get authorization$(){return this._authorization$.asObservable()}get authorization(){return this._authorization$.value}get errors$(){return this._errors$.asObservable()}get authenticated$(){return this._authState$.pipe(E(t=>t.kind==="authenticated"),L())}get authenticated(){return this._authState$.value.kind==="authenticated"}get clientBound(){return this._wasClientBound}get authState(){return this._authState$.value}setDirectory(t){this._directory=t}async execute(t,e){try{return await this.transport.execute(t,e)}catch(i){throw X.debug("[Session] Execute Error",i),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i})),i}}send(t){this.transport.send(t)}async init(){return await this.loadAuthorizationStateFromStorage(),this.setupMessageHandlers(),!0}setupMessageHandlers(){X.debug("[Session] Setting up message handlers"),this.subscribeTo(this.authStateEvent$,async t=>{X.debug("[Session] Authorization state event received:",t);try{await this.updateAuthorizationStateInStorage(t.authorization_state)}catch(e){X.error("[Session] Failed to handle authorization state update:",e),this._errors$.next(new Zn(e))}}),this.subscribeTo(this.transport.connectionStatus$.pipe(B(t=>t==="disconnected"||t==="reconnecting")),()=>{this._authState$.value.kind==="authenticated"&&this._authState$.next({kind:"unauthenticated"})}),this.subscribeTo(this.transport.connectionStatus$.pipe(B(t=>t==="connected"),Yn(()=>(X.debug("[Session] Connection established, initiating authentication"),Me(this.authenticate()).pipe(ii(t=>(this.handleAuthenticationError(t).catch(e=>{X.error("[Session] Error handling authentication failure:",e)}),ei)))))),void 0),this.subscribeTo(this.vertoInvite$,async t=>{X.debug("[Session] Verto invite received:",t);try{await this.createInboundCall(t)}catch(e){X.error("[Session] Error handling Verto invite:",e),this._errors$.next(new Bd(e))}}),this.subscribeTo(this.vertoAttach$,async t=>{X.debug("[Session] Verto attach received:",t);try{await this.handleVertoAttach(t)}catch(e){X.error("[Session] Error handling Verto attach:",e),this._errors$.next(new zd(e))}})}async loadAuthorizationStateFromStorage(){try{const t=await this.storage.getItem(this.authorizationStateKey);this.authorizationState$.next(t??void 0)}catch(t){X.error("Failed to retrieve authorization state from storage:",t),this.authorizationState$.next(void 0)}}async updateAuthorizationStateInStorage(t){if(!t){X.debug("[Session] Removing authorization state from storage");try{await this.storage.removeItem(this.authorizationStateKey),this.authorizationState$.next(void 0)}catch(e){throw X.error("Failed to remove authorization state from storage:",e),e}return}try{X.debug("[Session] Updating authorization state in storage"),await this.storage.setItem(this.authorizationStateKey,t),this.authorizationState$.next(t)}catch(e){throw X.error("Failed to retrieve authorization state from storage:",e),e}}get authStateEvent$(){return this.cachedObservable("authStateEvent$",()=>this.signalingEvent$.pipe(Se(t=>{X.debug("[Session] Received incoming message:",t)}),fe(ug,"params"),Se(t=>{X.debug("[Session] Authorization state event received:",t.authorization_state)})))}get signalingEvent$(){return this.cachedObservable("signalingEvent$",()=>this.transport.incomingEvent$.pipe(fe(os,"params"),Et()))}get vertoInvite$(){return this.cachedObservable("vertoInvite$",()=>this.signalingEvent$.pipe(B(an),B(t=>ac(t.params)),E(t=>({node_id:t.node_id,...t.params.params}))))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.signalingEvent$.pipe(B(an),B(t=>oc(t.params)),E(t=>({node_id:t.node_id,...t.params.params}))))}get contexts(){return[]}get eventing(){return[]}get topics(){return[]}get authentication(){const t=this.getCredential();if(!t.token)throw new Q("Credential token is undefined");return{jwt_token:t.token}}async connect(){await Ge(this.initialized$),await this.transport.connect(),await Ge(this.authenticated$.pipe(w(this.destroyed$),B(Boolean),Re(1),cr({first:15e3})))}async handleAuthenticationError(t){X.error("Authentication error:",t);const e=t instanceof Lt&&(t.code===wo||t.code===So||t.code===Co),i=await Ge(this.authorizationState$.pipe(Re(1)))!==void 0;if(e&&i){X.debug("[Session] Recoverable auth error — cleaning up stored state and reconnecting fresh");try{await this.cleanupStoredConnectionParams()}catch(r){X.error("Failed to cleanup stored connection params:",r)}finally{this.transport.reconnect()}}else this._errors$.next(t)}async cleanupStoredConnectionParams(){await this.transport.setProtocol(void 0),await this.updateAuthorizationStateInStorage(void 0),this._authorization$.next(void 0)}async teardownSessionState(){await this.cleanupStoredConnectionParams(),await this.attachManager.detachAll()}async updateAuthState(t){try{await this.storage.setItem(this.authorizationStateKey,t)}catch(e){X.error("Failed to update authorization state in storage:",e),this._errors$.next(new Zn(e))}}async reauthenticate(t,e,i){var r,n;X.debug("[Session] Re-authenticating session");try{let s=e;if(!s&&((r=this.dpopManager)!=null&&r.initialized))try{s=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"})}catch(o){if(this.clientBound)throw o;X.warn("[Session] Failed to create DPoP proof for reauthenticate:",o)}const a=jp({project:((n=this._authorization$.value)==null?void 0:n.project_id)??"",jwt_token:t,...s?{dpop_token:s}:{}});await Ba(Me(this.transport.execute(a)).pipe(uo(),Re(1),ii(o=>{throw X.error("[Session] Re-authentication RPC failed:",o),o}))),i!=null&&i.clientBound&&(this._wasClientBound=!0),X.debug("[Session] Re-authentication successful, updating stored auth state")}catch(s){throw X.error("[Session] Re-authentication failed:",s),this._errors$.next(new Zn(s)),s}}async authenticate(){var o,c;X.debug("[Session] Starting authentication process");const t=await Ge(Ha({protocol:this.transport.protocol$,authorization_state:this.authorizationState$}).pipe(Re(1)));X.debug(`[Session] Persisted params:
|
|
73
|
-
`,{protocol:t.protocol,authStateLength:(o=t.authorization_state)==null?void 0:o.length});const e=t.authorization_state&&t.protocol,i=this.getCredential().token,r=e&&i;let n;if(r?X.debug("[Session] Reconnecting with stored jwt_token + authorization_state"):this.onBeforeReconnect&&this.clientBound&&(X.debug("[Session] Refreshing credentials before fresh connect"),await this.onBeforeReconnect()),(!r||this.clientBound)&&((c=this.dpopManager)!=null&&c.initialized))try{n=await this.dpopManager.createRpcProof({method:"signalwire.connect"})}catch(u){if(this.clientBound)throw u;X.warn("[Session] Failed to create DPoP proof for connect, proceeding without:",u)}const s=Hp({authentication:r?{jwt_token:i}:this.authentication,version:this.connectVersion,agent:this.agent,contexts:this.contexts,eventing:this.eventing,topics:this.topics,event_acks:this.eventAcks,...n?{dpop_token:n}:{},...r?{authorization_state:t.authorization_state,protocol:t.protocol}:{}}),a=await Ba(Me(this.transport.execute(s)).pipe(uo(),E(u=>u.result),B(Ff),Se(()=>{X.debug("[Session] Response passed filter, processing authentication result")}),Re(1),ii(u=>{throw X.error("[Session] Authentication RPC failed:",u),u})));X.debug("[Session] Processing authentication result:",{hasProtocol:!!a.protocol,hasAuthorization:!!a.authorization,hasIceServers:!!a.ice_servers}),a.protocol&&await this.transport.setProtocol(a.protocol),this._authorization$.next(a.authorization),this._iceServers$.next(a.ice_servers??[]),this._authState$.next({kind:"authenticated"}),X.debug("[Session] Authentication completed successfully")}async disconnect(){this.transport.disconnect(),this._authState$.next({kind:"unauthenticated"}),await this.teardownSessionState()}async createInboundCall(t){const e=await this.createCall({nodeId:t.node_id,callId:t.callID,initOffer:t.sdp,toName:t.callee_id_name,to:t.callee_id_number,fromName:t.caller_id_name,from:t.caller_id_number,displayDirection:t.display_direction,userVariables:t.userVariables});this._calls$.next({[`${e.id}`]:e,...this._calls$.value})}async handleVertoAttach(t){const{callID:e}=t;if(e in this._calls$.value){X.debug(`[Session] Verto attach for existing call ${e}, deferring to per-call handler`);return}const i=await this.attachManager.consumePendingAttachment(e);X.debug(`[Session] Creating reattached call for callID: ${e}`);const r=await this.createCall({nodeId:t.node_id,callId:e,toName:t.callee_id_name,to:t.callee_id_number,fromName:t.caller_id_name,from:t.caller_id_number,reattach:!0,...i});this._calls$.next({[`${r.id}`]:r,...this._calls$.value})}async createOutboundCall(t,e={}){const i=t instanceof pc?t.defaultChannel:t;let r;try{return r=await this.createCall({to:i,...e}),await Ge(lr(r.selfId$.pipe(B(n=>!!n),Re(1),cr(this.callCreateTimeout)),r.errors$.pipe(Re(1),Ze(n=>ed(()=>n.error))))),this._calls$.next({[`${r.id}`]:r,...this._calls$.value}),r}catch(n){X.error("[Session] Error creating outbound call:",n),r==null||r.destroy();const s=new io(n instanceof Va?"Call create timeout":"Call creation failed",n,"outbound");throw this._errors$.next(s),s}}async createCall(t={}){try{const e=Nf(t);let i;try{if(!this._directory)throw new Q("Directory not initialized");const n=await this._directory.findAddressIdByURI(e);if(!n)throw new Q(`Address name: ${e} not found`);if(i=this._directory.get(n),!i)throw new Q(`Address ID: ${n} not found`)}catch{X.warn(`[Session] Directory lookup failed for ${e}, proceeding with raw URI`)}const r=this.callFactory.createCall(i,{...t});return this.subscribeTo(r.status$.pipe(B(n=>n==="destroyed"),Re(1)),()=>{const{[`${r.id}`]:n,...s}=this._calls$.value;this._calls$.next(s)}),r}catch(e){throw X.error("[Session] Error creating call session:",e),new io("Call create error",e,t.initOffer?"inbound":"outbound")}}destroy(){for(const t of Object.values(this._calls$.value))t.hangup();super.destroy()}},zf=class{constructor(t){this.clientSessionManager=t}get authenticated$(){return this.clientSessionManager.authenticated$}get authenticated(){return this.clientSessionManager.authenticated}get signalingEvent$(){return this.clientSessionManager.signalingEvent$}get iceServers(){return this.clientSessionManager.iceServers}async execute(t,e){return this.clientSessionManager.execute(t,e)}get incomingCalls$(){return this.clientSessionManager.incomingCalls$}get incomingCalls(){return this.clientSessionManager.incomingCalls}get calls$(){return this.clientSessionManager.calls$}get calls(){return this.clientSessionManager.calls}};const Vf=t=>typeof t=="string",hs=W();var Hf=class extends uc{constructor(t,e){super(`/api/fabric/conversations/${t}/messages`,"page_size=100",e),this.groupId=t}},jf=class extends dc{constructor(t,e,i,r){super(new Hf(t,i),e,r)}},Wf=class{constructor(t,e,i,r){this.clientSession=t,this.http=e,this.getUserAddressId=i,this.onError=r,this.groupIds=new Map}async join(t){const e=this.getUserAddressId();try{const i=await this.http.request({...$r,url:"/api/fabric/conversations/join",body:JSON.stringify({from_fabric_address_id:e,fabric_address_ids:[t,e]})});if(i.ok&&i.body){const r=JSON.parse(i.body);if(Vf(r.group_id))return this.groupIds.set(t,r.group_id),r.group_id}throw new no("Join Failed - Unexpected response")}catch(i){throw hs.error("[ConversationsManager] Failed to join conversation:",i),i}}async getConversationMessageCollection(t){const e=this.groupIds.get(t)??await this.join(t);return Promise.resolve(new jf(e,this.clientSession.signalingEvent$.pipe(fe($o,"params"),Se(i=>hs.debug("[ConversationsManager ] Conversation Event:",i)),E(i=>({...i}))),this.http,this.onError))}async sendText(t,e){const i=this.groupIds.get(e)??await this.join(e),r=this.getUserAddressId();try{if((await this.http.request({...$r,url:"/api/fabric/messages",body:JSON.stringify({group_id:i,from_fabric_address_id:r,text:t})})).ok)return;throw new no("Send Text Failed - Unexpected response")}catch(n){throw hs.error("[ConversationsManager] Failed to send text message:",n),n}}};const qe=W();function gc(t){return t.expires_at?t.expires_at:t.expires_in?Math.floor(Date.now()/1e3)+t.expires_in:(qe.warn("[DeviceToken] Could not determine token expiry, using default"),Math.floor(Date.now()/1e3)+en)}function fc(t){return t.expires_in?t.expires_in:t.expires_at?Math.max(t.expires_at-Math.floor(Date.now()/1e3),1):en}var Gf=class extends te{constructor(t,e,i,r){super(),this.dpopManager=t,this.http=e,this.errorHandler=i,this.getCredential=r,this._currentToken$=this.createBehaviorSubject(null),this._refreshInProgress=!1,this._paused=!1,this._effectiveExpireIn=en,this.subscribeTo(this._currentToken$.pipe(B(Boolean),Ze(n=>{const s=gc(n),a=Math.max(s*1e3-Date.now()-bo,1e3);return qe.debug(`[DeviceToken] Scheduling Client Bound SAT refresh in ${a}ms`),Di(a)})),()=>{this.executeRefresh()})}get effectiveExpireIn(){return this._effectiveExpireIn}async activate(t,e,i){var n;const{satClaims:r}=t;if(!((n=r==null?void 0:r.scope)!=null&&n.includes(Sh)))return qe.debug("[DeviceToken] No sat:refresh scope, skipping Client Bound SAT activation"),{activated:!1,reason:"no-scope"};this._session=e,this._updateCredential=i;try{const s=this._currentToken$.value;if(s&&this.isTokenFresh(s)){qe.debug("[DeviceToken] Reusing cached Client Bound SAT — skipping /devices/token");const c=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await e.reauthenticate(s.token,c,{clientBound:!0}),i({token:s.token}),{activated:!0}}const a=await this.obtainToken();!a.expires_at&&!a.expires_in&&r.expires_at&&(a.expires_at=r.expires_at),this._effectiveExpireIn=fc(a);const o=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await e.reauthenticate(a.token,o,{clientBound:!0}),i({token:a.token}),qe.info("[DeviceToken] Client Bound SAT activated successfully"),this._currentToken$.next(a),{activated:!0}}catch(s){return qe.error("[DeviceToken] Failed to activate Client Bound SAT:",s),this.errorHandler(new Zr(s,"Failed to activate Client Bound SAT")),{activated:!1,reason:"endpoint-failed"}}}isTokenFresh(t){return gc(t)*1e3-Date.now()>bo}async obtainToken(){const t=await this.dpopManager.createHttpProof({method:"POST",uri:fo}),e=await this.http.request({url:fo,...$r,body:JSON.stringify({dpop_token:t,expire_in:en})});if(!e.ok||!e.body)throw new oo(`Failed to obtain device token: ${e.status} ${e.statusText}`);const i=JSON.parse(e.body);if(!i.token)throw new oo("Device token response missing token field");return i}async refreshToken(t,e,i){qe.debug("[DeviceToken] Refreshing Client Bound SAT");const r=await this.dpopManager.createHttpProof({method:"POST",uri:vo,accessToken:e}),n=await this.http.request({url:vo,...$r,body:JSON.stringify({dpop_token:r,expire_in:this._effectiveExpireIn})});if(!n.ok||!n.body)throw new ni(`Failed to refresh device token: ${n.status} ${n.statusText}`);const s=JSON.parse(n.body);if(!s.token)throw new ni("Device token refresh response missing token field");!s.expires_at&&!s.expires_in&&(s.expires_in=this._effectiveExpireIn),this._effectiveExpireIn=fc(s);const a=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await t.reauthenticate(s.token,a),i({token:s.token}),qe.info("[DeviceToken] Client Bound SAT refreshed successfully"),s}async executeRefresh(){if(this._paused){qe.debug("[DeviceToken] Manager paused, skipping refresh");return}if(this._refreshInProgress){qe.debug("[DeviceToken] Refresh already in progress, skipping");return}const t=this._session,e=this._updateCredential;if(!t||!e){qe.warn("[DeviceToken] Cannot refresh: session or updateCredential not set");return}if(!t.authenticated){qe.debug("[DeviceToken] Session not authenticated, deferring refresh");return}this._refreshInProgress=!0;try{const i=this.getCredential().token;if(!i)throw new ni("No current token available for refresh");const r=await this.retryRefresh(t,i,e);this._currentToken$.next(r)}catch(i){qe.error("[DeviceToken] Automatic Client Bound SAT refresh failed:",i),this.errorHandler(i instanceof ni?i:new ni("Automatic token refresh failed",i))}finally{this._refreshInProgress=!1}}async retryRefresh(t,e,i){let r;for(let n=0;n<mo;n++)try{return await this.refreshToken(t,e,i)}catch(s){if(r=s,n<mo-1){const a=Ch*Math.pow(2,n);qe.warn(`[DeviceToken] Refresh attempt ${n+1} failed, retrying in ${a}ms`),await new Promise(o=>setTimeout(o,a))}}throw r instanceof Error?r:new ni("All refresh retries exhausted",r)}pause(){this._paused=!0}resume(){this._paused=!1}destroy(){super.destroy()}};const li=W(),qf=(t,e,i,r)=>new Gf(t,e,i,r);var Xf=class extends te{constructor(t,e){super(),this.deps=e,this._activating=!1,this._activationGeneration=0,t!=null&&t.initialized&&(this._deviceTokenManager=(e.deviceTokenManagerFactory??qf)(t,e.http,i=>e.notifier.onError(i),()=>e.store.read()))}get clientBoundSATAvailable(){return this._deviceTokenManager!==void 0}get developerRefreshArmed(){return this._developerTimerId!==void 0}scheduleDeveloperRefresh(t,e,i=0){this._developerTimerId!==void 0&&clearTimeout(this._developerTimerId);const r=i===0?Math.max(e-Date.now()-Eh,1e3):Math.min(Ah*Math.pow(2,i)*(.5+Math.random()*.5),Th);this._developerTimerId=setTimeout(async()=>{try{if(!t.refresh)throw new ri("Credential provider does not support refresh");const n=await t.refresh();this.deps.store.write(n),this.deps.store.persist(n),li.info("[Coordinator] Credentials refreshed successfully."),n.expiry_at&&this.scheduleDeveloperRefresh(t,n.expiry_at,0)}catch(n){const s=i+1;li.error(`[Coordinator] Credential refresh failed (attempt ${s}/${yo}):`,n),this.deps.notifier.onError(n instanceof Error?n:new Error(String(n),{cause:n})),s<yo?this.scheduleDeveloperRefresh(t,e,s):(li.error("[Coordinator] Credential refresh exhausted all retries. Disconnecting."),this.deps.notifier.onError(new ni("Credential refresh failed after max retries")),this.deps.notifier.onRefreshExhausted())}},r)}cancelDeveloperRefresh(){this._developerTimerId!==void 0&&(clearTimeout(this._developerTimerId),this._developerTimerId=void 0)}suspend(){var t;this.cancelDeveloperRefresh(),(t=this._deviceTokenManager)==null||t.pause()}async activate(t,e){if(this._activating){li.debug("[Coordinator] activate() in flight; ignoring re-entrant call");return}if(!this._deviceTokenManager)return;this._deviceTokenManager.resume();const i=++this._activationGeneration;this._activating=!0;try{const r=await this.withActivationTimeout(this._deviceTokenManager.activate(t,e,n=>this.deps.store.merge(n)));if(i!==this._activationGeneration){li.debug("[Coordinator] activate() result discarded (preempted by newer activation)");return}if(r.activated){this.cancelDeveloperRefresh(),li.debug("[Coordinator] Developer refresh disabled — Client Bound SAT owns refresh");return}li.warn(`[SignalWire] [SW-REFRESH-FALLBACK] Client Bound SAT declined (reason=${r.reason}); using developer-provided refresh handler.`),this.deps.notifier.onWarning({code:"credential_refresh_fallback",source:"CredentialProvider",reason:r.reason,message:`Client Bound SAT activation declined (${r.reason}); using developer-provided refresh.`})}finally{this._activating=!1}}destroy(){var t;this.cancelDeveloperRefresh(),(t=this._deviceTokenManager)==null||t.destroy(),this._deviceTokenManager=void 0,super.destroy()}async withActivationTimeout(t){return new Promise(e=>{const i=setTimeout(()=>{var r;(r=this._deviceTokenManager)==null||r.pause(),e({activated:!1,reason:"activation-timeout"})},kh);t.then(r=>{clearTimeout(i),e(r)},r=>{clearTimeout(i),this.deps.notifier.onError(r instanceof Error?r:new Error(String(r))),e({activated:!1,reason:"endpoint-failed"})})})}};const ps=W(),Yf=1e3;function Kf(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"unknown"}var Zf=class extends te{constructor(t){super(),this._events=[],this._calls=[],this._deviceChanges=[],this._eventRecorded$=this.createSubject(),this._sdkVersion=t.sdkVersion,this._maxEvents=t.maxEvents??Yf,ps.debug("DiagnosticsCollector initialized",{sdkVersion:this._sdkVersion,maxEvents:this._maxEvents})}get eventRecorded$(){return this._eventRecorded$.asObservable()}record(t,e,i){const r={timestamp:Date.now(),category:t,event:e,...i!==void 0?{details:i}:{}};this._events=this._appendToBuffer(this._events,r),this._eventRecorded$.next(r)}recordDeviceChange(t,e){const i={timestamp:Date.now(),category:"device",event:t,...e!==void 0?{details:e}:{}};this._deviceChanges=this._appendToBuffer(this._deviceChanges,i),this._events=this._appendToBuffer(this._events,i),this._eventRecorded$.next(i)}recordCallSummary(t){this._calls=this._appendCallToBuffer(this._calls,t),this.record("call","call_summary",{callId:t.callId,direction:t.direction,duration:t.duration,finalStatus:t.finalStatus})}export(){return{sdkVersion:this._sdkVersion,userAgent:Kf(),exportedAt:Date.now(),events:[...this._events],calls:[...this._calls],deviceChanges:[...this._deviceChanges]}}clear(){this._events=[],this._calls=[],this._deviceChanges=[],ps.debug("DiagnosticsCollector buffers cleared")}destroy(){ps.debug("DiagnosticsCollector destroyed"),super.destroy()}_appendToBuffer(t,e){const i=[...t,e];return i.length>this._maxEvents?i.slice(i.length-this._maxEvents):i}_appendCallToBuffer(t,e){const i=[...t,e];return i.length>this._maxEvents?i.slice(i.length-this._maxEvents):i}};const vc=t=>((t==null?void 0:t.length)??0)===0,Qf=t=>{t.pipe(Re(1)).subscribe()},Jf=W();var $f=class extends uc{constructor(t){super("/api/fabric/addresses","sort_by=name&sort_order=asc",t)}async name(t){const e=await this.http.request({...es,url:`${this.endpoint}?name=${encodeURIComponent(t)}`});if(e.ok&&e.body){const i=JSON.parse(e.body);if(!vc(i.data))return i.data[0]}Jf.error("Failed to fetch addresses")}},ev=class extends dc{constructor(t,e,i){super(new $f(e),t,i)}},tv=class extends te{constructor(t,e,i,r){super(),this.http=t,this.conversationManager=i,this.onError=r,this.addNewAddress=n=>{var o;const s=new pc(n,this.conversationManager,this),a=(o=this._statesCollection.get$(n))==null?void 0:o.pipe(ue(),E(c=>(s.upnext(c),s)));a&&(Qf(a),this._observableRegistry.set(n,a)),this._addressesInstances.set(n,s)},this._addresses$=this.createBehaviorSubject([]),this._addressesInstances=new Map,this._observableRegistry=new Map,this._statesCollection=new ev(e.signalingEvent$.pipe(fe(ec,"params"),E(n=>({}))),this.http,this.onError),this.initSubscriptions()}get loading(){return this._statesCollection.loading}initSubscriptions(){this.subscribeTo(this._statesCollection.updated$,()=>{const t=Array.from(this._addressesInstances.values().map(i=>i.id)),e=this._statesCollection.values.filter(i=>!t.includes(i.id));vc(e)||(e.forEach(i=>this.addNewAddress(i.id)),this._addresses$.next(Array.from(this._addressesInstances.values())))})}get addresses$(){return this._addresses$.asObservable()}get addresses(){return this._addresses$.value}get hasMore$(){return this._statesCollection.hasMore$}get loading$(){return this._statesCollection.loading$}loadMore(){this._statesCollection.hasMore&&this._statesCollection.loadMore()}get$(t){return this._observableRegistry.has(t)||this.addNewAddress(t),this._observableRegistry.get(t)}get(t){return this._addressesInstances.get(t)}async findAddressIdByURI(t){var i;let e=(i=this._addressesInstances.values().find(r=>r.name===t))==null?void 0:i.id;if(!e){const r=await this._statesCollection.find$("name",t);if(r){const n=await Ge(r);this.addNewAddress(n.id),e=n.id}}return e}};const bc=W();var iv=(yt=class extends te{constructor(e,i,r,n={}){super(),this.WebSocketConstructor=e,this.endpoint=i,this.outgoingMessages$=r,this.messageQueue=[],this.shouldReconnect=!1,this.boundHandleOpen=()=>this.handleOpen(),this.boundHandleClose=s=>this.handleClose(s),this.boundHandleError=()=>this.handleError(),this.boundHandleMessage=s=>this.handleMessage(s),this._status$=this.createBehaviorSubject("disconnected"),this._incomingMessages$=this.createSubject(),this._errors$=this.createReplaySubject(1),this.reconnectDelayMin=n.reconnectDelayMin??yt.DEFAULT_RECONNECT_DELAY_MIN_MS,this.reconnectDelayMax=n.reconnectDelayMax??yt.DEFAULT_RECONNECT_DELAY_MAX_MS,this.connectionTimeout=n.connectionTimeout??yt.DEFAULT_CONNECTION_TIMEOUT_MS,this.currentReconnectDelay=this.reconnectDelayMin,this.subscriptions.push(this.outgoingMessages$.subscribe(s=>{this.send(s)}))}get status$(){return this._status$.asObservable()}get incomingMessages$(){return this._incomingMessages$.asObservable()}get errors$(){return this._errors$.asObservable()}connect(){this._status$.value==="connecting"||this._status$.value==="connected"||(this.shouldReconnect=!0,this._status$.next("connecting"),this.createWebSocket())}disconnect(){this.shouldReconnect=!1,this.clearReconnectTimer(),this.clearConnectionTimeout();const e=this._status$.value;e==="connected"||e==="connecting"||e==="reconnecting"?this.socket?(this._status$.next("disconnecting"),this.socket.close()):this._status$.next("disconnected"):this._status$.next("disconnected")}reconnect(){this.shouldReconnect=!0,this._status$.next("reconnecting"),this.scheduleReconnection()}send(e){var i;this._status$.value==="connected"&&((i=this.socket)==null?void 0:i.readyState)===1?(bc.wsTraffic({type:"send",raw:e}),this.socket.send(e)):this.messageQueue.push(e)}createWebSocket(){try{this.closeExistingSocket(),this.socket=new this.WebSocketConstructor(this.endpoint),this.setupWebSocketListeners(),this.startConnectionTimeout()}catch(e){const i=e instanceof Error?e:new Mi("Failed to create WebSocket");this._errors$.next(i),this.handleConnectionError()}}closeExistingSocket(){if(!this.socket)return;const e=this.socket;this.socket=void 0,this.removeWebSocketListeners(e);try{e.close()}catch{}}setupWebSocketListeners(){this.socket&&(this.socket.addEventListener("open",this.boundHandleOpen),this.socket.addEventListener("close",this.boundHandleClose),this.socket.addEventListener("error",this.boundHandleError),this.socket.addEventListener("message",this.boundHandleMessage))}removeWebSocketListeners(e){try{e.removeEventListener("open",this.boundHandleOpen),e.removeEventListener("close",this.boundHandleClose),e.removeEventListener("error",this.boundHandleError),e.removeEventListener("message",this.boundHandleMessage)}catch{}}handleOpen(){this.clearConnectionTimeout(),this._status$.next("connected"),this.currentReconnectDelay=this.reconnectDelayMin,this.flushMessageQueue()}handleClose(e){this.clearConnectionTimeout(),this.shouldReconnect?(this._status$.next("reconnecting"),this.scheduleReconnection()):this._status$.next("disconnected")}handleError(){const e=new $a("WebSocket connection error");this._errors$.next(e),this.handleConnectionError()}handleMessage(e){bc.wsTraffic({type:"recv",raw:e.data}),this._incomingMessages$.next(e)}handleConnectionError(){this.reconnect()}scheduleReconnection(){this.clearReconnectTimer();const e=this.currentReconnectDelay*(.5+Math.random()*.5);this.reconnectTimer=setTimeout(()=>{this.shouldReconnect&&(this._status$.next("connecting"),this.createWebSocket(),this.increaseReconnectDelay())},e)}increaseReconnectDelay(){this.currentReconnectDelay=Math.min(this.currentReconnectDelay*2,this.reconnectDelayMax)}startConnectionTimeout(){this.clearConnectionTimeout(),this.connectionTimeoutTimer=setTimeout(()=>{if(this._status$.value==="connecting"){const e=new _d("WebSocket connection timeout");this._errors$.next(e),this.socket&&this.socket.close()}},this.connectionTimeout)}clearConnectionTimeout(){this.connectionTimeoutTimer&&(clearTimeout(this.connectionTimeoutTimer),this.connectionTimeoutTimer=void 0)}clearReconnectTimer(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0)}flushMessageQueue(){var e;for(;this.messageQueue.length>0&&((e=this.socket)==null?void 0:e.readyState)===1;){const i=this.messageQueue.shift();i!==void 0&&this.socket.send(i)}}},yt.DEFAULT_RECONNECT_DELAY_MIN_MS=1e3,yt.DEFAULT_RECONNECT_DELAY_MAX_MS=3e4,yt.DEFAULT_CONNECTION_TIMEOUT_MS=1e4,yt);function rv(t){return ss(t)&&t.method==="signalwire.ping"}const xe=W();var nv=class extends te{constructor(t,e,i,r,n){super(),this.storage=t,this.protocolKey=e,this.onError=n,this.protocol$=this.createReplaySubject(1),this.isConnecting=!1,this.isConnected=!1,this.ackEvent=()=>Se(s=>{if(os(s))try{xe.debug("[Transport] Sending event ack",{eventId:s.id}),this.send(tg(s.id))}catch(a){xe.error("[Transport] Failed to send event acknowledgment:",a)}}),this.replySignalwirePing=()=>B(s=>{if(rv(s)){try{xe.debug("[Transport] Received ping, sending pong",{pingId:s.id}),this.send(Wp(s.id))}catch(a){xe.error("[Transport] Failed to send ping response:",a)}return!1}return!0}),this.discardStaleEvents=()=>B(s=>{if(!os(s))return!0;const a=s.params.event_channel;if(!a)return!0;if(s.params.event_type.startsWith("conversation."))return xe.debug(`[Transport] Received conversation event: ${s.params.event_type} (event_channel: ${a})`),!0;const o=this._currentProtocol;if(!o)return!0;if(!a.includes(o)){const c=s.params.event_type;return xe.warn(`[Transport] Discarding stale event: ${c} (event_channel does not match current protocol)`),!1}return!0}),this._outgoingMessages$=this.createSubject(),this._webSocketConnections=new iv(i,r,this._outgoingMessages$.asObservable(),{connectionTimeout:g.instance.connectionTimeout,reconnectDelayMin:g.instance.reconnectDelayMin,reconnectDelayMax:g.instance.reconnectDelayMax}),this.subscribeTo(this._webSocketConnections.errors$,s=>{var a;(a=this.onError)==null||a.call(this,s)}),this.initialized$=ti(()=>Me(this._init())).pipe(tt(1),w(this.destroyed$)),this._jsonRPCMessage$=this._webSocketConnections.incomingMessages$.pipe(E(s=>{var a;try{return JSON.parse(s.data)}catch(o){return xe.error("[Transport] Failed to parse incoming message:",o),(a=this.onError)==null||a.call(this,new Vd(o)),null}}),B(s=>s!==null&&(as(s)||ss(s))),ii(s=>{var a;return xe.error("[Transport] Message processing error:",s),(a=this.onError)==null||a.call(this,s instanceof Error?s:new Error(String(s),{cause:s})),ei}),Et(),w(this.destroyed$)),this._jsonRPCResponse$=this._jsonRPCMessage$.pipe(B(as)),this._incomingEvent$=this._jsonRPCMessage$.pipe(this.ackEvent(),this.replySignalwirePing(),B(s=>!as(s)),this.discardStaleEvents(),Et(),w(this.destroyed$))}async setProtocol(t){this._currentProtocol=t,this.protocol$.next(t),await this._updateProtocolInStorage(t)}get incomingEvent$(){return this._incomingEvent$}get connectionStatus$(){return this._webSocketConnections.status$}async connect(){return this.isConnecting||this.isConnected?(xe.warn("[Transport] Already connecting or connected"),Promise.resolve()):new Promise((t,e)=>{this.isConnecting=!0,this.subscribeTo(this.initialized$,()=>{this._webSocketConnections.connect();const i=this._webSocketConnections.status$.pipe(B(r=>r==="connected"||r==="disconnected"),Re(1),cr(1e4)).subscribe({next:r=>{var n;if(r==="connected")this.isConnecting=!1,this.isConnected=!0,xe.debug("[Transport] Connection established"),t();else{this.isConnecting=!1;const s=new eo("Failed to connect");xe.error("[Transport] Connection failed"),(n=this.onError)==null||n.call(this,s),e(s)}},error:r=>{var n;this.isConnecting=!1,xe.error("[Transport] Connection error:",r),(n=this.onError)==null||n.call(this,r instanceof Error?r:new Error(String(r),{cause:r})),e(r)}});this.subscriptions.push(i),this.subscribeTo(this._webSocketConnections.status$.pipe(B(r=>r==="disconnected")),()=>{xe.debug("[Transport] Disconnected"),this.isConnected=!1})})})}reconnect(){this._webSocketConnections.reconnect()}async execute(t,e){return this.send(t),new Uf(t,this._jsonRPCResponse$,e).promise}send(t){const e=JSON.stringify(t);this._outgoingMessages$.next(e)}disconnect(){xe.debug("[Transport] Disconnecting"),this.isConnected=!1,this.isConnecting=!1,this._webSocketConnections.disconnect()}destroy(){xe.debug("[Transport] Destroying"),this.disconnect(),super.destroy(),this._webSocketConnections.destroy()}async _loadProtocolFromStorage(){try{const t=await this.storage.getItem(this.protocolKey);this._currentProtocol=t??void 0,this.protocol$.next(t??void 0)}catch(t){throw xe.error("Failed to retrieve protocol from storage:",t),t}}async _updateProtocolInStorage(t){if(!t){try{await this.storage.removeItem(this.protocolKey)}catch(e){throw xe.error("Failed to remove protocol from storage:",e),e}return}try{const e=await this.storage.getItem(this.protocolKey);(!e||e!==t)&&await this.storage.setItem(this.protocolKey,t)}catch(e){throw xe.error("Failed to update protocol in storage:",e),e}}async _init(){return await this._loadProtocolFromStorage(),!0}};const K=W(),sv=t=>{if(typeof t=="string"){const e=t.indexOf("?");if(e!==-1){const i=t.substring(e+1),r=new URLSearchParams(i).get("channel");if(r==="video")return{audio:!0,video:!0,receiveVideo:!0};if(r==="audio")return{audio:!0,video:!1}}}return{}};var mc=class extends te{constructor(t,e={}){super(),this.preferences=new vp,this._user$=this.createBehaviorSubject(void 0),this._directory$=this.createBehaviorSubject(void 0),this._isConnected$=this.createBehaviorSubject(!1),this._isRegistered$=this.createBehaviorSubject(!1),this._errors$=this.createReplaySubject(1),this._warnings$=this.createReplaySubject(10),this._options={},this._deps=new wp,this._credentialProvider=t,this._options={...g.instance.defaultSignalWireOptions,...e},this._options.storageImplementation&&(this._deps.storageImpl=this._options.storageImplementation),this._options.persistSession&&(this._deps.persistSession=!0),this._options.webSocketConstructor&&(this._deps.WebSocket=this._options.webSocketConstructor),this._options.savePreferences&&this.preferences.enableSavePreferences(this._deps.storage),this._options.webRTCApiProvider&&(this._deps.webRTCApiProvider=this._options.webRTCApiProvider),this._options.logger!==void 0&&qd(this._options.logger),this._options.logLevel&&Yd(this._options.logLevel),this._options.debug&&Xd(this._options.debug),this._deviceController=this._deps.deviceController,this._options.skipDeviceMonitoring||this._deviceController.enableDeviceMonitoring(),this.subscribeTo(this._deviceController.errors$,i=>{this._errors$.next(i)}),this.initResilienceSubsystems(),this.resolveCredentials().then(()=>{this.init().catch(i=>{K.error("[SignalWire] Initialization error:",i),this._deps.storage.removeItem("sw:cached_credential"),this._deps.storage.removeItem("sw:cached_credential","local"),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i}))})}).catch(i=>{K.error("[SignalWire] Initialization error:",i),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i}))})}async initDPoP(){var t;if((t=this._dpopManager)!=null&&t.initialized)return this._dpopManager.fingerprint;try{this._dpopManager=new Ep;const e=await this._dpopManager.init();return K.debug("[SignalWire] DPoP initialized, fingerprint available"),e}catch(e){K.warn("[SignalWire] DPoP initialization failed, proceeding without DPoP:",e),this._dpopManager=void 0;return}}async resolveCredentials(){const t=await this.initDPoP();if(this._refreshCoordinator=new Xf(this._dpopManager,{http:this._deps.http,notifier:{onError:e=>this._errors$.next(e),onWarning:e=>this._warnings$.next(e),onRefreshExhausted:()=>void this.disconnect()},store:{read:()=>this._deps.credential,write:e=>{this._deps.credential=e},merge:e=>{this._deps.credential={...this._deps.credential,...e}},persist:e=>this.persistCredential(e)}}),this._credentialProvider)return this.validateCredentials(this._credentialProvider,void 0,t);for(const e of this._deps.persistSession?["local","session"]:["session"])try{const i=await this._deps.storage.getItem("sw:cached_credential",e);if(i!=null&&i.token)return K.debug(`[SignalWire] Using cached credential from ${e}Storage`),await this.validateCredentials(void 0,i)}catch{}throw new ri("No credential provider and no cached session. Provide a CredentialProvider or enable persistSession with a prior login.")}async validateCredentials(t,e,i){var s,a;const r=i??((s=this._dpopManager)!=null&&s.initialized?this._dpopManager.fingerprint:void 0),n=e??(t?await t.authenticate(r?{fingerprint:r}:void 0):void 0);if(!n)throw new ri("No credentials available.");if(n.token)try{const o=eh(n.token,{header:!0});this._deps.ch=o.ch}catch(o){throw K.error("[SignalWire] Invalid JWT token provided in credentials:",o),new ri("Invalid JWT token provided in credentials.",{cause:o})}if(!n.token&&!n.authorizationState)throw K.error("[SignalWire] No valid authentication credentials provided."),new ri("No valid authentication credentials provided.");if(!this._deps.persistSession&&n.expiry_at&&n.expiry_at<Date.now())throw K.error("[SignalWire] Provided credentials have expired."),new ri("Provided credentials have expired.");if(n.expiry_at&&(t!=null&&t.refresh)?(a=this._refreshCoordinator)==null||a.scheduleDeveloperRefresh(t,n.expiry_at):n.expiry_at&&!(t!=null&&t.refresh)&&(K.warn(`[SignalWire] [SW-NO-REFRESH-HANDLER] Credential has expiry_at=${n.expiry_at} but no refresh handler. Session will terminate at expiry unless the SAT has 'sat:refresh' scope.`),this._warnings$.next({code:"credential_no_refresh_handler",source:"CredentialProvider",message:"Credential has expiry_at but no refresh handler. Session will terminate at expiry unless the SAT carries 'sat:refresh' scope.",expiresAt:n.expiry_at})),this._deps.credential=n,this.persistCredential(n),this.isConnected&&this._clientSession.authenticated&&n.token)try{await this._clientSession.reauthenticate(n.token),K.info("[SignalWire] Session refreshed with new credentials.")}catch(o){K.error("[SignalWire] Failed to refresh session with new credentials:",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}}persistCredential(t){t.token&&(this._deps.storage.setItem("sw:cached_credential",t),this._deps.persistSession&&this._deps.storage.setItem("sw:cached_credential",t,"local"))}async init(){if(this._user$.next(new zp(this._deps.http)),this._options.skipConnection||await this.connect(),!this._options.reconnectAttachedCalls&&this._attachManager&&await this._attachManager.flush(),!this._options.skipRegister)try{await this.register()}catch(t){K.error("[SignalWire] Registration failed:",t),this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t}))}this.handleAttachments()}async handleAttachments(){if(!this._attachManager){K.error("[SignalWire] AttachManager not initialized");return}if(this._options.reconnectAttachedCalls)try{await this._attachManager.reattachCalls()}catch(t){K.error("[SignalWire] Failed to reattach calls:",t),this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t}))}}async connect(){var r,n,s;await this.teardownTransportAndSession();try{const a=this._user$.value;if(!a)throw new Mi("User not initialized before connect");if(!await Ge(a.fetched$))throw new Mi("Failed to fetch user information - fetched$ emitted false");this._deps.user=a}catch(a){throw K.error(`[SignalWire] Failed to fetch user information: ${a instanceof Error?a.message:"Unknown error"}. This usually means the user token is invalid or expired.`),new Mi("Error fetching user information",{cause:a})}const t=a=>{this._errors$.next(a)};this._transport=new nv(this._deps.storage,this._deps.protocolKey,this._deps.WebSocket,g.instance.relayHost??this._deps.relayHost,t),this._attachManager=new ig(this._deps.storage,this._deps.deviceController,g.instance.reconnectCallsTimeout,this._deps.attachedCallsKey),this._clientSession=new Bf(()=>this._deps.credential,this._transport,this._deps.storage,this._deps.authorizationStateKey,this._deps.deviceController,this._attachManager,this._deps.webRTCApiProvider,this._dpopManager,(r=this._networkMonitor)==null?void 0:r.networkChange$),this._publicSession=new zf(this._clientSession),this._clientSession.onBeforeReconnect=async()=>{var a,o;if(this._credentialProvider)try{const c=(a=this._dpopManager)!=null&&a.initialized?this._dpopManager.fingerprint:void 0;K.debug("[SignalWire] Credential expired, refreshing before reconnect");const u=await this._credentialProvider.authenticate(c?{fingerprint:c}:void 0);this._deps.credential=u,u.expiry_at&&this._credentialProvider.refresh&&((o=this._refreshCoordinator)==null||o.scheduleDeveloperRefresh(this._credentialProvider,u.expiry_at)),K.debug("[SignalWire] Credential refreshed successfully for reconnect")}catch(c){throw K.error("[SignalWire] Failed to refresh credentials for reconnect:",c),this._errors$.next(c instanceof Error?c:new Error(String(c),{cause:c})),c}},this.subscribeTo(this._clientSession.errors$,a=>{this._errors$.next(a)}),await this._clientSession.connect(),await((n=this._refreshCoordinator)==null?void 0:n.activate(this._deps.user,this._clientSession)),this.subscribeTo(this._clientSession.authenticated$.pipe(Gr(1),B(Boolean)),async()=>{var a;try{await((a=this._refreshCoordinator)==null?void 0:a.activate(this._deps.user,this._clientSession))}catch(o){K.error("[SignalWire] Refresh re-arm after reconnect failed (non-fatal):",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}try{K.debug("[SignalWire] Re-registering user after reconnect"),await this.register(),K.debug("[SignalWire] User re-registered successfully after reconnect")}catch(o){K.error("[SignalWire] Re-registration failed after reconnect:",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}});const e=new Wf(this._clientSession,this._deps.http,()=>this._deps.getUserFromAddressId(),t),i=new tv(this._deps.http,this._clientSession,e,t);this._directory$.next(i),this._clientSession.setDirectory(i),this._isConnected$.next(!0),(s=this._diagnosticsCollector)==null||s.record("connection","connected"),this.subscribeTo(this._clientSession.authenticated$.pipe(Gr(2),B(Boolean)),()=>{var a;(a=this._diagnosticsCollector)==null||a.record("connection","reconnected")})}get user$(){return this.deferEmission(this._user$.asObservable())}get user(){return this._user$.value}get directory$(){return this.deferEmission(this._directory$.asObservable())}get directory(){return this._directory$.value}get isRegistered$(){return this.deferEmission(this._isRegistered$.asObservable())}get isRegistered(){return this._isRegistered$.value}get isConnected(){return this._isConnected$.value}get isConnected$(){return this.deferEmission(this._isConnected$.asObservable())}get ready$(){return this.publicCachedObservable("ready$",()=>this._isConnected$.pipe(Ze(t=>t?this._clientSession.authenticated$:Tt(!1))))}get errors$(){return this.deferEmission(this._errors$.asObservable())}get warnings$(){return this.deferEmission(this._warnings$.asObservable())}get platformCapabilities(){return this._platformCapabilities??(this._platformCapabilities=Lo(this._options.webRTCApiProvider)),this._platformCapabilities}get deviceRecovered$(){return this.deferEmission(this._deviceController.deviceRecovered$)}exportDiagnostics(){const t={audioInput:this.audioInputDevices,audioOutput:this.audioOutputDevices,videoInput:this.videoInputDevices},e={sdkVersion:"unknown",userAgent:typeof navigator<"u"?navigator.userAgent:"unknown",capabilities:this.platformCapabilities,events:[],calls:[],deviceChanges:[],devices:t};if(!this._diagnosticsCollector)return e;const i=this._diagnosticsCollector.export();return{...e,sdkVersion:i.sdkVersion,userAgent:i.userAgent,events:i.events,calls:i.calls,deviceChanges:i.deviceChanges,devices:t}}initResilienceSubsystems(){try{this._platformCapabilities=Lo(this._options.webRTCApiProvider)}catch(t){K.warn("[SignalWire] Failed to detect platform capabilities:",t)}try{this._networkMonitor=new kp}catch(t){K.warn("[SignalWire] Failed to initialize NetworkMonitor:",t)}try{this._visibilityController=new Np,this.subscribeTo(this._visibilityController.visibilityChange$.pipe(B(t=>t.to==="visible"&&g.instance.refreshDevicesOnVisible)),()=>{K.debug("[SignalWire] Page visible, re-enumerating devices");try{this._deviceController.disableDeviceMonitoring(),this._deviceController.enableDeviceMonitoring()}catch{}})}catch(t){K.warn("[SignalWire] Failed to initialize VisibilityController:",t)}try{this._diagnosticsCollector=new Zf({sdkVersion:"4.0.0-rc.1"})}catch(t){K.warn("[SignalWire] Failed to initialize DiagnosticsCollector:",t)}}async disconnect(){var t,e;(t=this._refreshCoordinator)==null||t.suspend(),(e=this._diagnosticsCollector)==null||e.record("connection","disconnected"),await this.teardownTransportAndSession(),this._isConnected$.next(!1)}async teardownTransportAndSession(){const t=this._clientSession,e=this._transport;if(t){try{await t.disconnect()}catch(i){K.warn("[SignalWire] Error disconnecting previous session:",i)}t.destroy()}e&&e.destroy(),this._clientSession=void 0,this._publicSession=void 0,this._transport=void 0,this._attachManager=void 0}async waitAuthentication(){await Ge(this.ready$.pipe(B(t=>t===!0)))}async register(){try{await this.waitAuthentication(),await this._transport.execute(rs({method:"subscriber.online",params:{}})),this._isRegistered$.next(!0);return}catch(t){if(!this._deps.credential.token)throw this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t})),t;K.debug("[SignalWire] Failed to register user, trying reauthentication...");try{await this._clientSession.reauthenticate(this._deps.credential.token),K.debug("[SignalWire] Reauthentication successful, retrying register()"),await this._transport.execute(rs({method:"subscriber.online",params:{}})),this._isRegistered$.next(!0)}catch(e){K.error("[SignalWire] Reauthentication failed during register():",e);const i=new ri("Failed to register user, and reauthentication attempt also failed. Please check your credentials.",{cause:e instanceof Error?e:new Error(String(e),{cause:e})});throw this._errors$.next(i),i}}}async unregister(){try{await this._transport.execute(rs({method:"subscriber.offline",params:{}})),this._isRegistered$.next(!1)}catch(t){throw K.error("[SignalWire] Failed to unregister user:",t),this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t})),t}}async dial(t,e={}){const i={...g.instance.preferredMediaOptions,...sv(t),...e};return await this.waitAuthentication(),K.debug("[SignalWire] Dialing with options:",i),this._clientSession.createOutboundCall(t,i)}async preflight(t,e){const i=this._clientSession.iceServers??g.instance.iceServers??[],r=this._isConnected$.value;return new Fp(this._deviceController,i,r,0,async(n,s)=>this.dial(n,s),e).run(t)}get session(){return this._publicSession}get audioInputDevices$(){return this.deferEmission(this._deviceController.audioInputDevices$)}get audioInputDevices(){return this._deviceController.audioInputDevices}get audioOutputDevices$(){return this.deferEmission(this._deviceController.audioOutputDevices$)}get audioOutputDevices(){return this._deviceController.audioOutputDevices}get videoInputDevices$(){return this.deferEmission(this._deviceController.videoInputDevices$)}get videoInputDevices(){return this._deviceController.videoInputDevices}get selectedAudioInputDevice$(){return this.deferEmission(this._deviceController.selectedAudioInputDevice$)}get selectedAudioOutputDevice$(){return this.deferEmission(this._deviceController.selectedAudioOutputDevice$)}get selectedVideoInputDevice$(){return this.deferEmission(this._deviceController.selectedVideoInputDevice$)}get selectedAudioInputDevice(){return this._deviceController.selectedAudioInputDevice}get selectedAudioOutputDevice(){return this._deviceController.selectedAudioOutputDevice}get selectedVideoInputDevice(){return this._deviceController.selectedVideoInputDevice}get selectedAudioInputDeviceConstraints(){return this._deviceController.selectedAudioInputDeviceConstraints}get selectedVideoInputDeviceConstraints(){return this._deviceController.selectedVideoInputDeviceConstraints}deviceInfoToConstraints(t){return this._deviceController.deviceInfoToConstraints(t)}selectAudioInputDevice(t){this._deviceController.selectAudioInputDevice(t)}selectVideoInputDevice(t){this._deviceController.selectVideoInputDevice(t)}selectAudioOutputDevice(t){this._deviceController.selectAudioOutputDevice(t)}async applySelectedAudioOutputDevice(t){const e=this._deviceController.selectedAudioOutputDevice;if(!(e!=null&&e.deviceId))return!1;const i=t;if(typeof i.setSinkId!="function")return K.warn("[SignalWire] setSinkId not supported on this element / browser"),!1;try{return await i.setSinkId(e.deviceId),!0}catch(r){return K.warn("[SignalWire] Failed to apply audio output device:",r),!1}}enableDeviceMonitoring(){this._deviceController.enableDeviceMonitoring()}disableDeviceMonitoring(){this._deviceController.disableDeviceMonitoring()}async getDeviceCapabilities(t){return this._deviceController.getDeviceCapabilities(t)}async isValidDevice(t){return this._deviceController.isValidDevice(t)}setStorageManager(t){this._deviceController.setStorageManager(t)}async clearDeviceState(){return this._deviceController.clearDeviceState()}async enumerateDevices(){return this._deviceController.enumerateDevices()}disableAudioInput(){this._deviceController.disableAudioInput()}enableAudioInput(){this._deviceController.enableAudioInput()}disableVideoInput(){this._deviceController.disableVideoInput()}enableVideoInput(){this._deviceController.enableVideoInput()}get videoInputDisabled$(){return this.deferEmission(this._deviceController.videoInputDisabled$)}get audioInputDisabled$(){return this.deferEmission(this._deviceController.audioInputDisabled$)}get videoInputDisabled(){return this._deviceController.videoInputDisabled}get audioInputDisabled(){return this._deviceController.audioInputDisabled}async requestMediaPermissions(t={audio:!0,video:!0}){const e={audio:t.audio??!1,video:t.video??!1};let i=!1,r=!1,n,s;try{const a=(await this._deps.webRTCApiProvider.mediaDevices.getUserMedia(e)).getTracks();for(const o of a){const c=o.getSettings();o.kind==="audio"?(i=!0,c.deviceId&&(n=this.audioInputDevices.find(u=>u.deviceId===c.deviceId))):o.kind==="video"&&(r=!0,c.deviceId&&(s=this.videoInputDevices.find(u=>u.deviceId===c.deviceId))),o.stop()}}catch(a){K.warn("[SignalWire] Media permission request failed:",a)}if(await this._deviceController.enumerateDevices(),i&&n){const a=n.deviceId;n=this.audioInputDevices.find(o=>o.deviceId===a)??n}if(r&&s){const a=s.deviceId;s=this.videoInputDevices.find(o=>o.deviceId===a)??s}return i&&n&&!this.selectedAudioInputDevice&&this.selectAudioInputDevice(n),r&&s&&!this.selectedVideoInputDevice&&this.selectVideoInputDevice(s),{audio:i,video:r,selectedAudioDevice:n,selectedVideoDevice:s}}async resetToDefaults(){await this._deps.storage.clearAll();const t=g.instance;t.preferredAudioInput=null,t.preferredAudioOutput=null,t.preferredVideoInput=null,await this._deviceController.clearDeviceState()}destroy(){var t,e,i,r,n;(t=this._refreshCoordinator)==null||t.destroy(),this._refreshCoordinator=void 0,(e=this._dpopManager)==null||e.destroy(),this._clientSession.teardownSessionState(),this._transport.destroy(),this._clientSession.destroy();try{(i=this._networkMonitor)==null||i.destroy()}catch{}try{(r=this._visibilityController)==null||r.destroy()}catch{}try{(n=this._diagnosticsCollector)==null||n.destroy()}catch{}this._networkMonitor=void 0,this._visibilityController=void 0,this._diagnosticsCollector=void 0,super.destroy()}};const av=W();var yc=class{constructor(t,e){this.host=t,this.embedToken=e}async fetchSAT(){const t=`https://${this.host}/api/fabric/embeds/tokens`,e=1e4,i=new AbortController,r=setTimeout(()=>i.abort(),e);try{const n=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:this.embedToken}),signal:i.signal});if(clearTimeout(r),n.ok)return(await n.json()).token;throw new Ld(`Failed to fetch SAT using embed token: ${n.status} ${n.statusText}`)}catch(n){throw clearTimeout(r),n instanceof Error&&n.name==="AbortError"?new to(`Request timeout after ${e}ms`,{cause:n}):(av.error("[EmbedCredentialProvider] Request failed:",n),n)}}async authenticate(){return{token:await this.fetchSAT(),expiry_at:Date.now()+3600*1e3}}async refresh(){return this.authenticate()}},wc=class{constructor(t){this.credentials=t}async authenticate(){return Promise.resolve(this.credentials)}};(()=>{if(typeof window<"u"){const t=new CustomEvent("signalwire:js:ready",{detail:{version:"4.0.0-rc.1"}});window.dispatchEvent(t)}})();var ov=Object.defineProperty,cv=Object.getOwnPropertyDescriptor,hr=(t,e,i,r)=>{for(var n=r>1?void 0:r?cv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&ov(e,i,n),n};const lv=W();l.SwCallMedia=class extends Z{constructor(){super(...arguments),this.stream=null,this._remoteStreamValue=null,this._lastTrackSignature="",this._subscriptions=[]}connectedCallback(){super.connectedCallback(),!this.stream&&this.call&&this._setupDirectSubscriptions(),this.stream&&(this._remoteStreamValue=this.stream,this._lastTrackSignature=this._computeTrackSignature(this.stream))}updated(e){var i,r,n,s,a;if(super.updated(e),e.has("call")&&(this._cleanupDirectSubscriptions(),!this.stream&&this.call&&this._setupDirectSubscriptions()),e.has("stream")){this._cleanupDirectSubscriptions();const o=this.stream,c=this._computeTrackSignature(o);if(o!==this._remoteStreamValue||c!==this._lastTrackSignature){this._remoteStreamValue=o,this._lastTrackSignature=c;const u=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");u&&Fr(u,o)}}if(!this.stream&&!this.call&&e.has("_callState")){const o=((r=this._callState)==null?void 0:r.remoteStream)??null,c=this._computeTrackSignature(o);if(o!==this._remoteStreamValue||c!==this._lastTrackSignature){this._remoteStreamValue=o,this._lastTrackSignature=c;const u=(n=this.shadowRoot)==null?void 0:n.querySelector("video.mcu-video");u&&Fr(u,o)}}e.has("_devicesState")&&this._applySinkId(((a=(s=this._devicesState)==null?void 0:s.selectedAudioOutput)==null?void 0:a.deviceId)??"")}disconnectedCallback(){super.disconnectedCallback(),this._cleanupDirectSubscriptions(),this._cleanupVideoElement()}_setupDirectSubscriptions(){this.call&&this._subscriptions.push(this.call.remoteStream$.subscribe(e=>{var n;const i=this._computeTrackSignature(e);if(e===this._remoteStreamValue&&i===this._lastTrackSignature)return;this._remoteStreamValue=e,this._lastTrackSignature=i,this.requestUpdate();const r=(n=this.shadowRoot)==null?void 0:n.querySelector("video.mcu-video");r&&Fr(r,e)}))}_computeTrackSignature(e){return e?e.getTracks().map(i=>`${i.kind}:${i.id}`).sort().join("|"):""}_cleanupDirectSubscriptions(){this._subscriptions.forEach(e=>e.unsubscribe()),this._subscriptions=[]}_applySinkId(e){var r;const i=(r=this.shadowRoot)==null?void 0:r.querySelector("video.mcu-video");i!=null&&i.setSinkId&&i.setSinkId(e).catch(n=>{lv.error("[SwCallMedia] Failed to set audio output device:",n)})}_cleanupVideoElement(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");e&&ca(e)}render(){return k`
|
|
70
|
+
`)}function Yg(t,e=[],i=[]){return qg(t,i,e)}function Kg(t){return t.split(/(?=m=)/)}function Sc(t,e){var h;const i=t.split(/\r?\n/),r=i[0].split(" ");if(r.length<4)return t;const n=r.slice(3),s=new Map;for(const p of i){const v=/^a=rtpmap:(\d+)\s+([^\s/]+)/.exec(p);v&&s.set(v[1],v[2])}const a=e.map(p=>p.toUpperCase()),o=[],c=[];for(const p of n){const v=((h=s.get(p))==null?void 0:h.toUpperCase())??"";a.indexOf(v)>=0?o.push(p):c.push(p)}o.sort((p,v)=>{var A,R;const C=((A=s.get(p))==null?void 0:A.toUpperCase())??"",O=((R=s.get(v))==null?void 0:R.toUpperCase())??"";return a.indexOf(C)-a.indexOf(O)});const u=[...o,...c];return[[...r.slice(0,3),...u].join(" "),...i.slice(1)].join(`\r
|
|
71
|
+
`)}function Zg(t){const e=/a=rtpmap:(\d+)\s+opus\/48000/i.exec(t);return e?e[1]:null}function Qg(t,e){let i=t;return i.includes("stereo=")||(i+=";stereo=1"),i.includes("sprop-stereo=")||(i+=";sprop-stereo=1"),i.includes("maxaveragebitrate=")||(i+=`;maxaveragebitrate=${e}`),i}const He=G();var Jg=class extends se{constructor(t,e,i={}){super(),this.peerConnection=t,this.peerConnectionControllerNegotiating$=e,this.onicegatheringstatechangeHandler=()=>{const{iceGatheringState:r}=this.peerConnection;He.debug(`[ICEGatheringController] ICE gathering state changed to: ${r}`),r==="gathering"&&this._iceCandidatesState.next({state:"gathering",validSDP:!1})},this.onicecandidateHandler=r=>{He.debug("[ICEGatheringController] ICE candidate event received:",r.candidate),this.removeTimer("iceCandidateTimer"),r.candidate?this.iceCandidateTimer=setTimeout(()=>{this.peerConnection.iceGatheringState!=="complete"&&(He.warn("[ICEGatheringController] ICE candidate timeout, using current SDP"),this.handleICECandidateTimeout())},this.iceCandidateTimeout):(He.debug("[ICEGatheringController] ICE gathering completed: null candidate received"),this.removeTimer("iceGatheringTimer"),this.handleICEGatheringComplete())},this._iceCandidatesState=this.createBehaviorSubject({state:"new",validSDP:!1}),this.iceCandidateTimeout=i.iceCandidateTimeout??mo,this.iceGatheringTimeout=i.iceGatheringTimeout??yo,this.relayOnly=i.relayOnly??!1,this.setupEventListeners(),this.subscribeTo(this.peerConnectionControllerNegotiating$.pipe(z(r=>r)),r=>{r&&(this.setupEventListeners(),this.iceGatheringTimer=setTimeout(()=>{this.peerConnection.iceGatheringState!=="complete"&&(He.warn("[ICEGatheringController] ICE gathering timeout, using current SDP"),this.handleICEGatheringTimeout())},this.iceGatheringTimeout))})}setupEventListeners(){this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler),this.peerConnection.addEventListener("icecandidate",this.onicecandidateHandler),this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.addEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler)}get iceCandidatesState$(){return this._iceCandidatesState.pipe(fo(this.peerConnectionControllerNegotiating$),z(([t,e])=>e),x(([t,e])=>t.state))}get hasValidLocalDescriptionSDP(){var e;const t=(e=this.peerConnection.localDescription)==null?void 0:e.sdp;return wc(t??"")}get isRelayOnly(){return this.relayOnly}setRelayOnly(t){this.relayOnly=t}handleICEGatheringComplete(){He.debug("[ICEGatheringController] Handling ICE gathering complete"),He.debug(`[ICEGatheringController] Checking ICE gathering state: ${this.peerConnection.iceGatheringState}`),He.debug("[ICEGatheringController] ICE gathering complete"),this._iceCandidatesState.next({state:"complete",validSDP:this.hasValidLocalDescriptionSDP}),this.stopGathering()}stopGathering(){this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler),this.clearAllTimers()}handleICEGatheringTimeout(){var e;this.removeTimer("iceGatheringTimer");const t=this.hasValidLocalDescriptionSDP;t?(He.debug("[ICEGatheringController] Local SDP is valid"),this._iceCandidatesState.next({state:"timeout",validSDP:t}),this.stopGathering()):He.debug(`### ICE gathering timeout
|
|
72
|
+
`,(e=this.peerConnection.localDescription)==null?void 0:e.sdp)}handleICECandidateTimeout(){this.iceCandidateTimer&&this.removeTimer("iceCandidateTimer"),He.warn("[ICEGatheringController] ICE candidate timeout");const t=this.hasValidLocalDescriptionSDP;!t&&!this.relayOnly?this.restartICEGatheringWithRelayOnly():(He.debug("[ICEGatheringController] Using current SDP due to ICE candidate timeout"),this._iceCandidatesState.next({state:"timeout",validSDP:t}),this.stopGathering())}restartICEGatheringWithRelayOnly(){He.debug("[ICEGatheringController] Restarting ICE gathering with relay-only candidates"),this.relayOnly=!0,this.peerConnection.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:"relay"}),this.peerConnection.restartIce()}removeTimer(t){this[t]&&(clearTimeout(this[t]),this[t]=void 0)}clearAllTimers(){He.debug("[ICEGatheringController] Clearing all timers"),this.removeTimer("iceGatheringTimer"),this.removeTimer("iceCandidateTimer")}removeEventListeners(){this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler)}destroy(){He.debug("[ICEGatheringController] Destroying ICEGatheringController"),this.clearAllTimers(),this.removeEventListeners(),super.destroy()}};const As=G();var $g=class extends se{constructor(t={}){super(),this._inputSource=null,this._inputStream=null,this._lastSpokeAt=0,this._gain$=this.createBehaviorSubject(1),this._pttMultiplier=1,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._gainNode=this._audioContext.createGain(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._destination=this._audioContext.createMediaStreamDestination(),this._gainNode.connect(this._analyser),this._analyser.connect(this._destination),this._speakingThreshold=t.speakingThreshold??Bh,this._speakingHoldMs=t.speakingHoldMs??zh,this._pollIntervalMs=t.pollIntervalMs??Io;const e=t.initialGain??1;this._gain$.next(e),this.applyEffectiveGain()}get gain$(){return this._gain$.asObservable()}get gain(){return this._gain$.value}get outputTrack(){const[t]=this._destination.stream.getAudioTracks();return t}get level$(){return this.deferEmission(en(this._pollIntervalMs,Ha).pipe(x(()=>this.computeLevel())))}get speaking$(){return this.deferEmission(this.level$.pipe(x(t=>this.evaluateSpeaking(t)),U()))}setGain(t){const e=Math.max(0,Math.min(2,t));this._gain$.next(e),this.applyEffectiveGain()}setPTTActive(t){this._pttMultiplier=t?1:0,this.applyEffectiveGain()}applyEffectiveGain(){this._gainNode.gain.value=this._gain$.value*this._pttMultiplier}setInputTrack(t){if(this._inputSource){try{this._inputSource.disconnect()}catch(e){As.debug("[LocalAudioPipeline] input disconnect warning:",e)}this._inputSource=null}this._inputStream&&(this._inputStream=null),t&&(this._inputStream=new MediaStream([t]),this._inputSource=this._audioContext.createMediaStreamSource(this._inputStream),this._inputSource.connect(this._gainNode),this._audioContext.state==="suspended"&&this._audioContext.resume().catch(e=>{As.warn("[LocalAudioPipeline] AudioContext resume failed:",e)}))}destroy(){if(this._inputSource){try{this._inputSource.disconnect()}catch{}this._inputSource=null}try{this._gainNode.disconnect(),this._analyser.disconnect()}catch{}this._audioContext.close().catch(t=>{As.debug("[LocalAudioPipeline] audio context close warning:",t)}),super.destroy()}computeLevel(){if(!this._inputSource)return 0;this._analyser.getByteTimeDomainData(this._analyserBuffer);let t=0;for(const e of this._analyserBuffer){const i=(e-128)/128;t+=i*i}return Math.sqrt(t/this._analyserBuffer.length)}evaluateSpeaking(t){const e=Date.now();return t>=this._speakingThreshold?(this._lastSpokeAt=e,!0):e-this._lastSpokeAt<this._speakingHoldMs}};const Ft=G();var ef=class extends se{constructor(t){super(),this.options=t,this.mediaTrackEndedHandler=e=>{this._mediaTrackEnded$.next(e)},this._localStream$=this.createBehaviorSubject(null),this._localAudioTracks$=this.createBehaviorSubject([]),this._localVideoTracks$=this.createBehaviorSubject([]),this._mediaTrackEnded$=this.createSubject()}get localStream$(){return this._localStream$.asObservable().pipe(S(this.destroyed$))}get localAudioTracks$(){return this._localAudioTracks$.asObservable().pipe(S(this.destroyed$))}get localVideoTracks$(){return this._localVideoTracks$.asObservable().pipe(S(this.destroyed$))}get mediaTrackEnded$(){return this._mediaTrackEnded$.asObservable().pipe(S(this.destroyed$))}get localStream(){return this._localStream$.value}get localAudioTracks(){return this._localAudioTracks$.value}get localVideoTracks(){return this._localVideoTracks$.value}async buildLocalStream(){var e,i;Ft.debug("[LocalStreamController] Building local media stream.");let t;if(this.options.inputAudioStream??this.options.inputVideoStream){const r=[...((e=this.options.inputAudioStream)==null?void 0:e.getTracks())??[],...((i=this.options.inputVideoStream)==null?void 0:i.getTracks())??[]];t=new MediaStream(r)}else if(this.options.propose==="screenshare")Ft.debug("[LocalStreamController] Requesting display media for screen sharing with audio:",!!this.options.inputAudioDeviceConstraints),t=await this.options.getDisplayMedia({video:!0,audio:!!this.options.inputAudioDeviceConstraints}),Ft.debug("[LocalStreamController] Screen share media obtained:",t);else{const r={audio:this.options.inputAudioDeviceConstraints,video:this.options.inputVideoDeviceConstraints};Ft.debug("[LocalStreamController] Requesting user media with constraints:",r),t=await this.options.getUserMedia(r),Ft.debug("[LocalStreamController] User media obtained:",t)}return this._localStream$.next(t),this._localAudioTracks$.next(t.getAudioTracks()),this._localVideoTracks$.next(t.getVideoTracks()),t}addTrack(t){const e=this._localStream$.value??new MediaStream;return t.addEventListener("ended",this.mediaTrackEndedHandler),e.addTrack(t),this._localStream$.next(e),t.kind==="video"?this._localVideoTracks$.next(e.getVideoTracks()):this._localAudioTracks$.next(e.getAudioTracks()),Ft.debug(`[LocalStreamController] ${t.kind} track added:`,t.id),e}removeTrack(t){const e=this._localStream$.value,i=e==null?void 0:e.getTracks().find(r=>r.id===t);if(!i){Ft.debug(`[LocalStreamController] track not found: ${t}`);return}return i.removeEventListener("ended",this.mediaTrackEndedHandler),e==null||e.removeTrack(i),i.stop(),this._localStream$.next(e),i.kind==="video"?this._localVideoTracks$.next((e==null?void 0:e.getVideoTracks())??[]):this._localAudioTracks$.next((e==null?void 0:e.getAudioTracks())??[]),Ft.debug(`[LocalStreamController] ${i.kind} track removed:`,t),i}getOrCreateLocalStream(){return this._localStream$.value??new MediaStream}setLocalStream(t){this._localStream$.next(t)}addTrackEndedListener(t){t.addEventListener("ended",this.mediaTrackEndedHandler)}updateOptions(t){this.options={...this.options,...t}}stopAllTracks(){var t;(t=this._localStream$.value)==null||t.getTracks().forEach(e=>{Ft.debug(`[LocalStreamController] Stopping local track: ${e.kind}`),e.removeEventListener("ended",this.mediaTrackEndedHandler),e.stop()})}destroy(){this.stopAllTracks(),super.destroy()}};const je=G(),Cc=(t,e)=>t&&e?"sendrecv":t&&!e?"sendonly":!t&&e?"recvonly":"inactive";var tf=class extends se{constructor(t){super(),this.peerConnection=t.peerConnection,this.options=t}get useAddTransceivers(){return typeof this.peerConnection.addTransceiver=="function"}get useAddTrack(){return typeof this.peerConnection.addTrack=="function"}get useAddStream(){return typeof this.peerConnection.addStream=="function"&&!this.useAddTransceivers&&!this.useAddTrack}get propose(){return this.options.propose}get isAdditionalDevice(){return this.propose==="additional-device"}get isScreenShare(){return this.propose==="screenshare"}get isSimulcast(){return!!this.options.simulcast}get isSFU(){return!!this.options.sfu}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.options.localStreamController.localStream}get inputAudioDeviceConstraints(){return this.options.getInputAudioDeviceConstraints()}get inputVideoDeviceConstraints(){return this.options.getInputVideoDeviceConstraints()}get audioDirection(){if(this.isAdditionalDevice)return"sendonly";const{localStream:t}=this,e=t==null?void 0:t.getAudioTracks().some(n=>n.enabled),i=!!this.inputAudioDeviceConstraints,r=!!this.receiveAudio;return Cc(e||i,r)}get videoDirection(){if(this.isAdditionalDevice||this.isScreenShare)return"sendonly";if(this.isSFU)return"recvonly";const{localStream:t}=this,e=t==null?void 0:t.getVideoTracks().some(n=>n.enabled),i=!!this.inputVideoDeviceConstraints,r=!!this.receiveVideo;return Cc(e||i,r)}get sendEncodings(){if(this.isSimulcast)return["0","1","2"].map(t=>({active:!0,rid:t,scaleResolutionDownBy:Number(t)*6||1}))}getConstraintsFor(t){const e=t==="audio"?this.inputAudioDeviceConstraints:this.inputVideoDeviceConstraints;return typeof e=="boolean"?{}:e}transceiverByKind(t){return this.peerConnection.getTransceivers().filter(e=>t==="both"||e.receiver.track.kind===t)}get audioTransceivers(){return this.transceiverByKind("audio")}get videoTransceivers(){return this.transceiverByKind("video")}async setupTransceiverSender(t,e,i){var a;const r=t.kind==="audio",n=r?this.audioDirection:this.videoDirection,s={direction:n,sendEncodings:r?void 0:this.sendEncodings,streams:n==="recvonly"?void 0:[e]};je.debug(`[TransceiverController] Setting up transceiver sender for local ${t.kind} track:`,{transceiver:i,transceiverParams:s}),s.direction&&["sendonly","sendrecv"].includes(s.direction)&&(i?(await i.sender.replaceTrack(t),i.direction=s.direction,(a=s.streams)!=null&&a.some(o=>!!o)&&(je.debug(`[TransceiverController] Setting streams for transceiver sender for local ${t.kind} track:`,s.streams),i.sender.setStreams(...s.streams))):(je.debug(`[TransceiverController] Adding new transceiver for local ${t.kind} track:`,t.id),this.peerConnection.addTransceiver(t,s)))}stopTrackSender(t,e={updateTransceiverDirection:!1}){var i,r,n;try{const s=this.transceiverByKind(t);for(const a of s)if(((i=a.sender.track)==null?void 0:i.readyState)==="live"){const o=a.sender.track.id;a.sender.track.stop(),this.options.localStreamController.removeTrack(o),e.updateTransceiverDirection&&(a.direction="inactive")}}catch(s){je.error("[TransceiverController] stopTrackSender error",t,s),(n=(r=this.options).onError)==null||n.call(r,new Tt("stopTrackSender",t,s))}}async restoreTrackSender(t){var e,i;try{je.debug("[TransceiverController] restoreTrackSender called",t);const r={},n=this.transceiverByKind(t);for(const a of n){const{track:o}=a.sender;if(!o||o.readyState==="ended"){const c=(o==null?void 0:o.kind)??a.receiver.track.kind;(c==="audio"||c==="video")&&(r[c]=this.getConstraintsFor(c))}}if(je.debug("[TransceiverController] restoreTrackSender constraints:",r),Object.keys(r).length===0){je.warn("[TransceiverController] restoreTrackSender: no tracks need restoration",t);return}const s=(await this.options.getUserMedia(r)).getTracks();je.debug("[TransceiverController] restoreTrackSender new tracks:",s);for(const a of s){this.options.localStreamController.addTrack(a);const o=a.kind,c=this.transceiverByKind(o)[0];c.direction=o==="audio"?this.audioDirection:this.videoDirection,je.debug("[TransceiverController] restoreTrackSender setting direction for",o,c.direction),await c.sender.replaceTrack(a)}}catch(r){je.error("[TransceiverController] restoreTrackSender error",t,r),(i=(e=this.options).onError)==null||i.call(e,new Tt("restoreTrackSender",t,r))}}async replaceSenderTrack(t,e){const i=t==="audio"?this.audioTransceivers:this.videoTransceivers;for(const r of i)await r.sender.replaceTrack(e)}async setupRemoteTransceivers(t){if(t!=="answer"){for(const e of["audio","video"]){const i=e==="audio"?this.audioTransceivers:this.videoTransceivers;for(const r of i){const n=e==="audio"?this.audioDirection:this.videoDirection;["inactive","recvonly"].includes(n)&&(r.direction=n,await r.sender.replaceTrack(null),r.sender.setStreams())}}if(this.videoDirection==="recvonly"&&this.isSFU&&this.useAddTransceivers){const{msStreamsNumber:e=5}=this.options;for(let i=0;i<Number(e);i++)this.peerConnection.addTransceiver("video",{direction:"recvonly"})}}}async updateSendersConstraints(t,e){var r,n;if(!e)return this.stopTrackSender(t),Promise.resolve();const i=this.peerConnection.getSenders().filter(s=>{var a;return((a=s.track)==null?void 0:a.kind)===t&&s.track.readyState==="live"});for(const s of i){const{track:a}=s;if(a){const o={...a.getConstraints(),...e};try{await a.applyConstraints(o),je.debug(`[TransceiverController] Updated ${t} sender constraints:`,o),je.debug(`[TransceiverController] Updated ${t} sender constraints:`,a.getConstraints())}catch(c){je.warn(`[TransceiverController] applyConstraints failed for ${t} track ${a.id}, attempting track replacement fallback:`,c);try{await this.replaceTrackFallback(s,a,t,o)}catch(u){je.warn(`[TransceiverController] Track replacement fallback also failed for ${t} track:`,u),(n=(r=this.options).onError)==null||n.call(r,new Tt("updateSendersConstraints",t,u))}}}}}async replaceTrackFallback(t,e,i,r){const{deviceId:n}=e.getSettings(),s={...r,...n?{deviceId:{exact:n}}:{}},a=e.id;e.stop(),this.options.localStreamController.removeTrack(a);const o=(await this.options.getUserMedia({[i]:s})).getTracks().find(c=>c.kind===i);if(!o)throw new Tt("replaceTrackFallback",i,new Error("getUserMedia returned no track of the requested kind"));await t.replaceTrack(o),this.options.localStreamController.addTrack(o),je.debug(`[TransceiverController] Track replacement fallback succeeded for ${i}. New track: ${o.id}`)}getMediaDirections(){return this.peerConnection.connectionState==="connected"?this.peerConnection.getTransceivers().reduce((t,e)=>({...t,[e.receiver.track.kind]:e.direction}),{audio:"inactive",video:"inactive"}):{audio:this.audioDirection,video:this.videoDirection}}updatePeerConnection(t){this.peerConnection=t}updateOptions(t){this.options={...this.options,...t}}};const B=G();var Ac=class extends se{constructor(t={},e,i){super(),this.options=t,this.firstSDPExchangeCompleted=!1,this.negotiationNeeded$=this.createSubject(),this.localDescription$=oi(()=>Oe(this.init())).pipe(Je(()=>this.iceGatheringController.iceCandidatesState$.pipe(z(n=>!["new","gathering"].includes(n)),Ee(()=>{this.negotiationEnded()}),z(()=>this.shouldEmitLocalDescription),x(()=>{var n;return(n=this.peerConnection)==null?void 0:n.localDescription}),fe(),Ee(n=>{n.type==="answer"&&(this._type="offer")}))),st(1),S(this.destroyed$)),this.connectionTimeout=3e3,this.oniceconnectionstatechangeHandler=()=>{if(this.peerConnection){const{iceConnectionState:n}=this.peerConnection;B.debug(`[RTCPeerConnectionController] ICE connection state changed to: ${n}`),this._iceConnectionState$.next(this.peerConnection.iceConnectionState)}},this.onconnectionstatechangeHandler=()=>{if(this.peerConnection){const{connectionState:n}=this.peerConnection;B.debug(`[RTCPeerConnectionController] Connection state changed to: ${n}`),n==="connected"&&this.removeConnectionTimer(),this._connectionState$.next(this.peerConnection.connectionState)}},this.onsignalingstatechangeHandler=()=>{var n;B.debug(`[RTCPeerConnectionController] Signaling state changed to: ${(n=this.peerConnection)==null?void 0:n.signalingState}`)},this.onicegatheringstatechangeHandler=()=>{this.peerConnection&&this._iceGatheringState$.next(this.peerConnection.iceGatheringState)},this.onnegotiationneededHandler=n=>{B.debug("[RTCPeerConnectionController] Negotiation needed event received.",n),this.negotiationNeeded$.next()},this.updateSelectedInputDevice=async(n,s)=>{var a,o,c;try{const{localStream:u}=this;if(!u){B.warn("[RTCPeerConnectionController] No local stream available to update input device.");return}B.debug(`[RTCPeerConnectionController] Updating selected ${n} input device:`,u.getTracks());const h=u.getTracks().find(p=>p.kind===n);if(h){if((a=this.transceiverController)==null||a.stopTrackSender(n),this.localStreamController.removeTrack(h.id),B.debug(`[RTCPeerConnectionController] Stopped existing ${n} track: ${h.id}`,u.getTracks()),!s){B.debug(`[RTCPeerConnectionController] ${n} input device selected: none`);return}const p=(await this.getUserMedia({[n]:{...h.getConstraints(),...this.deviceController.deviceInfoToConstraints(s)}})).getTracks().find(v=>v.kind===n);p&&(B.debug(`[RTCPeerConnectionController] Adding new ${n} track: ${p.id}`),this.localStreamController.addTrack(p),await((o=this.transceiverController)==null?void 0:o.replaceSenderTrack(n,p)),B.debug(`[RTCPeerConnectionController] Added new ${n} track: ${p.id}`,(c=this.localStream)==null?void 0:c.getTracks()))}B.debug(`[RTCPeerConnectionController] ${n} input device selected:`,s==null?void 0:s.label)}catch(u){throw B.error(`[RTCPeerConnectionController] Failed to select ${n} input device:`,u),this._errors$.next(new Tt("updateSelectedInputDevice",n,u)),u}},this._isNegotiating$=this.createBehaviorSubject(!1),this._memberId=null,this._iceConnectionState$=this.createReplaySubject(1),this._connectionState$=this.createReplaySubject(1),this._signalingState$=this.createReplaySubject(1),this._iceGatheringState$=this.createReplaySubject(1),this._errors$=this.createReplaySubject(1),this._iceCandidates$=this.createReplaySubject(1),this._initialized$=this.createReplaySubject(1),this._remoteDescription$=this.createReplaySubject(1),this._remoteStream$=this.createBehaviorSubject(null),this._remoteOfferMediaDirections=null,this._localAudioPipeline=null,this.deviceController=i??{},this.id=t.callId??un(),this._type=e?"answer":"offer",this.sdpInit=e?{type:"offer",sdp:e}:void 0,this._remoteOfferMediaDirections=e?Gg(e):null;const r=this._remoteOfferMediaDirections?{audio:this._remoteOfferMediaDirections.audio.includes("recv"),video:this._remoteOfferMediaDirections.video.includes("recv"),receiveAudio:this._remoteOfferMediaDirections.audio.includes("send"),receiveVideo:this._remoteOfferMediaDirections.video.includes("send")}:{};this.options={...t,audio:t.audio??r.audio,video:t.video??r.video,receiveAudio:t.receiveAudio??r.receiveAudio??f.instance.receiveAudio,receiveVideo:t.receiveVideo??r.receiveVideo??f.instance.receiveVideo},this.localStreamController=new ef({propose:this.propose,inputAudioStream:this.options.inputAudioStream,inputVideoStream:this.options.inputVideoStream,inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints,getUserMedia:async n=>this.getUserMedia(n),getDisplayMedia:async n=>this.getDisplayMedia(n)})}get iceGatheringController(){if(!this._iceGatheringController)throw new te("ICEGatheringController is not initialized");return this._iceGatheringController}get shouldEmitLocalDescription(){if(!this.peerConnection)return!1;const{localDescription:t,signalingState:e}=this.peerConnection;return!t||!wc(t.sdp)?!1:t.type==="offer"&&e==="have-local-offer"||t.type==="answer"&&e==="stable"}removeConnectionTimer(){this.connectionTimer&&(clearTimeout(this.connectionTimer),this.connectionTimer=void 0)}setMemberId(t){this._memberId=t}get memberId(){return this._memberId}stopTrackSender(t,e={updateTransceiverDirection:!1}){var r,n,s;const i=t==="audio"||t==="both";i&&this._localAudioPipeline&&this.stopRawAudioInputForPipeline(),i?t==="both"?(n=this.transceiverController)==null||n.stopTrackSender("video",e):this._localAudioPipeline||(s=this.transceiverController)==null||s.stopTrackSender(t,e):(r=this.transceiverController)==null||r.stopTrackSender(t,e)}stopRawAudioInputForPipeline(){var e;const t=this.localStreamController.localAudioTracks;for(const i of t)i.readyState==="live"&&(i.stop(),this.localStreamController.removeTrack(i.id));(e=this._localAudioPipeline)==null||e.setInputTrack(null)}get isNegotiating$(){return this._isNegotiating$.asObservable()}get isNegotiating(){return this._isNegotiating$.value}updateMediaDevicesOptions(t){this.options={...this.options,...t}}get iceGatheringState$(){return this.cachedObservable("iceGatheringState$",()=>this._iceGatheringState$.asObservable().pipe(S(this.destroyed$)))}get mediaTrackEnded$(){return this.cachedObservable("mediaTrackEnded$",()=>this.localStreamController.mediaTrackEnded$.pipe(S(this.destroyed$)))}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(S(this.destroyed$)))}get iceCandidates$(){return this.cachedObservable("iceCandidates$",()=>this._iceCandidates$.asObservable().pipe(S(this.destroyed$)))}get initialized$(){return this.cachedObservable("initialized$",()=>this._initialized$.asObservable().pipe(z(t=>t),S(this.destroyed$)))}get remoteDescription$(){return this.cachedObservable("remoteDescription$",()=>this._remoteDescription$.asObservable().pipe(S(this.destroyed$)))}get localStream$(){return this.cachedObservable("localStream$",()=>this.localStreamController.localStream$.pipe(S(this.destroyed$)))}get remoteStream$(){return this.cachedObservable("remoteStream$",()=>this._remoteStream$.asObservable().pipe(S(this.destroyed$)))}get localAudioTracks$(){return this.cachedObservable("localAudioTracks$",()=>this.localStreamController.localAudioTracks$.pipe(S(this.destroyed$)))}get localVideoTracks$(){return this.cachedObservable("localVideoTracks$",()=>this.localStreamController.localVideoTracks$.pipe(S(this.destroyed$)))}get iceConnectionState$(){return this.cachedObservable("iceConnectionState$",()=>this._iceConnectionState$.asObservable().pipe(S(this.destroyed$)))}get connectionState$(){return this.cachedObservable("connectionState$",()=>this._connectionState$.asObservable().pipe(S(this.destroyed$)))}get signalingState$(){return this.cachedObservable("signalingState$",()=>this._signalingState$.asObservable().pipe(S(this.destroyed$)))}get type(){return this._type}get propose(){return this.options.propose??"main"}get isAdditionalDevice(){return this.propose==="additional-device"}get isMainDevice(){return this.propose==="main"}get isScreenShare(){return this.propose==="screenshare"}get iceServers(){if(!this.options.disableUdpIceServers)return this.options.iceServers??[];const t="transport=tcp";return(this.options.iceServers??[]).map(e=>{const i=Array.isArray(e.urls)?e.urls:[e.urls];return{...e,urls:i.filter(r=>r.includes(t))}})}get rtcConfiguration(){const{iceServers:t,...e}=this.options;return{bundlePolicy:"max-compat",iceCandidatePoolSize:10,iceServers:this.iceServers,iceTransportPolicy:this.options.relayOnly?"relay":"all",sdpSemantics:"unified-plan",...e}}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.localStreamController.localStream}get remoteStream(){return this._remoteStream$.value}get inputAudioDeviceConstraints(){if(this.options.audio===!1&&!this.options.inputAudioDeviceConstraints)return!1;const t=this.deviceController.selectedAudioInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputAudioDeviceConstraints=="object"?this.options.inputAudioDeviceConstraints:{},...typeof t=="object"?t:{}}}get inputVideoDeviceConstraints(){if(!this.options.video&&!this.options.inputVideoDeviceConstraints)return!1;const t=this.deviceController.selectedVideoInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputVideoDeviceConstraints=="object"?this.options.inputVideoDeviceConstraints:{},...typeof t=="object"?t:{}}}get WebRTCPeerConnectionConstructor(){var t;return((t=this.options.webRTCApiProvider)==null?void 0:t.RTCPeerConnection)??RTCPeerConnection}get offerOptions(){const t={iceRestart:this.firstSDPExchangeCompleted?!0:void 0};switch(this.propose){case"screenshare":case"additional-device":return{...t,offerToReceiveAudio:!1,offerToReceiveVideo:!1};case"main":default:return{...t,offerToReceiveAudio:this.options.receiveAudio??!0,offerToReceiveVideo:this.options.receiveVideo??!!this.inputVideoDeviceConstraints}}}get answerOptions(){return{iceRestart:this.firstSDPExchangeCompleted?!0:void 0}}async init(){return this.initPromise??(this.initPromise=this.doInit()),this.initPromise}async doInit(){try{this.setupPeerConnection(),this.subscribeTo(this.negotiationNeeded$.pipe(Wd(0),os(async()=>this.startNegotiation())),{next:()=>{B.debug("[RTCPeerConnectionController] Start Negotiation completed successfully")},error:t=>{B.error("[RTCPeerConnectionController] Start Negotiation error:",t),this._errors$.next(di(t))}}),this.subscribeTo(Ni(this.deviceController.selectedAudioInputDevice$.pipe(x(t=>["audio",t])),this.deviceController.selectedVideoInputDevice$.pipe(x(t=>["video",t]))).pipe(Jd(()=>!this.localStreamController.localStream)),async([t,e])=>{B.debug("[RTCPeerConnectionController] Selected input device changed for:",{kind:t,deviceInfo:e}),await this.updateSelectedInputDevice(t,e)}),this.type==="answer"&&this.sdpInit?(await this.setupRemoteTracks(),this._initialized$.next(!0),this.setupEventListeners(),this._isNegotiating$.next(!0),await this._setRemoteDescription(this.sdpInit)):(await this.setupTrackHandling(),this._initialized$.next(!0))}catch(t){B.error("[RTCPeerConnectionController] Initialization error:",t),this._errors$.next(di(t)),this.destroy()}}setupPeerConnection(){this.peerConnection=new this.WebRTCPeerConnectionConstructor(this.rtcConfiguration),this.peerConnection.addEventListener("negotiationneeded",this.onnegotiationneededHandler),this._iceGatheringController=new Jg(this.peerConnection,this.isNegotiating$,{iceCandidateTimeout:this.options.iceCandidateTimeout,iceGatheringTimeout:this.options.iceGatheringTimeout,relayOnly:this.options.relayOnly}),this.transceiverController=new tf({peerConnection:this.peerConnection,propose:this.propose,simulcast:this.options.simulcast,sfu:this.options.sfu,msStreamsNumber:this.options.msStreamsNumber,receiveAudio:this.receiveAudio,receiveVideo:this.receiveVideo,localStreamController:this.localStreamController,getInputAudioDeviceConstraints:()=>this.inputAudioDeviceConstraints,getInputVideoDeviceConstraints:()=>this.inputVideoDeviceConstraints,getUserMedia:async t=>this.getUserMedia(t),onError:t=>{this._errors$.next(t)}})}async startNegotiation(){if(this.isNegotiating){B.debug("[RTCPeerConnectionController] Negotiation already in progress, skipping.");return}if(this.setupEventListeners(),this.type==="answer"){B.debug("[RTCPeerConnectionController] This is an answer type still, skipping offer creation.");return}this._isNegotiating$.next(!0),B.debug("[RTCPeerConnectionController] Starting negotiation.");try{const{offerOptions:t}=this;B.debug("[RTCPeerConnectionController] Creating offer with options:",t),await this.createOffer(t)}catch(t){B.error("[RTCPeerConnectionController] Error during negotiation:",t),this._errors$.next(di(t))}}async createOffer(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=await this.peerConnection.createOffer(t);await this.setLocalDescription(e)}async updateAnswerStatus({status:t,sdp:e}){let i=t!=="failed";try{t==="received"&&e&&(B.debug("[RTCPeerConnectionController] Received answer SDP:",e),await this._setRemoteDescription({type:"answer",sdp:e}))}catch(r){B.error("[RTCPeerConnectionController] Error updating answer status:",r),this._errors$.next(di(r)),i=!1}finally{i?this.readyToConnect():this.iceGatheringController.restartICEGatheringWithRelayOnly()}}async updateOfferStatus({status:t,sdp:e}){switch(t){case"received":this._type="answer",this.sdpInit={type:"offer",sdp:e},await this.handleOfferReceived();break;case"failed":B.error("[RTCPeerConnectionController] Offer failed to be processed by remote.");break}}async acceptInbound(t){var i;if(t){const{audio:r,video:n,receiveAudio:s,receiveVideo:a,fallbackToReceiveOnly:o}=t;this.options={...this.options,...r!==void 0?{audio:r}:{},...n!==void 0?{video:n}:{},...s!==void 0?{receiveAudio:s}:{},...a!==void 0?{receiveVideo:a}:{},...o!==void 0?{fallbackToReceiveOnly:o}:{}},(i=this.transceiverController)==null||i.updateOptions({receiveAudio:this.receiveAudio,receiveVideo:this.receiveVideo}),this.localStreamController.updateOptions({inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints})}await this.setupLocalTracks();const{answerOptions:e}=this;B.debug("[RTCPeerConnectionController] Creating inbound answer with options:",e),await this.createAnswer(e)}async handleOfferReceived(){if(!this.sdpInit)throw new te("SDP initialization parameters are not set");this._isNegotiating$.next(!0),await this._setRemoteDescription(this.sdpInit);const{answerOptions:t}=this;B.debug("[RTCPeerConnectionController] Creating answer with options:",t),await this.createAnswer(t)}readyToConnect(){this.firstSDPExchangeCompleted=!0,this.connectionTimer=setTimeout(()=>{var t;this.removeConnectionTimer(),((t=this.peerConnection)==null?void 0:t.connectionState)!=="connected"&&(B.debug("[RTCPeerConnectionController] Connection timeout, restarting ICE gathering with relay only."),this.iceGatheringController.restartICEGatheringWithRelayOnly())},this.connectionTimeout)}async setRemoteDescriptionBefore(t=""){return Promise.resolve(t)}async setLocalDescription(t){var i;const e=await this.setLocalDescriptionBefore(t.sdp);return(i=this.peerConnection)==null?void 0:i.setLocalDescription({...t,sdp:e})}async setLocalDescriptionBefore(t=""){let e=t;const i=this.options.preferredAudioCodecs??f.instance.preferredAudioCodecs,r=this.options.preferredVideoCodecs??f.instance.preferredVideoCodecs,n=this.options.stereo??f.instance.stereoAudio;return(i.length>0||r.length>0)&&(e=Yg(e,i,r),B.debug("[RTCPeerConnectionController] Applied codec preferences to SDP",{preferredAudioCodecs:i,preferredVideoCodecs:r})),n&&(e=Xg(e),B.debug("[RTCPeerConnectionController] Applied stereo Opus to SDP")),Promise.resolve(e)}async createAnswer(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=await this.peerConnection.createAnswer(t);await this.setLocalDescription(e)}setupEventListeners(){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");this._iceConnectionState$.next(this.peerConnection.iceConnectionState),this._connectionState$.next(this.peerConnection.connectionState),this._signalingState$.next(this.peerConnection.signalingState),this._iceGatheringState$.next(this.peerConnection.iceGatheringState),this._remoteDescription$.next(this.peerConnection.remoteDescription),this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.addEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.addEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.removeEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.addEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.removeEventListener("signalingstatechange",this.onsignalingstatechangeHandler),this.peerConnection.addEventListener("signalingstatechange",this.onsignalingstatechangeHandler)}negotiationEnded(){this._isNegotiating$.next(!1)}async triggerIceRestart(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=t&&!this.options.relayOnly;if(e)try{this.peerConnection.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:"relay"}),B.debug("[RTCPeerConnectionController] ICE transport policy set to relay-only")}catch(i){B.warn("[RTCPeerConnectionController] Failed to set relay-only policy:",i)}this.setupEventListeners(),this._isNegotiating$.next(!0),B.debug(`[RTCPeerConnectionController] Triggering ICE restart${t?" (relay-only)":""}.`);try{const i=await this.peerConnection.createOffer({iceRestart:!0});await this.setLocalDescription(i)}catch(i){throw B.error("[RTCPeerConnectionController] ICE restart offer failed:",i),this._errors$.next(di(i)),this.negotiationEnded(),e&&this.restoreIceTransportPolicy(),i}e&&Ke(Cr(this._iceGatheringState$.pipe(z(i=>i==="complete"),_e(1)),Fi(Fh).pipe(x(()=>"timeout")))).then(()=>this.restoreIceTransportPolicy()).catch(i=>{B.warn("[RTCPeerConnectionController] Error waiting for ICE gathering to complete:",i),this.restoreIceTransportPolicy()})}restoreIceTransportPolicy(){var t;try{(t=this.peerConnection)==null||t.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:this.options.relayOnly?"relay":"all"}),B.debug("[RTCPeerConnectionController] ICE transport policy restored")}catch(e){B.warn("[RTCPeerConnectionController] Failed to restore ICE transport policy:",e)}}async setupTrackHandling(){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");await this.setupLocalTracks(),await this.setupRemoteTracks()}async setupLocalTracks(){var e,i,r,n,s,a,o;if(B.debug("[RTCPeerConnectionController] Setting up local tracks/transceivers."),this.hasNoLocalMediaToSend()){if(!this.receiveAudio&&!this.receiveVideo)throw new hs("Call requests no media: enable audio/video or receiveAudio/receiveVideo");B.debug("[RTCPeerConnectionController] No local media requested; negotiating receive-only."),this.setupReceiveOnlyTransceivers();return}let t;try{t=this.localStream??await this.localStreamController.buildLocalStream()}catch(c){this.handleLocalMediaFailure(c);return}if(((e=this.transceiverController)==null?void 0:e.useAddStream)??!1){B.warn("[RTCPeerConnectionController] Using deprecated addStream API to add local stream."),(i=this.peerConnection)==null||i.addStream(t),this.isNegotiating||(B.debug("[RTCPeerConnectionController] Forcing negotiationneeded after local tracks setup."),this.negotiationNeeded$.next());return}for(const c of["audio","video"]){const u=(c==="audio"?t.getAudioTracks():t.getVideoTracks()).map((h,p)=>({index:p,track:h}));for(const{index:h,track:p}of u)if(this.localStreamController.addTrackEndedListener(p),((r=this.transceiverController)==null?void 0:r.useAddTransceivers)??!1){const v=(c==="audio"?(n=this.transceiverController)==null?void 0:n.audioTransceivers:(s=this.transceiverController)==null?void 0:s.videoTransceivers)??[];await((a=this.transceiverController)==null?void 0:a.setupTransceiverSender(p,t,v[h]))}else B.debug(`[RTCPeerConnectionController] Using addTrack for local ${c} track:`,p.id),(o=this.peerConnection)==null||o.addTrack(p,t)}}hasNoLocalMediaToSend(){const t=!!(this.options.inputAudioStream??this.options.inputVideoStream);return this.propose==="main"&&!this.localStream&&!t&&!this.inputAudioDeviceConstraints&&!this.inputVideoDeviceConstraints}get requestedMediaKinds(){const t=!!this.inputAudioDeviceConstraints,e=!!this.inputVideoDeviceConstraints;return t&&e?"audiovideo":e?"video":"audio"}handleLocalMediaFailure(t){if(this.propose==="screenshare")throw new jt("startScreenShare","screen",t,!1);if(this.propose==="additional-device")throw new jt("addInputDevice",this.requestedMediaKinds,t,!1);const e=this.receiveAudio||this.receiveVideo;if(!((this.options.fallbackToReceiveOnly??!0)&&e))throw new jt("acquireLocalMedia",this.requestedMediaKinds,t,!0);B.warn("[RTCPeerConnectionController] Local media unavailable; continuing receive-only:",t),this._errors$.next(new jt("acquireLocalMedia",this.requestedMediaKinds,t,!1)),this.setupReceiveOnlyTransceivers()}setupReceiveOnlyTransceivers(){var t,e,i;this.type==="offer"&&((((t=this.transceiverController)==null?void 0:t.useAddTransceivers)??!1)&&((e=this.peerConnection)==null||e.addTransceiver("audio",{direction:this.receiveAudio?"recvonly":"inactive"}),(i=this.peerConnection)==null||i.addTransceiver("video",{direction:this.receiveVideo?"recvonly":"inactive"})),this.isNegotiating||this.negotiationNeeded$.next())}async getUserMedia(t){var e;return(((e=this.options.webRTCApiProvider)==null?void 0:e.mediaDevices)??navigator.mediaDevices).getUserMedia(t)}async getDisplayMedia(t){var i;const e=((i=this.options.webRTCApiProvider)==null?void 0:i.mediaDevices)??navigator.mediaDevices;if(!e.getDisplayMedia)throw new te("getDisplayMedia is not supported by the current WebRTC provider");return e.getDisplayMedia(t)}async setupRemoteTracks(){var t;if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");this.peerConnection.ontrack=e=>{var i;if(B.debug("[RTCPeerConnectionController] Remote track received:",e.track.kind),e.streams[0])this._remoteStream$.next(e.streams[0]);else{const r=((i=this._remoteStream$.value)==null?void 0:i.getTracks())??[],n=new MediaStream([...r,e.track]);this._remoteStream$.next(n)}},await((t=this.transceiverController)==null?void 0:t.setupRemoteTransceivers(this.type))}async restoreTrackSender(t){var i,r,n;const e=t==="audio"||t==="both";e&&this._localAudioPipeline&&await this.restoreRawAudioInputForPipeline(),e?t==="both"?await((r=this.transceiverController)==null?void 0:r.restoreTrackSender("video")):this._localAudioPipeline||await((n=this.transceiverController)==null?void 0:n.restoreTrackSender(t)):await((i=this.transceiverController)==null?void 0:i.restoreTrackSender(t))}async restoreRawAudioInputForPipeline(){var r;if(!this._localAudioPipeline)return;const t=((r=this.transceiverController)==null?void 0:r.getConstraintsFor("audio"))??{};let e;try{e=await this.getUserMedia({audio:t})}catch(n){B.error("[RTCPeerConnectionController] Failed to re-acquire mic for pipeline restore:",n),this._errors$.next(new Tt("restoreAudioPipelineInput","audio",n));return}const i=e.getAudioTracks().at(0);i&&(this.localStreamController.addTrack(i),this._localAudioPipeline.setInputTrack(i))}ensureLocalAudioPipeline(){if(this._localAudioPipeline)return this._localAudioPipeline;if(!this.peerConnection)return null;try{this._localAudioPipeline=new $g}catch(t){return B.warn("[RTCPeerConnectionController] Failed to create LocalAudioPipeline:",t),null}return this.subscribeTo(this.localStreamController.localAudioTracks$,()=>{this.applyLocalAudioPipelineToSender()}),this.applyLocalAudioPipelineToSender(),this._localAudioPipeline}get localAudioPipeline(){return this._localAudioPipeline}async applyLocalAudioPipelineToSender(){var i,r;if(!this._localAudioPipeline||!this.peerConnection)return;const t=this.localStreamController.localAudioTracks.at(0);this._localAudioPipeline.setInputTrack(t??null);const e=((r=(i=this.transceiverController)==null?void 0:i.audioTransceivers.at(0))==null?void 0:r.sender)??this.peerConnection.getSenders().find(n=>{var s;return((s=n.track)==null?void 0:s.kind)==="audio"});if(!(!e||!t))try{await e.replaceTrack(this._localAudioPipeline.outputTrack)}catch(n){B.warn("[RTCPeerConnectionController] Failed to route audio sender through pipeline:",n)}}addLocalTrack(t){if(!this.peerConnection){const e=new te("RTCPeerConnection is not initialized");throw this._errors$.next(e),e}try{const e=this.localStreamController.addTrack(t);this.peerConnection.addTrack(t,e),B.debug(`[RTCPeerConnectionController] ${t.kind} track added:`,t.id)}catch(e){throw B.error(`[RTCPeerConnectionController] Failed to add ${t.kind} track:`,e),this._errors$.next(new Tt("addLocalTrack",t.kind,e)),e}}removeLocalTrack(t){var i,r,n;if(!this.peerConnection){const s=new te("RTCPeerConnection is not initialized");throw this._errors$.next(s),s}const e=this.peerConnection.getSenders().find(s=>{var a;return((a=s.track)==null?void 0:a.id)===t});if(!e){B.debug(`[RTCPeerConnectionController] track not found: ${t}`);return}try{this.peerConnection.removeTrack(e),this.localStreamController.removeTrack(t),B.debug(`[RTCPeerConnectionController] ${(i=e.track)==null?void 0:i.kind} track removed:`,t)}catch(s){throw B.error(`[RTCPeerConnectionController] Failed to remove ${(r=e.track)==null?void 0:r.kind} track:`,s),this._errors$.next(new Tt("removeLocalTrack",((n=e.track)==null?void 0:n.kind)??"unknown",s)),s}}setLocalTrack(t){const e=[...t.kind==="audio"?this.localStreamController.localAudioTracks:this.localStreamController.localVideoTracks];for(const i of e)this.removeLocalTrack(i.id);this.addLocalTrack(t)}async updateSendersConstraints(t,e){var i;await((i=this.transceiverController)==null?void 0:i.updateSendersConstraints(t,e))}async replaceAudioTrackWithConstraints(t){var i;const e=(i=this.peerConnection)==null?void 0:i.getSenders().filter(r=>{var n;return((n=r.track)==null?void 0:n.kind)==="audio"&&r.track.readyState==="live"});if(!e||e.length===0){B.warn("[RTCPeerConnectionController] No live audio sender to replace");return}for(const r of e){const n=r.track;if(!n)continue;const{deviceId:s}=n.getSettings(),a={...n.getConstraints(),...t,...s?{deviceId:{exact:s}}:{}},o=n.id;n.stop(),this.localStreamController.removeTrack(o);const c=(await this.getUserMedia({audio:a})).getAudioTracks()[0];await r.replaceTrack(c),this.localStreamController.addTrack(c),B.debug(`[RTCPeerConnectionController] Audio track replaced for server-pushed params. New track: ${c.id}`)}}destroy(){var t,e,i;B.debug(`[RTCPeerConnectionController] Destroying RTCPeerConnectionController. ${this.propose}`),this.removeConnectionTimer(),(t=this._iceGatheringController)==null||t.destroy(),(e=this._localAudioPipeline)==null||e.destroy(),this._localAudioPipeline=null,this.localStreamController.destroy(),(i=this.transceiverController)==null||i.destroy(),this.peerConnection&&(this.stopRemoteTracks(),this.removeAllListeners(),this.peerConnection.close(),this.peerConnection=void 0),super.destroy()}removeAllListeners(){this.peerConnection&&(this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.removeEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.removeEventListener("signalingstatechange",this.onsignalingstatechangeHandler),this.peerConnection.removeEventListener("negotiationneeded",this.onnegotiationneededHandler))}stopRemoteTracks(){var t;(t=this._remoteStream$.value)==null||t.getTracks().forEach(e=>{B.debug(`[RTCPeerConnectionController] Stopping remote track: ${e.kind}`),e.stop()})}get mediaDirections(){var t;return((t=this.transceiverController)==null?void 0:t.getMediaDirections())??this._remoteOfferMediaDirections??{audio:"inactive",video:"inactive"}}async _setRemoteDescription(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=await this.setRemoteDescriptionBefore(t.sdp),i={...t,sdp:e};return B.debug("[RTCPeerConnectionController] Setting remote description:",i),this.peerConnection.setRemoteDescription(i)}};function Ts(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"id")}function Tc(t){if(!Ts(t))return!1;const e=t;return e.method==="verto.invite"&&ke(e.params)&&Y(e.params,"sdp")&&Y(e.params,"callID")}function rf(t){return Ts(t)?t.method==="verto.bye":!1}function Ec(t){return Ts(t)?t.method==="verto.attach":!1}function nf(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"method")&&t.method==="verto.answer"&&ke(t.params)&&Y(t.params,"callID")}function sf(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"method")&&t.method==="verto.media"&&ke(t.params)&&Y(t.params,"callID")&&Y(t.params,"sdp")}function af(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"method")&&t.method==="verto.mediaParams"&&ke(t.params)&&Y(t.params,"mediaParams")}function of(t){return ke(t)&&Y(t,"jsonrpc")&&t.jsonrpc==="2.0"&&Y(t,"method")&&t.method==="verto.ping"}function kc(t){return ke(t)&&Y(t,"callID")&&typeof t.callID=="string"}const H=G();function cf(t){return t.isInvite&&!t.reattach&&!t.explicitNodeId?"":t.currentNodeId??""}var lf=class extends se{constructor(t){super(),this.callSession=t}destroy(){this.callSession=void 0,super.destroy()}},uf=class extends lf{constructor(t,e,i,r,n={}){super(t),this.webRtcCallSession=t,this.attachManager=e,this.deviceController=i,this.webRTCApiProvider=r,this._rtcPeerConnections$=this.createBehaviorSubject([]),this._selfId$=this.createBehaviorSubject(null),this._signalingStatus$=this.createReplaySubject(1),this._screenShareStatus$=this.createBehaviorSubject("none"),this._rtcPeerConnectionsMap=new Map,this._screenShareTimeoutMs=5e4,this._nodeId$=this.createBehaviorSubject(n.nodeId??null),this.onError=n.onError,this.onModifyFailed=n.onModifyFailed,this.initSubscriptions(),this.initMainPeerConnection()}async hold(){const t=fn({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},action:"hold"});try{await this.executeVerto(t)}catch(e){throw H.warn("[WebRTCManager] Call might already be disconnected, error sending Verto hold:",e),e}}async unhold(){const t=fn({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},action:"unhold"});try{await this.executeVerto(t)}catch(e){throw H.warn("[WebRTCManager] Call might already be disconnected, error sending Verto unhold:",e),e}}get mediaDirections(){return this.mainPeerConnection.mediaDirections}get rtcPeerConnections$(){return this._rtcPeerConnections$.asObservable()}get rtcPeerConnections(){return this._rtcPeerConnections$.value}get nodeId$(){return this._nodeId$.asObservable()}get selfId$(){return this._selfId$.asObservable()}get localStream(){var t;return((t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id))==null?void 0:t.localStream)??null}get remoteStream(){var t;return((t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id))==null?void 0:t.remoteStream)??null}get nodeId(){return this._nodeId$.value}get screenShareStatus(){return this._screenShareStatus$.value}get screenShareStatus$(){return this._screenShareStatus$.asObservable()}get mainPeerConnection(){const t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id);if(!t)throw new te("Main peer connection not found");return t}get signalingStatus$(){return this.cachedObservable("signalingStatus$",()=>Ni(this._signalingStatus$.asObservable(),this.mainPeerConnection.connectionState$.pipe(z(t=>["connected","disconnected","failed"].includes(t)))))}initSubscriptions(){this.subscribeTo(this.callJoinedEvent$,t=>{var i;const e=(i=t.room_session.members.find(r=>r.call_id===t.call_id))==null?void 0:i.node_id;e&&this.setNodeIdIfNull(e),t.member_id&&this.setSelfIdIfNull(t.member_id)}),this.subscribeTo(this.vertoMedia$,t=>{var r;H.debug("[WebRTCManager] Received Verto media event (early media SDP):",t);const{sdp:e,callID:i}=t;this.emitMainSignalingStatus(i,"ringing"),(r=this._rtcPeerConnectionsMap.get(i))==null||r.updateAnswerStatus({status:"received",sdp:e})}),this.subscribeTo(this.vertoAnswer$,t=>{var r;H.debug("[WebRTCManager] Received Verto answer event:",t);const{sdp:e,callID:i}=t;this.emitMainSignalingStatus(i,"connecting"),(r=this._rtcPeerConnectionsMap.get(i))==null||r.updateAnswerStatus({status:"received",sdp:e})}),this.subscribeTo(this.vertoMediaParams$,t=>{H.debug("[WebRTCManager] Received Verto mediaParams event:",t);const{mediaParams:e,callID:i}=t,r=this._rtcPeerConnectionsMap.get(i),{audio:n,video:s}=e;(async()=>{var a;try{n&&r&&await r.replaceAudioTrackWithConstraints(n),s&&await(r==null?void 0:r.updateSendersConstraints("video",s)),this.webRtcCallSession.emitMediaParamsUpdated({audio:n,video:s,timestamp:Date.now()})}catch(o){H.warn("[WebRTCManager] Error applying server-pushed media params:",o),(a=this.onError)==null||a.call(this,o instanceof Error?o:new Error(String(o),{cause:o}))}})()}),this.subscribeTo(this.vertoPing$,t=>{this.attachManager.attach(this.buildAttachableCall()),this.sendVertoPong(t)})}setNodeIdIfNull(t){!this._nodeId$.value&&t&&(H.debug(`[WebRTCManager] Early node_id set: ${t}`),this._nodeId$.next(t))}setSelfIdIfNull(t){!this._selfId$.value&&t&&(H.debug(`[WebRTCManager] Early selfId set: ${t}`),this._selfId$.next(t))}async sendVertoPong(t){var e;try{const i=Tg({...t});await this.executeVerto(i)}catch(i){H.warn("[WebRTCManager] Call might disconnect, error sending Verto pong:",i),(e=this.onError)==null||e.call(this,new Lo(i))}}async updateMediaConstraints(t={}){var r;const{audio:e,video:i}=t;try{e&&await this.mainPeerConnection.updateSendersConstraints("audio",e),i&&await this.mainPeerConnection.updateSendersConstraints("video",i)}catch(n){throw H.warn("[WebRTCManager] Error updating media constraints:",n),(r=this.onError)==null||r.call(this,n instanceof Error?n:new Error(String(n),{cause:n})),n}}get selfId(){return this._selfId$.value}buildAttachableCall(t){return{nodeId:this.nodeId??void 0,id:t??this.webRtcCallSession.id,to:this.webRtcCallSession.to,mediaDirections:this.webRtcCallSession.mediaDirections}}requestKeyframe(){try{const t=this.mainPeerConnection.peerConnection;if(!t){H.warn("[WebRTCManager] No peer connection for keyframe request");return}const e=t.getReceivers().find(i=>i.track.kind==="video");if(!e){H.warn("[WebRTCManager] No video receiver for keyframe request");return}typeof e.requestKeyFrame=="function"?(e.requestKeyFrame(),H.debug("[WebRTCManager] Keyframe requested via RTCRtpReceiver.requestKeyFrame()")):H.debug("[WebRTCManager] requestKeyFrame() not supported, skipping")}catch(t){H.warn("[WebRTCManager] Keyframe request failed (non-fatal):",t)}}async requestIceRestart(t){try{const e=this.mainPeerConnection;if(!e.peerConnection){H.warn("[WebRTCManager] No peer connection for ICE restart");return}await e.triggerIceRestart(t),H.info(`[WebRTCManager] ICE restart initiated${t?" (relay-only)":""}`)}catch(e){throw H.error("[WebRTCManager] ICE restart failed:",e),e}}async requestIceRestartAll(t){const e=Array.from(this._rtcPeerConnectionsMap.entries());for(const[i,r]of e)try{if(!r.peerConnection){H.debug(`[WebRTCManager] No peer connection for leg ${i}, skipping ICE restart`);continue}await r.triggerIceRestart(t),H.info(`[WebRTCManager] ICE restart initiated for leg ${i}${t?" (relay-only)":""}`)}catch(n){H.warn(`[WebRTCManager] ICE restart failed for leg ${i}:`,n)}}requestKeyframeAll(){for(const[t,e]of this._rtcPeerConnectionsMap){if(e.isScreenShare){H.debug(`[WebRTCManager] Skipping keyframe for send-only screen share leg ${t}`);continue}try{const i=e.peerConnection;if(!i)continue;const r=i.getReceivers().find(n=>n.track.kind==="video");if(!r)continue;typeof r.requestKeyFrame=="function"&&(r.requestKeyFrame(),H.debug(`[WebRTCManager] Keyframe requested for leg ${t}`))}catch(i){H.warn(`[WebRTCManager] Keyframe request failed for leg ${t} (non-fatal):`,i)}}}get callJoinedEvent$(){return this.webRtcCallSession.callEvent$.pipe(z(yc),S(this.destroyed$))}get vertoMedia$(){return this.webRtcCallSession.webrtcMessages$.pipe(we(sf,"params"),S(this.destroyed$))}get vertoAnswer$(){return this.cachedObservable("vertoAnswer$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(nf,"params"),S(this.destroyed$)))}get vertoMediaParams$(){return this.cachedObservable("vertoMediaParams$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(af,"params"),S(this.destroyed$)))}get vertoBye$(){return this.cachedObservable("vertoBye$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(rf,"params"),S(this.destroyed$)))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(Ec,"params"),S(this.destroyed$)))}get vertoPing$(){return this.cachedObservable("vertoPing$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(of,"params"),S(this.destroyed$)))}async executeVerto(t,e={}){var s,a;const i=rc({callID:e.callID??this.webRtcCallSession.id,node_id:e.node_id??this._nodeId$.value??"",message:t,subscribe:e.subscribe}),r=await this.webRtcCallSession.execute(i);if(r.error){const o=new _t(r.error.code,r.error.message,r.error.data);return(s=this.onError)==null||s.call(this,o),r}const n=at(r,"result.result");if(n!=null&&n.error){const o=new _t(n.error.code,n.error.message,n.error.data);return(a=this.onError)==null||a.call(this,o),r}return r}async sendLocalDescription(t,e){var n,s;const i=t.method,r=this.getSendLocalSDPOptionalParams(e,t);try{const a=await this.executeVerto(t,r);switch(i){case"verto.invite":this.processInviteResponse(a,e);break;case"verto.modify":await this.processModifyResponse(a,e);break;default:}}catch(a){H.error(`[WebRTCManager] Error sending Verto ${i}:`,a),(n=this.onError)==null||n.call(this,a instanceof Error?a:new Error(String(a),{cause:a})),i==="verto.modify"&&((s=this.onModifyFailed)==null||s.call(this))}}async processModifyResponse(t,e){var i;if(!t.error){const r=at(t,"result.result.result.action"),n=at(t,"result.result.result.sdp");if(r==="updateMedia"&&n)try{await e.updateAnswerStatus({status:"received",sdp:n})}catch(s){H.warn("[WebRTCManager] Error processing modify response:",s);const a=s instanceof Error?s:new Error(String(s),{cause:s});(i=this.onError)==null||i.call(this,a)}}}emitMainSignalingStatus(t,e){var r;const i=this._rtcPeerConnectionsMap.get(t);if(!i){const n=new te(`Cannot emit signaling status, RTCPeerConnectionController not found for callID: ${t}`);H.error("[WebRTCManager] Failed to emit signaling status:",{callId:t,status:e,signalingError:n}),(r=this.onError)==null||r.call(this,n);return}i.isMainDevice&&this._signalingStatus$.next(e)}processInviteResponse(t,e){var i;if(!t.error&&at(t,"result.result.result.message")==="CALL CREATED"){this.emitMainSignalingStatus(e.id,"trying"),this._nodeId$.next(at(t,"result.node_id")??null);const r=at(t,"result.result.result.memberID")??null,n=at(t,"result.result.result.callID")??null;H.debug("[WebRTCManager] Verto invite response:",{callId:n,memberId:r,response:t}),this._selfId$.next(r),e.setMemberId(r),n?(this.webRtcCallSession.addCallId(n),this.attachManager.attach(this.buildAttachableCall(n))):H.warn("[WebRTCManager] Cannot attach call, missing callId:",{nodeId:this.nodeId,callId:n}),H.info("[WebRTCManager] Verto invite successful"),H.debug(`[WebRTCManager] nodeid: ${this._nodeId$.value}, selfId: ${this._selfId$.value}`)}else{H.error("[WebRTCManager] Verto invite failed:",t);const r=t.error?new _t(t.error.code,t.error.message,t.error.data):new Error("Verto invite failed: unexpected response");(i=this.onError)==null||i.call(this,r)}}get RTCPeerConnectionConfig(){return{iceServers:this.webRtcCallSession.clientSession.iceServers??f.instance.iceServers,relayOnly:f.instance.relayOnly||f.instance.disableUdpIceServers,disableUdpIceServers:f.instance.disableUdpIceServers,iceCandidateTimeout:f.instance.iceCandidateTimeout,iceGatheringTimeout:f.instance.iceGatheringTimeout}}initMainPeerConnection(){const{options:t}=this.webRtcCallSession,e=new Ac({propose:"main",callId:this.webRtcCallSession.id,audio:t.audio,video:t.video,inputAudioDeviceConstraints:t.inputAudioDeviceConstraints,inputVideoDeviceConstraints:t.inputVideoDeviceConstraints,inputAudioStream:t.inputAudioStream,inputVideoStream:t.inputVideoStream,receiveAudio:t.receiveAudio,receiveVideo:t.receiveVideo,fallbackToReceiveOnly:t.fallbackToReceiveOnly,webRTCApiProvider:this.webRTCApiProvider,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs,stereo:t.stereo,...this.RTCPeerConnectionConfig},t.initOffer,this.deviceController);this.setupLocalDescriptionHandler(e),this.setupVertoByeHandler(),this.setupVertoAttachHandler(),this.initObservables(e),this._rtcPeerConnectionsMap.set(e.id,e),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(e.errors$,i=>{var r;(r=this.onError)==null||r.call(this,i)}),t.initOffer&&this.handleInboundAnswer(e)}async handleInboundAnswer(t){var i,r,n;H.debug("[WebRTCManager] Waiting for inbound call to be accepted or rejected");const e=await Ke(Cr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(S(this.destroyed$))).catch(()=>null);if(e===null){H.debug("[WebRTCManager] Inbound answer handler aborted (destroyed).");return}if(kc(e))H.info("[WebRTCManager] Inbound call ended by remote before answer."),(i=this.callSession)==null||i.destroy();else if(e){H.debug("[WebRTCManager] Inbound call accepted, creating SDP answer");const s=this.webRtcCallSession.answerMediaOptions;try{await t.acceptInbound(s)}catch(a){H.error("[WebRTCManager] Error creating inbound answer:",a),(n=this.onError)==null||n.call(this,a instanceof Error?a:new Error(String(a),{cause:a}))}}else{H.info("[WebRTCManager] Inbound call rejected by user.");try{await this.bye("USER_BUSY")}finally{this._signalingStatus$.next("disconnected"),(r=this.callSession)==null||r.destroy()}}}setupVertoAttachHandler(){this.subscribeTo(this.vertoAttach$,async t=>{H.debug("[WebRTCManager] Received Verto attach event for existing call:",t);const{callID:e}=t;await this.attachManager.attach({nodeId:this.nodeId??void 0,id:e,to:t.callee_id_number,mediaDirections:{audio:"sendrecv",video:"inactive"}})})}initObservables(t){this.mediaDirections$=t.connectionState$.pipe(z(e=>e==="connected"),x(()=>t.mediaDirections),$d(t.mediaDirections),S(this.destroyed$)),this.localStream$=t.localStream$.pipe(fe(),S(this.destroyed$)),this.remoteStream$=t.remoteStream$.pipe(fe(),S(this.destroyed$))}setupLocalDescriptionHandler(t){this.subscribeTo(t.localDescription$.pipe(z(e=>e!==null),S(this.destroyed$)),e=>{const{type:i,sdp:r}=e,n=this.dialogParams(t),s=!t.firstSDPExchangeCompleted;if(i==="answer"){const a=Cg({dialogParams:n,sdp:r});this.sendLocalDescriptionOnceAccepted(a,t)}else if(s){const a=yg({dialogParams:n,sdp:r});this.sendLocalDescription(a,t)}else{const a=fn({dialogParams:n,sdp:r,action:"updateMedia"});this.sendLocalDescription(a,t)}})}setupVertoByeHandler(){this.subscribeTo(this.vertoBye$,()=>{var t;this._signalingStatus$.next("disconnected"),this.attachManager.detach(this.buildAttachableCall()),(t=this.callSession)==null||t.destroy()})}getSendLocalSDPOptionalParams(t,e){let i;return t.firstSDPExchangeCompleted||(i=[],t.isMainDevice?i.push(...f.instance.inviteSubscribeMainDevice):t.isAdditionalDevice?i.push(...f.instance.inviteSubscribeAdditionalDevice):t.isScreenShare&&i.push(...f.instance.inviteSubscribeScreenshare)),{callID:t.id,node_id:cf({isInvite:Tc(e),reattach:this.webRtcCallSession.options.reattach===!0,explicitNodeId:this.webRtcCallSession.options.nodeId,currentNodeId:this._nodeId$.value}),subscribe:i}}async sendLocalDescriptionOnceAccepted(t,e){var r,n,s;H.debug("[WebRTCManager] Waiting for call to be accepted or ended before sending answer");const i=await Ke(Cr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(S(this.destroyed$))).catch(()=>null);if(i===null){H.debug("[WebRTCManager] Destroyed while waiting for call acceptance");return}if(kc(i))H.info("[WebRTCManager] Call ended before answer was sent."),(r=this.callSession)==null||r.destroy();else if(i){H.debug("[WebRTCManager] Call accepted, sending answer");try{this.emitMainSignalingStatus(e.id,"connecting"),await this.sendLocalDescription(t,e),await e.updateAnswerStatus({status:"sent"}),await this.attachManager.attach(this.buildAttachableCall())}catch(a){H.error("[WebRTCManager] Error sending Verto answer:",a),(s=this.onError)==null||s.call(this,a instanceof Error?a:new Error(String(a),{cause:a})),await e.updateAnswerStatus({status:"failed"})}}else{H.info("[WebRTCManager] Call was not accepted, sending verto.bye.");try{await this.bye("USER_BUSY")}finally{this._signalingStatus$.next("disconnected"),(n=this.callSession)==null||n.destroy()}}}dialogParams(t){const e=t.memberId??this._selfId$.value??void 0,i=t.propose==="main"&&!t.firstSDPExchangeCompleted&&this.webRtcCallSession.options.reattach;return{id:t.isMainDevice?this.webRtcCallSession.id:t.id,destinationNumber:this.webRtcCallSession.to??this.webRtcCallSession.from,attach:i,reattaching:i,callerName:this.webRtcCallSession.fromName,callerNumber:this.webRtcCallSession.from,remoteCallerName:this.webRtcCallSession.toName,remoteCallerNumber:this.webRtcCallSession.to,userVariables:{memberCallId:this.webRtcCallSession.id,memberId:e,...this.webRtcCallSession.userVariables},screenShare:t.isScreenShare,additionalDevice:t.isAdditionalDevice,pingSupported:!0,version:nh}}muteMainAudioInputDevice(){return this.mainPeerConnection.stopTrackSender("audio")}muteMainVideoInputDevice(){return this.mainPeerConnection.stopTrackSender("video")}async unmuteMainAudioInputDevice(){return this.mainPeerConnection.restoreTrackSender("audio")}async unmuteMainVideoInputDevice(){return this.mainPeerConnection.restoreTrackSender("video")}ensureLocalAudioPipeline(){return this.mainPeerConnection.ensureLocalAudioPipeline()}get localAudioPipeline(){return this.mainPeerConnection.localAudioPipeline}async addInputDevice(t={audio:!1,video:!0}){return this.initAdditionalPeerConnection("additional-device",t)}async addMainInputDevices(t={audio:!0}){var r;let e;const{mediaDirections:i}=this.mainPeerConnection;if((t.audio??t.inputAudioDeviceConstraints??(t.inputAudioStream&&i.audio.startsWith("send")))&&(e="audio"),(t.video??t.inputVideoDeviceConstraints??(t.inputVideoStream&&!i.video.startsWith("send")))&&(e=e==="audio"?"both":"video"),e)this.mainPeerConnection.updateMediaDevicesOptions(t),await this.mainPeerConnection.restoreTrackSender(e);else{const n=new hs("No valid device to be added");throw(r=this.onError)==null||r.call(this,n),n}}async addScreenMedia(t={audio:!1}){await this.initAdditionalPeerConnection("screenshare",t)}async initAdditionalPeerConnection(t,e){const i=t==="screenshare";let r,n=null;try{return i&&this._screenShareStatus$.next("starting"),n=new Ac({...e,...this.RTCPeerConnectionConfig,propose:t,webRTCApiProvider:this.webRTCApiProvider},void 0,this.deviceController),this.setupLocalDescriptionHandler(n),i&&(this._screenShareId=n.id),this._rtcPeerConnectionsMap.set(n.id,n),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(n.errors$,s=>{var a;r??(r=s),(a=this.onError)==null||a.call(this,s,{fatal:!1})}),await Ke(n.connectionState$.pipe(z(s=>s==="connected"),_e(1),Sr(this._screenShareTimeoutMs),S(this.destroyed$))),i&&this._screenShareStatus$.next("started"),H.info(`[WebRTCManager] Additional peer connection connected (${t}).`),n.id}catch(s){if(H.warn("[WebRTCManager] Error initializing additional peer connection:",s),n&&n.destroy(),i&&this._screenShareStatus$.next("none"),r)throw r instanceof jt&&r.originalError instanceof Error?r.originalError:r;if(s instanceof wr){H.debug("[WebRTCManager] Additional peer connection aborted before connecting.");return}throw s instanceof Error?s:new Error(String(s),{cause:s})}}async removeInputDevices(t){return this.removeAdditionalPeerConnection(t)}removeMainInputDevice(t={removeAudio:!1,removeVideo:!0}){let e;if(t.removeAudio&&(e="audio"),t.removeVideo&&(e=e==="audio"?"both":"video"),e)return this.mainPeerConnection.stopTrackSender(e,{updateTransceiverDirection:!0})}async removeScreenMedia(){if(["starting","started"].includes(this._screenShareStatus$.value)||H.warn("[WebRTCManager] No active screen share to stop."),!this._screenShareId){H.debug("[WebRTCManager] No screen share peer connection found.");return}this._screenShareStatus$.next("stopping"),await this.removeAdditionalPeerConnection(this._screenShareId),this._screenShareId=void 0,this._screenShareStatus$.next("none")}async removeAdditionalPeerConnection(t){const e=this._rtcPeerConnectionsMap.get(t);try{e&&await this.executeVertoBye(e)}finally{e==null||e.destroy(),this._rtcPeerConnectionsMap.delete(t),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values()))}}async executeVertoBye(t,e){try{const i=e?{cause:e,causeCode:Eg[e]}:{};await this.executeVerto(wg({...i,dialogParams:this.dialogParams(t)}))}catch(i){throw H.warn("[WebRTCManager] Call might already be disconnected, error sending Verto bye:",i),i}}async bye(t){this.attachManager.detach(this.buildAttachableCall());const e=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id);e&&await this.executeVertoBye(e,t)}async sendDigits(t){const e=Sg({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},dtmf:t});try{await this.executeVerto(e)}catch(i){throw H.warn("[WebRTCManager] Error sending DTMF digits:",i),i}}async transfer(t){const e=fn({...t,dialogParams:this.dialogParams(this.mainPeerConnection),action:"transfer"});try{H.debug("[WebRTCManager] Transferring call with options:",t),await this.executeVerto(e)}catch(i){throw H.error("[WebRTCManager] Error transferring call:",i),i}}destroy(){this._rtcPeerConnectionsMap.forEach(t=>{t.destroy()}),this._rtcPeerConnectionsMap.clear(),this._rtcPeerConnections$.complete(),super.destroy()}};const xc=G();var df=class extends se{constructor(t={}){super(),this._source=null,this._stream=null,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._pollIntervalMs=t.pollIntervalMs??Io}get level$(){return this.deferEmission(en(this._pollIntervalMs,Ha).pipe(x(()=>this.computeLevel())))}setStream(t){if(this._source){try{this._source.disconnect()}catch(e){xc.debug("[RemoteAudioMeter] source disconnect warning:",e)}this._source=null,this._stream=null}!t||t.getAudioTracks().length===0||(this._stream=new MediaStream(t.getAudioTracks()),this._source=this._audioContext.createMediaStreamSource(this._stream))}destroy(){if(this._source){try{this._source.disconnect()}catch{}this._source=null}this._audioContext.close().catch(t=>{xc.debug("[RemoteAudioMeter] audio context close warning:",t)}),super.destroy()}computeLevel(){if(!this._source)return 0;this._analyser.getByteTimeDomainData(this._analyserBuffer);let t=0;for(const e of this._analyserBuffer){const i=(e-128)/128;t+=i*i}return Math.sqrt(t/this._analyserBuffer.length)}};const Tr=G(),hf=1e3,pf=10,gf=2e3,ff=3e3,vf=3,bf=5,mf=5,yf=10,wf=4,Sf=30;function Cf(t,e){const i=t+e;return i===0?0:t/i*100}function Af(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="inbound-rtp"}function Tf(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="candidate-pair"}var Ef=class extends se{constructor(t,e={}){super(),this.peerConnection=t,this.running=!1,this.lastAudioPacketsReceived=0,this.lastAudioPacketChangeTime=0,this.lastVideoPacketsReceived=0,this.lastVideoPacketChangeTime=0,this.lastRoundTripTime=0,this.lastAvailableOutgoingBitrate=void 0,this._sample$=this.createReplaySubject(1),this._baseline$=this.createBehaviorSubject({rtt:0,jitter:0,ready:!1}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this.pollingIntervalMs=e.pollingIntervalMs??hf,this.baselineSampleCount=e.baselineSamples??pf,this.noAudioPacketThresholdMs=e.noAudioPacketThresholdMs??gf,this.noVideoPacketThresholdMs=e.noVideoPacketThresholdMs??ff,this.rttSpikeWarningMultiplier=e.rttSpikeWarningMultiplier??vf,this.rttSpikeCriticalMultiplier=e.rttSpikeCriticalMultiplier??bf,this.packetLossWarningPercent=e.packetLossWarningPercent??mf,this.packetLossCriticalPercent=e.packetLossCriticalPercent??yf,this.jitterSpikeMultiplier=e.jitterSpikeMultiplier??wf,this.historyWindowSeconds=e.historyWindowSeconds??Sf}get networkIssues$(){return this._networkIssues$.asObservable()}get networkIssues(){return[...this._networkIssues$.value]}get isNetworkHealthy$(){return this.cachedObservable("isNetworkHealthy$",()=>this._networkIssues$.pipe(x(t=>t.length===0),U(),S(this.destroyed$)))}get isNetworkHealthy(){return this._networkIssues$.value.length===0}get networkMetrics$(){return this._networkMetrics$.asObservable()}get networkMetrics(){return[...this._networkMetrics$.value]}get criticalIssue$(){return this.cachedObservable("criticalIssue$",()=>this._networkIssues$.pipe(as(t=>Oe(t.filter(e=>e.severity==="critical"))),S(this.destroyed$)))}get sample$(){return this._sample$.asObservable()}start(){if(this.running)return;this.running=!0;const t=Date.now();this.lastAudioPacketChangeTime=t,this.lastVideoPacketChangeTime=t,Tr.debug("[RTCStatsMonitor] Starting stats monitoring"),this.subscribeTo(en(this.pollingIntervalMs).pipe(z(()=>this.running),Je(()=>Oe(this.peerConnection.getStats()).pipe(ci(e=>(Tr.warn("[RTCStatsMonitor] Failed to get stats:",e),ai)))),z(()=>this.running),x(e=>this.extractSample(e))),e=>this._sample$.next(e)),this.subscribeTo(this._sample$.pipe(_e(this.baselineSampleCount),Xd(),x(e=>({rtt:e.reduce((i,r)=>i+r.roundTripTime,0)/e.length,jitter:e.reduce((i,r)=>i+r.audioJitter,0)/e.length,ready:!0}))),e=>{Tr.debug(`[RTCStatsMonitor] Baseline established: rtt=${e.rtt.toFixed(1)}ms, jitter=${e.jitter.toFixed(1)}ms`),this._baseline$.next(e)}),this.subscribeTo(this._sample$.pipe(go((e,i)=>({prev:e.current,current:i}),{prev:null,current:null}),z(e=>e.current!==null)),({prev:e,current:i})=>{const r=i.timestamp;this.updatePacketTracking(i,r);const n=this.detectIssues(i,e,r);this._networkIssues$.next(n)}),this.subscribeTo(this._sample$.pipe(go((e,i)=>{const r=i.timestamp-this.historyWindowSeconds*1e3,n={timestamp:i.timestamp,audio:{packetsReceived:i.audioPacketsReceived,packetsLost:i.audioPacketsLost,jitter:i.audioJitter},video:{packetsReceived:i.videoPacketsReceived,packetsLost:i.videoPacketsLost},roundTripTime:i.roundTripTime,availableOutgoingBitrate:i.availableOutgoingBitrate};return[...e.filter(s=>s.timestamp>r),n]},[])),e=>this._networkMetrics$.next(e))}stop(){this.running&&(this.running=!1,Tr.debug("[RTCStatsMonitor] Stopping stats monitoring"))}destroy(){Tr.debug("[RTCStatsMonitor] Destroying RTCStatsMonitor"),this.stop(),super.destroy()}extractSample(t){let e=0,i=0,r=0,n=0,s=0,a=0,o;return t.forEach(c=>{Af(c)&&(c.kind==="audio"?(e+=c.packetsReceived??0,i+=c.packetsLost??0,r=Math.max(r,(c.jitter??0)*1e3)):(n+=c.packetsReceived??0,s+=c.packetsLost??0)),Tf(c)&&c.state==="succeeded"&&c.nominated&&(a=c.currentRoundTripTime?c.currentRoundTripTime*1e3:this.lastRoundTripTime,o=c.availableOutgoingBitrate??this.lastAvailableOutgoingBitrate)}),{audioPacketsReceived:e,audioPacketsLost:i,audioJitter:r,videoPacketsReceived:n,videoPacketsLost:s,roundTripTime:a,availableOutgoingBitrate:o,timestamp:Date.now()}}updatePacketTracking(t,e){t.audioPacketsReceived!==this.lastAudioPacketsReceived&&(this.lastAudioPacketsReceived=t.audioPacketsReceived,this.lastAudioPacketChangeTime=e),t.videoPacketsReceived!==this.lastVideoPacketsReceived&&(this.lastVideoPacketsReceived=t.videoPacketsReceived,this.lastVideoPacketChangeTime=e),t.roundTripTime>0&&(this.lastRoundTripTime=t.roundTripTime),t.availableOutgoingBitrate!==void 0&&(this.lastAvailableOutgoingBitrate=t.availableOutgoingBitrate)}detectIssues(t,e,i){const r=[],n=this._baseline$.value,s=i-this.lastAudioPacketChangeTime;s>this.noAudioPacketThresholdMs&&r.push({type:"no_inbound_audio",severity:"critical",timestamp:i,value:s,threshold:this.noAudioPacketThresholdMs});const a=i-this.lastVideoPacketChangeTime;if(a>this.noVideoPacketThresholdMs&&r.push({type:"no_inbound_video",severity:"warning",timestamp:i,value:a,threshold:this.noVideoPacketThresholdMs}),n.ready){const o=t.roundTripTime,c=n.rtt;if(c>0){const p=o/c;p>this.rttSpikeCriticalMultiplier?r.push({type:"high_rtt",severity:"critical",timestamp:i,value:o,threshold:c*this.rttSpikeCriticalMultiplier}):p>this.rttSpikeWarningMultiplier&&r.push({type:"high_rtt",severity:"warning",timestamp:i,value:o,threshold:c*this.rttSpikeWarningMultiplier})}const u=t.audioJitter,h=n.jitter;h>0&&u/h>this.jitterSpikeMultiplier&&r.push({type:"high_jitter",severity:"warning",timestamp:i,value:u,threshold:h*this.jitterSpikeMultiplier})}if(e){const o=Math.max(0,t.audioPacketsReceived-e.audioPacketsReceived),c=Math.max(0,t.audioPacketsLost-e.audioPacketsLost),u=Math.max(0,t.videoPacketsReceived-e.videoPacketsReceived),h=Math.max(0,t.videoPacketsLost-e.videoPacketsLost),p=o+u,v=Cf(c+h,p);v>this.packetLossCriticalPercent?r.push({type:"high_packet_loss",severity:"critical",timestamp:i,value:v,threshold:this.packetLossCriticalPercent}):v>this.packetLossWarningPercent&&r.push({type:"high_packet_loss",severity:"warning",timestamp:i,value:v,threshold:this.packetLossWarningPercent})}return r}};const de=G(),kf=2e3,xf=1e4,Df=3e3,If=5e3,Mf=3,Rf=3,Pf=3e3,Of=1e4,_f=150,Lf=300,Ff=5,Nf=new Set(["high_rtt","high_jitter","high_packet_loss"]);var Uf=class extends se{constructor(t,e,i={}){super(),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._hasPacketLoss$=this.createBehaviorSubject(!1),this._trigger$=this.createSubject(),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this._pipelineStop$=this.createSubject(),this._callbacks=t,this._inputs=e,this._config={debounceTimeMs:i.debounceTimeMs??kf,cooldownMs:i.cooldownMs??xf,iceGracePeriodMs:i.iceGracePeriodMs??Df,iceRestartTimeoutMs:i.iceRestartTimeoutMs??If,maxAttempts:i.maxAttempts??Mf,enableRelayFallback:i.enableRelayFallback??!0,keyframeMaxBurst:i.keyframeMaxBurst??Rf,keyframeBurstWindowMs:i.keyframeBurstWindowMs??Pf,keyframeCooldownMs:i.keyframeCooldownMs??Of,degradationBitrateThreshold:i.degradationBitrateThreshold??_f,degradationRecoveryThreshold:i.degradationRecoveryThreshold??Lf,enableAutoDegradation:i.enableAutoDegradation??!0,packetLossRecoveryDelaySec:i.packetLossRecoveryDelaySec??Ff},this.initPipeline(),this.initDegradationRecoveryPipeline()}get recoveryState$(){return this._recoveryState$.asObservable().pipe(S(this._destroyed$))}get recoveryState(){return this._recoveryState$.value}get recoveryEvent$(){return this._recoveryEvent$.asObservable().pipe(S(this._destroyed$))}get bandwidthConstrained$(){return this._bandwidthConstrained$.asObservable().pipe(S(this._destroyed$))}get bandwidthConstrained(){return this._bandwidthConstrained$.value}pushTrigger(t){this._trigger$.next(t)}async requestIceRestart(){if(this._recoveryState$.value==="recovering"){de.info("CallRecoveryManager: manual ICE restart skipped — recovery already in progress");return}de.info("CallRecoveryManager: manual ICE restart requested"),this.transitionTo("recovering"),await this.executeIceRestart(!1),this.startCooldown()}requestKeyframe(){this.executeKeyframe("manual request")}reset(){de.info("CallRecoveryManager: resetting counters"),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this.transitionTo("idle")}notifyModifyFailed(){(this._recoveryState$.value==="cooldown"||this._recoveryState$.value==="idle")&&(de.info("CallRecoveryManager: verto.modify failed — re-entering recovery"),this._cooldownUntil=0,this.transitionTo("idle"),this.pushTrigger({source:"network",detail:"modify_failed_during_recovery"}))}reportBandwidth(t){if(!this._config.enableAutoDegradation)return;const e=this._bandwidthConstrained$.value;!e&&t<this._config.degradationBitrateThreshold?(this._bandwidthConstrained$.next(!0),this._callbacks.disableVideo(),this.emitEvent({action:"video_disabled",reason:`bandwidth ${t}kbps below threshold ${this._config.degradationBitrateThreshold}kbps`,timestamp:Date.now()}),de.warn(`CallRecoveryManager: disabling video — bandwidth ${t}kbps < ${this._config.degradationBitrateThreshold}kbps`)):e&&t>=this._config.degradationRecoveryThreshold&&(this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`bandwidth ${t}kbps recovered above ${this._config.degradationRecoveryThreshold}kbps`,timestamp:Date.now()}),de.info(`CallRecoveryManager: restoring video — bandwidth ${t}kbps >= ${this._config.degradationRecoveryThreshold}kbps`))}reportNetworkIssues(t){const e=t.some(i=>i.type==="high_packet_loss");e!==this._hasPacketLoss$.value&&this._hasPacketLoss$.next(e)}handleWebSocketReconnect(){const t=this._callbacks.getPeerConnectionState();t==="connected"||t==="completed"?(de.info("CallRecoveryManager: signal-only reconnect — peer connection still alive"),this.emitEvent({action:"signal_reconnect",reason:"WebSocket reconnected, peer connection still connected",timestamp:Date.now()})):(de.info("CallRecoveryManager: full reconnect — peer connection also down"),this.emitEvent({action:"full_reconnect",reason:"WebSocket reconnected, peer connection not connected — ICE restart needed",timestamp:Date.now()}),this.pushTrigger({source:"network",detail:"full_reconnect_after_ws"})),this.reset()}destroy(){this._pipelineStop$.next(),this._pipelineStop$.complete(),super.destroy()}initPipeline(){this.subscribeTo(this._trigger$.pipe(Ee(()=>{this._recoveryState$.value==="idle"&&this.transitionTo("debouncing")}),ho(this._config.debounceTimeMs),fo(this._inputs.signalingReady$),z(([,t])=>this.passGateChecks(t)),x(([t])=>t),os(t=>this.executeTieredRecovery(t)),S(Ni(this._destroyed$,this._pipelineStop$))),{next:()=>{},error:t=>{de.error("CallRecoveryManager: pipeline error",t),this.transitionTo("idle")}})}initDegradationRecoveryPipeline(){if(!this._config.enableAutoDegradation)return;const t=this._config.packetLossRecoveryDelaySec*1e3;this.subscribeTo(ao([this._bandwidthConstrained$,this._hasPacketLoss$]).pipe(Je(([e,i])=>e&&!i?Fi(t):ai),S(this._destroyed$)),()=>{this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`no packet loss for ${this._config.packetLossRecoveryDelaySec}s — restoring video`,timestamp:Date.now()}),de.info(`CallRecoveryManager: restoring video — no packet loss for ${this._config.packetLossRecoveryDelaySec}s`)})}passGateChecks(t){return this._callbacks.isNegotiating()?(de.debug("CallRecoveryManager: gate blocked — negotiation in progress"),this.transitionTo("idle"),!1):t?this._callbacks.isCallConnected()?this.isCooldownActive()?(de.debug("CallRecoveryManager: gate blocked — cooldown active"),this.transitionTo("cooldown"),!1):!0:(de.debug("CallRecoveryManager: gate blocked — call not connected"),this.transitionTo("idle"),!1):(de.debug("CallRecoveryManager: gate blocked — signaling not ready"),this.transitionTo("idle"),!1)}isCooldownActive(){return Date.now()<this._cooldownUntil}executeTieredRecovery(t){return this.transitionTo("recovering"),de.info(`CallRecoveryManager: starting tiered recovery — source=${t.source} detail=${t.detail}`),Oe(this.runTiers(t)).pipe(Ee(()=>this.startCooldown()),ci(e=>(de.error("CallRecoveryManager: tiered recovery failed",e),this.startCooldown(),ai)))}async runTiers(t){if(this.executeKeyframe(t.detail),t.issueType&&Nf.has(t.issueType)){de.debug(`CallRecoveryManager: degradation-only issue (${t.issueType}) — Tier 1 only, skipping ICE restart`);return}this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!1)||this._config.enableRelayFallback&&this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!0)||this._attemptCount>=this._config.maxAttempts&&(this.emitEvent({action:"max_attempts_reached",reason:`all ${this._config.maxAttempts} recovery attempts exhausted`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.warn("CallRecoveryManager: max recovery attempts reached"))}executeKeyframe(t){const e=Date.now();if(e<this._keyframeCooldownUntil){de.debug("CallRecoveryManager: keyframe request skipped — cooldown active");return}if(e-this._keyframeBurstStart>this._config.keyframeBurstWindowMs&&(this._keyframeBurstCount=0,this._keyframeBurstStart=e),this._keyframeBurstCount>=this._config.keyframeMaxBurst){this._keyframeCooldownUntil=e+this._config.keyframeCooldownMs,de.debug(`CallRecoveryManager: keyframe burst limit reached (${this._config.keyframeMaxBurst}), cooldown until ${this._keyframeCooldownUntil}`);return}this._keyframeBurstCount+=1,this._callbacks.requestKeyframe(),this.emitEvent({action:"keyframe_requested",reason:t,timestamp:e}),de.debug(`CallRecoveryManager: keyframe requested (burst ${this._keyframeBurstCount}/${this._config.keyframeMaxBurst})`)}async executeIceRestart(t){this._attemptCount+=1;const e=t?"Tier 3 (relay-only)":"Tier 2 (standard)";de.info(`CallRecoveryManager: ${e} ICE restart — attempt ${this._attemptCount}/${this._config.maxAttempts}`),this.emitEvent({action:"reinvite_started",reason:`${e} ICE restart`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()});try{return await this.withTimeout(this._callbacks.requestIceRestart(t),this._config.iceRestartTimeoutMs)?(this.emitEvent({action:"reinvite_succeeded",reason:`${e} ICE restart succeeded`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.info(`CallRecoveryManager: ${e} ICE restart succeeded`),this._attemptCount=0,!0):(this.emitEvent({action:"reinvite_failed",reason:`${e} ICE restart returned false`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.warn(`CallRecoveryManager: ${e} ICE restart failed`),!1)}catch{return this.emitEvent({action:"reinvite_timeout",reason:`${e} ICE restart timed out after ${this._config.iceRestartTimeoutMs}ms`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.warn(`CallRecoveryManager: ${e} ICE restart timed out`),!1}}async withTimeout(t,e){return new Promise((i,r)=>{const n=setTimeout(()=>{r(new Error(`Timeout after ${e}ms`))},e);t.then(s=>{clearTimeout(n),i(s)},s=>{clearTimeout(n),r(s instanceof Error?s:new Error(String(s)))})})}transitionTo(t){const e=this._recoveryState$.value;e!==t&&(de.debug(`CallRecoveryManager: state ${e} -> ${t}`),this._recoveryState$.next(t))}startCooldown(){this._cooldownUntil=Date.now()+this._config.cooldownMs,this.transitionTo("cooldown"),this._cooldownSubscription&&this._cooldownSubscription.unsubscribe(),this._cooldownSubscription=Fi(this._config.cooldownMs).pipe(_e(1),S(this._destroyed$),z(()=>this._recoveryState$.value==="cooldown")).subscribe(()=>this.transitionTo("idle"))}emitEvent(t){this._recoveryEvent$.next(t)}},Bf=class{constructor(t,e,i){this.executeMethod=t,this.vertoManager=e,this.deviceController=i}createSelfParticipant(t){return new cc(t,this.executeMethod,this.vertoManager,this.deviceController)}createParticipant(t){return new oc(t,this.executeMethod,this.deviceController)}};const zf=93.2,Vf=.024,Hf=2.5,jf=0,Wf=100,Gf=1,qf=5,Xf=4,Yf=3.5,Kf=3,Zf=2;function Qf(t,e,i){const r=zf-(t/2+e)*Vf-i*Hf,n=Math.min(Wf,Math.max(jf,r)),s=1+.035*n+n*(n-60)*(100-n)*7e-6;return Math.min(qf,Math.max(Gf,s))}function Jf(t){return t>=Xf?"excellent":t>=Yf?"good":t>=Kf?"fair":t>=Zf?"poor":"critical"}const Se=G(),$f="call.member.position.set",ev=5/3,tv=t=>{if(!t)return{};try{const e=new URL(`destination:${t}`),i={};return e.searchParams.forEach((r,n)=>{i[n]=r}),i}catch(e){return Se.warn(`Failed to parse destination URI: ${t}`,e),{}}};var iv=class extends se{constructor(t,e,i,r){super(),this.clientSession=t,this.options=e,this.address=r,this._errors$=this.createReplaySubject(1),this._lastMergedStatus="new",this._answered$=this.createReplaySubject(),this._holdState=!1,this._userVariables$=this.createBehaviorSubject({...f.instance.userVariables}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this._isNetworkHealthy$=this.createBehaviorSubject(!0),this._qualityScore$=this.createBehaviorSubject(5),this._qualityLevel$=this.createBehaviorSubject("excellent"),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._mediaParamsUpdated$=this.createSubject(),this._customSubscriptions=new Map,this._pushToTalkEnabled=!1,this._remoteAudioMeter=null,this.id=e.callId??un(),this.to=e.to,this._userVariables$.next({...this._userVariables$.value,...tv(e.to),...e.userVariables}),this.subscribeTo(this.webrtcMessages$,o=>{const c=at(o,"params.userVariables");c&&this._userVariables$.next({...this._userVariables$.value,...c})});const n=i.initializeManagers(this);this.vertoManager=n.vertoManager,this.callEventsManager=n.callEventsManager,e.initOffer?(this._status$=this.createBehaviorSubject("ringing"),this._lastMergedStatus="ringing"):this._status$=this.createBehaviorSubject("new");const{deviceController:s,networkChange$:a}=i;this._networkChange$=a,this.participantFactory=new Bf(this.executeMethod.bind(this),this.vertoManager,s),this.subscribeTo(Ni(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(U(),S(this._destroyed$)),o=>{var c;this._lastMergedStatus=o,o==="connected"&&!this._statsMonitor?this.initResilienceSubsystems():o==="disconnected"?((c=this._statsMonitor)==null||c.destroy(),this._statsMonitor=void 0):(o==="destroyed"||o==="failed")&&this.stopResilienceSubsystems()})}get errors$(){return this.deferEmission(this._errors$.asObservable())}emitError(t){this._status$.value==="destroyed"||this._status$.value==="failed"||(this._errors$.next(t),t.fatal&&(this._status$.next("failed"),this.destroy()))}notifyModifyFailed(){var t;(t=this._recoveryManager)==null||t.notifyModifyFailed()}get direction(){return this.options.initOffer?"inbound":"outbound"}get address$(){return this.deferEmission(Oe([this.address])).pipe(S(this._destroyed$))}get fromName(){return this.options.fromName}get from(){return this.options.from}get toName(){return this.options.toName}async toggleIncomingVideo(){throw new At}async toggleIncomingAudio(){throw new At}addCallId(t){this.callEventsManager.addCallId(t)}get capabilities(){return this.callEventsManager.capabilities}get participants(){return this.callEventsManager.participants}get self(){return this.callEventsManager.self}async toggleLock(){const t=this.locked?"call.unlock":"call.lock";await this.executeMethod(this.selfId??"",t,{})}async toggleHold(){this._holdState?await this.vertoManager.unhold():await this.vertoManager.hold(),this._holdState=!this._holdState}async startRecording(){throw new At}async startStreaming(){throw new At}async setMeta(t){throw new At}async updateMeta(t){throw new At}get layoutLayers$(){return this.deferEmission(this.callEventsManager.layoutLayers$).pipe(S(this._destroyed$))}get layoutLayers(){return this.callEventsManager.layoutLayers}async executeMethod(t,e,i){var s,a,o;const r=this.buildMethodParams(t,i,e),n=Hi({method:e,params:r});try{const c=await this.clientSession.execute(n);if(Og(c))throw new _t(parseInt(((s=c.result)==null?void 0:s.code)??"0"),`Error response from method ${e}: ${(a=c.result)==null?void 0:a.code} ${(o=c.result)==null?void 0:o.message}`,void 0,void 0,n.id);return c}catch(c){throw Se.error(`[Call] Error executing method ${e} with params`,r,c),c}}buildMethodParams(t,e,i){const r={node_id:this.nodeId??"",call_id:this.id,member_id:this.vertoManager.selfId??""};return i===$f?{...e,self:r}:typeof t=="object"?{...e,self:r,targets:[t]}:{...e,self:r,target:{node_id:this.nodeId??"",call_id:this.id,member_id:t}}}get status$(){return this.publicCachedObservable("status$",()=>Ni(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(U(),Ee(t=>{this._lastMergedStatus=t})))}get participants$(){return this.deferEmission(this.callEventsManager.participants$).pipe(S(this._destroyed$))}get self$(){return this.deferEmission(this.callEventsManager.self$).pipe(S(this._destroyed$))}get recording$(){return this.deferEmission(this.callEventsManager.recording$).pipe(S(this._destroyed$))}get streaming$(){return this.deferEmission(this.callEventsManager.streaming$).pipe(S(this._destroyed$))}get raiseHandPriority$(){return this.deferEmission(this.callEventsManager.raiseHandPriority$).pipe(S(this._destroyed$))}get locked$(){return this.deferEmission(this.callEventsManager.locked$).pipe(S(this._destroyed$))}get meta$(){return this.deferEmission(this.callEventsManager.meta$).pipe(S(this._destroyed$))}get capabilities$(){return this.deferEmission(this.callEventsManager.capabilities$).pipe(S(this._destroyed$))}get layout$(){return this.deferEmission(this.callEventsManager.layout$).pipe(S(this._destroyed$))}get status(){return this._lastMergedStatus}get recording(){return this.callEventsManager.recording}get streaming(){return this.callEventsManager.streaming}get raiseHandPriority(){return this.callEventsManager.raiseHandPriority}get locked(){return this.callEventsManager.locked}get meta(){return this.callEventsManager.meta}get layout(){return this.callEventsManager.layout}get layouts$(){return this.deferEmission(this.callEventsManager.layouts$).pipe(S(this._destroyed$))}get layouts(){return this.callEventsManager.layouts}get localStream$(){return this.deferEmission(this.vertoManager.localStream$).pipe(S(this._destroyed$))}get localStream(){return this.vertoManager.localStream}get remoteStream$(){return this.deferEmission(this.vertoManager.remoteStream$).pipe(S(this._destroyed$))}get remoteStream(){return this.vertoManager.remoteStream}get userVariables$(){return this.deferEmission(this._userVariables$.asObservable())}get userVariables(){return{...this._userVariables$.value}}set userVariables(t){this._userVariables$.next({...this._userVariables$.value,...t})}get networkIssues$(){return this.deferEmission(this._networkIssues$.asObservable())}get networkIssues(){return this._networkIssues$.value}get isNetworkHealthy$(){return this.deferEmission(this._isNetworkHealthy$.asObservable())}get isNetworkHealthy(){return this._isNetworkHealthy$.value}get networkMetrics$(){return this.deferEmission(this._networkMetrics$.asObservable())}get networkMetrics(){return this._networkMetrics$.value}get qualityScore$(){return this.deferEmission(this._qualityScore$.asObservable())}get qualityLevel$(){return this.deferEmission(this._qualityLevel$.asObservable())}get recoveryState$(){return this.deferEmission(this._recoveryState$.asObservable())}get recoveryEvent$(){return this.deferEmission(this._recoveryEvent$.asObservable())}get bandwidthConstrained$(){return this.deferEmission(this._bandwidthConstrained$.asObservable())}get mediaParamsUpdated$(){return this.deferEmission(this._mediaParamsUpdated$.asObservable())}emitMediaParamsUpdated(t){this._mediaParamsUpdated$.next(t)}requestKeyframe(){var t,e;(e=(t=this.vertoManager).requestKeyframe)==null||e.call(t)}async requestIceRestart(){var t,e;await((e=(t=this.vertoManager).requestIceRestart)==null?void 0:e.call(t))}initResilienceSubsystems(){const t=this.rtcPeerConnection;if(Se.debug(`[Call] initResilienceSubsystems: pc=${t?"exists":"undefined"}, connectionState=${t==null?void 0:t.connectionState}`),!t){Se.warn("[Call] No peer connection available, skipping resilience init");return}try{const e=f.instance;this._statsMonitor=new Ef(t,{pollingIntervalMs:e.statsPollingInterval,baselineSamples:e.statsBaselineSamples,noAudioPacketThresholdMs:e.statsNoPacketThreshold,rttSpikeWarningMultiplier:e.statsRttSpikeMultiplier,rttSpikeCriticalMultiplier:e.statsRttSpikeMultiplier*ev,packetLossWarningPercent:e.statsPacketLossThreshold*100,packetLossCriticalPercent:e.statsPacketLossThreshold*200,jitterSpikeMultiplier:e.statsJitterSpikeMultiplier,historyWindowSeconds:e.statsHistorySize}),this._recoveryManager=new Uf({requestKeyframe:()=>{var i,r;try{this.vertoManager.requestKeyframeAll?this.vertoManager.requestKeyframeAll():(r=(i=this.vertoManager).requestKeyframe)==null||r.call(i)}catch{}},requestIceRestart:async i=>{var r,n;try{this.vertoManager.requestIceRestartAll?await this.vertoManager.requestIceRestartAll(i):await((n=(r=this.vertoManager).requestIceRestart)==null?void 0:n.call(r,i))}catch{return!1}return this.waitForPeerConnectionConnected()},disableVideo:()=>{try{this.vertoManager.muteMainVideoInputDevice(),Se.debug("[Call] Recovery manager disabled video")}catch{Se.debug("[Call] Recovery manager failed to disable video")}},enableVideo:()=>{this.vertoManager.unmuteMainVideoInputDevice().catch(()=>{Se.debug("[Call] Recovery manager failed to enable video")})},isNegotiating:()=>this.vertoManager.mainPeerConnection.isNegotiating,isCallConnected:()=>this._lastMergedStatus==="connected",getPeerConnectionState:()=>t.connectionState},{signalingReady$:this.clientSession.authenticated$},{debounceTimeMs:e.recoveryDebounceTime,cooldownMs:e.recoveryCooldown,iceGracePeriodMs:e.iceDisconnectedGracePeriod,iceRestartTimeoutMs:e.iceRestartTimeout,maxAttempts:e.maxRecoveryAttempts,enableRelayFallback:e.enableRelayFallback,keyframeMaxBurst:e.keyframeMaxBurst,keyframeBurstWindowMs:e.keyframeBurstWindow,keyframeCooldownMs:e.keyframeCooldown}),this.subscribeTo(this._statsMonitor.networkIssues$,i=>{var r;this._networkIssues$.next(i),(r=this._recoveryManager)==null||r.reportNetworkIssues(i)}),this.subscribeTo(this._statsMonitor.isNetworkHealthy$,i=>{this._isNetworkHealthy$.next(i)}),this.subscribeTo(this._statsMonitor.networkMetrics$,i=>{var r;if(this._networkMetrics$.next(i),i.length>0){const n=i[i.length-1],s=n.audio.packetsReceived+n.video.packetsReceived,a=n.audio.packetsLost+n.video.packetsLost,o=s+a>0?a/(s+a)*100:0,c=Qf(n.roundTripTime,n.audio.jitter,o);this._qualityScore$.next(c),this._qualityLevel$.next(Jf(c)),n.availableOutgoingBitrate!==void 0&&((r=this._recoveryManager)==null||r.reportBandwidth(n.availableOutgoingBitrate/1e3))}}),this.subscribeTo(this._statsMonitor.criticalIssue$,i=>{var r;(r=this._recoveryManager)==null||r.pushTrigger({source:"stats",detail:`${i.type}: ${i.severity}`,issueType:i.type})}),this.subscribeTo(this._recoveryManager.recoveryState$,i=>{this._recoveryState$.next(i)}),this.subscribeTo(this._recoveryManager.recoveryEvent$,i=>{this._recoveryEvent$.next(i),i.action==="max_attempts_reached"&&(Se.warn("[Call] All recovery attempts exhausted, terminating call"),this.emitError({kind:"network",fatal:!0,error:new Error("Call recovery failed: all attempts exhausted"),callId:this.id}))}),this.subscribeTo(this._recoveryManager.bandwidthConstrained$,i=>{this._bandwidthConstrained$.next(i)}),this._networkChange$&&this.subscribeTo(this._networkChange$,i=>{var r,n;i.type==="offline"?(r=this._recoveryManager)==null||r.pushTrigger({source:"network",detail:"browser went offline"}):i.type==="online"&&((n=this._recoveryManager)==null||n.handleWebSocketReconnect())}),this.subscribeTo(this.clientSession.authenticated$.pipe(tn(1),z(Boolean)),()=>{var i;Se.debug("[Call] WebSocket reconnected — notifying recovery manager"),(i=this._recoveryManager)==null||i.handleWebSocketReconnect()}),this._statsMonitor.start(),Se.debug("[Call] Resilience subsystems initialized for call",this.id)}catch(e){Se.warn("[Call] Failed to initialize resilience subsystems:",e)}}async waitForPeerConnectionConnected(){const t=this.rtcPeerConnection;if(!t)return!1;const e=Date.now()+Nh;for(;;){const i=t.connectionState;if(i==="connected")return!0;if(i==="failed"||i==="closed"||Date.now()>=e)return!1;await new Promise(r=>setTimeout(r,Uh))}}stopResilienceSubsystems(){var t,e;try{(t=this._statsMonitor)==null||t.destroy(),(e=this._recoveryManager)==null||e.destroy()}catch{}this._statsMonitor=void 0,this._recoveryManager=void 0}createParticipant(t,e){return t===(e??this.vertoManager.selfId)?this.participantFactory.createSelfParticipant(t):this.participantFactory.createParticipant(t)}get mediaDirections$(){return this.deferEmission(this.vertoManager.mediaDirections$).pipe(S(this._destroyed$))}get mediaDirections(){return this.vertoManager.mediaDirections}get participantsId$(){return this.cachedObservable("participantsId$",()=>this.participants$.pipe(x(t=>t.map(e=>e.id))))}async execute(t,e){return this.clientSession.execute(t,e)}get selfId$(){return this.vertoManager.selfId$}get selfId(){return this.vertoManager.selfId}get nodeId$(){return this.vertoManager.nodeId$}get nodeId(){return this.vertoManager.nodeId}isCallSessionEvent(t){try{Se.debug("[Call] Checking if event is for this call session:",t);const e=at(t,"params.params.callID")??at(t,"params.call_id"),i=at(t,"params.room_session_id");return Se.debug(`[Call] Extracted session identifiers callID: ${e} and roomSessionID: ${i} from event:`),e===this.id||!!e&&this.callEventsManager.isCallIdValid(e)||!!i&&this.callEventsManager.isRoomSessionIdValid(i)}catch(e){return Se.error("[Call] Error checking if event is for this call session:",e),!1}}get callSessionEvents$(){return this.cachedObservable("callSessionEvents$",()=>this.clientSession.signalingEvent$.pipe(z(t=>this.isCallSessionEvent(t)),Ee(t=>{Se.debug("[Call] Received call session event:",t)}),S(this.destroyed$),Ct()))}get callUpdated$(){return this.publicCachedObservable("callUpdated$",()=>this.callSessionEvents$.pipe(we(dc,"params"),S(this.destroyed$)))}get memberJoined$(){return this.publicCachedObservable("memberJoined$",()=>this.callSessionEvents$.pipe(we(gc,"params"),S(this.destroyed$)))}get memberLeft$(){return this.publicCachedObservable("memberLeft$",()=>this.callSessionEvents$.pipe(we(fc,"params"),S(this.destroyed$)))}get memberUpdated$(){return this.publicCachedObservable("memberUpdated$",()=>this.callSessionEvents$.pipe(we(pc,"params"),S(this.destroyed$)))}get memberTalking$(){return this.publicCachedObservable("memberTalking$",()=>this.callSessionEvents$.pipe(we(vc,"params"),S(this.destroyed$)))}get callStates$(){return this.publicCachedObservable("callStates$",()=>this.callSessionEvents$.pipe(we(hc,"params"),S(this.destroyed$)))}get layoutUpdates$(){return this.publicCachedObservable("layoutUpdates$",()=>this.callSessionEvents$.pipe(we(Cs,"params"),S(this.destroyed$)))}get rtcPeerConnection(){return this.vertoManager.mainPeerConnection.peerConnection}get signalingEvent$(){return this.publicCachedObservable("signalingEvent$",()=>this.callEvent$.pipe(x(t=>JSON.parse(JSON.stringify(t)))))}subscribe(t){const e=this._customSubscriptions.get(t);if(e)return e;const i=this.callSessionEvents$.pipe(z(r=>r.event_type===t),x(r=>JSON.parse(JSON.stringify(r))),S(this._destroyed$));return this._sendVertoSubscribe(t).then(()=>{this._customSubscriptions.set(t,i)},r=>{this._customSubscriptions.delete(t),Se.warn(`[Call] verto.subscribe for '${t}' failed, not caching:`,r)}),this._customSubscriptions.set(t,i),i}get webrtcMessages$(){return this.cachedObservable("webrtcMessages$",()=>this.callSessionEvents$.pipe(we(vn,"params"),Ee(t=>Se.debug("[Call] Event is a WebRTC message event:",t)),S(this.destroyed$),Ct()))}get callEvent$(){return this.cachedObservable("callEvent$",()=>this.callSessionEvents$.pipe(we(_g,"params"),Ee(t=>Se.debug("[Call] Event is a call event:",t)),S(this.destroyed$),Ct()))}get layoutEvent$(){return this.cachedObservable("layoutEvent$",()=>this.callEvent$.pipe(we(Cs,"params")))}async hangup(){this._status$.next("disconnecting");try{await this.vertoManager.bye()}finally{this.destroy()}}async sendDigits(t){return this.vertoManager.sendDigits(t)}answer(t){this._answerMediaOptions=t,this._answered$.next(!0)}get answerMediaOptions(){return this._answerMediaOptions}reject(){this._answered$.next(!1)}get answered$(){return this.deferEmission(this._answered$.asObservable())}async setLayout(t,e){if(!this.layouts.includes(t))throw new hs(`Layout ${t} is not available in the current call layouts: ${this.layouts.join(", ")}`);const i=await Ke(this.selfId$.pipe(z(n=>n!==null)));await this.executeMethod(i,"call.layout.set",{layout:t});const r=Object.entries(e??{});if(r.length!==0)for(const[n,s]of r){const a=this.participants.find(o=>o.id===n);if(!a){Se.warn(`[Call] setLayout: member ${n} not found in participants; skipping position ${s}`);continue}await a.setPosition(s)}}async transfer(t){return this.vertoManager.transfer(t)}setLocalMicrophoneGain(t){const e=this.vertoManager.ensureLocalAudioPipeline();if(!e){Se.warn("[Call] setLocalMicrophoneGain: audio pipeline unavailable");return}const i=Math.max(0,Math.min(200,t));e.setGain(i/100)}get localMicrophoneGain$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localMicrophoneGain$",()=>t.gain$.pipe(x(e=>e*100),S(this._destroyed$))):St(100).pipe(S(this._destroyed$))}get localAudioLevel$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localAudioLevel$",()=>t.level$.pipe(S(this._destroyed$),Ct())):St(0).pipe(S(this._destroyed$))}get localSpeaking$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localSpeaking$",()=>t.speaking$.pipe(S(this._destroyed$),Ct())):St(!1).pipe(S(this._destroyed$))}enablePushToTalk(){const t=this.vertoManager.ensureLocalAudioPipeline();if(!t){Se.warn("[Call] enablePushToTalk: audio pipeline unavailable");return}t.setPTTActive(!1),this._pushToTalkEnabled=!0}disablePushToTalk(){var t;(t=this.vertoManager.localAudioPipeline)==null||t.setPTTActive(!0),this._pushToTalkEnabled=!1}setPushToTalkActive(t){var e;this._pushToTalkEnabled&&((e=this.vertoManager.localAudioPipeline)==null||e.setPTTActive(t))}async setEchoCancellation(t){await this.vertoManager.updateMediaConstraints({audio:{echoCancellation:t}})}async setNoiseSuppression(t){await this.vertoManager.updateMediaConstraints({audio:{noiseSuppression:t}})}async setAutoGainControl(t){await this.vertoManager.updateMediaConstraints({audio:{autoGainControl:t}})}get remoteAudioLevel$(){return this.publicCachedObservable("remoteAudioLevel$",()=>{this._remoteAudioMeter??(this._remoteAudioMeter=new df);const t=this._remoteAudioMeter;return this.subscribeTo(this.vertoManager.remoteStream$,e=>{t.setStream(e)}),t.level$.pipe(S(this._destroyed$),Ct())})}destroy(){var t;this._status$.value!=="destroyed"&&(this._status$.next("destroyed"),this.stopResilienceSubsystems(),(t=this._remoteAudioMeter)==null||t.destroy(),this._remoteAudioMeter=null,this.vertoManager.destroy(),this.callEventsManager.destroy(),super.destroy())}async _sendVertoSubscribe(t){const e=Ag({sessid:this.id,eventChannel:[t]}),i={callID:this.id,node_id:this.vertoManager.nodeId??"",message:e};await this.clientSession.execute(rc(i))}};function rv(t){return t instanceof an?"timeout":t instanceof _t?"signaling":t instanceof Tt||t instanceof jt?"media":t instanceof Mo||t instanceof Ro?"network":"internal"}const nv=new Set([ko,Do,xo]);function sv(t){return t instanceof Lo||t instanceof Tt?!1:t instanceof jt?t.fatal:!(t instanceof an||t instanceof _t&&nv.has(t.code))}var av=class{constructor(t,e,i,r,n){this.sessionManager=t,this.deviceController=e,this.attachManager=i,this.webRTCApiProvider=r,this.networkChange$=n}createCall(t,e){return new iv(this.sessionManager,e,{initializeManagers:i=>({vertoManager:new uf(i,this.attachManager,this.deviceController,this.webRTCApiProvider,{nodeId:e.nodeId,onError:(r,n)=>{const s={kind:rv(r),fatal:(n==null?void 0:n.fatal)??sv(r),error:r,callId:i.id};i.emitError(s)},onModifyFailed:()=>{i.notifyModifyFailed()}}),callEventsManager:new jg(i)}),deviceController:this.deviceController,networkChange$:this.networkChange$},t)}};const Es=G();var Dc=class{constructor(t,e,i){this.endpoint=t,this.http=i,this.filter=r=>!0,this.mapper=r=>r,this.nextUrl=`${this.endpoint}?${e}`}async next(){if(!this.nextUrl)return this.hasMore=!1,[];const t=await this.http.request({...gs,url:this.nextUrl});if(t.ok&&t.body){const e=JSON.parse(t.body);return this.nextUrl=e.links.next,this.hasMore=!!this.nextUrl,e.data.filter(this.filter).map(this.mapper)}return Es.error("Failed to fetch entity"),[]}async id(t){const e=await this.http.request({...gs,url:`${this.endpoint}/${String(t)}`});if(e.ok&&e.body)return JSON.parse(e.body)}},Ic=class extends se{constructor(t,e,i){super(),this.fetchController=t,this.update$=e,this.onError=i,this.collectionData=new Map,this.observablesRegistry=new Map,this.upsertData=r=>{var o;if(!r.id)return;const n=this.collectionData.get(r.id)??{},s={},a=new Set([...Object.keys(n),...Object.keys(r)]);for(const c of a){const u=n[c],h=r[c];h!==void 0&&u!==void 0&&typeof u=="object"&&u!==null&&!Array.isArray(u)&&typeof h=="object"&&h!==null&&!Array.isArray(h)?s[c]={...u,...h}:h!==void 0?s[c]=h:s[c]=u}this.collectionData.set(r.id,s),(o=this.observablesRegistry.get(r.id))==null||o.next(s),this._values$.next(Array.from(this.collectionData.values()))},this._loading$=this.createBehaviorSubject(!1),this._values$=this.createReplaySubject(1),this._hasMore$=this.createBehaviorSubject(!0),this.subscribeTo(this.update$,this.upsertData),this.hasMore$=oi(()=>Oe(this.init())).pipe(Je(()=>this._hasMore$),U(),st(1),S(this.destroyed$))}get loading$(){return this._loading$.asObservable()}get loading(){return this._loading$.value}get values$(){return this._values$.asObservable()}get hasMore(){return this.fetchController.hasMore??!0}get updated$(){return this.cachedObservable("updated$",()=>this._loading$.pipe(U(),tn(1),z(t=>!t),x(()=>{}),S(this.destroyed$)))}get values(){return Array.from(this.collectionData.values())}async init(){if(this.fetchController.hasMore===!1){this._hasMore$.next(!1);return}await this.fetchMore()}async fetchMore(){var t;try{this._loading$.next(!0),(await this.fetchController.next()).forEach(this.upsertData),this._hasMore$.next(this.fetchController.hasMore??!1),this._loading$.next(!1)}catch(e){Es.error("Failed to fetch initial collection data",e),this._hasMore$.next(this.fetchController.hasMore??!1),this._loading$.next(!1),(t=this.onError)==null||t.call(this,new Fo("fetchMore",e))}}async tryFetch(t,e){var i,r,n;try{this._loading$.next(!0);const s=await((r=(i=this.fetchController)[t])==null?void 0:r.call(i,e));return this._loading$.next(!1),s&&this.upsertData(s),s}catch(s){Es.error(`Failed to fetch data for (${String(t)}:${String(e)}) :`,s),this._loading$.next(!1),(n=this.onError)==null||n.call(this,new Fo(`tryFetch(${String(t)})`,s))}}get$(t){var e,i;if(!this.observablesRegistry.has(t)){this.observablesRegistry.set(t,new es(1));const r=this.collectionData.get(t);r?(e=this.observablesRegistry.get(t))==null||e.next(r):this.tryFetch("id",t)}return(i=this.observablesRegistry.get(t))==null?void 0:i.asObservable()}async find$(t,e){const i=Array.from(this.collectionData.values()).find(r=>r[t]===e)??await this.tryFetch(t,e);return i?this.get$(i.id):void 0}loadMore(){this.fetchController.hasMore!==!1&&this.fetchMore()}destroy(){this.observablesRegistry.forEach(t=>t.complete()),this.observablesRegistry.clear(),super.destroy()}},Mc=class{constructor(t,e=r=>!!r,i=r=>r){this.originalCollection=t,this.filter=e,this.mapper=i}get loading$(){return this.originalCollection.loading$}get loading(){return this.originalCollection.loading}get hasMore$(){return this.originalCollection.hasMore$}get hasMore(){return this.originalCollection.hasMore}get values(){return this.originalCollection.values.filter(this.filter).map(this.mapper)}get values$(){return this._values$??(this._values$=this.originalCollection.values$.pipe(x(t=>t.filter(this.filter).map(this.mapper))))}get$(t){const e=this.originalCollection.get$(t);return e&&e.pipe(Jr(z(this.filter),x(this.mapper)))}async find$(t,e){const i=await this.originalCollection.find$(t,e);return i&&i.pipe(Jr(z(this.filter),x(this.mapper)))}loadMore(){this.originalCollection.loadMore()}destroy(){this.originalCollection.destroy()}},Rc=class extends se{constructor(t,e,i){super(),this.addressId=t,this.conversationManager=e,this.addressProvider=i,this.initConversationMessages=async()=>(this._conversationMessages=this._conversationMessages??await this.conversationManager.getConversationMessageCollection(this.id),this._conversationMessages.hasMore&&this._conversationMessages.loadMore(),this._conversationMessages),this.textMessages$=oi(this.initConversationMessages).pipe(x(()=>this.textMessage),st(1),S(this.destroyed$)),this.history$=oi(this.initConversationMessages).pipe(x(()=>this.history),st(1),S(this.destroyed$)),this._state$=this.createBehaviorSubject(null)}upnext(t){const e={...this._state$.value,...t};this._state$.next(e)}get state(){return this._state$.value}get id(){return this.addressId}get name(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.name}get createdAt(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.created_at}get defaultChannel(){return this.type==="room"?this.channels.video:this.channels.audio}get displayName$(){return this.cachedObservable("displayName$",()=>this._state$.pipe(fe(),x(t=>t.display_name),S(this.destroyed$)))}get displayName(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.display_name}get previewUrl$(){return this.cachedObservable("previewUrl$",()=>this._state$.pipe(fe(),x(t=>t.preview_url),S(this.destroyed$)))}get previewUrl(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.preview_url}get coverUrl$(){return this.cachedObservable("coverUrl$",()=>this._state$.pipe(fe(),st(1),x(t=>t.cover_url),S(this.destroyed$)))}get coverUrl(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.cover_url}get resourceId$(){return this.cachedObservable("resourceId$",()=>this._state$.pipe(fe(),st(1),x(t=>t.resource_id),S(this.destroyed$)))}get resourceId(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.resource_id}get type$(){return this.cachedObservable("type$",()=>this._state$.pipe(fe(),st(1),x(t=>t.type),S(this.destroyed$)))}get type(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.type}get channels$(){return this.cachedObservable("channels$",()=>this._state$.pipe(fe(),st(1),x(t=>t.channels),S(this.destroyed$)))}get channels(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.channels}get locked(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.locked}get locked$(){return this.cachedObservable("locked$",()=>this._state$.pipe(fe(),st(1),x(t=>t.locked),S(this.destroyed$)))}async sendText(t){return this.conversationManager.sendText(t,this.id)}get textMessage(){if(this._conversationMessages)return this._textMessages$=this._textMessages$??new Mc(this._conversationMessages,t=>t.subtype==="chat",t=>({id:t.id,text:t.text,created:t.ts,fromAddress$:this.addressProvider.get$(t.from_fabric_address_id)})),this._textMessages$}get history(){if(this._conversationMessages)return this._history$=this._history$??new Mc(this._conversationMessages,t=>t.subtype==="log",t=>({id:t.id,kind:t.kind,status:t.details.status,started:t.details.start_time,ended:t.details.end_time,fromAddress$:this.addressProvider.get$(t.from_fabric_address_id)})),this._history$}get activity$(){throw new At}get activity(){throw new At}};const fi=G(),ov=t=>{if(fi.debug("isRPCConnectResult check:",t),!t||typeof t!="object")return!1;const e=t,i=typeof e.identity=="string"&&typeof e.protocol=="string"&&typeof e.authorization=="object"&&typeof e.authorization.jti=="string"&&typeof e.authorization.project_id=="string"&&typeof e.authorization.fabric_subscriber=="object";return fi.debug("isRPCConnectResult check result:",i),i};var cv=(Ai=class{constructor(e,i,r){this.id=un(),fi.debug(`[PendingRPC(${this.id}) request:${e.id}: method:${e.method}] Creating PendingRPC`),this.request=e;const n=(r==null?void 0:r.timeoutMs)??Ai.defaultTimeoutMs,s=r==null?void 0:r.signal;this.promise=new Promise((a,o)=>{if(s!=null&&s.aborted){o(new DOMException("The operation was aborted","AbortError"));return}let c=!1;const u=Cr(i.pipe(z(h=>h.id===e.id),_e(1)),new Ae(h=>{const p=setTimeout(()=>{h.error(new an(e.id,n))},n);return()=>clearTimeout(p)}),s?new Ae(h=>{const p=()=>{h.error(new DOMException("The operation was aborted","AbortError"))};return s.addEventListener("abort",p),()=>s.removeEventListener("abort",p)}):Bd).subscribe({next:h=>{if(c=!0,h.error){const p=new _t(h.error.code,h.error.message,h.error.data,void 0,e.id);fi.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with RPC error:`,p),o(p)}else fi.debug(`[PendingRPC(${this.id}) request:${e.id}] Resolving promise with response:`,h),a(h);u.unsubscribe()},error:h=>{fi.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with error:`,h),c=!0,o(h),u.unsubscribe()},complete:()=>{fi.debug(`[PendingRPC(${this.id}) request:${e.id}] Observable completed`),c||o(new an(e.id,n)),u.unsubscribe()}})})}async then(e,i){return this.promise.then(e,i)}async catch(e){return this.promise.catch(e)}async finally(e){return this.promise.finally(e)}},Ai.defaultTimeoutMs=5e3,Ai);const K=G();function lv(t){return t.fatal||!(t.error instanceof jt)}const uv=t=>{var n,s;const e=(n=t.to)==null?void 0:n.split("?")[0],i=(s=t.from)!=null&&s.startsWith("subscriber://")?t.from.replace("subscriber://",""):t.from,r=e??i;if(!r)throw new Ui("Error building Address name");return r};var dv=class extends se{constructor(t,e,i,r,n,s,a,o,c){super(),this.getCredential=t,this.transport=e,this.storage=i,this.authorizationStateKey=r,this.attachManager=s,this.dpopManager=o,this.callCreateTimeout=6e3,this.agent="signalwire-js/4.0.0",this.eventAcks=!0,this.authorizationState$=this.createReplaySubject(1),this.connectVersion={major:4,minor:0,revision:0},this._authorization$=this.createBehaviorSubject(void 0),this._errors$=this.createReplaySubject(1),this._authState$=this.createBehaviorSubject({kind:"unauthenticated"}),this._wasClientBound=!1,this._userInfo$=this.createBehaviorSubject(null),this._calls$=this.createBehaviorSubject({}),this._iceServers$=this.createBehaviorSubject([]),s.setSession(this),this.callFactory=new av(this,n,s,a,c),this.initialized$=oi(()=>Oe(this.init())).pipe(st(1),S(this.destroyed$))}get incomingCalls$(){return this.cachedObservable("incomingCalls$",()=>this.calls$.pipe(x(t=>t.filter(e=>e.direction==="inbound"))))}get incomingCalls(){return Object.values(this._calls$.value).filter(t=>t.direction==="inbound")}get userInfo$(){return this._userInfo$.asObservable()}get userInfo(){return this._userInfo$.value}get calls$(){return this.cachedObservable("calls$",()=>this._calls$.pipe(x(t=>Object.values(t))))}get calls(){return Object.values(this._calls$.value)}get iceServers(){return this._iceServers$.value}get authorization$(){return this._authorization$.asObservable()}get authorization(){return this._authorization$.value}get errors$(){return this._errors$.asObservable()}get authenticated$(){return this._authState$.pipe(x(t=>t.kind==="authenticated"),U())}get authenticated(){return this._authState$.value.kind==="authenticated"}get clientBound(){return this._wasClientBound}get authState(){return this._authState$.value}setDirectory(t){this._directory=t}async execute(t,e){try{return await this.transport.execute(t,e)}catch(i){throw K.debug("[Session] Execute Error",i),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i})),i}}send(t){this.transport.send(t)}async init(){return await this.loadAuthorizationStateFromStorage(),this.setupMessageHandlers(),!0}setupMessageHandlers(){K.debug("[Session] Setting up message handlers"),this.subscribeTo(this.authStateEvent$,async t=>{K.debug("[Session] Authorization state event received:",t);try{await this.updateAuthorizationStateInStorage(t.authorization_state)}catch(e){K.error("[Session] Failed to handle authorization state update:",e),this._errors$.next(new ls(e))}}),this.subscribeTo(this.transport.connectionStatus$.pipe(z(t=>t==="disconnected"||t==="reconnecting")),()=>{this._authState$.value.kind==="authenticated"&&this._authState$.next({kind:"unauthenticated"})}),this.subscribeTo(this.transport.connectionStatus$.pipe(z(t=>t==="connected"),os(()=>(K.debug("[Session] Connection established, initiating authentication"),Oe(this.authenticate()).pipe(ci(t=>(this.handleAuthenticationError(t).catch(e=>{K.error("[Session] Error handling authentication failure:",e)}),ai)))))),void 0),this.subscribeTo(this.vertoInvite$,async t=>{K.debug("[Session] Verto invite received:",t);try{await this.createInboundCall(t)}catch(e){K.error("[Session] Error handling Verto invite:",e),this._errors$.next(new cp(e))}}),this.subscribeTo(this.vertoAttach$,async t=>{K.debug("[Session] Verto attach received:",t);try{await this.handleVertoAttach(t)}catch(e){K.error("[Session] Error handling Verto attach:",e),this._errors$.next(new lp(e))}})}async loadAuthorizationStateFromStorage(){try{const t=await this.storage.getItem(this.authorizationStateKey);this.authorizationState$.next(t??void 0)}catch(t){K.error("Failed to retrieve authorization state from storage:",t),this.authorizationState$.next(void 0)}}async updateAuthorizationStateInStorage(t){if(!t){K.debug("[Session] Removing authorization state from storage");try{await this.storage.removeItem(this.authorizationStateKey),this.authorizationState$.next(void 0)}catch(e){throw K.error("Failed to remove authorization state from storage:",e),e}return}try{K.debug("[Session] Updating authorization state in storage"),await this.storage.setItem(this.authorizationStateKey,t),this.authorizationState$.next(t)}catch(e){throw K.error("Failed to retrieve authorization state from storage:",e),e}}get authStateEvent$(){return this.cachedObservable("authStateEvent$",()=>this.signalingEvent$.pipe(Ee(t=>{K.debug("[Session] Received incoming message:",t)}),we(Lg,"params"),Ee(t=>{K.debug("[Session] Authorization state event received:",t.authorization_state)})))}get signalingEvent$(){return this.cachedObservable("signalingEvent$",()=>this.transport.incomingEvent$.pipe(we(Ss,"params"),Ct()))}get vertoInvite$(){return this.cachedObservable("vertoInvite$",()=>this.signalingEvent$.pipe(z(vn),z(t=>Tc(t.params)),x(t=>({node_id:t.node_id,...t.params.params}))))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.signalingEvent$.pipe(z(vn),z(t=>Ec(t.params)),x(t=>({node_id:t.node_id,...t.params.params}))))}get contexts(){return[]}get eventing(){return[]}get topics(){return[]}get authentication(){const t=this.getCredential();if(!t.token)throw new te("Credential token is undefined");return{jwt_token:t.token}}async connect(){await Ke(this.initialized$),await this.transport.connect(),await Ke(this.authenticated$.pipe(S(this.destroyed$),z(Boolean),_e(1),Sr({first:15e3})))}async handleAuthenticationError(t){K.error("Authentication error:",t);const e=t instanceof _t&&(t.code===ko||t.code===xo||t.code===Do),i=await Ke(this.authorizationState$.pipe(_e(1)))!==void 0;if(e&&i){K.debug("[Session] Recoverable auth error — cleaning up stored state and reconnecting fresh");try{await this.cleanupStoredConnectionParams()}catch(r){K.error("Failed to cleanup stored connection params:",r)}finally{this.transport.reconnect()}}else this._errors$.next(t)}async cleanupStoredConnectionParams(){await this.transport.setProtocol(void 0),await this.updateAuthorizationStateInStorage(void 0),this._authorization$.next(void 0)}async teardownSessionState(){await this.cleanupStoredConnectionParams(),await this.attachManager.detachAll()}async updateAuthState(t){try{await this.storage.setItem(this.authorizationStateKey,t)}catch(e){K.error("Failed to update authorization state in storage:",e),this._errors$.next(new ls(e))}}async reauthenticate(t,e,i){var r,n;K.debug("[Session] Re-authenticating session");try{let s=e;if(!s&&((r=this.dpopManager)!=null&&r.initialized))try{s=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"})}catch(o){if(this.clientBound)throw o;K.warn("[Session] Failed to create DPoP proof for reauthenticate:",o)}const a=gg({project:((n=this._authorization$.value)==null?void 0:n.project_id)??"",jwt_token:t,...s?{dpop_token:s}:{}});await ro(Oe(this.transport.execute(a)).pipe(Vo(),_e(1),ci(o=>{throw K.error("[Session] Re-authentication RPC failed:",o),o}))),i!=null&&i.clientBound&&(this._wasClientBound=!0),K.debug("[Session] Re-authentication successful, updating stored auth state")}catch(s){throw K.error("[Session] Re-authentication failed:",s),this._errors$.next(new ls(s)),s}}async authenticate(){var o,c;K.debug("[Session] Starting authentication process");const t=await Ke(ao({protocol:this.transport.protocol$,authorization_state:this.authorizationState$}).pipe(_e(1)));K.debug(`[Session] Persisted params:
|
|
73
|
+
`,{protocol:t.protocol,authStateLength:(o=t.authorization_state)==null?void 0:o.length});const e=t.authorization_state&&t.protocol,i=this.getCredential().token,r=e&&i;let n;if(r?K.debug("[Session] Reconnecting with stored jwt_token + authorization_state"):this.onBeforeReconnect&&this.clientBound&&(K.debug("[Session] Refreshing credentials before fresh connect"),await this.onBeforeReconnect()),(!r||this.clientBound)&&((c=this.dpopManager)!=null&&c.initialized))try{n=await this.dpopManager.createRpcProof({method:"signalwire.connect"})}catch(u){if(this.clientBound)throw u;K.warn("[Session] Failed to create DPoP proof for connect, proceeding without:",u)}const s=pg({authentication:r?{jwt_token:i}:this.authentication,version:this.connectVersion,agent:this.agent,contexts:this.contexts,eventing:this.eventing,topics:this.topics,event_acks:this.eventAcks,...n?{dpop_token:n}:{},...r?{authorization_state:t.authorization_state,protocol:t.protocol}:{}}),a=await ro(Oe(this.transport.execute(s)).pipe(Vo(),x(u=>u.result),z(ov),Ee(()=>{K.debug("[Session] Response passed filter, processing authentication result")}),_e(1),ci(u=>{throw K.error("[Session] Authentication RPC failed:",u),u})));K.debug("[Session] Processing authentication result:",{hasProtocol:!!a.protocol,hasAuthorization:!!a.authorization,hasIceServers:!!a.ice_servers}),a.protocol&&await this.transport.setProtocol(a.protocol),this._authorization$.next(a.authorization),this._iceServers$.next(a.ice_servers??[]),this._authState$.next({kind:"authenticated"}),K.debug("[Session] Authentication completed successfully")}async disconnect(){this.transport.disconnect(),this._authState$.next({kind:"unauthenticated"}),await this.teardownSessionState()}async createInboundCall(t){const e=await this.createCall({nodeId:t.node_id,callId:t.callID,initOffer:t.sdp,toName:t.callee_id_name,to:t.callee_id_number,fromName:t.caller_id_name,from:t.caller_id_number,displayDirection:t.display_direction,userVariables:t.userVariables});this._calls$.next({[`${e.id}`]:e,...this._calls$.value})}async handleVertoAttach(t){const{callID:e}=t;if(e in this._calls$.value){K.debug(`[Session] Verto attach for existing call ${e}, deferring to per-call handler`);return}const i=await this.attachManager.consumePendingAttachment(e);K.debug(`[Session] Creating reattached call for callID: ${e}`);const r=await this.createCall({nodeId:t.node_id,callId:e,toName:t.callee_id_name,to:t.callee_id_number,fromName:t.caller_id_name,from:t.caller_id_number,reattach:!0,...i});this._calls$.next({[`${r.id}`]:r,...this._calls$.value})}async createOutboundCall(t,e={}){const i=t instanceof Rc?t.defaultChannel:t;let r;try{return r=await this.createCall({to:i,...e}),await Ke(Cr(r.selfId$.pipe(z(n=>!!n),_e(1),Sr(this.callCreateTimeout)),r.errors$.pipe(z(lv),_e(1),Je(n=>Td(()=>n.error))))),this._calls$.next({[`${r.id}`]:r,...this._calls$.value}),r}catch(n){K.error("[Session] Error creating outbound call:",n),r==null||r.destroy();const s=new Oo(n instanceof so?"Call create timeout":"Call creation failed",n,"outbound");throw this._errors$.next(s),s}}async createCall(t={}){try{const e=uv(t);let i;try{if(!this._directory)throw new te("Directory not initialized");const n=await this._directory.findAddressIdByURI(e);if(!n)throw new te(`Address name: ${e} not found`);if(i=this._directory.get(n),!i)throw new te(`Address ID: ${n} not found`)}catch{K.warn(`[Session] Directory lookup failed for ${e}, proceeding with raw URI`)}const r=this.callFactory.createCall(i,{...t});return this.subscribeTo(r.status$.pipe(z(n=>n==="destroyed"),_e(1)),()=>{const{[`${r.id}`]:n,...s}=this._calls$.value;this._calls$.next(s)}),r}catch(e){throw K.error("[Session] Error creating call session:",e),new Oo("Call create error",e,t.initOffer?"inbound":"outbound")}}destroy(){for(const t of Object.values(this._calls$.value))t.hangup();super.destroy()}},hv=class{constructor(t){this.clientSessionManager=t}get authenticated$(){return this.clientSessionManager.authenticated$}get authenticated(){return this.clientSessionManager.authenticated}get signalingEvent$(){return this.clientSessionManager.signalingEvent$}get iceServers(){return this.clientSessionManager.iceServers}async execute(t,e){return this.clientSessionManager.execute(t,e)}get incomingCalls$(){return this.clientSessionManager.incomingCalls$}get incomingCalls(){return this.clientSessionManager.incomingCalls}get calls$(){return this.clientSessionManager.calls$}get calls(){return this.clientSessionManager.calls}};const pv=t=>typeof t=="string",ks=G();var gv=class extends Dc{constructor(t,e){super(`/api/fabric/conversations/${t}/messages`,"page_size=100",e),this.groupId=t}},fv=class extends Ic{constructor(t,e,i,r){super(new gv(t,i),e,r)}},vv=class{constructor(t,e,i,r){this.clientSession=t,this.http=e,this.getUserAddressId=i,this.onError=r,this.groupIds=new Map}async join(t){const e=this.getUserAddressId();try{const i=await this.http.request({...dn,url:"/api/fabric/conversations/join",body:JSON.stringify({from_fabric_address_id:e,fabric_address_ids:[t,e]})});if(i.ok&&i.body){const r=JSON.parse(i.body);if(pv(r.group_id))return this.groupIds.set(t,r.group_id),r.group_id}throw new _o("Join Failed - Unexpected response")}catch(i){throw ks.error("[ConversationsManager] Failed to join conversation:",i),i}}async getConversationMessageCollection(t){const e=this.groupIds.get(t)??await this.join(t);return Promise.resolve(new fv(e,this.clientSession.signalingEvent$.pipe(we(bc,"params"),Ee(i=>ks.debug("[ConversationsManager ] Conversation Event:",i)),x(i=>({...i}))),this.http,this.onError))}async sendText(t,e){const i=this.groupIds.get(e)??await this.join(e),r=this.getUserAddressId();try{if((await this.http.request({...dn,url:"/api/fabric/messages",body:JSON.stringify({group_id:i,from_fabric_address_id:r,text:t})})).ok)return;throw new _o("Send Text Failed - Unexpected response")}catch(n){throw ks.error("[ConversationsManager] Failed to send text message:",n),n}}};const Ze=G();function Pc(t){return t.expires_at?t.expires_at:t.expires_in?Math.floor(Date.now()/1e3)+t.expires_in:(Ze.warn("[DeviceToken] Could not determine token expiry, using default"),Math.floor(Date.now()/1e3)+sn)}function Oc(t){return t.expires_in?t.expires_in:t.expires_at?Math.max(t.expires_at-Math.floor(Date.now()/1e3),1):sn}var bv=class extends se{constructor(t,e,i,r){super(),this.dpopManager=t,this.http=e,this.errorHandler=i,this.getCredential=r,this._currentToken$=this.createBehaviorSubject(null),this._refreshInProgress=!1,this._paused=!1,this._effectiveExpireIn=sn,this.subscribeTo(this._currentToken$.pipe(z(Boolean),Je(n=>{const s=Pc(n),a=Math.max(s*1e3-Date.now()-Ao,1e3);return Ze.debug(`[DeviceToken] Scheduling Client Bound SAT refresh in ${a}ms`),Fi(a)})),()=>{this.executeRefresh()})}get effectiveExpireIn(){return this._effectiveExpireIn}async activate(t,e,i){var n;const{satClaims:r}=t;if(!((n=r==null?void 0:r.scope)!=null&&n.includes(dh)))return Ze.debug("[DeviceToken] No sat:refresh scope, skipping Client Bound SAT activation"),{activated:!1,reason:"no-scope"};this._session=e,this._updateCredential=i;try{const s=this._currentToken$.value;if(s&&this.isTokenFresh(s)){Ze.debug("[DeviceToken] Reusing cached Client Bound SAT — skipping /devices/token");const c=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await e.reauthenticate(s.token,c,{clientBound:!0}),i({token:s.token}),{activated:!0}}const a=await this.obtainToken();!a.expires_at&&!a.expires_in&&r.expires_at&&(a.expires_at=r.expires_at),this._effectiveExpireIn=Oc(a);const o=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await e.reauthenticate(a.token,o,{clientBound:!0}),i({token:a.token}),Ze.info("[DeviceToken] Client Bound SAT activated successfully"),this._currentToken$.next(a),{activated:!0}}catch(s){return Ze.error("[DeviceToken] Failed to activate Client Bound SAT:",s),this.errorHandler(new cn(s,"Failed to activate Client Bound SAT")),{activated:!1,reason:"endpoint-failed"}}}isTokenFresh(t){return Pc(t)*1e3-Date.now()>Ao}async obtainToken(){const t=await this.dpopManager.createHttpProof({method:"POST",uri:So}),e=await this.http.request({url:So,...dn,body:JSON.stringify({dpop_token:t,expire_in:sn})});if(!e.ok||!e.body)throw new Uo(`Failed to obtain device token: ${e.status} ${e.statusText}`);const i=JSON.parse(e.body);if(!i.token)throw new Uo("Device token response missing token field");return i}async refreshToken(t,e,i){Ze.debug("[DeviceToken] Refreshing Client Bound SAT");const r=await this.dpopManager.createHttpProof({method:"POST",uri:Co,accessToken:e}),n=await this.http.request({url:Co,...dn,body:JSON.stringify({dpop_token:r,expire_in:this._effectiveExpireIn})});if(!n.ok||!n.body)throw new ui(`Failed to refresh device token: ${n.status} ${n.statusText}`);const s=JSON.parse(n.body);if(!s.token)throw new ui("Device token refresh response missing token field");!s.expires_at&&!s.expires_in&&(s.expires_in=this._effectiveExpireIn),this._effectiveExpireIn=Oc(s);const a=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await t.reauthenticate(s.token,a),i({token:s.token}),Ze.info("[DeviceToken] Client Bound SAT refreshed successfully"),s}async executeRefresh(){if(this._paused){Ze.debug("[DeviceToken] Manager paused, skipping refresh");return}if(this._refreshInProgress){Ze.debug("[DeviceToken] Refresh already in progress, skipping");return}const t=this._session,e=this._updateCredential;if(!t||!e){Ze.warn("[DeviceToken] Cannot refresh: session or updateCredential not set");return}if(!t.authenticated){Ze.debug("[DeviceToken] Session not authenticated, deferring refresh");return}this._refreshInProgress=!0;try{const i=this.getCredential().token;if(!i)throw new ui("No current token available for refresh");const r=await this.retryRefresh(t,i,e);this._currentToken$.next(r)}catch(i){Ze.error("[DeviceToken] Automatic Client Bound SAT refresh failed:",i),this.errorHandler(i instanceof ui?i:new ui("Automatic token refresh failed",i))}finally{this._refreshInProgress=!1}}async retryRefresh(t,e,i){let r;for(let n=0;n<To;n++)try{return await this.refreshToken(t,e,i)}catch(s){if(r=s,n<To-1){const a=hh*Math.pow(2,n);Ze.warn(`[DeviceToken] Refresh attempt ${n+1} failed, retrying in ${a}ms`),await new Promise(o=>setTimeout(o,a))}}throw r instanceof Error?r:new ui("All refresh retries exhausted",r)}pause(){this._paused=!0}resume(){this._paused=!1}destroy(){super.destroy()}};const vi=G(),mv=(t,e,i,r)=>new bv(t,e,i,r);var yv=class extends se{constructor(t,e){super(),this.deps=e,this._activating=!1,this._activationGeneration=0,t!=null&&t.initialized&&(this._deviceTokenManager=(e.deviceTokenManagerFactory??mv)(t,e.http,i=>e.notifier.onError(i),()=>e.store.read()))}get clientBoundSATAvailable(){return this._deviceTokenManager!==void 0}get developerRefreshArmed(){return this._developerTimerId!==void 0}scheduleDeveloperRefresh(t,e,i=0){this._developerTimerId!==void 0&&clearTimeout(this._developerTimerId);const r=i===0?Math.max(e-Date.now()-fh,1e3):Math.min(ph*Math.pow(2,i)*(.5+Math.random()*.5),gh);this._developerTimerId=setTimeout(async()=>{try{if(!t.refresh)throw new li("Credential provider does not support refresh");const n=await t.refresh();this.deps.store.write(n),this.deps.store.persist(n),vi.info("[Coordinator] Credentials refreshed successfully."),n.expiry_at&&this.scheduleDeveloperRefresh(t,n.expiry_at,0)}catch(n){const s=i+1;vi.error(`[Coordinator] Credential refresh failed (attempt ${s}/${Eo}):`,n),this.deps.notifier.onError(n instanceof Error?n:new Error(String(n),{cause:n})),s<Eo?this.scheduleDeveloperRefresh(t,e,s):(vi.error("[Coordinator] Credential refresh exhausted all retries. Disconnecting."),this.deps.notifier.onError(new ui("Credential refresh failed after max retries")),this.deps.notifier.onRefreshExhausted())}},r)}cancelDeveloperRefresh(){this._developerTimerId!==void 0&&(clearTimeout(this._developerTimerId),this._developerTimerId=void 0)}suspend(){var t;this.cancelDeveloperRefresh(),(t=this._deviceTokenManager)==null||t.pause()}async activate(t,e){if(this._activating){vi.debug("[Coordinator] activate() in flight; ignoring re-entrant call");return}if(!this._deviceTokenManager)return;this._deviceTokenManager.resume();const i=++this._activationGeneration;this._activating=!0;try{const r=await this.withActivationTimeout(this._deviceTokenManager.activate(t,e,n=>this.deps.store.merge(n)));if(i!==this._activationGeneration){vi.debug("[Coordinator] activate() result discarded (preempted by newer activation)");return}if(r.activated){this.cancelDeveloperRefresh(),vi.debug("[Coordinator] Developer refresh disabled — Client Bound SAT owns refresh");return}vi.warn(`[SignalWire] [SW-REFRESH-FALLBACK] Client Bound SAT declined (reason=${r.reason}); using developer-provided refresh handler.`),this.deps.notifier.onWarning({code:"credential_refresh_fallback",source:"CredentialProvider",reason:r.reason,message:`Client Bound SAT activation declined (${r.reason}); using developer-provided refresh.`})}finally{this._activating=!1}}destroy(){var t;this.cancelDeveloperRefresh(),(t=this._deviceTokenManager)==null||t.destroy(),this._deviceTokenManager=void 0,super.destroy()}async withActivationTimeout(t){return new Promise(e=>{const i=setTimeout(()=>{var r;(r=this._deviceTokenManager)==null||r.pause(),e({activated:!1,reason:"activation-timeout"})},vh);t.then(r=>{clearTimeout(i),e(r)},r=>{clearTimeout(i),this.deps.notifier.onError(r instanceof Error?r:new Error(String(r))),e({activated:!1,reason:"endpoint-failed"})})})}};const xs=G(),wv=1e3;function Sv(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"unknown"}var Cv=class extends se{constructor(t){super(),this._events=[],this._calls=[],this._deviceChanges=[],this._eventRecorded$=this.createSubject(),this._sdkVersion=t.sdkVersion,this._maxEvents=t.maxEvents??wv,xs.debug("DiagnosticsCollector initialized",{sdkVersion:this._sdkVersion,maxEvents:this._maxEvents})}get eventRecorded$(){return this._eventRecorded$.asObservable()}record(t,e,i){const r={timestamp:Date.now(),category:t,event:e,...i!==void 0?{details:i}:{}};this._events=this._appendToBuffer(this._events,r),this._eventRecorded$.next(r)}recordDeviceChange(t,e){const i={timestamp:Date.now(),category:"device",event:t,...e!==void 0?{details:e}:{}};this._deviceChanges=this._appendToBuffer(this._deviceChanges,i),this._events=this._appendToBuffer(this._events,i),this._eventRecorded$.next(i)}recordCallSummary(t){this._calls=this._appendCallToBuffer(this._calls,t),this.record("call","call_summary",{callId:t.callId,direction:t.direction,duration:t.duration,finalStatus:t.finalStatus})}export(){return{sdkVersion:this._sdkVersion,userAgent:Sv(),exportedAt:Date.now(),events:[...this._events],calls:[...this._calls],deviceChanges:[...this._deviceChanges]}}clear(){this._events=[],this._calls=[],this._deviceChanges=[],xs.debug("DiagnosticsCollector buffers cleared")}destroy(){xs.debug("DiagnosticsCollector destroyed"),super.destroy()}_appendToBuffer(t,e){const i=[...t,e];return i.length>this._maxEvents?i.slice(i.length-this._maxEvents):i}_appendCallToBuffer(t,e){const i=[...t,e];return i.length>this._maxEvents?i.slice(i.length-this._maxEvents):i}};const _c=t=>((t==null?void 0:t.length)??0)===0,Av=t=>{t.pipe(_e(1)).subscribe()},Tv=G();var Ev=class extends Dc{constructor(t){super("/api/fabric/addresses","sort_by=name&sort_order=asc",t)}async name(t){const e=await this.http.request({...gs,url:`${this.endpoint}?name=${encodeURIComponent(t)}`});if(e.ok&&e.body){const i=JSON.parse(e.body);if(!_c(i.data))return i.data[0]}Tv.error("Failed to fetch addresses")}},kv=class extends Ic{constructor(t,e,i){super(new Ev(e),t,i)}},xv=class extends se{constructor(t,e,i,r){super(),this.http=t,this.conversationManager=i,this.onError=r,this.addNewAddress=n=>{var o;const s=new Rc(n,this.conversationManager,this),a=(o=this._statesCollection.get$(n))==null?void 0:o.pipe(fe(),x(c=>(s.upnext(c),s)));a&&(Av(a),this._observableRegistry.set(n,a)),this._addressesInstances.set(n,s)},this._addresses$=this.createBehaviorSubject([]),this._addressesInstances=new Map,this._observableRegistry=new Map,this._statesCollection=new kv(e.signalingEvent$.pipe(we(mc,"params"),x(n=>({}))),this.http,this.onError),this.initSubscriptions()}get loading(){return this._statesCollection.loading}initSubscriptions(){this.subscribeTo(this._statesCollection.updated$,()=>{const t=Array.from(this._addressesInstances.values().map(i=>i.id)),e=this._statesCollection.values.filter(i=>!t.includes(i.id));_c(e)||(e.forEach(i=>this.addNewAddress(i.id)),this._addresses$.next(Array.from(this._addressesInstances.values())))})}get addresses$(){return this._addresses$.asObservable()}get addresses(){return this._addresses$.value}get hasMore$(){return this._statesCollection.hasMore$}get loading$(){return this._statesCollection.loading$}loadMore(){this._statesCollection.hasMore&&this._statesCollection.loadMore()}get$(t){return this._observableRegistry.has(t)||this.addNewAddress(t),this._observableRegistry.get(t)}get(t){return this._addressesInstances.get(t)}async findAddressIdByURI(t){var i;let e=(i=this._addressesInstances.values().find(r=>r.name===t))==null?void 0:i.id;if(!e){const r=await this._statesCollection.find$("name",t);if(r){const n=await Ke(r);this.addNewAddress(n.id),e=n.id}}return e}};const Lc=G();var Dv=(mt=class extends se{constructor(e,i,r,n={}){super(),this.WebSocketConstructor=e,this.endpoint=i,this.outgoingMessages$=r,this.messageQueue=[],this.shouldReconnect=!1,this.boundHandleOpen=()=>this.handleOpen(),this.boundHandleClose=s=>this.handleClose(s),this.boundHandleError=()=>this.handleError(),this.boundHandleMessage=s=>this.handleMessage(s),this._status$=this.createBehaviorSubject("disconnected"),this._incomingMessages$=this.createSubject(),this._errors$=this.createReplaySubject(1),this.reconnectDelayMin=n.reconnectDelayMin??mt.DEFAULT_RECONNECT_DELAY_MIN_MS,this.reconnectDelayMax=n.reconnectDelayMax??mt.DEFAULT_RECONNECT_DELAY_MAX_MS,this.connectionTimeout=n.connectionTimeout??mt.DEFAULT_CONNECTION_TIMEOUT_MS,this.currentReconnectDelay=this.reconnectDelayMin,this.subscriptions.push(this.outgoingMessages$.subscribe(s=>{this.send(s)}))}get status$(){return this._status$.asObservable()}get incomingMessages$(){return this._incomingMessages$.asObservable()}get errors$(){return this._errors$.asObservable()}connect(){this._status$.value==="connecting"||this._status$.value==="connected"||(this.shouldReconnect=!0,this._status$.next("connecting"),this.createWebSocket())}disconnect(){this.shouldReconnect=!1,this.clearReconnectTimer(),this.clearConnectionTimeout();const e=this._status$.value;e==="connected"||e==="connecting"||e==="reconnecting"?this.socket?(this._status$.next("disconnecting"),this.socket.close()):this._status$.next("disconnected"):this._status$.next("disconnected")}reconnect(){this.shouldReconnect=!0,this._status$.next("reconnecting"),this.scheduleReconnection()}send(e){var i;this._status$.value==="connected"&&((i=this.socket)==null?void 0:i.readyState)===1?(Lc.wsTraffic({type:"send",raw:e}),this.socket.send(e)):this.messageQueue.push(e)}createWebSocket(){try{this.closeExistingSocket(),this.socket=new this.WebSocketConstructor(this.endpoint),this.setupWebSocketListeners(),this.startConnectionTimeout()}catch(e){const i=e instanceof Error?e:new Ui("Failed to create WebSocket");this._errors$.next(i),this.handleConnectionError()}}closeExistingSocket(){if(!this.socket)return;const e=this.socket;this.socket=void 0,this.removeWebSocketListeners(e);try{e.close()}catch{}}setupWebSocketListeners(){this.socket&&(this.socket.addEventListener("open",this.boundHandleOpen),this.socket.addEventListener("close",this.boundHandleClose),this.socket.addEventListener("error",this.boundHandleError),this.socket.addEventListener("message",this.boundHandleMessage))}removeWebSocketListeners(e){try{e.removeEventListener("open",this.boundHandleOpen),e.removeEventListener("close",this.boundHandleClose),e.removeEventListener("error",this.boundHandleError),e.removeEventListener("message",this.boundHandleMessage)}catch{}}handleOpen(){this.clearConnectionTimeout(),this._status$.next("connected"),this.currentReconnectDelay=this.reconnectDelayMin,this.flushMessageQueue()}handleClose(e){this.clearConnectionTimeout(),this.shouldReconnect?(this._status$.next("reconnecting"),this.scheduleReconnection()):this._status$.next("disconnected")}handleError(){const e=new Mo("WebSocket connection error");this._errors$.next(e),this.handleConnectionError()}handleMessage(e){Lc.wsTraffic({type:"recv",raw:e.data}),this._incomingMessages$.next(e)}handleConnectionError(){this.reconnect()}scheduleReconnection(){this.clearReconnectTimer();const e=this.currentReconnectDelay*(.5+Math.random()*.5);this.reconnectTimer=setTimeout(()=>{this.shouldReconnect&&(this._status$.next("connecting"),this.createWebSocket(),this.increaseReconnectDelay())},e)}increaseReconnectDelay(){this.currentReconnectDelay=Math.min(this.currentReconnectDelay*2,this.reconnectDelayMax)}startConnectionTimeout(){this.clearConnectionTimeout(),this.connectionTimeoutTimer=setTimeout(()=>{if(this._status$.value==="connecting"){const e=new rp("WebSocket connection timeout");this._errors$.next(e),this.socket&&this.socket.close()}},this.connectionTimeout)}clearConnectionTimeout(){this.connectionTimeoutTimer&&(clearTimeout(this.connectionTimeoutTimer),this.connectionTimeoutTimer=void 0)}clearReconnectTimer(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0)}flushMessageQueue(){var e;for(;this.messageQueue.length>0&&((e=this.socket)==null?void 0:e.readyState)===1;){const i=this.messageQueue.shift();i!==void 0&&this.socket.send(i)}}},mt.DEFAULT_RECONNECT_DELAY_MIN_MS=1e3,mt.DEFAULT_RECONNECT_DELAY_MAX_MS=3e4,mt.DEFAULT_CONNECTION_TIMEOUT_MS=1e4,mt);function Iv(t){return ys(t)&&t.method==="signalwire.ping"}const De=G();var Mv=class extends se{constructor(t,e,i,r,n){super(),this.storage=t,this.protocolKey=e,this.onError=n,this.protocol$=this.createReplaySubject(1),this.isConnecting=!1,this.isConnected=!1,this.ackEvent=()=>Ee(s=>{if(Ss(s))try{De.debug("[Transport] Sending event ack",{eventId:s.id}),this.send(kg(s.id))}catch(a){De.error("[Transport] Failed to send event acknowledgment:",a)}}),this.replySignalwirePing=()=>z(s=>{if(Iv(s)){try{De.debug("[Transport] Received ping, sending pong",{pingId:s.id}),this.send(fg(s.id))}catch(a){De.error("[Transport] Failed to send ping response:",a)}return!1}return!0}),this.discardStaleEvents=()=>z(s=>{if(!Ss(s))return!0;const a=s.params.event_channel;if(!a)return!0;if(s.params.event_type.startsWith("conversation."))return De.debug(`[Transport] Received conversation event: ${s.params.event_type} (event_channel: ${a})`),!0;const o=this._currentProtocol;if(!o)return!0;if(!a.includes(o)){const c=s.params.event_type;return De.warn(`[Transport] Discarding stale event: ${c} (event_channel does not match current protocol)`),!1}return!0}),this._outgoingMessages$=this.createSubject(),this._webSocketConnections=new Dv(i,r,this._outgoingMessages$.asObservable(),{connectionTimeout:f.instance.connectionTimeout,reconnectDelayMin:f.instance.reconnectDelayMin,reconnectDelayMax:f.instance.reconnectDelayMax}),this.subscribeTo(this._webSocketConnections.errors$,s=>{var a;(a=this.onError)==null||a.call(this,s)}),this.initialized$=oi(()=>Oe(this._init())).pipe(st(1),S(this.destroyed$)),this._jsonRPCMessage$=this._webSocketConnections.incomingMessages$.pipe(x(s=>{var a;try{return JSON.parse(s.data)}catch(o){return De.error("[Transport] Failed to parse incoming message:",o),(a=this.onError)==null||a.call(this,new up(o)),null}}),z(s=>s!==null&&(ws(s)||ys(s))),ci(s=>{var a;return De.error("[Transport] Message processing error:",s),(a=this.onError)==null||a.call(this,s instanceof Error?s:new Error(String(s),{cause:s})),ai}),Ct(),S(this.destroyed$)),this._jsonRPCResponse$=this._jsonRPCMessage$.pipe(z(ws)),this._incomingEvent$=this._jsonRPCMessage$.pipe(this.ackEvent(),this.replySignalwirePing(),z(s=>!ws(s)),this.discardStaleEvents(),Ct(),S(this.destroyed$))}async setProtocol(t){this._currentProtocol=t,this.protocol$.next(t),await this._updateProtocolInStorage(t)}get incomingEvent$(){return this._incomingEvent$}get connectionStatus$(){return this._webSocketConnections.status$}async connect(){return this.isConnecting||this.isConnected?(De.warn("[Transport] Already connecting or connected"),Promise.resolve()):new Promise((t,e)=>{this.isConnecting=!0,this.subscribeTo(this.initialized$,()=>{this._webSocketConnections.connect();const i=this._webSocketConnections.status$.pipe(z(r=>r==="connected"||r==="disconnected"),_e(1),Sr(1e4)).subscribe({next:r=>{var n;if(r==="connected")this.isConnecting=!1,this.isConnected=!0,De.debug("[Transport] Connection established"),t();else{this.isConnecting=!1;const s=new Ro("Failed to connect");De.error("[Transport] Connection failed"),(n=this.onError)==null||n.call(this,s),e(s)}},error:r=>{var n;this.isConnecting=!1,De.error("[Transport] Connection error:",r),(n=this.onError)==null||n.call(this,r instanceof Error?r:new Error(String(r),{cause:r})),e(r)}});this.subscriptions.push(i),this.subscribeTo(this._webSocketConnections.status$.pipe(z(r=>r==="disconnected")),()=>{De.debug("[Transport] Disconnected"),this.isConnected=!1})})})}reconnect(){this._webSocketConnections.reconnect()}async execute(t,e){return this.send(t),new cv(t,this._jsonRPCResponse$,e).promise}send(t){const e=JSON.stringify(t);this._outgoingMessages$.next(e)}disconnect(){De.debug("[Transport] Disconnecting"),this.isConnected=!1,this.isConnecting=!1,this._webSocketConnections.disconnect()}destroy(){De.debug("[Transport] Destroying"),this.disconnect(),super.destroy(),this._webSocketConnections.destroy()}async _loadProtocolFromStorage(){try{const t=await this.storage.getItem(this.protocolKey);this._currentProtocol=t??void 0,this.protocol$.next(t??void 0)}catch(t){throw De.error("Failed to retrieve protocol from storage:",t),t}}async _updateProtocolInStorage(t){if(!t){try{await this.storage.removeItem(this.protocolKey)}catch(e){throw De.error("Failed to remove protocol from storage:",e),e}return}try{const e=await this.storage.getItem(this.protocolKey);(!e||e!==t)&&await this.storage.setItem(this.protocolKey,t)}catch(e){throw De.error("Failed to update protocol in storage:",e),e}}async _init(){return await this._loadProtocolFromStorage(),!0}};const Q=G(),Rv=t=>{if(typeof t=="string"){const e=t.indexOf("?");if(e!==-1){const i=t.substring(e+1),r=new URLSearchParams(i).get("channel");if(r==="video")return{audio:!0,video:!0,receiveVideo:!0};if(r==="audio")return{audio:!0,video:!1}}}return{}};var Fc=class extends se{constructor(t,e={}){super(),this.preferences=new Vp,this._user$=this.createBehaviorSubject(void 0),this._directory$=this.createBehaviorSubject(void 0),this._isConnected$=this.createBehaviorSubject(!1),this._isRegistered$=this.createBehaviorSubject(!1),this._errors$=this.createReplaySubject(1),this._warnings$=this.createReplaySubject(10),this._options={},this._deps=new Gp,this._credentialProvider=t,this._options={...f.instance.defaultSignalWireOptions,...e},this._options.storageImplementation&&(this._deps.storageImpl=this._options.storageImplementation),this._options.persistSession&&(this._deps.persistSession=!0),this._options.webSocketConstructor&&(this._deps.WebSocket=this._options.webSocketConstructor),this._options.savePreferences&&this.preferences.enableSavePreferences(this._deps.storage),this._options.webRTCApiProvider&&(this._deps.webRTCApiProvider=this._options.webRTCApiProvider),this._options.logger!==void 0&&fp(this._options.logger),this._options.logLevel&&bp(this._options.logLevel),this._options.debug&&vp(this._options.debug),this._deviceController=this._deps.deviceController,this._options.skipDeviceMonitoring||this._deviceController.enableDeviceMonitoring(),this.subscribeTo(this._deviceController.errors$,i=>{this._errors$.next(i)}),this.initResilienceSubsystems(),this.resolveCredentials().then(()=>{this.init().catch(i=>{Q.error("[SignalWire] Initialization error:",i),this._deps.storage.removeItem("sw:cached_credential"),this._deps.storage.removeItem("sw:cached_credential","local"),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i}))})}).catch(i=>{Q.error("[SignalWire] Initialization error:",i),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i}))})}async initDPoP(){var t;if((t=this._dpopManager)!=null&&t.initialized)return this._dpopManager.fingerprint;try{this._dpopManager=new Zp;const e=await this._dpopManager.init();return Q.debug("[SignalWire] DPoP initialized, fingerprint available"),e}catch(e){Q.warn("[SignalWire] DPoP initialization failed, proceeding without DPoP:",e),this._dpopManager=void 0;return}}async resolveCredentials(){const t=await this.initDPoP();if(this._refreshCoordinator=new yv(this._dpopManager,{http:this._deps.http,notifier:{onError:e=>this._errors$.next(e),onWarning:e=>this._warnings$.next(e),onRefreshExhausted:()=>void this.disconnect()},store:{read:()=>this._deps.credential,write:e=>{this._deps.credential=e},merge:e=>{this._deps.credential={...this._deps.credential,...e}},persist:e=>this.persistCredential(e)}}),this._credentialProvider)return this.validateCredentials(this._credentialProvider,void 0,t);for(const e of this._deps.persistSession?["local","session"]:["session"])try{const i=await this._deps.storage.getItem("sw:cached_credential",e);if(i!=null&&i.token)return Q.debug(`[SignalWire] Using cached credential from ${e}Storage`),await this.validateCredentials(void 0,i)}catch{}throw new li("No credential provider and no cached session. Provide a CredentialProvider or enable persistSession with a prior login.")}async validateCredentials(t,e,i){var s,a;const r=i??((s=this._dpopManager)!=null&&s.initialized?this._dpopManager.fingerprint:void 0),n=e??(t?await t.authenticate(r?{fingerprint:r}:void 0):void 0);if(!n)throw new li("No credentials available.");if(n.token)try{const o=Ap(n.token,{header:!0});this._deps.ch=o.ch}catch(o){throw Q.error("[SignalWire] Invalid JWT token provided in credentials:",o),new li("Invalid JWT token provided in credentials.",{cause:o})}if(!n.token&&!n.authorizationState)throw Q.error("[SignalWire] No valid authentication credentials provided."),new li("No valid authentication credentials provided.");if(!this._deps.persistSession&&n.expiry_at&&n.expiry_at<Date.now())throw Q.error("[SignalWire] Provided credentials have expired."),new li("Provided credentials have expired.");if(n.expiry_at&&(t!=null&&t.refresh)?(a=this._refreshCoordinator)==null||a.scheduleDeveloperRefresh(t,n.expiry_at):n.expiry_at&&!(t!=null&&t.refresh)&&(Q.warn(`[SignalWire] [SW-NO-REFRESH-HANDLER] Credential has expiry_at=${n.expiry_at} but no refresh handler. Session will terminate at expiry unless the SAT has 'sat:refresh' scope.`),this._warnings$.next({code:"credential_no_refresh_handler",source:"CredentialProvider",message:"Credential has expiry_at but no refresh handler. Session will terminate at expiry unless the SAT carries 'sat:refresh' scope.",expiresAt:n.expiry_at})),this._deps.credential=n,this.persistCredential(n),this.isConnected&&this._clientSession.authenticated&&n.token)try{await this._clientSession.reauthenticate(n.token),Q.info("[SignalWire] Session refreshed with new credentials.")}catch(o){Q.error("[SignalWire] Failed to refresh session with new credentials:",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}}persistCredential(t){t.token&&(this._deps.storage.setItem("sw:cached_credential",t),this._deps.persistSession&&this._deps.storage.setItem("sw:cached_credential",t,"local"))}async init(){if(this._user$.next(new dg(this._deps.http)),this._options.skipConnection||await this.connect(),!this._options.reconnectAttachedCalls&&this._attachManager&&await this._attachManager.flush(),!this._options.skipRegister)try{await this.register()}catch(t){Q.error("[SignalWire] Registration failed:",t),this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t}))}this.handleAttachments()}async handleAttachments(){if(!this._attachManager){Q.error("[SignalWire] AttachManager not initialized");return}if(this._options.reconnectAttachedCalls)try{await this._attachManager.reattachCalls()}catch(t){Q.error("[SignalWire] Failed to reattach calls:",t),this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t}))}}async connect(){var r,n,s;await this.teardownTransportAndSession();try{const a=this._user$.value;if(!a)throw new Ui("User not initialized before connect");if(!await Ke(a.fetched$))throw new Ui("Failed to fetch user information - fetched$ emitted false");this._deps.user=a}catch(a){throw Q.error(`[SignalWire] Failed to fetch user information: ${a instanceof Error?a.message:"Unknown error"}. This usually means the user token is invalid or expired.`),new Ui("Error fetching user information",{cause:a})}const t=a=>{this._errors$.next(a)};this._transport=new Mv(this._deps.storage,this._deps.protocolKey,this._deps.WebSocket,f.instance.relayHost??this._deps.relayHost,t),this._attachManager=new xg(this._deps.storage,this._deps.deviceController,f.instance.reconnectCallsTimeout,this._deps.attachedCallsKey),this._clientSession=new dv(()=>this._deps.credential,this._transport,this._deps.storage,this._deps.authorizationStateKey,this._deps.deviceController,this._attachManager,this._deps.webRTCApiProvider,this._dpopManager,(r=this._networkMonitor)==null?void 0:r.networkChange$),this._publicSession=new hv(this._clientSession),this._clientSession.onBeforeReconnect=async()=>{var a,o;if(this._credentialProvider)try{const c=(a=this._dpopManager)!=null&&a.initialized?this._dpopManager.fingerprint:void 0;Q.debug("[SignalWire] Credential expired, refreshing before reconnect");const u=await this._credentialProvider.authenticate(c?{fingerprint:c}:void 0);this._deps.credential=u,u.expiry_at&&this._credentialProvider.refresh&&((o=this._refreshCoordinator)==null||o.scheduleDeveloperRefresh(this._credentialProvider,u.expiry_at)),Q.debug("[SignalWire] Credential refreshed successfully for reconnect")}catch(c){throw Q.error("[SignalWire] Failed to refresh credentials for reconnect:",c),this._errors$.next(c instanceof Error?c:new Error(String(c),{cause:c})),c}},this.subscribeTo(this._clientSession.errors$,a=>{this._errors$.next(a)}),await this._clientSession.connect(),await((n=this._refreshCoordinator)==null?void 0:n.activate(this._deps.user,this._clientSession)),this.subscribeTo(this._clientSession.authenticated$.pipe(tn(1),z(Boolean)),async()=>{var a;try{await((a=this._refreshCoordinator)==null?void 0:a.activate(this._deps.user,this._clientSession))}catch(o){Q.error("[SignalWire] Refresh re-arm after reconnect failed (non-fatal):",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}try{Q.debug("[SignalWire] Re-registering user after reconnect"),await this.register(),Q.debug("[SignalWire] User re-registered successfully after reconnect")}catch(o){Q.error("[SignalWire] Re-registration failed after reconnect:",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}});const e=new vv(this._clientSession,this._deps.http,()=>this._deps.getUserFromAddressId(),t),i=new xv(this._deps.http,this._clientSession,e,t);this._directory$.next(i),this._clientSession.setDirectory(i),this._isConnected$.next(!0),(s=this._diagnosticsCollector)==null||s.record("connection","connected"),this.subscribeTo(this._clientSession.authenticated$.pipe(tn(2),z(Boolean)),()=>{var a;(a=this._diagnosticsCollector)==null||a.record("connection","reconnected")})}get user$(){return this.deferEmission(this._user$.asObservable())}get user(){return this._user$.value}get directory$(){return this.deferEmission(this._directory$.asObservable())}get directory(){return this._directory$.value}get isRegistered$(){return this.deferEmission(this._isRegistered$.asObservable())}get isRegistered(){return this._isRegistered$.value}get isConnected(){return this._isConnected$.value}get isConnected$(){return this.deferEmission(this._isConnected$.asObservable())}get ready$(){return this.publicCachedObservable("ready$",()=>this._isConnected$.pipe(Je(t=>t?this._clientSession.authenticated$:St(!1))))}get errors$(){return this.deferEmission(this._errors$.asObservable())}get warnings$(){return this.deferEmission(this._warnings$.asObservable())}get platformCapabilities(){return this._platformCapabilities??(this._platformCapabilities=$o(this._options.webRTCApiProvider)),this._platformCapabilities}get deviceRecovered$(){return this.deferEmission(this._deviceController.deviceRecovered$)}exportDiagnostics(){const t={audioInput:this.audioInputDevices,audioOutput:this.audioOutputDevices,videoInput:this.videoInputDevices},e={sdkVersion:"unknown",userAgent:typeof navigator<"u"?navigator.userAgent:"unknown",capabilities:this.platformCapabilities,events:[],calls:[],deviceChanges:[],devices:t};if(!this._diagnosticsCollector)return e;const i=this._diagnosticsCollector.export();return{...e,sdkVersion:i.sdkVersion,userAgent:i.userAgent,events:i.events,calls:i.calls,deviceChanges:i.deviceChanges,devices:t}}initResilienceSubsystems(){try{this._platformCapabilities=$o(this._options.webRTCApiProvider)}catch(t){Q.warn("[SignalWire] Failed to detect platform capabilities:",t)}try{this._networkMonitor=new Qp}catch(t){Q.warn("[SignalWire] Failed to initialize NetworkMonitor:",t)}try{this._visibilityController=new lg,this.subscribeTo(this._visibilityController.visibilityChange$.pipe(z(t=>t.to==="visible"&&f.instance.refreshDevicesOnVisible)),()=>{Q.debug("[SignalWire] Page visible, re-enumerating devices");try{this._deviceController.disableDeviceMonitoring(),this._deviceController.enableDeviceMonitoring()}catch{}})}catch(t){Q.warn("[SignalWire] Failed to initialize VisibilityController:",t)}try{this._diagnosticsCollector=new Cv({sdkVersion:"4.0.0-rc.2"})}catch(t){Q.warn("[SignalWire] Failed to initialize DiagnosticsCollector:",t)}}async disconnect(){var t,e;(t=this._refreshCoordinator)==null||t.suspend(),(e=this._diagnosticsCollector)==null||e.record("connection","disconnected"),await this.teardownTransportAndSession(),this._isConnected$.next(!1)}async teardownTransportAndSession(){const t=this._clientSession,e=this._transport;if(t){try{await t.disconnect()}catch(i){Q.warn("[SignalWire] Error disconnecting previous session:",i)}t.destroy()}e&&e.destroy(),this._clientSession=void 0,this._publicSession=void 0,this._transport=void 0,this._attachManager=void 0}async waitAuthentication(){await Ke(this.ready$.pipe(z(t=>t===!0)))}async register(){try{await this.waitAuthentication(),await this._transport.execute(bs({method:"subscriber.online",params:{}})),this._isRegistered$.next(!0);return}catch(t){if(!this._deps.credential.token)throw this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t})),t;Q.debug("[SignalWire] Failed to register user, trying reauthentication...");try{await this._clientSession.reauthenticate(this._deps.credential.token),Q.debug("[SignalWire] Reauthentication successful, retrying register()"),await this._transport.execute(bs({method:"subscriber.online",params:{}})),this._isRegistered$.next(!0)}catch(e){Q.error("[SignalWire] Reauthentication failed during register():",e);const i=new li("Failed to register user, and reauthentication attempt also failed. Please check your credentials.",{cause:e instanceof Error?e:new Error(String(e),{cause:e})});throw this._errors$.next(i),i}}}async unregister(){try{await this._transport.execute(bs({method:"subscriber.offline",params:{}})),this._isRegistered$.next(!1)}catch(t){throw Q.error("[SignalWire] Failed to unregister user:",t),this._errors$.next(t instanceof Error?t:new Error(String(t),{cause:t})),t}}async dial(t,e={}){const i={...f.instance.preferredMediaOptions,...Rv(t),...e};return await this.waitAuthentication(),Q.debug("[SignalWire] Dialing with options:",i),this._clientSession.createOutboundCall(t,i)}async preflight(t,e){const i=this._clientSession.iceServers??f.instance.iceServers??[],r=this._isConnected$.value;return new og(this._deviceController,i,r,0,async(n,s)=>this.dial(n,s),e).run(t)}get session(){return this._publicSession}get audioInputDevices$(){return this.deferEmission(this._deviceController.audioInputDevices$)}get audioInputDevices(){return this._deviceController.audioInputDevices}get audioOutputDevices$(){return this.deferEmission(this._deviceController.audioOutputDevices$)}get audioOutputDevices(){return this._deviceController.audioOutputDevices}get videoInputDevices$(){return this.deferEmission(this._deviceController.videoInputDevices$)}get videoInputDevices(){return this._deviceController.videoInputDevices}get selectedAudioInputDevice$(){return this.deferEmission(this._deviceController.selectedAudioInputDevice$)}get selectedAudioOutputDevice$(){return this.deferEmission(this._deviceController.selectedAudioOutputDevice$)}get selectedVideoInputDevice$(){return this.deferEmission(this._deviceController.selectedVideoInputDevice$)}get selectedAudioInputDevice(){return this._deviceController.selectedAudioInputDevice}get selectedAudioOutputDevice(){return this._deviceController.selectedAudioOutputDevice}get selectedVideoInputDevice(){return this._deviceController.selectedVideoInputDevice}get selectedAudioInputDeviceConstraints(){return this._deviceController.selectedAudioInputDeviceConstraints}get selectedVideoInputDeviceConstraints(){return this._deviceController.selectedVideoInputDeviceConstraints}deviceInfoToConstraints(t){return this._deviceController.deviceInfoToConstraints(t)}selectAudioInputDevice(t){this._deviceController.selectAudioInputDevice(t)}selectVideoInputDevice(t){this._deviceController.selectVideoInputDevice(t)}selectAudioOutputDevice(t){this._deviceController.selectAudioOutputDevice(t)}async applySelectedAudioOutputDevice(t){const e=this._deviceController.selectedAudioOutputDevice;if(!(e!=null&&e.deviceId))return!1;const i=t;if(typeof i.setSinkId!="function")return Q.warn("[SignalWire] setSinkId not supported on this element / browser"),!1;try{return await i.setSinkId(e.deviceId),!0}catch(r){return Q.warn("[SignalWire] Failed to apply audio output device:",r),!1}}enableDeviceMonitoring(){this._deviceController.enableDeviceMonitoring()}disableDeviceMonitoring(){this._deviceController.disableDeviceMonitoring()}async getDeviceCapabilities(t){return this._deviceController.getDeviceCapabilities(t)}async isValidDevice(t){return this._deviceController.isValidDevice(t)}setStorageManager(t){this._deviceController.setStorageManager(t)}async clearDeviceState(){return this._deviceController.clearDeviceState()}async enumerateDevices(){return this._deviceController.enumerateDevices()}disableAudioInput(){this._deviceController.disableAudioInput()}enableAudioInput(){this._deviceController.enableAudioInput()}disableVideoInput(){this._deviceController.disableVideoInput()}enableVideoInput(){this._deviceController.enableVideoInput()}get videoInputDisabled$(){return this.deferEmission(this._deviceController.videoInputDisabled$)}get audioInputDisabled$(){return this.deferEmission(this._deviceController.audioInputDisabled$)}get videoInputDisabled(){return this._deviceController.videoInputDisabled}get audioInputDisabled(){return this._deviceController.audioInputDisabled}async requestMediaPermissions(t={audio:!0,video:!0}){const e={audio:t.audio??!1,video:t.video??!1};let i=!1,r=!1,n,s;try{const a=(await this._deps.webRTCApiProvider.mediaDevices.getUserMedia(e)).getTracks();for(const o of a){const c=o.getSettings();o.kind==="audio"?(i=!0,c.deviceId&&(n=this.audioInputDevices.find(u=>u.deviceId===c.deviceId))):o.kind==="video"&&(r=!0,c.deviceId&&(s=this.videoInputDevices.find(u=>u.deviceId===c.deviceId))),o.stop()}}catch(a){Q.warn("[SignalWire] Media permission request failed:",a)}if(await this._deviceController.enumerateDevices(),i&&n){const a=n.deviceId;n=this.audioInputDevices.find(o=>o.deviceId===a)??n}if(r&&s){const a=s.deviceId;s=this.videoInputDevices.find(o=>o.deviceId===a)??s}return i&&n&&!this.selectedAudioInputDevice&&this.selectAudioInputDevice(n),r&&s&&!this.selectedVideoInputDevice&&this.selectVideoInputDevice(s),{audio:i,video:r,selectedAudioDevice:n,selectedVideoDevice:s}}async resetToDefaults(){await this._deps.storage.clearAll();const t=f.instance;t.preferredAudioInput=null,t.preferredAudioOutput=null,t.preferredVideoInput=null,await this._deviceController.clearDeviceState()}destroy(){var t,e,i,r,n;(t=this._refreshCoordinator)==null||t.destroy(),this._refreshCoordinator=void 0,(e=this._dpopManager)==null||e.destroy(),this._clientSession.teardownSessionState(),this._transport.destroy(),this._clientSession.destroy();try{(i=this._networkMonitor)==null||i.destroy()}catch{}try{(r=this._visibilityController)==null||r.destroy()}catch{}try{(n=this._diagnosticsCollector)==null||n.destroy()}catch{}this._networkMonitor=void 0,this._visibilityController=void 0,this._diagnosticsCollector=void 0,super.destroy()}};const Pv=G();var Nc=class{constructor(t,e){this.host=t,this.embedToken=e}async fetchSAT(){const t=`https://${this.host}/api/fabric/embeds/tokens`,e=1e4,i=new AbortController,r=setTimeout(()=>i.abort(),e);try{const n=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:this.embedToken}),signal:i.signal});if(clearTimeout(r),n.ok)return(await n.json()).token;throw new np(`Failed to fetch SAT using embed token: ${n.status} ${n.statusText}`)}catch(n){throw clearTimeout(r),n instanceof Error&&n.name==="AbortError"?new Po(`Request timeout after ${e}ms`,{cause:n}):(Pv.error("[EmbedCredentialProvider] Request failed:",n),n)}}async authenticate(){return{token:await this.fetchSAT(),expiry_at:Date.now()+3600*1e3}}async refresh(){return this.authenticate()}},Uc=class{constructor(t){this.credentials=t}async authenticate(){return Promise.resolve(this.credentials)}};(()=>{if(typeof window<"u"){const t=new CustomEvent("signalwire:js:ready",{detail:{version:"4.0.0-rc.2"}});window.dispatchEvent(t)}})();var Ov=Object.defineProperty,_v=Object.getOwnPropertyDescriptor,Er=(t,e,i,r)=>{for(var n=r>1?void 0:r?_v(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Ov(e,i,n),n};const Lv=G();l.SwCallMedia=class extends ee{constructor(){super(...arguments),this.stream=null,this._remoteStreamValue=null,this._lastTrackSignature="",this._subscriptions=[]}connectedCallback(){super.connectedCallback(),!this.stream&&this.call&&this._setupDirectSubscriptions(),this.stream&&(this._remoteStreamValue=this.stream,this._lastTrackSignature=this._computeTrackSignature(this.stream))}updated(e){var i,r,n,s,a;if(super.updated(e),e.has("call")&&(this._cleanupDirectSubscriptions(),!this.stream&&this.call&&this._setupDirectSubscriptions()),e.has("stream")){this._cleanupDirectSubscriptions();const o=this.stream,c=this._computeTrackSignature(o);if(o!==this._remoteStreamValue||c!==this._lastTrackSignature){this._remoteStreamValue=o,this._lastTrackSignature=c;const u=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");u&&Xr(u,o)}}if(!this.stream&&!this.call&&e.has("_callState")){const o=((r=this._callState)==null?void 0:r.remoteStream)??null,c=this._computeTrackSignature(o);if(o!==this._remoteStreamValue||c!==this._lastTrackSignature){this._remoteStreamValue=o,this._lastTrackSignature=c;const u=(n=this.shadowRoot)==null?void 0:n.querySelector("video.mcu-video");u&&Xr(u,o)}}e.has("_devicesState")&&this._applySinkId(((a=(s=this._devicesState)==null?void 0:s.selectedAudioOutput)==null?void 0:a.deviceId)??"")}disconnectedCallback(){super.disconnectedCallback(),this._cleanupDirectSubscriptions(),this._cleanupVideoElement()}_setupDirectSubscriptions(){this.call&&this._subscriptions.push(this.call.remoteStream$.subscribe(e=>{var n;const i=this._computeTrackSignature(e);if(e===this._remoteStreamValue&&i===this._lastTrackSignature)return;this._remoteStreamValue=e,this._lastTrackSignature=i,this.requestUpdate();const r=(n=this.shadowRoot)==null?void 0:n.querySelector("video.mcu-video");r&&Xr(r,e)}))}_computeTrackSignature(e){return e?e.getTracks().map(i=>`${i.kind}:${i.id}`).sort().join("|"):""}_cleanupDirectSubscriptions(){this._subscriptions.forEach(e=>e.unsubscribe()),this._subscriptions=[]}_applySinkId(e){var r;const i=(r=this.shadowRoot)==null?void 0:r.querySelector("video.mcu-video");i!=null&&i.setSinkId&&i.setSinkId(e).catch(n=>{Lv.error("[SwCallMedia] Failed to set audio output device:",n)})}_cleanupVideoElement(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");e&&ka(e)}render(){return I`
|
|
74
74
|
<div class="mcu-content" part="container">
|
|
75
75
|
<div class="padding-wrapper">
|
|
76
76
|
<div class="mcu-wrapper">
|
|
@@ -88,7 +88,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
88
88
|
</div>
|
|
89
89
|
</div>
|
|
90
90
|
</div>
|
|
91
|
-
`}},l.SwCallMedia.styles=
|
|
91
|
+
`}},l.SwCallMedia.styles=ae`
|
|
92
92
|
:host {
|
|
93
93
|
display: block;
|
|
94
94
|
width: 100%;
|
|
@@ -142,7 +142,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
142
142
|
height: 100%;
|
|
143
143
|
pointer-events: none;
|
|
144
144
|
}
|
|
145
|
-
`,
|
|
145
|
+
`,Er([E({type:Object})],l.SwCallMedia.prototype,"call",2),Er([E({attribute:!1})],l.SwCallMedia.prototype,"stream",2),Er([nt({context:pt,subscribe:!0}),_()],l.SwCallMedia.prototype,"_callState",2),Er([nt({context:vr,subscribe:!0}),_()],l.SwCallMedia.prototype,"_devicesState",2),l.SwCallMedia=Er([le("sw-call-media")],l.SwCallMedia);var Fv=Object.defineProperty,Nv=Object.getOwnPropertyDescriptor,bi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Nv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Fv(e,i,n),n};l.SwSelfMedia=class extends ee{constructor(){super(...arguments),this.mirror=!1,this._directLocalStream=null,this._directLayoutLayers=[],this._directSelf=null,this._directSubscriptions=[]}updated(e){super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._setupDirect(this.call))}disconnectedCallback(){super.disconnectedCallback(),this._teardownDirect()}_setupDirect(e){this._directSubscriptions.push(e.localStream$.subscribe(i=>this._directLocalStream=i),e.layoutLayers$.subscribe(i=>this._directLayoutLayers=i),e.self$.subscribe(i=>this._directSelf=i))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directLocalStream=null,this._directLayoutLayers=[],this._directSelf=null}_getSelfLayer(){var r,n,s,a;const e=this.call?(r=this._directSelf)==null?void 0:r.id:(s=(n=this._callState)==null?void 0:n.self)==null?void 0:s.id;return e?(this.call?this._directLayoutLayers:((a=this._callState)==null?void 0:a.layoutLayers)??[]).find(o=>o.member_id===e):void 0}render(){var a;const e=this._getSelfLayer();if(!e)return null;const i=this.call?this._directLocalStream:((a=this._callState)==null?void 0:a.localStream)??null;if(!(((i==null?void 0:i.getVideoTracks().length)??0)>0))return null;const n=`
|
|
146
146
|
position: absolute;
|
|
147
147
|
top: ${e.y}%;
|
|
148
148
|
left: ${e.x}%;
|
|
@@ -152,7 +152,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
152
152
|
overflow: hidden;
|
|
153
153
|
transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;
|
|
154
154
|
pointer-events: none;
|
|
155
|
-
`,s=this.mirror?"transform: scale(-1, 1); -webkit-transform: scale(-1, 1);":"";return
|
|
155
|
+
`,s=this.mirror?"transform: scale(-1, 1); -webkit-transform: scale(-1, 1);":"";return I`
|
|
156
156
|
<div class="local-overlay" part="container" style="${n}">
|
|
157
157
|
<video
|
|
158
158
|
class="local-video"
|
|
@@ -165,7 +165,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
165
165
|
.srcObject=${i}
|
|
166
166
|
></video>
|
|
167
167
|
</div>
|
|
168
|
-
`}},l.SwSelfMedia.styles=
|
|
168
|
+
`}},l.SwSelfMedia.styles=ae`
|
|
169
169
|
:host {
|
|
170
170
|
display: contents;
|
|
171
171
|
}
|
|
@@ -177,15 +177,15 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
177
177
|
video {
|
|
178
178
|
display: block;
|
|
179
179
|
}
|
|
180
|
-
`,
|
|
180
|
+
`,bi([E({type:Boolean,reflect:!0})],l.SwSelfMedia.prototype,"mirror",2),bi([E({type:Object})],l.SwSelfMedia.prototype,"call",2),bi([nt({context:pt,subscribe:!0}),_()],l.SwSelfMedia.prototype,"_callState",2),bi([_()],l.SwSelfMedia.prototype,"_directLocalStream",2),bi([_()],l.SwSelfMedia.prototype,"_directLayoutLayers",2),bi([_()],l.SwSelfMedia.prototype,"_directSelf",2),l.SwSelfMedia=bi([le("sw-self-media")],l.SwSelfMedia);/**
|
|
181
181
|
* @license
|
|
182
182
|
* Copyright 2017 Google LLC
|
|
183
183
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
184
|
-
*/const
|
|
184
|
+
*/const Bc={ATTRIBUTE:1,CHILD:2},zc=t=>(...e)=>({_$litDirective$:t,values:e});let Vc=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,i,r){this._$Ct=e,this._$AM=i,this._$Ci=r}_$AS(e,i){return this.update(e,i)}update(e,i){return this.render(...i)}};/**
|
|
185
185
|
* @license
|
|
186
186
|
* Copyright 2017 Google LLC
|
|
187
187
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
188
|
-
*/class
|
|
188
|
+
*/class Ds extends Vc{constructor(e){if(super(e),this.it=W,e.type!==Bc.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===W||e==null)return this._t=void 0,this.it=e;if(e===Vt)return e;if(typeof e!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(e===this.it)return this._t;this.it=e;const i=[e];return i.raw=i,this._t={_$litType$:this.constructor.resultType,strings:i,values:[]}}}Ds.directiveName="unsafeHTML",Ds.resultType=1;const bn=zc(Ds),Uv={backspace:`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
189
189
|
<path d="M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z"></path>
|
|
190
190
|
<line x1="18" y1="9" x2="12" y2="15"></line>
|
|
191
191
|
<line x1="12" y1="9" x2="18" y2="15"></line>
|
|
@@ -265,7 +265,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
265
265
|
<line x1="9" y1="9" x2="15" y2="9"/>
|
|
266
266
|
<line x1="9" y1="13" x2="13" y2="13"/>
|
|
267
267
|
</svg>
|
|
268
|
-
`};var
|
|
268
|
+
`};var Bv=Object.defineProperty,zv=Object.getOwnPropertyDescriptor,Is=(t,e,i,r)=>{for(var n=r>1?void 0:r?zv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Bv(e,i,n),n};const Vv=24;l.SwUiIcon=class extends ee{constructor(){super(...arguments),this.name="close",this.size=Vv}render(){const e=Uv[this.name];if(!e)return I``;const i=e.replace("<svg",`<svg width="${this.size}" height="${this.size}"`);return I`${bn(i)}`}},l.SwUiIcon.styles=ae`
|
|
269
269
|
:host {
|
|
270
270
|
display: inline-flex;
|
|
271
271
|
align-items: center;
|
|
@@ -276,12 +276,12 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
276
276
|
svg {
|
|
277
277
|
display: block;
|
|
278
278
|
}
|
|
279
|
-
`,
|
|
279
|
+
`,Is([E({reflect:!0})],l.SwUiIcon.prototype,"name",2),Is([E({type:Number})],l.SwUiIcon.prototype,"size",2),l.SwUiIcon=Is([le("sw-ui-icon")],l.SwUiIcon);var Hv=Object.defineProperty,jv=Object.getOwnPropertyDescriptor,Nt=(t,e,i,r)=>{for(var n=r>1?void 0:r?jv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Hv(e,i,n),n};l.SwLocalCamera=class extends ee{constructor(){super(...arguments),this.stream=null,this.mirror=!1,this._directLocalStream=null,this._directSubscriptions=[],this._aspectRatio="16 / 9",this._attachedStream=null}get _effectiveStream(){var e;return this.stream?this.stream:this.call?this._directLocalStream:((e=this._callState)==null?void 0:e.localStream)??null}get _effectiveMuted(){var e;return this.videoMuted??((e=this._devicesState)==null?void 0:e.videoMuted)??!1}firstUpdated(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video");e&&e.addEventListener("pause",()=>{this._effectiveMuted||e.play().catch(()=>{})})}updated(e){var n,s;super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._setupDirect(this.call));const i=this._effectiveStream,r=e.has("stream")||e.has("call")||e.has("_directLocalStream")||e.has("_callState")&&i!==this._attachedStream;if(r){const a=(n=this.shadowRoot)==null?void 0:n.querySelector("video");a&&(this._attachedStream=i,Xr(a,i),this._detectAspectRatio())}if((e.has("videoMuted")||e.has("_devicesState")||r)&&!this._effectiveMuted){const a=(s=this.shadowRoot)==null?void 0:s.querySelector("video");a&&a.play().catch(()=>{})}}disconnectedCallback(){var i;super.disconnectedCallback();const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video");e&&ka(e),this._teardownDirect()}_setupDirect(e){this._directSubscriptions.push(e.localStream$.subscribe(i=>this._directLocalStream=i))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directLocalStream=null}_detectAspectRatio(){const e=this._effectiveStream;if(!e)return;const i=e.getVideoTracks()[0];if(!i)return;const r=i.getSettings(),n=r.width,s=r.height;n&&s&&n>0&&s>0&&(this._aspectRatio=`${n} / ${s}`,this.style.setProperty("--sw-local-camera-aspect",this._aspectRatio))}render(){return I`
|
|
280
280
|
<video part="video" autoplay playsinline muted></video>
|
|
281
|
-
${this._effectiveMuted?
|
|
281
|
+
${this._effectiveMuted?I`<div part="placeholder" class="muted-overlay">
|
|
282
282
|
<sw-ui-icon name="camera-off" size="28"></sw-ui-icon>
|
|
283
283
|
</div>`:null}
|
|
284
|
-
`}},l.SwLocalCamera.styles=
|
|
284
|
+
`}},l.SwLocalCamera.styles=ae`
|
|
285
285
|
:host {
|
|
286
286
|
display: block;
|
|
287
287
|
width: 100%;
|
|
@@ -317,7 +317,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
317
317
|
.muted-overlay sw-ui-icon {
|
|
318
318
|
color: var(--bg-surface-raised);
|
|
319
319
|
}
|
|
320
|
-
`,Nt([
|
|
320
|
+
`,Nt([E({attribute:!1})],l.SwLocalCamera.prototype,"stream",2),Nt([E({type:Boolean,reflect:!0,attribute:"video-muted"})],l.SwLocalCamera.prototype,"videoMuted",2),Nt([E({type:Object})],l.SwLocalCamera.prototype,"call",2),Nt([E({type:Boolean,reflect:!0})],l.SwLocalCamera.prototype,"mirror",2),Nt([nt({context:pt,subscribe:!0}),_()],l.SwLocalCamera.prototype,"_callState",2),Nt([nt({context:vr,subscribe:!0}),_()],l.SwLocalCamera.prototype,"_devicesState",2),Nt([_()],l.SwLocalCamera.prototype,"_directLocalStream",2),Nt([_()],l.SwLocalCamera.prototype,"_aspectRatio",2),l.SwLocalCamera=Nt([le("sw-local-camera")],l.SwLocalCamera);const ut=ae`
|
|
321
321
|
:host {
|
|
322
322
|
text-align: start;
|
|
323
323
|
letter-spacing: normal;
|
|
@@ -331,13 +331,13 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
331
331
|
white-space: normal;
|
|
332
332
|
text-shadow: none;
|
|
333
333
|
}
|
|
334
|
-
`;var
|
|
334
|
+
`;var Wv=Object.defineProperty,Gv=Object.getOwnPropertyDescriptor,mi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Gv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Wv(e,i,n),n};l.SwParticipants=class extends ee{constructor(){super(...arguments),this._directLayoutLayers=[],this._directParticipants=[],this._directSelf=null,this._directSubscriptions=[],this._openMenuId=null,this._handleOutsideClick=e=>{const i=e.target;!i.closest(".menu-trigger")&&!i.closest(".menu-dropdown")&&(this._openMenuId=null)},this._handleEscape=e=>{e.key==="Escape"&&this._openMenuId!==null&&(this._openMenuId=null)}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._handleOutsideClick),document.addEventListener("keydown",this._handleEscape)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._handleOutsideClick),document.removeEventListener("keydown",this._handleEscape),this._teardownDirect()}updated(e){super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._directSubscriptions.push(this.call.layoutLayers$.subscribe(i=>this._directLayoutLayers=i),this.call.participants$.subscribe(i=>this._directParticipants=i),this.call.self$.subscribe(i=>this._directSelf=i)))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directLayoutLayers=[],this._directParticipants=[],this._directSelf=null}_toggleMenu(e,i){i.stopPropagation(),this._openMenuId=this._openMenuId===e?null:e}_getParticipant(e){var r;return(this.call?this._directParticipants:((r=this._callState)==null?void 0:r.participants)??[]).find(n=>n.id===e)}async _handleMuteAudio(e,i){i.stopPropagation();const r=this._getParticipant(e);if(r){try{r.audioMuted?await r.unmute():await r.mute(),this.dispatchEvent(new CustomEvent("sw-participant-mute-audio",{detail:{participant:r,memberId:e},bubbles:!0,composed:!0}))}catch{}this._openMenuId=null}}async _handleMuteVideo(e,i){i.stopPropagation();const r=this._getParticipant(e);if(r){try{r.videoMuted?await r.unmuteVideo():await r.muteVideo(),this.dispatchEvent(new CustomEvent("sw-participant-mute-video",{detail:{participant:r,memberId:e},bubbles:!0,composed:!0}))}catch{}this._openMenuId=null}}async _handleRemove(e,i){i.stopPropagation();const r=this._getParticipant(e);if(r!=null&&r.remove){try{await r.remove(),this.dispatchEvent(new CustomEvent("sw-participant-remove",{detail:{participant:r,memberId:e},bubbles:!0,composed:!0}))}catch{}this._openMenuId=null}}_renderMenuIcon(){return I`
|
|
335
335
|
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
336
336
|
<circle cx="12" cy="6" r="2" />
|
|
337
337
|
<circle cx="12" cy="12" r="2" />
|
|
338
338
|
<circle cx="12" cy="18" r="2" />
|
|
339
339
|
</svg>
|
|
340
|
-
`}_renderMenuDropdown(e){const i=this._getParticipant(e),r=this._openMenuId===e;return
|
|
340
|
+
`}_renderMenuDropdown(e){const i=this._getParticipant(e),r=this._openMenuId===e;return I`
|
|
341
341
|
<div
|
|
342
342
|
class="menu-dropdown ${r?"open":""}"
|
|
343
343
|
role="menu"
|
|
@@ -379,9 +379,9 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
379
379
|
transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;
|
|
380
380
|
pointer-events: auto;
|
|
381
381
|
z-index: 10;
|
|
382
|
-
`;return
|
|
382
|
+
`;return I`
|
|
383
383
|
<div class="${n}" part="overlay" style="${s}">
|
|
384
|
-
${i?null:
|
|
384
|
+
${i?null:I`
|
|
385
385
|
<button
|
|
386
386
|
class="menu-trigger"
|
|
387
387
|
part="menu-trigger"
|
|
@@ -396,10 +396,10 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
396
396
|
`}
|
|
397
397
|
<slot name="controls-${r}"></slot>
|
|
398
398
|
</div>
|
|
399
|
-
`}render(){var n,s,a,o;const e=this.call?this._directLayoutLayers:((n=this._callState)==null?void 0:n.layoutLayers)??[],i=this.call?(s=this._directSelf)==null?void 0:s.id:(o=(a=this._callState)==null?void 0:a.self)==null?void 0:o.id,r=e.filter(c=>c.member_id).map(c=>this._renderOverlay(c,c.member_id===i));return
|
|
399
|
+
`}render(){var n,s,a,o;const e=this.call?this._directLayoutLayers:((n=this._callState)==null?void 0:n.layoutLayers)??[],i=this.call?(s=this._directSelf)==null?void 0:s.id:(o=(a=this._callState)==null?void 0:a.self)==null?void 0:o.id,r=e.filter(c=>c.member_id).map(c=>this._renderOverlay(c,c.member_id===i));return I`
|
|
400
400
|
${r}
|
|
401
401
|
<slot></slot>
|
|
402
|
-
`}},l.SwParticipants.styles=[
|
|
402
|
+
`}},l.SwParticipants.styles=[ut,ae`
|
|
403
403
|
:host {
|
|
404
404
|
display: contents;
|
|
405
405
|
}
|
|
@@ -512,28 +512,28 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
512
512
|
.menu-item.danger:hover {
|
|
513
513
|
background: rgba(239, 68, 68, 0.2);
|
|
514
514
|
}
|
|
515
|
-
`],
|
|
515
|
+
`],mi([nt({context:pt,subscribe:!0}),_()],l.SwParticipants.prototype,"_callState",2),mi([E({type:Object})],l.SwParticipants.prototype,"call",2),mi([_()],l.SwParticipants.prototype,"_directLayoutLayers",2),mi([_()],l.SwParticipants.prototype,"_directParticipants",2),mi([_()],l.SwParticipants.prototype,"_directSelf",2),mi([_()],l.SwParticipants.prototype,"_openMenuId",2),l.SwParticipants=mi([le("sw-participants")],l.SwParticipants);var qv=Object.defineProperty,Xv=Object.getOwnPropertyDescriptor,Et=(t,e,i,r)=>{for(var n=r>1?void 0:r?Xv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&qv(e,i,n),n};const Ms=G();l.SwParticipantControls=class extends ee{constructor(){super(...arguments),this.participantId="",this.showVolume=!1,this.showPin=!1,this._directParticipants=[],this._directCapabilities=[],this._directSubscriptions=[],this._volume=100,this._isPinned=!1}updated(e){super.updated(e),e.has("call")&&(this._directSubscriptions.forEach(i=>i.unsubscribe()),this._directSubscriptions=[],this._directParticipants=[],this._directCapabilities=[],this.call&&this._directSubscriptions.push(this.call.participants$.subscribe(i=>this._directParticipants=i),this.call.capabilities$.subscribe(i=>this._directCapabilities=i)))}disconnectedCallback(){super.disconnectedCallback(),this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[]}get _participant(){var i;return(this.call?this._directParticipants:((i=this._callState)==null?void 0:i.participants)??[]).find(r=>r.id===this.participantId)}get _capabilities(){var e;return this.call?this._directCapabilities:((e=this._callState)==null?void 0:e.capabilities)??[]}get _canMuteAudio(){return this._capabilities.includes("memberMuteAudio")}get _canMuteVideo(){return this._capabilities.includes("memberMuteVideo")}get _canRemove(){return this._capabilities.includes("memberRemove")}async _toggleAudioMute(){const e=this._participant;if(e)try{e.audioMuted?await e.unmute():await e.mute()}catch(i){Ms.error("[ParticipantControls] Toggle audio failed:",i)}}async _toggleVideoMute(){const e=this._participant;if(e)try{e.videoMuted?await e.unmuteVideo():await e.muteVideo()}catch(i){Ms.error("[ParticipantControls] Toggle video failed:",i)}}async _remove(){const e=this._participant;if(e!=null&&e.remove)try{await e.remove()}catch(i){Ms.error("[ParticipantControls] Remove failed:",i)}}_onVolumeChange(e){this._volume=parseInt(e.target.value,10),this.dispatchEvent(new CustomEvent("sw-participant-volume-change",{detail:{participantId:this.participantId,volume:this._volume},bubbles:!0,composed:!0}))}_togglePin(){this._isPinned=!this._isPinned,this.dispatchEvent(new CustomEvent("sw-participant-pin-toggle",{detail:{participantId:this.participantId,pinned:this._isPinned},bubbles:!0,composed:!0}))}render(){const e=this._participant;if(!e)return I`<div class="panel"><div class="empty">Participant not found</div></div>`;const i=this._canMuteAudio||this._canMuteVideo||this._canRemove||this.showVolume||this.showPin;return I`
|
|
516
516
|
<div class="panel" part="panel">
|
|
517
517
|
<div class="name" part="name">${e.name??"Participant"}</div>
|
|
518
518
|
|
|
519
519
|
<div class="actions">
|
|
520
|
-
${i?
|
|
520
|
+
${i?W:I`<div class="empty">No actions available</div>`}
|
|
521
521
|
|
|
522
|
-
${this._canMuteAudio?
|
|
522
|
+
${this._canMuteAudio?I`
|
|
523
523
|
<button class=${e.audioMuted?"active":""} @click=${this._toggleAudioMute}>
|
|
524
524
|
<sw-ui-icon name=${e.audioMuted?"mic-off":"mic-on"} size="14"></sw-ui-icon>
|
|
525
525
|
${e.audioMuted?"Unmute":"Mute"}
|
|
526
526
|
</button>
|
|
527
|
-
`:
|
|
527
|
+
`:W}
|
|
528
528
|
|
|
529
|
-
${this._canMuteVideo?
|
|
529
|
+
${this._canMuteVideo?I`
|
|
530
530
|
<button class=${e.videoMuted?"active":""} @click=${this._toggleVideoMute}>
|
|
531
531
|
<sw-ui-icon name=${e.videoMuted?"camera-off":"camera-on"} size="14"></sw-ui-icon>
|
|
532
532
|
${e.videoMuted?"Enable video":"Disable video"}
|
|
533
533
|
</button>
|
|
534
|
-
`:
|
|
534
|
+
`:W}
|
|
535
535
|
|
|
536
|
-
${this.showVolume?
|
|
536
|
+
${this.showVolume?I`
|
|
537
537
|
<div class="volume-control">
|
|
538
538
|
<label class="volume-label">
|
|
539
539
|
<sw-ui-icon name="speaker-on" size="14"></sw-ui-icon>
|
|
@@ -547,24 +547,24 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
547
547
|
@input=${this._onVolumeChange}
|
|
548
548
|
/>
|
|
549
549
|
</div>
|
|
550
|
-
`:
|
|
550
|
+
`:W}
|
|
551
551
|
|
|
552
|
-
${this.showPin?
|
|
552
|
+
${this.showPin?I`
|
|
553
553
|
<button class=${this._isPinned?"active":""} @click=${this._togglePin}>
|
|
554
554
|
<sw-ui-icon name="settings" size="14"></sw-ui-icon>
|
|
555
555
|
${this._isPinned?"Unpin":"Pin"}
|
|
556
556
|
</button>
|
|
557
|
-
`:
|
|
557
|
+
`:W}
|
|
558
558
|
|
|
559
|
-
${this._canRemove?
|
|
559
|
+
${this._canRemove?I`
|
|
560
560
|
<button class="danger" @click=${this._remove}>
|
|
561
561
|
<sw-ui-icon name="close" size="14"></sw-ui-icon>
|
|
562
562
|
Remove
|
|
563
563
|
</button>
|
|
564
|
-
`:
|
|
564
|
+
`:W}
|
|
565
565
|
</div>
|
|
566
566
|
</div>
|
|
567
|
-
`}},l.SwParticipantControls.styles=[
|
|
567
|
+
`}},l.SwParticipantControls.styles=[ut,ae`
|
|
568
568
|
:host {
|
|
569
569
|
display: block;
|
|
570
570
|
font-family: var(--type-family-body);
|
|
@@ -685,7 +685,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
685
685
|
text-align: center;
|
|
686
686
|
padding: 6px;
|
|
687
687
|
}
|
|
688
|
-
`],
|
|
688
|
+
`],Et([E({type:String,attribute:"participant-id"})],l.SwParticipantControls.prototype,"participantId",2),Et([E({type:Boolean,reflect:!0,attribute:"show-volume"})],l.SwParticipantControls.prototype,"showVolume",2),Et([E({type:Boolean,reflect:!0,attribute:"show-pin"})],l.SwParticipantControls.prototype,"showPin",2),Et([nt({context:pt,subscribe:!0}),_()],l.SwParticipantControls.prototype,"_callState",2),Et([E({type:Object})],l.SwParticipantControls.prototype,"call",2),Et([_()],l.SwParticipantControls.prototype,"_directParticipants",2),Et([_()],l.SwParticipantControls.prototype,"_directCapabilities",2),Et([_()],l.SwParticipantControls.prototype,"_volume",2),Et([_()],l.SwParticipantControls.prototype,"_isPinned",2),l.SwParticipantControls=Et([le("sw-participant-controls")],l.SwParticipantControls);var Yv=Object.defineProperty,Kv=Object.getOwnPropertyDescriptor,kt=(t,e,i,r)=>{for(var n=r>1?void 0:r?Kv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Yv(e,i,n),n};const mn=G();l.SwAudioLevel=class extends ee{constructor(){super(...arguments),this._directLocalStream=null,this._directSubscriptions=[],this.bars=5,this.orientation="vertical",this.autoRequest=!1,this.maxSize=32,this._levels=[],this._ownsStream=!1,this._micRequested=!1}get _effectiveStream(){var e;return this.stream?this.stream:this.call?this._directLocalStream??void 0:((e=this._callState)==null?void 0:e.localStream)??void 0}connectedCallback(){super.connectedCallback(),this._levels=new Array(this.bars).fill(0);const e=this._effectiveStream;this.autoRequest&&!e?this._requestMicStream():e&&(this._activeStream=e,this.setupAudioAnalysis())}updated(e){if(super.updated(e),e.has("call")&&(this._directSubscriptions.forEach(r=>r.unsubscribe()),this._directSubscriptions=[],this._directLocalStream=null,this.call&&this._directSubscriptions.push(this.call.localStream$.subscribe(r=>this._directLocalStream=r))),e.has("autoRequest")&&this.autoRequest&&!this._effectiveStream&&this._requestMicStream(),e.has("stream")||e.has("call")||e.has("_directLocalStream")||e.has("_callState")){const r=this._effectiveStream;r!==this._activeStream&&(this.cleanupAudioAnalysis(),this._activeStream=r,r&&this.setupAudioAnalysis())}e.has("bars")&&(this._levels=new Array(this.bars).fill(0))}disconnectedCallback(){super.disconnectedCallback(),this.cleanupAudioAnalysis(),this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[]}releaseResources(){this.cleanupAudioAnalysis(),this.stream=void 0}_requestMicStream(){this._micRequested||(this._micRequested=!0,navigator.mediaDevices.getUserMedia({audio:!0}).then(e=>{if(!this.isConnected){e.getTracks().forEach(i=>i.stop());return}this._ownsStream=!0,this.stream=e}).catch(e=>{this._micRequested=!1,mn.error("[SwAudioLevel] Failed to acquire microphone:",e)}))}setupAudioAnalysis(){const e=this._activeStream??this._effectiveStream;if(!e)return;if(e.getAudioTracks().length===0){mn.warn("[SwAudioLevel] MediaStream has no audio tracks");return}try{this._audioContext=new AudioContext,this._audioContext.state==="suspended"&&this._audioContext.resume(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=256,this._analyser.smoothingTimeConstant=.8,this._source=this._audioContext.createMediaStreamSource(e),this._source.connect(this._analyser);const r=this._analyser.frequencyBinCount;this._dataArray=new Uint8Array(r),this.startAnimationLoop()}catch(r){mn.error("[SwAudioLevel] Failed to setup audio analysis:",r)}}cleanupAudioAnalysis(){this._animationFrameId!==void 0&&(cancelAnimationFrame(this._animationFrameId),this._animationFrameId=void 0),this._source&&(this._source.disconnect(),this._source=void 0),this._analyser&&(this._analyser.disconnect(),this._analyser=void 0),this._audioContext&&this._audioContext.state!=="closed"&&(this._audioContext.close().catch(e=>mn.error("[SwAudioLevel] Close failed:",e)),this._audioContext=void 0),this._ownsStream&&this.stream&&(this.stream.getTracks().forEach(e=>e.stop()),this._ownsStream=!1),this._activeStream=void 0,this._micRequested=!1,this._dataArray=void 0,this._levels=new Array(this.bars).fill(0)}startAnimationLoop(){const e=()=>{const i=this._analyser,r=this._dataArray;if(!i||!r)return;i.getByteFrequencyData(r);const n=[],s=r.length,a=Math.floor(s/this.bars);for(let o=0;o<this.bars;o++){const c=o*a,u=Math.min(c+a,s);let h=0;for(let v=c;v<u;v++)h+=r[v]??0;const p=h/(u-c);n.push(p/255)}this._levels=n,this.requestUpdate(),this._animationFrameId=requestAnimationFrame(e)};this._animationFrameId=requestAnimationFrame(e)}getLevelClass(e){return e>.7?"level-high":e>.4?"level-medium":e>.05?"level-low":""}isActive(e){return e>.05}render(){const e=this._levels.length===this.bars?this._levels:new Array(this.bars).fill(0),i=e.reduce((n,s)=>Math.max(n,s),0),r=Math.round(i*100);return I`
|
|
689
689
|
<div
|
|
690
690
|
class="container"
|
|
691
691
|
part="container"
|
|
@@ -695,7 +695,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
695
695
|
aria-valuemax="100"
|
|
696
696
|
aria-valuenow=${r}
|
|
697
697
|
>
|
|
698
|
-
${e.map((n,s)=>{const a=this.isActive(n),o=this.getLevelClass(n),c=Math.max(4,n*this.maxSize),u=this.orientation==="horizontal"?`width: ${c}px;`:`height: ${c}px;`;return
|
|
698
|
+
${e.map((n,s)=>{const a=this.isActive(n),o=this.getLevelClass(n),c=Math.max(4,n*this.maxSize),u=this.orientation==="horizontal"?`width: ${c}px;`:`height: ${c}px;`;return I`
|
|
699
699
|
<div
|
|
700
700
|
class="bar ${a?"active":""} ${o}"
|
|
701
701
|
part="bar ${a?"bar-active":""}"
|
|
@@ -705,7 +705,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
705
705
|
></div>
|
|
706
706
|
`})}
|
|
707
707
|
</div>
|
|
708
|
-
`}},l.SwAudioLevel.styles=
|
|
708
|
+
`}},l.SwAudioLevel.styles=ae`
|
|
709
709
|
:host {
|
|
710
710
|
--sw-audio-bar-width: 4px;
|
|
711
711
|
--sw-audio-bar-gap: 2px;
|
|
@@ -766,7 +766,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
766
766
|
.bar.level-high {
|
|
767
767
|
background-color: var(--interactive-button-destructive-bg);
|
|
768
768
|
}
|
|
769
|
-
`,
|
|
769
|
+
`,kt([E({type:Object})],l.SwAudioLevel.prototype,"stream",2),kt([E({type:Object})],l.SwAudioLevel.prototype,"call",2),kt([nt({context:pt,subscribe:!0}),_()],l.SwAudioLevel.prototype,"_callState",2),kt([_()],l.SwAudioLevel.prototype,"_directLocalStream",2),kt([E({type:Number})],l.SwAudioLevel.prototype,"bars",2),kt([E({type:String,reflect:!0})],l.SwAudioLevel.prototype,"orientation",2),kt([E({type:Boolean,reflect:!0,attribute:"auto-request"})],l.SwAudioLevel.prototype,"autoRequest",2),kt([E({type:Number})],l.SwAudioLevel.prototype,"maxSize",2),kt([_()],l.SwAudioLevel.prototype,"_levels",2),l.SwAudioLevel=kt([le("sw-audio-level")],l.SwAudioLevel);var Zv=Object.defineProperty,Qv=Object.getOwnPropertyDescriptor,dt=(t,e,i,r)=>{for(var n=r>1?void 0:r?Qv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Zv(e,i,n),n};const kr=G();l.SwCallControls=class extends ee{constructor(){super(...arguments),this._directSelf=null,this._directSubscriptions=[],this._fullscreen=!1,this.showScreenShare=!0,this.showHandRaise=!0,this.showTranscript=!1,this.transcriptActive=!1,this.showSettings=!0,this.showFullscreen=!0}updated(e){super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._directSubscriptions.push(this.call.self$.subscribe(i=>this._directSelf=i)))}disconnectedCallback(){super.disconnectedCallback(),this._teardownDirect()}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directSelf=null}get _effectiveSelf(){var e;return this.call?this._directSelf:((e=this._callState)==null?void 0:e.self)??null}_toDropupOptions(e,i){const r=new Set,n=[];for(const s of e){const a=s.deviceId||`__default_${s.kind}`;r.has(a)||(r.add(a),n.push({id:a,label:s.label||(s.deviceId?s.deviceId.slice(0,12):"Default"),selected:s.deviceId===(i==null?void 0:i.deviceId)}))}return n}_onMicToggle(){var e;(e=this._devices)==null||e.toggleAudioMute()}_onCameraToggle(){var e;(e=this._devices)==null||e.toggleVideoMute()}_onSpeakerToggle(){var e;(e=this._devices)==null||e.toggleSpeakerMute()}_onFullscreenToggle(e){this._fullscreen=e.detail.fullscreen}_onScreenShareToggle(e){const i=this._effectiveSelf;i&&(e.detail.active?i.startScreenShare().catch(r=>{kr.error("[CallControls] Screen share failed:",r)}):i.stopScreenShare().catch(r=>{kr.error("[CallControls] Stop screen share failed:",r)}))}_onHandRaiseToggle(e){const i=this._effectiveSelf;i&&i.toggleHandraise().catch(r=>{kr.error("[CallControls] Hand raise failed:",r)})}_onHangUp(){var i;const e=this.call?()=>this.call.hangup():(i=this._callState)==null?void 0:i.hangup;e==null||e().catch(r=>{kr.error("[CallControls] Hangup failed:",r)}),this.dispatchEvent(new CustomEvent("sw-call-hangup",{bubbles:!0,composed:!0}))}_onDeviceChange(e){if(!this._devices)return;const{kind:i,deviceId:r}=e.detail,n=s=>s.find(a=>a.deviceId===r)??null;i==="mic"&&this._devices.selectAudioInput(n(this._devices.audioInputDevices)),i==="camera"&&this._devices.selectVideoInput(n(this._devices.videoInputDevices)),i==="speaker"&&this._devices.selectAudioOutput(n(this._devices.audioOutputDevices))}_onSettingsChange(e){if(!this._devices)return;const{settingId:i}=e.detail,n={"echo-cancellation":()=>this._devices.toggleEchoCancellation(),"auto-gain":()=>this._devices.toggleAutoGain(),"noise-suppression":()=>this._devices.toggleNoiseSuppression()}[i];n&&n().catch(s=>kr.error("[CallControls] Settings toggle failed:",s))}_buildSettingsItems(){return[{id:"echo-cancellation",label:"Echo Cancellation",selected:this._devices.echoCancellation},{id:"auto-gain",label:"Auto Gain",selected:this._devices.autoGain},{id:"noise-suppression",label:"Noise Suppression",selected:this._devices.noiseSuppression}]}render(){if(!this._devices&&!this.call)return I``;const e=this._effectiveSelf,i=(e==null?void 0:e.screenShareStatus)==="started",r=(e==null?void 0:e.handraised)??!1,n=this._devices;return I`
|
|
770
770
|
<sw-ui-control-bar
|
|
771
771
|
exportparts="bar,logo,button,chevron"
|
|
772
772
|
.micMuted=${(n==null?void 0:n.audioMuted)??!1}
|
|
@@ -795,19 +795,19 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
795
795
|
@sw-device-change=${this._onDeviceChange}
|
|
796
796
|
@sw-settings-change=${this._onSettingsChange}
|
|
797
797
|
></sw-ui-control-bar>
|
|
798
|
-
`}},l.SwCallControls.styles=
|
|
798
|
+
`}},l.SwCallControls.styles=ae`
|
|
799
799
|
:host {
|
|
800
800
|
display: block;
|
|
801
801
|
}
|
|
802
|
-
`,
|
|
802
|
+
`,dt([nt({context:vr,subscribe:!0}),_()],l.SwCallControls.prototype,"_devices",2),dt([nt({context:pt,subscribe:!0}),_()],l.SwCallControls.prototype,"_callState",2),dt([E({type:Object})],l.SwCallControls.prototype,"call",2),dt([_()],l.SwCallControls.prototype,"_directSelf",2),dt([_()],l.SwCallControls.prototype,"_fullscreen",2),dt([E({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwCallControls.prototype,"showScreenShare",2),dt([E({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwCallControls.prototype,"showHandRaise",2),dt([E({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwCallControls.prototype,"showTranscript",2),dt([E({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwCallControls.prototype,"transcriptActive",2),dt([E({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwCallControls.prototype,"showSettings",2),dt([E({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwCallControls.prototype,"showFullscreen",2),l.SwCallControls=dt([le("sw-call-controls")],l.SwCallControls);var Jv=Object.defineProperty,$v=Object.getOwnPropertyDescriptor,Gi=(t,e,i,r)=>{for(var n=r>1?void 0:r?$v(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Jv(e,i,n),n};l.SwCallStatus=class extends ee{constructor(){super(...arguments),this._directStatus=null,this._callStartTime=null,this._duration="0:00",this._durationInterval=null,this._prevStatus="new",this._directSubscriptions=[]}get _effectiveStatus(){var e;return this.call?this._directStatus??"new":((e=this._callState)==null?void 0:e.status)??"new"}updated(e){if(super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._setupDirect(this.call)),e.has("call")||e.has("_callState")||e.has("_directStatus")){const i=this._effectiveStatus;i!==this._prevStatus&&(i==="connected"&&this._prevStatus!=="connected"?this._startDurationTimer():i!=="connected"&&this._stopDurationTimer(),this._prevStatus=i)}}disconnectedCallback(){super.disconnectedCallback(),this._stopDurationTimer(),this._teardownDirect()}_setupDirect(e){this._directSubscriptions.push(e.status$.subscribe(i=>{this._directStatus=i}))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directStatus=null}_startDurationTimer(){this._callStartTime=Date.now(),this._duration="0:00",this._durationInterval=window.setInterval(()=>{if(this._callStartTime){const e=Math.floor((Date.now()-this._callStartTime)/1e3),i=Math.floor(e/3600),r=Math.floor(e%3600/60),n=e%60;this._duration=i>0?`${i}:${r.toString().padStart(2,"0")}:${n.toString().padStart(2,"0")}`:`${r}:${n.toString().padStart(2,"0")}`}},1e3)}_stopDurationTimer(){this._durationInterval&&(clearInterval(this._durationInterval),this._durationInterval=null),this._callStartTime=null,this._duration="0:00"}getStatusText(){const e=this._effectiveStatus;switch(e){case"new":return"Ready";case"trying":return"Trying...";case"connecting":return"Connecting...";case"ringing":return"Ringing...";case"connected":return"Connected";case"recovering":return"Reconnecting...";case"disconnecting":return"Disconnecting...";case"disconnected":return"Disconnected";case"failed":return"Failed";case"destroyed":return"Ended";default:return String(e)}}render(){const e=this._effectiveStatus,i=this.getStatusText();return I`
|
|
803
803
|
<div class="container" part="container">
|
|
804
804
|
<span class="status-indicator ${e}" aria-hidden="true"></span>
|
|
805
805
|
<span class="status-text ${e}" part="status-text" role="status" aria-live="polite">
|
|
806
806
|
${i}
|
|
807
807
|
</span>
|
|
808
|
-
${e==="connected"?
|
|
808
|
+
${e==="connected"?I`<span class="duration" part="duration">${this._duration}</span>`:null}
|
|
809
809
|
</div>
|
|
810
|
-
`}},l.SwCallStatus.styles=[
|
|
810
|
+
`}},l.SwCallStatus.styles=[ut,ae`
|
|
811
811
|
:host {
|
|
812
812
|
display: inline-flex;
|
|
813
813
|
align-items: center;
|
|
@@ -899,7 +899,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
899
899
|
opacity: 0.6;
|
|
900
900
|
font-size: 0.85em;
|
|
901
901
|
}
|
|
902
|
-
`],
|
|
902
|
+
`],Gi([E({type:Object})],l.SwCallStatus.prototype,"call",2),Gi([nt({context:pt,subscribe:!0}),_()],l.SwCallStatus.prototype,"_callState",2),Gi([_()],l.SwCallStatus.prototype,"_directStatus",2),Gi([_()],l.SwCallStatus.prototype,"_callStartTime",2),Gi([_()],l.SwCallStatus.prototype,"_duration",2),l.SwCallStatus=Gi([le("sw-call-status")],l.SwCallStatus);const yi=()=>Promise.resolve(),Hc=()=>{},jc=Object.freeze({id:"",direction:"outbound",to:void 0,status:"new",recording:!1,streaming:!1,locked:!1,raiseHandPriority:!1,meta:Object.freeze({}),participants:Object.freeze([]),self:null,remoteStream:null,localStream:null,mediaDirections:Object.freeze({audio:"inactive",video:"inactive"}),layout:void 0,layouts:Object.freeze([]),layoutLayers:Object.freeze([]),address:void 0,capabilities:Object.freeze([]),hangup:yi,toggleLock:yi,toggleHold:yi,setLayout:yi,startRecording:yi,startStreaming:yi,sendDigits:yi,answer:Hc,reject:Hc});class Rs{constructor(e){this._subscriptions=[],this._state={...jc},this._batching=!1,this._provider=new Yn(e,{context:pt,initialValue:this._state}),e.addController(this)}hostConnected(){}hostDisconnected(){this.disconnect()}connect(e){this.disconnect(),this._batching=!0,this._patch({id:e.id,direction:e.direction,to:e.to}),this._patch({hangup:()=>e.hangup(),toggleLock:()=>e.toggleLock(),toggleHold:()=>e.toggleHold(),setLayout:(i,r={})=>e.setLayout(i,r),startRecording:()=>e.startRecording(),startStreaming:()=>e.startStreaming(),sendDigits:i=>e.sendDigits(i),answer:()=>e.answer(),reject:()=>e.reject()}),this._subscriptions=[e.status$.subscribe(i=>this._patch({status:i})),e.recording$.subscribe(i=>this._patch({recording:i})),e.streaming$.subscribe(i=>this._patch({streaming:i})),e.locked$.subscribe(i=>this._patch({locked:i})),e.raiseHandPriority$.subscribe(i=>this._patch({raiseHandPriority:i})),e.meta$.subscribe(i=>this._patch({meta:i})),e.participants$.subscribe(i=>this._patch({participants:i})),e.self$.subscribe(i=>this._patch({self:i})),e.remoteStream$.subscribe(i=>this._patch({remoteStream:i})),e.localStream$.subscribe(i=>this._patch({localStream:i})),e.mediaDirections$.subscribe(i=>this._patch({mediaDirections:i})),e.layout$.subscribe(i=>this._patch({layout:i})),e.layouts$.subscribe(i=>this._patch({layouts:i})),e.layoutLayers$.subscribe(i=>this._patch({layoutLayers:i})),e.address$.subscribe(i=>this._patch({address:i})),e.capabilities$.subscribe(i=>this._patch({capabilities:i}))],this._batching=!1,this._publish()}disconnect(){this._subscriptions.forEach(e=>e.unsubscribe()),this._subscriptions=[],this._patch({...jc})}_patch(e){this._state={...this._state,...e},this._batching||this._publish()}_publish(){this._provider.setValue(this._state)}}const Ie=()=>Promise.resolve(),Wc=Object.freeze({audioInputDevices:Object.freeze([]),audioOutputDevices:Object.freeze([]),videoInputDevices:Object.freeze([]),selectedAudioInput:null,selectedAudioOutput:null,selectedVideoInput:null,audioMuted:!1,videoMuted:!1,speakerMuted:!1,selectAudioInput:()=>{},selectAudioOutput:()=>{},selectVideoInput:()=>{},toggleAudioMute:Ie,toggleVideoMute:Ie,toggleSpeakerMute:Ie,echoCancellation:!0,autoGain:!0,noiseSuppression:!0,toggleEchoCancellation:Ie,toggleAutoGain:Ie,toggleNoiseSuppression:Ie});class Ps{constructor(e){this._dc=null,this._deviceSubs=[],this._callSubs=[],this._state={...Wc},this._provider=new Yn(e,{context:vr,initialValue:this._state}),e.addController(this)}hostConnected(){}hostDisconnected(){this.disconnect()}connectDevices(e){this._dc=e,this._deviceSubs.forEach(i=>i.unsubscribe()),this._patch({selectAudioInput:i=>e.selectAudioInputDevice(i),selectAudioOutput:i=>e.selectAudioOutputDevice(i),selectVideoInput:i=>e.selectVideoInputDevice(i)}),this._deviceSubs=[e.audioInputDevices$.subscribe(i=>this._patch({audioInputDevices:i})),e.audioOutputDevices$.subscribe(i=>this._patch({audioOutputDevices:i})),e.videoInputDevices$.subscribe(i=>this._patch({videoInputDevices:i})),e.selectedAudioInputDevice$.subscribe(i=>this._patch({selectedAudioInput:i})),e.selectedAudioOutputDevice$.subscribe(i=>this._patch({selectedAudioOutput:i})),e.selectedVideoInputDevice$.subscribe(i=>this._patch({selectedVideoInput:i}))],e.enableDeviceMonitoring()}refreshDevices(){this._dc&&this._dc.enableDeviceMonitoring()}connectCall(e){this.disconnectCall();const i=e.self$.subscribe(u=>{this._patch({toggleAudioMute:u?()=>u.toggleMute():Ie,toggleVideoMute:u?()=>u.toggleMuteVideo():Ie,toggleSpeakerMute:u?()=>u.toggleDeaf():Ie,toggleEchoCancellation:u?()=>u.toggleEchoCancellation():Ie,toggleAutoGain:u?()=>u.toggleAudioInputAutoGain():Ie,toggleNoiseSuppression:u?()=>u.toggleNoiseSuppression():Ie})}),r=e.self$.pipe(Je(u=>u?u.audioMuted$:St(!1))).subscribe(u=>this._patch({audioMuted:u})),n=e.self$.pipe(Je(u=>u?u.videoMuted$:St(!1))).subscribe(u=>this._patch({videoMuted:u})),s=e.self$.pipe(Je(u=>u?u.deaf$:St(!1))).subscribe(u=>this._patch({speakerMuted:u})),a=e.self$.pipe(Je(u=>u?u.echoCancellation$:St(!0))).subscribe(u=>this._patch({echoCancellation:u})),o=e.self$.pipe(Je(u=>u?u.autoGain$:St(!0))).subscribe(u=>this._patch({autoGain:u})),c=e.self$.pipe(Je(u=>u?u.noiseSuppression$:St(!0))).subscribe(u=>this._patch({noiseSuppression:u}));this._callSubs=[i,r,n,s,a,o,c]}disconnectCall(){this._callSubs.forEach(e=>e.unsubscribe()),this._callSubs=[],this._patch({audioMuted:!1,videoMuted:!1,speakerMuted:!1,toggleAudioMute:Ie,toggleVideoMute:Ie,toggleSpeakerMute:Ie,echoCancellation:!0,autoGain:!0,noiseSuppression:!0,toggleEchoCancellation:Ie,toggleAutoGain:Ie,toggleNoiseSuppression:Ie})}disconnect(){this._deviceSubs.forEach(e=>e.unsubscribe()),this._deviceSubs=[],this.disconnectCall(),this._patch({...Wc})}_patch(e){this._state={...this._state,...e},this._provider.setValue(this._state)}}var eb=Object.defineProperty,tb=Object.getOwnPropertyDescriptor,Os=(t,e,i,r)=>{for(var n=r>1?void 0:r?tb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&eb(e,i,n),n};l.SwCallProvider=class extends ee{constructor(){super(...arguments),this.call=void 0,this.deviceController=void 0,this._callState=new Rs(this),this._devices=new Ps(this)}updated(e){super.updated(e),e.has("call")&&(this.call?(this._callState.connect(this.call),this._devices.connectCall(this.call)):(this._callState.disconnect(),this._devices.disconnectCall())),e.has("deviceController")&&this.deviceController&&this._devices.connectDevices(this.deviceController)}disconnectedCallback(){super.disconnectedCallback(),this._callState.disconnect(),this._devices.disconnect()}render(){return I`<slot></slot>`}},l.SwCallProvider.styles=ae`:host { display: contents; }`,Os([E({attribute:!1})],l.SwCallProvider.prototype,"call",2),Os([E({attribute:!1})],l.SwCallProvider.prototype,"deviceController",2),l.SwCallProvider=Os([le("sw-call-provider")],l.SwCallProvider);var ib=Object.defineProperty,rb=Object.getOwnPropertyDescriptor,qi=(t,e,i,r)=>{for(var n=r>1?void 0:r?rb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&ib(e,i,n),n};const nb=/^[0-9*#]$/,sb=500,ab=[{digit:"1",letters:""},{digit:"2",letters:"ABC"},{digit:"3",letters:"DEF"},{digit:"4",letters:"GHI"},{digit:"5",letters:"JKL"},{digit:"6",letters:"MNO"},{digit:"7",letters:"PQRS"},{digit:"8",letters:"TUV"},{digit:"9",letters:"WXYZ"},{digit:"*",letters:""},{digit:"0",letters:"+"},{digit:"#",letters:""}];l.SwUiDialpad=class extends ee{constructor(){super(...arguments),this.showCallButton=!1,this.allowText=!1,this.placeholder="Enter number",this.digits="",this.pressedKey=null,this._longPressTimer=null,this._longPressFired=!1}_startLongPress(e){this._cancelLongPress(),this._longPressFired=!1,this._longPressTimer=setTimeout(()=>{this._longPressFired=!0,this._longPressTimer=null,e()},sb)}_cancelLongPress(){this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null)}disconnectedCallback(){this._cancelLongPress(),super.disconnectedCallback()}_clearAll(){this.digits.length!==0&&(this.digits="",this.dispatchEvent(new CustomEvent("sw-dialpad-backspace",{detail:{digits:this.digits},bubbles:!0,composed:!0})))}_pressDigit(e){this.digits+=e,this.pressedKey=e,this.dispatchEvent(new CustomEvent("sw-digit-press",{detail:{digit:e,digits:this.digits},bubbles:!0,composed:!0})),setTimeout(()=>{this.pressedKey=null},100)}_backspace(){this.digits.length!==0&&(this.digits=this.digits.slice(0,-1),this.dispatchEvent(new CustomEvent("sw-dialpad-backspace",{detail:{digits:this.digits},bubbles:!0,composed:!0})))}_dial(){this.digits.length!==0&&this.dispatchEvent(new CustomEvent("sw-dial",{detail:{digits:this.digits},bubbles:!0,composed:!0}))}_onKeyDown(e){const{key:i}=e;if(this.allowText){i==="Enter"&&this.showCallButton&&(e.preventDefault(),this._dial());return}nb.test(i)?(e.preventDefault(),this._pressDigit(i)):i==="Backspace"?(e.preventDefault(),this._backspace()):i==="Enter"&&this.showCallButton?(e.preventDefault(),this._dial()):i!=="Tab"&&!e.ctrlKey&&!e.metaKey&&e.preventDefault()}_onInput(e){if(!this.allowText)return;const i=e.target.value;this.digits=i,this.dispatchEvent(new CustomEvent("sw-dialpad-input",{detail:{digits:this.digits},bubbles:!0,composed:!0}))}render(){return I`
|
|
903
903
|
<div class="container" part="container">
|
|
904
904
|
<div class="display" part="display">
|
|
905
905
|
<input
|
|
@@ -926,7 +926,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
926
926
|
</div>
|
|
927
927
|
|
|
928
928
|
<div class="keypad" part="keypad" role="group" aria-label="Telephone keypad">
|
|
929
|
-
${
|
|
929
|
+
${ab.map(e=>I`
|
|
930
930
|
<button
|
|
931
931
|
class="key ${this.pressedKey===e.digit?"pressed":""}"
|
|
932
932
|
part="key ${this.pressedKey===e.digit?"key-pressed":""}"
|
|
@@ -943,7 +943,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
943
943
|
`)}
|
|
944
944
|
</div>
|
|
945
945
|
|
|
946
|
-
${this.showCallButton?
|
|
946
|
+
${this.showCallButton?I`
|
|
947
947
|
<button
|
|
948
948
|
class="call-button"
|
|
949
949
|
part="call-button"
|
|
@@ -955,7 +955,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
955
955
|
</button>
|
|
956
956
|
`:null}
|
|
957
957
|
</div>
|
|
958
|
-
`}},l.SwUiDialpad.styles=[
|
|
958
|
+
`}},l.SwUiDialpad.styles=[ut,ae`
|
|
959
959
|
:host {
|
|
960
960
|
--sw-dialpad-display-size: 32px;
|
|
961
961
|
--sw-dialpad-key-size: 24px;
|
|
@@ -1119,7 +1119,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1119
1119
|
.call-button sw-ui-icon {
|
|
1120
1120
|
pointer-events: none;
|
|
1121
1121
|
}
|
|
1122
|
-
`],
|
|
1122
|
+
`],qi([E({type:Boolean,reflect:!0,attribute:"show-call-button"})],l.SwUiDialpad.prototype,"showCallButton",2),qi([E({type:Boolean,reflect:!0,attribute:"allow-text"})],l.SwUiDialpad.prototype,"allowText",2),qi([E({type:String})],l.SwUiDialpad.prototype,"placeholder",2),qi([_()],l.SwUiDialpad.prototype,"digits",2),qi([_()],l.SwUiDialpad.prototype,"pressedKey",2),l.SwUiDialpad=qi([le("sw-ui-dialpad")],l.SwUiDialpad);var ob=Object.defineProperty,cb=Object.getOwnPropertyDescriptor,wi=(t,e,i,r)=>{for(var n=r>1?void 0:r?cb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&ob(e,i,n),n};const lb=G();l.SwCallDialpad=class extends ee{constructor(){super(...arguments),this._directStatus=null,this._directSubscriptions=[],this.showCallButton=!1,this.allowText=!1,this.placeholder="Enter number"}updated(e){super.updated(e),e.has("call")&&(this._directSubscriptions.forEach(i=>i.unsubscribe()),this._directSubscriptions=[],this._directStatus=null,this.call&&this._directSubscriptions.push(this.call.status$.subscribe(i=>this._directStatus=i)))}disconnectedCallback(){super.disconnectedCallback(),this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[]}_onDigitPress(e){var s,a;const{digit:i}=e.detail;if((this.call?this._directStatus:(s=this._callState)==null?void 0:s.status)!=="connected")return;const n=this.call?o=>this.call.sendDigits(o):(a=this._callState)==null?void 0:a.sendDigits;n==null||n(i).catch(o=>{lb.error("Failed to send DTMF:",o)})}render(){return I`
|
|
1123
1123
|
<sw-ui-dialpad
|
|
1124
1124
|
exportparts="container,display,keypad,key,key-pressed,call-button"
|
|
1125
1125
|
?show-call-button=${this.showCallButton}
|
|
@@ -1127,7 +1127,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1127
1127
|
placeholder=${this.placeholder}
|
|
1128
1128
|
@sw-digit-press=${this._onDigitPress}
|
|
1129
1129
|
></sw-ui-dialpad>
|
|
1130
|
-
`}},
|
|
1130
|
+
`}},wi([nt({context:pt,subscribe:!0}),_()],l.SwCallDialpad.prototype,"_callState",2),wi([E({type:Object})],l.SwCallDialpad.prototype,"call",2),wi([_()],l.SwCallDialpad.prototype,"_directStatus",2),wi([E({type:Boolean,reflect:!0,attribute:"show-call-button"})],l.SwCallDialpad.prototype,"showCallButton",2),wi([E({type:Boolean,reflect:!0,attribute:"allow-text"})],l.SwCallDialpad.prototype,"allowText",2),wi([E({type:String})],l.SwCallDialpad.prototype,"placeholder",2),l.SwCallDialpad=wi([le("sw-call-dialpad")],l.SwCallDialpad);const Gc="transcript";class qc{constructor(){this._entries=[],this._aiPartial=null,this._userPartial=null,this._lastSpoken=null,this.onUpdate=()=>{}}getHistory(){const e=[...this._entries];return this._aiPartial&&this._userPartial?this._lastSpoken==="user"?e.push(this._aiPartial,this._userPartial):e.push(this._userPartial,this._aiPartial):this._aiPartial?e.push(this._aiPartial):this._userPartial&&e.push(this._userPartial),e}get hasAny(){return this._entries.length>0||this._aiPartial!==null||this._userPartial!==null}get lastSpoken(){return this._lastSpoken}reset(){this._entries=[],this._aiPartial=null,this._userPartial=null,this._lastSpoken=null,this.onUpdate()}onUserPartial(e){e&&(this._userPartial={speaker:"user",text:e,state:"partial"},this._lastSpoken="user",this.onUpdate())}onUserComplete(e){if(!e){this._userPartial=null,this.onUpdate();return}this._entries=[...this._entries,{speaker:"user",text:e,state:"complete"}],this._userPartial=null,this._lastSpoken="user",this.onUpdate()}onAiChunk(e){if(e){if(!this._aiPartial)this._aiPartial={speaker:"ai",text:e,state:"partial"};else{const i=`${this._aiPartial.text} ${e}`.replace(/\s+/g," ").trim();this._aiPartial={...this._aiPartial,text:i}}this._lastSpoken="ai",this.onUpdate()}}onAiComplete(e,i){if(this._aiPartial){const r=e.length>0?e:this._aiPartial.text;this._entries=[...this._entries,{speaker:"ai",text:r,state:"complete"}],this._aiPartial=null}else e.length>0&&(this._entries=[...this._entries,{speaker:"ai",text:e,state:"complete"}]);this._lastSpoken=i?"user":"ai",this.onUpdate()}}const Xc=G(),ub=["ai.partial_result","ai.speech_detect","ai.response_utterance","ai.completion"];function db(t){return t.replace(/\s*\{confidence=[\d.]+\}\s*/g,"").trim()}function yn(t){return typeof t=="string"?t:""}class xr{constructor(e){this._chat=new qc,this._injected=[],this._subscriptions=[],this._host=e,this._provider=new Yn(e,{context:Gc,initialValue:{entries:[]}}),this._chat.onUpdate=()=>this._publish(),e.addController(this)}hostConnected(){}hostDisconnected(){this._teardownSubscriptions()}setCall(e){if(this._teardownSubscriptions(),this._chat.reset(),this._injected=[],this._publish(),!!e)for(const i of ub){const r=e.subscribe(i).subscribe({next:n=>{try{this._route(i,this._extractParams(n))}catch(s){Xc.warn(`[TranscriptController] handler for ${i} threw`,s)}},error:n=>{Xc.warn(`[TranscriptController] subscription error on ${i}`,n)}});this._subscriptions=[...this._subscriptions,r]}}get state(){return this._provider.value}injectEntry(e){this._injected=[...this._injected,e],this._publish()}_extractParams(e){const i=e.params;return i&&typeof i=="object"?i:e}_route(e,i){switch(e){case"ai.partial_result":this._chat.onUserPartial(yn(i.text));break;case"ai.speech_detect":{const r=db(yn(i.text));this._chat.onUserComplete(r);break}case"ai.response_utterance":{const r=yn(i.utterance??i.text);this._chat.onAiChunk(xr._stripVoiceDirectives(r));break}case"ai.completion":{const r=yn(i.text);this._chat.onAiComplete(xr._stripVoiceDirectives(r),i.type==="barged");break}}}_teardownSubscriptions(){for(const e of this._subscriptions)try{e.unsubscribe()}catch{}this._subscriptions=[]}static _stripVoiceDirectives(e){const i=/\s*~[A-Z]+\(.*?\)-;\s*/i.exec(e);if(!i)return e.trim();const r=e.slice(0,i.index).trim(),n=e.slice(i.index+i[0].length).trim();return(r||n).trim()}_toTranscriptEntry(e,i){return{id:`chat-${i}-${e.speaker}-${e.state}`,type:e.speaker==="ai"?"agent":"user",state:e.state,text:e.text}}_publish(){const i=[...this._chat.getHistory().map((r,n)=>this._toTranscriptEntry(r,n)),...this._injected];this._provider.setValue({entries:i}),this._host.requestUpdate()}}const hb=G(),pb="user_event",gb=["text","markdown","code","html"];function fb(t){return gb.includes(t)?t:"text"}class Yc{constructor(e){this._host=e,e.addController(this)}hostConnected(){}hostDisconnected(){var e;(e=this._subscription)==null||e.unsubscribe(),this._subscription=void 0}setCall(e){var i;(i=this._subscription)==null||i.unsubscribe(),this._subscription=void 0,e&&(this._subscription=e.subscribe(pb).subscribe(r=>{hb.debug("[UserEventController] user_event arrived",r);const n=r.params;n&&this._route(n)}))}_route(e){e.type==="display_content"?this._handleDisplayContent(e):this._handlePassThrough(e)}_handleDisplayContent(e){const i={content:e.content??"",format:fb(e.format),title:e.title,language:e.language};this._host.dispatchEvent(new CustomEvent("sw-display-content",{detail:i,bubbles:!0,composed:!0}))}_handlePassThrough(e){this._host.dispatchEvent(new CustomEvent("signalwire-address:event",{detail:e,bubbles:!0,composed:!0}))}}var vb=Object.defineProperty,bb=Object.getOwnPropertyDescriptor,Dr=(t,e,i,r)=>{for(var n=r>1?void 0:r?bb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&vb(e,i,n),n};l.SwUiCallLayout=class extends ee{constructor(){super(...arguments),this.transcript=!1,this.loading=!1,this.shadow=!1,this._fullscreen=!1,this._onFullscreenChange=()=>{const e=document.fullscreenElement===this;this._fullscreen!==e&&(this._fullscreen=e,e?this.setAttribute("fullscreen",""):this.removeAttribute("fullscreen"))}}get fullscreen(){return this._fullscreen}toggleTranscript(){this.transcript=!this.transcript}toggleFullscreen(){document.fullscreenElement?document.exitFullscreen().catch(()=>{}):this.requestFullscreen().catch(()=>{})}connectedCallback(){super.connectedCallback(),document.addEventListener("fullscreenchange",this._onFullscreenChange)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("fullscreenchange",this._onFullscreenChange)}render(){return I`
|
|
1131
1131
|
<div class="root">
|
|
1132
1132
|
<div class="video">
|
|
1133
1133
|
<slot name="background"></slot>
|
|
@@ -1137,13 +1137,13 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1137
1137
|
<div class="floating-video">
|
|
1138
1138
|
<slot name="floating-video"></slot>
|
|
1139
1139
|
</div>
|
|
1140
|
-
${this.loading?
|
|
1140
|
+
${this.loading?I`<div class="loading-overlay">
|
|
1141
1141
|
<sw-ui-icon
|
|
1142
1142
|
class="spinner"
|
|
1143
1143
|
name="spinner"
|
|
1144
1144
|
.size=${48}
|
|
1145
1145
|
></sw-ui-icon>
|
|
1146
|
-
</div>`:
|
|
1146
|
+
</div>`:W}
|
|
1147
1147
|
</div>
|
|
1148
1148
|
<div class="controls">
|
|
1149
1149
|
<slot name="controls"></slot>
|
|
@@ -1154,7 +1154,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1154
1154
|
</div>
|
|
1155
1155
|
</div>
|
|
1156
1156
|
</div>
|
|
1157
|
-
`}},l.SwUiCallLayout.styles=
|
|
1157
|
+
`}},l.SwUiCallLayout.styles=ae`
|
|
1158
1158
|
/* ================================================================== *
|
|
1159
1159
|
* HOST *
|
|
1160
1160
|
* ================================================================== */
|
|
@@ -1349,7 +1349,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1349
1349
|
display: none;
|
|
1350
1350
|
}
|
|
1351
1351
|
}
|
|
1352
|
-
`,
|
|
1352
|
+
`,Dr([E({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"transcript",2),Dr([E({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"loading",2),Dr([E({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"shadow",2),Dr([_()],l.SwUiCallLayout.prototype,"_fullscreen",2),l.SwUiCallLayout=Dr([le("sw-ui-call-layout")],l.SwUiCallLayout);var mb=Object.getOwnPropertyDescriptor,yb=(t,e,i,r)=>{for(var n=r>1?void 0:r?mb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=a(n)||n);return n};l.SwUiResponsiveContainer=class extends ee{render(){return I`<div class="container"><slot></slot></div>`}},l.SwUiResponsiveContainer.styles=ae`
|
|
1353
1353
|
.container {
|
|
1354
1354
|
margin: 0 auto;
|
|
1355
1355
|
|
|
@@ -1407,9 +1407,9 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1407
1407
|
max-height: 90vh;
|
|
1408
1408
|
}
|
|
1409
1409
|
}
|
|
1410
|
-
`,l.SwUiResponsiveContainer=
|
|
1410
|
+
`,l.SwUiResponsiveContainer=yb([le("sw-ui-responsive-container")],l.SwUiResponsiveContainer);var wb=Object.defineProperty,Sb=Object.getOwnPropertyDescriptor,_s=(t,e,i,r)=>{for(var n=r>1?void 0:r?Sb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&wb(e,i,n),n};l.SwUiModal=class extends ee{constructor(){super(...arguments),this.open=!1,this._savedOverflow=null,this._handleCancel=e=>{e.preventDefault(),this._requestClose()},this._handleBackdropClick=e=>{e.target===this.dialog&&this._requestClose()}}updated(e){e.has("open")&&(this.open?(this._savedOverflow=document.body.style.overflow,this.dialog.showModal(),document.body.style.overflow="hidden"):this.dialog.open&&this._animateClose())}_animateClose(){this.dialog.classList.add("closing");const e=i=>{i.target===this.dialog&&(this.dialog.removeEventListener("animationend",e),this.dialog.classList.remove("closing"),this.dialog.close(),this._savedOverflow!==null&&(document.body.style.overflow=this._savedOverflow,this._savedOverflow=null))};this.dialog.addEventListener("animationend",e)}_requestClose(){const e=new CustomEvent("sw-modal-close",{bubbles:!0,composed:!0,cancelable:!0});this.dispatchEvent(e)&&(this.open=!1)}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>{this.dialog.addEventListener("cancel",this._handleCancel),this.dialog.addEventListener("click",this._handleBackdropClick)})}disconnectedCallback(){super.disconnectedCallback(),this.dialog.removeEventListener("cancel",this._handleCancel),this.dialog.removeEventListener("click",this._handleBackdropClick)}render(){return I`<dialog part="dialog backdrop">
|
|
1411
1411
|
<div part="panel"><slot></slot></div>
|
|
1412
|
-
</dialog>`}},l.SwUiModal.styles=
|
|
1412
|
+
</dialog>`}},l.SwUiModal.styles=ae`
|
|
1413
1413
|
:host {
|
|
1414
1414
|
--sw-modal-duration: 0.2s;
|
|
1415
1415
|
--sw-modal-animation: bounce-in var(--sw-modal-duration) ease-out;
|
|
@@ -1497,24 +1497,24 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1497
1497
|
dialog.closing::backdrop {
|
|
1498
1498
|
animation: var(--sw-modal-backdrop-close-animation);
|
|
1499
1499
|
}
|
|
1500
|
-
`,
|
|
1500
|
+
`,_s([E({type:Boolean,reflect:!0})],l.SwUiModal.prototype,"open",2),_s([qr("dialog")],l.SwUiModal.prototype,"dialog",2),l.SwUiModal=_s([le("sw-ui-modal")],l.SwUiModal);/**
|
|
1501
1501
|
* @license
|
|
1502
1502
|
* Copyright 2018 Google LLC
|
|
1503
1503
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
1504
|
-
*/const Rc="important",Zv=" !"+Rc,Qv=Cc(class extends Ac{constructor(t){var e;if(super(t),t.type!==Sc.ATTRIBUTE||t.name!=="style"||((e=t.strings)==null?void 0:e.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce(((e,i)=>{const r=t[i];return r==null?e:e+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`}),"")}update(t,[e]){const{style:i}=t.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(e)),this.render(e);for(const r of this.ft)e[r]==null&&(this.ft.delete(r),r.includes("-")?i.removeProperty(r):i[r]=null);for(const r in e){const n=e[r];if(n!=null){this.ft.add(r);const s=typeof n=="string"&&n.endsWith(Zv);r.includes("-")||s?i.setProperty(r,s?n.slice(0,-11):n,s?Rc:""):i[r]=n}}return Wt}}),Jv="data:image/webp;base64,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",$v="data:image/webp;base64,UklGRv4BAABXRUJQVlA4IPIBAAAQDgCdASpkADgAPm0wlEgkIqIlpvVbQLANiWUIcAF/N0SNSoFwLlO5RP2YPzaIbnj2FRb+bYMVMO2hQaOhoOYVcYas+y/tUm1/zmSSq5AUjQJ+cqL2Z4Z7qXLgXDAOWYT82r5bm+2mFDM38Q0ruBiEoVE+LSAJdoHQAP7gQtoYHET/VcymFbJngGPQnLANH4pBKeNTCNh83JD/q72P9SVEf91Mx4GHZGI07V8EIhDuJRWajJcwkrY9epV7HluQk5qhMElwzHER6a3Zc/OaBy35/gKiNW/4Wd0oEovwE2r9jyX1HImaWtlcTNyPPjyqvi7m5rKNN82p/S01kcM9spuizE4Pba01gNXE5vPW68xKBA/5rLkd/4UosKilKe9PXgPgEgNiTV8tlHZ33yDJQSojodoGsBvOsVgYm06hOx2FqbPFSVY/2mjEsBcCuGQAy1+sBIt2FygUENMwQ4jSOFHEQZ7C9Sc/t1gIlR2bZtNtp1BWIQW/Iu6DDMwjSSTX4qjCwnN6/sqzlv0ZFBAKVIX4uy9DbwSWFKGKqDlsrbAmVFaioKHX3IX/Xm49jyIK7/0PIre8rpPO7DBAX5JbGQCYg8mbG2uf5xTT1gAWy0N4hyjd8bt6FFnL6eUOrt6Hjzy5gP+/8lb0glwD14Mjd9AAAAA=";var eb=Object.defineProperty,tb=Object.getOwnPropertyDescriptor,zi=(t,e,i,r)=>{for(var n=r>1?void 0:r?tb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&eb(e,i,n),n};l.SwUiBackground=class extends Z{constructor(){super(...arguments),this.default=!1,this.blurAmount="20px",this._loaded=!1}get _src(){return this.default?Jv:this.src}get _thumbnail(){return this.default?$v:this.thumbnail}willUpdate(e){(e.has("src")||e.has("default"))&&(this._loaded=!1)}render(){return k`
|
|
1505
|
-
${this._thumbnail?
|
|
1504
|
+
*/const Kc="important",Cb=" !"+Kc,Ab=zc(class extends Vc{constructor(t){var e;if(super(t),t.type!==Bc.ATTRIBUTE||t.name!=="style"||((e=t.strings)==null?void 0:e.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce(((e,i)=>{const r=t[i];return r==null?e:e+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`}),"")}update(t,[e]){const{style:i}=t.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(e)),this.render(e);for(const r of this.ft)e[r]==null&&(this.ft.delete(r),r.includes("-")?i.removeProperty(r):i[r]=null);for(const r in e){const n=e[r];if(n!=null){this.ft.add(r);const s=typeof n=="string"&&n.endsWith(Cb);r.includes("-")||s?i.setProperty(r,s?n.slice(0,-11):n,s?Kc:""):i[r]=n}}return Vt}}),Tb="data:image/webp;base64,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",Eb="data:image/webp;base64,UklGRv4BAABXRUJQVlA4IPIBAAAQDgCdASpkADgAPm0wlEgkIqIlpvVbQLANiWUIcAF/N0SNSoFwLlO5RP2YPzaIbnj2FRb+bYMVMO2hQaOhoOYVcYas+y/tUm1/zmSSq5AUjQJ+cqL2Z4Z7qXLgXDAOWYT82r5bm+2mFDM38Q0ruBiEoVE+LSAJdoHQAP7gQtoYHET/VcymFbJngGPQnLANH4pBKeNTCNh83JD/q72P9SVEf91Mx4GHZGI07V8EIhDuJRWajJcwkrY9epV7HluQk5qhMElwzHER6a3Zc/OaBy35/gKiNW/4Wd0oEovwE2r9jyX1HImaWtlcTNyPPjyqvi7m5rKNN82p/S01kcM9spuizE4Pba01gNXE5vPW68xKBA/5rLkd/4UosKilKe9PXgPgEgNiTV8tlHZ33yDJQSojodoGsBvOsVgYm06hOx2FqbPFSVY/2mjEsBcCuGQAy1+sBIt2FygUENMwQ4jSOFHEQZ7C9Sc/t1gIlR2bZtNtp1BWIQW/Iu6DDMwjSSTX4qjCwnN6/sqzlv0ZFBAKVIX4uy9DbwSWFKGKqDlsrbAmVFaioKHX3IX/Xm49jyIK7/0PIre8rpPO7DBAX5JbGQCYg8mbG2uf5xTT1gAWy0N4hyjd8bt6FFnL6eUOrt6Hjzy5gP+/8lb0glwD14Mjd9AAAAA=";var kb=Object.defineProperty,xb=Object.getOwnPropertyDescriptor,Xi=(t,e,i,r)=>{for(var n=r>1?void 0:r?xb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&kb(e,i,n),n};l.SwUiBackground=class extends ee{constructor(){super(...arguments),this.default=!1,this.blurAmount="20px",this._loaded=!1}get _src(){return this.default?Tb:this.src}get _thumbnail(){return this.default?Eb:this.thumbnail}willUpdate(e){(e.has("src")||e.has("default"))&&(this._loaded=!1)}render(){return I`
|
|
1505
|
+
${this._thumbnail?I`<div
|
|
1506
1506
|
part="thumb"
|
|
1507
1507
|
class=${`thumb${this._loaded?" hidden":""}`}
|
|
1508
|
-
style=${
|
|
1509
|
-
></div>`:
|
|
1510
|
-
${this._src?
|
|
1508
|
+
style=${Ab({"background-image":`url('${this._thumbnail}')`,filter:`blur(${this.blurAmount})`})}
|
|
1509
|
+
></div>`:W}
|
|
1510
|
+
${this._src?I`<img
|
|
1511
1511
|
part="image"
|
|
1512
1512
|
class=${this._loaded?"loaded":""}
|
|
1513
1513
|
src=${this._src}
|
|
1514
1514
|
alt=""
|
|
1515
1515
|
@load=${()=>{this._loaded=!0}}
|
|
1516
|
-
/>`:
|
|
1517
|
-
`}},l.SwUiBackground.styles=
|
|
1516
|
+
/>`:W}
|
|
1517
|
+
`}},l.SwUiBackground.styles=ae`
|
|
1518
1518
|
:host {
|
|
1519
1519
|
display: block;
|
|
1520
1520
|
position: relative; /* containing block for .thumb and img */
|
|
@@ -1552,15 +1552,15 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1552
1552
|
opacity: 1;
|
|
1553
1553
|
transform: scale(1);
|
|
1554
1554
|
}
|
|
1555
|
-
`,
|
|
1555
|
+
`,Xi([E({type:Boolean,reflect:!0})],l.SwUiBackground.prototype,"default",2),Xi([E({type:String})],l.SwUiBackground.prototype,"thumbnail",2),Xi([E({type:String})],l.SwUiBackground.prototype,"src",2),Xi([E({type:String,attribute:"blur-amount"})],l.SwUiBackground.prototype,"blurAmount",2),Xi([_()],l.SwUiBackground.prototype,"_loaded",2),l.SwUiBackground=Xi([le("sw-ui-background")],l.SwUiBackground);let Db=null;const Zc=()=>Db??(Db=Promise.resolve().then(()=>bm)),Ib={javascript:()=>Promise.resolve().then(()=>mm),typescript:()=>Promise.resolve().then(()=>wm),python:()=>Promise.resolve().then(()=>Cm),bash:()=>Promise.resolve().then(()=>vl),shell:()=>Promise.resolve().then(()=>vl),json:()=>Promise.resolve().then(()=>Am),css:()=>Promise.resolve().then(()=>Tm),yaml:()=>Promise.resolve().then(()=>Em),sql:()=>Promise.resolve().then(()=>km),markdown:()=>Promise.resolve().then(()=>xm)},Mb={typescript:["javascript"]},Qc=new Set;async function Jc(t){if(Qc.has(t))return;await Zc();for(const i of Mb[t]??[])await Jc(i);const e=Ib[t];e&&(await e(),Qc.add(t))}async function $c(t,e){const i=(e||"plaintext").toLowerCase();await Jc(i);const r=await Zc(),n=r.languages[i];return n?r.highlight(t,n,i):t}var Rb=Object.defineProperty,Pb=Object.getOwnPropertyDescriptor,xt=(t,e,i,r)=>{for(var n=r>1?void 0:r?Pb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Rb(e,i,n),n};const el=G(),tl={ALLOWED_TAGS:["p","br","b","i","em","strong","a","ul","ol","li","h1","h2","h3","h4","h5","h6","pre","code","blockquote","hr","table","thead","tbody","tr","th","td","img","span","div"],ALLOWED_ATTR:["href","target","rel","src","alt","class","title"],ALLOW_DATA_ATTR:!1,FORBID_TAGS:["script","iframe","object","embed","form","input"],FORBID_ATTR:["style"]};let il=!1;function rl(t){return il||(t.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute("rel","noopener noreferrer")}),il=!0),t}l.SwUiContentDrawer=class extends ee{constructor(){super(...arguments),this.open=!1,this.narrow=!1,this.title="",this.content="",this.format="text",this.language="",this._renderedHtml="",this._renderFormat="text",this._copied=!1,this._renderId=0}connectedCallback(){super.connectedCallback(),this._ro=new ResizeObserver(i=>{const r=i[0];r&&(this.narrow=r.contentRect.width<=480)});const e=this.parentElement;e&&this._ro.observe(e)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._ro)==null||e.disconnect(),this._ro=void 0}updated(e){super.updated(e),(e.has("content")||e.has("format")||e.has("language"))&&this._renderContent()}async _renderContent(){const e=++this._renderId,{content:i,format:r,language:n}=this;if(r==="text"){if(e!==this._renderId)return;this._renderedHtml="",this._renderFormat="text";return}try{let s="";if(r==="markdown"){const[{marked:a},{default:o}]=await Promise.all([Promise.resolve().then(()=>Wm),Promise.resolve().then(()=>jl)]),c=await a.parse(i,{async:!0});s=rl(o).sanitize(c,tl)}else if(r==="html"){const{default:a}=await Promise.resolve().then(()=>jl);s=rl(a).sanitize(i,tl)}else r==="code"&&(s=await $c(i,n||"plaintext"));if(e!==this._renderId)return;this._renderedHtml=s,this._renderFormat=r}catch(s){if(el.error("[ContentDrawer] Failed to render content:",s),e!==this._renderId)return;this._renderedHtml="",this._renderFormat="text"}}_close(){this.dispatchEvent(new CustomEvent("sw-content-drawer-close",{bubbles:!0,composed:!0}))}async _copy(){try{await navigator.clipboard.writeText(this.content),this._copied=!0,setTimeout(()=>{this._copied=!1},2e3)}catch{el.error("[ContentDrawer] Clipboard write failed")}}_renderBody(){return this.format==="text"||this._renderFormat!==this.format?I`<div class="content-text">${this.content}</div>`:this._renderFormat==="code"?I`
|
|
1556
1556
|
<div class="content-code">
|
|
1557
|
-
<pre><code>${
|
|
1557
|
+
<pre><code>${bn(this._renderedHtml)}</code></pre>
|
|
1558
1558
|
</div>
|
|
1559
|
-
`:
|
|
1559
|
+
`:I`<div class="content-rich">${bn(this._renderedHtml)}</div>`}render(){const e=this.format==="code"&&this.language;return I`
|
|
1560
1560
|
<div class="panel" part="panel">
|
|
1561
1561
|
<div class="header" part="header">
|
|
1562
|
-
${this.title?
|
|
1563
|
-
${e?
|
|
1562
|
+
${this.title?I`<span class="title" part="title">${this.title}</span>`:W}
|
|
1563
|
+
${e?I`<span class="lang-badge">${this.language}</span>`:W}
|
|
1564
1564
|
<button
|
|
1565
1565
|
class="action-btn ${this._copied?"copy-done":""}"
|
|
1566
1566
|
title="Copy to clipboard"
|
|
@@ -1576,7 +1576,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1576
1576
|
${this._renderBody()}
|
|
1577
1577
|
</div>
|
|
1578
1578
|
</div>
|
|
1579
|
-
`}},l.SwUiContentDrawer.styles=
|
|
1579
|
+
`}},l.SwUiContentDrawer.styles=ae`
|
|
1580
1580
|
/* ── Host — default: slide in from the right ── */
|
|
1581
1581
|
:host {
|
|
1582
1582
|
display: block;
|
|
@@ -1812,12 +1812,12 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1812
1812
|
.token.important,
|
|
1813
1813
|
.token.bold { font-weight: bold; }
|
|
1814
1814
|
.token.italic { font-style: italic; }
|
|
1815
|
-
`,
|
|
1816
|
-
`)}function
|
|
1815
|
+
`,xt([E({type:Boolean,reflect:!0})],l.SwUiContentDrawer.prototype,"open",2),xt([E({type:Boolean,reflect:!0})],l.SwUiContentDrawer.prototype,"narrow",2),xt([E({type:String})],l.SwUiContentDrawer.prototype,"title",2),xt([E({type:String})],l.SwUiContentDrawer.prototype,"content",2),xt([E({type:String})],l.SwUiContentDrawer.prototype,"format",2),xt([E({type:String})],l.SwUiContentDrawer.prototype,"language",2),xt([_()],l.SwUiContentDrawer.prototype,"_renderedHtml",2),xt([_()],l.SwUiContentDrawer.prototype,"_renderFormat",2),xt([_()],l.SwUiContentDrawer.prototype,"_copied",2),l.SwUiContentDrawer=xt([le("sw-ui-content-drawer")],l.SwUiContentDrawer);function Ob(t){const i=["# Transcript","",`*Generated: ${new Date().toLocaleString(void 0,{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})}*`,""],r=t.filter(n=>n.state==="complete");for(const n of r)i.push("---",""),i.push(..._b(n),"");return r.length>0&&i.push("---",""),i.join(`
|
|
1816
|
+
`)}function _b(t){var i,r,n,s;const e=[];switch(t.type){case"user":e.push(`**You:** ${t.text}`);break;case"agent":e.push(`**Agent:** ${t.text}`);break;case"system":e.push(`*${t.text}*`);break}if((i=t.meta)!=null&&i.code){const{language:a="",content:o}=t.meta.code;e.push("",`\`\`\`${a}`,o,"```")}if((n=(r=t.meta)==null?void 0:r.links)!=null&&n.length){e.push("");for(const a of t.meta.links)e.push(`- [${a.label}](${a.url})`)}return(s=t.meta)!=null&&s.displayContent&&e.push(...Lb(t.meta.displayContent)),e}function Lb(t){const e=[""];switch(t.format){case"code":e.push(`\`\`\`${t.language??""}`,t.content,"```");break;case"markdown":e.push(t.content);break;case"html":e.push("<!-- html content -->",t.content,"<!-- /html content -->");break;default:e.push(t.content)}return e}var Fb=Object.defineProperty,Nb=Object.getOwnPropertyDescriptor,Ir=(t,e,i,r)=>{for(var n=r>1?void 0:r?Nb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Fb(e,i,n),n};l.SwUiTranscriptView=class extends ee{constructor(){super(...arguments),this.entries=[],this.header="Transcript",this.emptyText="",this._codeCache=new Map,this._lastEntryCount=0}updated(e){super.updated(e),this.entries.length!==this._lastEntryCount&&(this._lastEntryCount=this.entries.length,this._autoScroll()),e.has("entries")&&this._highlightNewEntries()}async _highlightNewEntries(){const e=this.entries.filter(i=>{var r;return((r=i.meta)==null?void 0:r.code)&&!this._codeCache.has(i.id)});e.length!==0&&(await Promise.all(e.map(async i=>{const{content:r,language:n=""}=i.meta.code,s=await $c(r,n);this._codeCache=new Map(this._codeCache).set(i.id,s)})),await this.updateComplete,this._autoScroll())}_downloadTranscript(){const e=Ob(this.entries),i=new Blob([e],{type:"text/markdown;charset=utf-8"}),r=URL.createObjectURL(i),n=document.createElement("a");n.href=r,n.download=`transcript-${new Date().toISOString().slice(0,10)}.md`,n.click(),URL.revokeObjectURL(r)}_autoScroll(){var r;const e=(r=this.shadowRoot)==null?void 0:r.querySelector(".messages");if(!e)return;e.scrollHeight-e.scrollTop-e.clientHeight<120&&e.scrollTo({top:e.scrollHeight,behavior:"smooth"})}_renderCode(e){var n;const i=(n=e.meta)==null?void 0:n.code;if(!i)return W;const r=this._codeCache.get(e.id);return I`
|
|
1817
1817
|
<div class="meta-code" part="code">
|
|
1818
|
-
<pre><code>${r?
|
|
1818
|
+
<pre><code>${r?bn(r):i.content}</code></pre>
|
|
1819
1819
|
</div>
|
|
1820
|
-
`}render(){const e=this.entries.some(i=>i.state==="complete");return
|
|
1820
|
+
`}render(){const e=this.entries.some(i=>i.state==="complete");return I`
|
|
1821
1821
|
<div class="header" part="header">
|
|
1822
1822
|
<span>${this.header}</span>
|
|
1823
1823
|
<button
|
|
@@ -1831,23 +1831,23 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
1831
1831
|
</button>
|
|
1832
1832
|
</div>
|
|
1833
1833
|
|
|
1834
|
-
${this.entries.length===0?
|
|
1834
|
+
${this.entries.length===0?I`<div class="empty" part="empty">${this.emptyText}</div>`:I`
|
|
1835
1835
|
<div class="messages" part="messages">
|
|
1836
|
-
${this.entries.map(i=>{var r,n;return
|
|
1836
|
+
${this.entries.map(i=>{var r,n;return I`
|
|
1837
1837
|
<div
|
|
1838
1838
|
class="bubble ${i.type} ${i.state==="partial"?"partial":""}"
|
|
1839
1839
|
part="bubble bubble-${i.type}"
|
|
1840
1840
|
>
|
|
1841
1841
|
${i.text}
|
|
1842
|
-
${(n=(r=i.meta)==null?void 0:r.links)!=null&&n.length?
|
|
1843
|
-
${i.meta.links.map(s=>
|
|
1844
|
-
</div>`:
|
|
1842
|
+
${(n=(r=i.meta)==null?void 0:r.links)!=null&&n.length?I`<div class="meta-links">
|
|
1843
|
+
${i.meta.links.map(s=>I`<a href=${s.url} target="_blank" rel="noopener">${s.label}</a>`)}
|
|
1844
|
+
</div>`:W}
|
|
1845
1845
|
${this._renderCode(i)}
|
|
1846
1846
|
</div>
|
|
1847
1847
|
`})}
|
|
1848
1848
|
</div>
|
|
1849
1849
|
`}
|
|
1850
|
-
`}},l.SwUiTranscriptView.styles=[
|
|
1850
|
+
`}},l.SwUiTranscriptView.styles=[ut,ae`
|
|
1851
1851
|
:host {
|
|
1852
1852
|
display: flex;
|
|
1853
1853
|
flex-direction: column;
|
|
@@ -2076,20 +2076,20 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2076
2076
|
.token.italic {
|
|
2077
2077
|
font-style: italic;
|
|
2078
2078
|
}
|
|
2079
|
-
`],
|
|
2079
|
+
`],Ir([E({attribute:!1})],l.SwUiTranscriptView.prototype,"entries",2),Ir([E({type:String})],l.SwUiTranscriptView.prototype,"header",2),Ir([E({type:String,attribute:"empty-text"})],l.SwUiTranscriptView.prototype,"emptyText",2),Ir([_()],l.SwUiTranscriptView.prototype,"_codeCache",2),l.SwUiTranscriptView=Ir([le("sw-ui-transcript-view")],l.SwUiTranscriptView);var Ub=Object.defineProperty,Bb=Object.getOwnPropertyDescriptor,Mr=(t,e,i,r)=>{for(var n=r>1?void 0:r?Bb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Ub(e,i,n),n};l.SwUiAlert=class extends ee{constructor(){super(...arguments),this.description="",this.type="confirm",this._resolve=null}show(){return this._dialog.showModal(),new Promise(e=>{this._resolve=e})}_close(e){var i;(i=this._resolve)==null||i.call(this,e),this._resolve=null,this._dialog.close()}render(){return I`
|
|
2080
2080
|
<dialog>
|
|
2081
2081
|
<h2 class="title">${this.title}</h2>
|
|
2082
2082
|
<div class="body">
|
|
2083
2083
|
<slot>${this.description}</slot>
|
|
2084
2084
|
</div>
|
|
2085
2085
|
<div class="actions">
|
|
2086
|
-
${this.type==="confirm"?
|
|
2086
|
+
${this.type==="confirm"?I`
|
|
2087
2087
|
<button class="reject" @click=${()=>this._close(!1)}>Reject</button>
|
|
2088
2088
|
<button class="accept" @click=${()=>this._close(!0)}>Accept</button>
|
|
2089
|
-
`:
|
|
2089
|
+
`:I` <button class="accept" @click=${()=>this._close(!0)}>OK</button> `}
|
|
2090
2090
|
</div>
|
|
2091
2091
|
</dialog>
|
|
2092
|
-
`}},l.SwUiAlert.styles=[
|
|
2092
|
+
`}},l.SwUiAlert.styles=[ut,ae`
|
|
2093
2093
|
:host {
|
|
2094
2094
|
font-family: var(--type-family-body);
|
|
2095
2095
|
}
|
|
@@ -2150,7 +2150,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2150
2150
|
.reject:hover {
|
|
2151
2151
|
background: #e5e7eb;
|
|
2152
2152
|
}
|
|
2153
|
-
`],br([T()],l.SwUiAlert.prototype,"title",2),br([T()],l.SwUiAlert.prototype,"description",2),br([T({reflect:!0})],l.SwUiAlert.prototype,"type",2),br([Lr("dialog")],l.SwUiAlert.prototype,"_dialog",2),l.SwUiAlert=br([se("sw-ui-alert")],l.SwUiAlert);async function mr(t){const e=document.createElement("sw-ui-alert");e.title=t.title,t.description!==void 0&&(e.description=t.description),t.type!==void 0&&(e.type=t.type),document.body.appendChild(e),await e.updateComplete;const i=await e.show();return e.remove(),i}const gb=`:root{--sw-blue: #044EF4;--sw-fuchsia: #F72A72;--sw-turquoise: #40E0D0;--sw-gold: #FFD700;--sw-purple: #601BE6;--sw-light-bg: #FAFBFC;--type-family-heading: "Instrument Sans", sans-serif;--type-family-body: "Lexend", sans-serif;--type-family-code: "JetBrains Mono", monospace;--type-size-h1: clamp(2rem, 4.5vw, 3.25rem);--type-size-h2: clamp(1.375rem, 3vw, 2rem);--type-size-h3: clamp(1.125rem, 2vw, 1.375rem);--type-size-body: 16px;--type-size-small: 14px;--type-size-caption: 13px;--type-size-code: 14px;--type-weight-heading: 700;--type-weight-body: 400;--type-weight-medium: 500;--type-weight-semibold: 600;--type-line-height-body: 1.7;--type-line-height-heading: 1.2;--type-line-height-code: 1.75;--type-letter-spacing-heading: -.02em;--type-letter-spacing-eyebrow: .14em;--type-prose-body: 20px;--type-prose-body-small: 18px;--type-prose-h1: clamp(1.75rem, 3.5vw, 2.5rem);--type-prose-h2: clamp(1.375rem, 2.5vw, 1.75rem);--type-prose-h3: clamp(1.125rem, 2vw, 1.375rem);--type-prose-code: 17px;--type-prose-line-height: 1.8;--type-prose-measure: 75%;--type-prose-measure-mobile: 92%;--sp-0: 0;--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.25rem;--sp-6: 1.5rem;--sp-8: 2rem;--sp-10: 2.5rem;--sp-12: 3rem;--sp-16: 4rem;--sp-18: 4.5rem;--sp-20: 5rem;--radius-none: 0;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 10px;--radius-xl: 12px;--radius-full: 100px;--transition-fast: .15s ease;--transition-normal: .2s ease;--transition-slow: .25s ease;--animation-reveal-duration: .5s;--animation-reveal-easing: cubic-bezier(.22, 1, .36, 1);--animation-gradient-duration: 6s;--backgrounds-dots: radial-gradient(circle, rgba(255,255,255,.06) 1px, transparent 1px);--backgrounds-grid: linear-gradient(rgba(255,255,255,.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.03) 1px, transparent 1px);--backgrounds-noise: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='256' height='256' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");--backgrounds-hex: url("data:image/svg+xml,%3Csvg width='60' height='52' viewBox='0 0 60 52' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 0 L60 15 L60 37 L30 52 L0 37 L0 15Z' fill='none' stroke='rgba(255,255,255,0.03)' stroke-width='0.5'/%3E%3C/svg%3E");--backgrounds-diagonal: repeating-linear-gradient(-45deg, transparent, transparent 28px, rgba(255,255,255,.02) 28px, rgba(255,255,255,.02) 29px);--backgrounds-orbs: radial-gradient(ellipse 600px 400px at 15% 20%, rgba(4,78,244,.08) 0%, transparent 70%), radial-gradient(ellipse 500px 350px at 85% 70%, rgba(247,42,114,.06) 0%, transparent 70%), radial-gradient(ellipse 400px 300px at 50% 50%, rgba(96,27,230,.05) 0%, transparent 70%);--backgrounds-rings: radial-gradient(circle 300px at 25% 35%, transparent 60%, rgba(4,78,244,.04) 60%, rgba(4,78,244,.04) 61%, transparent 61%), radial-gradient(circle 200px at 75% 60%, transparent 60%, rgba(247,42,114,.03) 60%, rgba(247,42,114,.03) 61%, transparent 61%), radial-gradient(circle 250px at 50% 80%, transparent 60%, rgba(96,27,230,.03) 60%, rgba(96,27,230,.03) 61%, transparent 61%);--z-index-base: 1;--z-index-navbar: 100;--z-index-overlay: 200;--z-index-modal: 300;--breakpoint-sm: 400px;--breakpoint-md: 768px;--breakpoint-lg: 1024px;--breakpoint-xl: 1080px;--container-max-width: 1080px;--container-padding: 2rem;--container-padding-mobile: 1.25rem;--tok-string: #40E0D0;--tok-keyword: #6e9eff;--tok-property: #ffffff;--tok-operator: #FFD700;--tok-comment: #898995;--tok-number: #ff6da0;--tok-function: #40E0D0;--tok-value: #d4d4d8;--tok-decorator: #6e9eff;--tok-type: #ff6da0;--fill-blue: #044EF4;--fill-fuchsia: #F72A72;--fill-turquoise: #40E0D0;--fill-gold: #FFD700;--cb-bg: #1e1e1f;--cb-fg: #d4d4d8;--cb-border: rgba(255, 255, 255, .07);--cb-label: #73737e;--cb-tab-default: #73737e;--cb-tab-hover: #e8e8ec;--cb-tab-active: #40E0D0}:root,[data-theme=dark]{--sw-white: #ffffff;--sw-gray-50: #f5f5f7;--sw-gray-100: #e8e8ec;--sw-gray-200: #c8c8cf;--sw-gray-300: #a0a0aa;--sw-gray-400: #73737e;--sw-gray-500: #333333;--sw-gray-600: #262630;--sw-gray-700: #1a1a2e;--sw-gray-800: #15152a;--sw-gray-900: #111118;--sw-black: #0a0a12;--bg-page: #0e0e18;--bg-surface: #181a28;--bg-surface-raised: #222436;--bg-overlay: rgba(14, 14, 24, .94);--bg-subtle: rgba(255, 255, 255, .03);--bg-gradient: linear-gradient(135deg, #0a0a12 0%, #0e1028 35%, #0c2060 100%);--bg-gradient-slide: linear-gradient(90deg, #010915 0%, #102A4A 45%, #274A83 100%);--fg-default: #f0f0f4;--fg-secondary: #e8e8ec;--fg-muted: #a0a0aa;--fg-subtle: #73737e;--fg-on-color: #ffffff;--fg-on-gold: #0a0a12;--fg-headings: #f0f0f4;--fg-emphasis: #40E0D0;--fg-emphasis-small: #40E0D0;--border-default: rgba(255, 255, 255, .12);--border-strong: rgba(255, 255, 255, .15);--code-bg: rgba(255, 255, 255, .06);--code-fg: #40E0D0;--badge-bg: rgb(23, 14, 23);--badge-border: rgba(255, 255, 255, .2);--badge-text-fuchsia: #ff5a9e;--badge-text-blue: #7aabff;--badge-text-turquoise: #6aeee0;--badge-text-gold: #ffe44d;--callout-info-bg: rgba(4, 78, 244, .06);--callout-info-border: rgba(4, 78, 244, .18);--callout-warn-bg: rgba(255, 215, 0, .04);--callout-warn-border: rgba(255, 215, 0, .16);--callout-danger-bg: rgba(247, 42, 114, .06);--callout-danger-border: rgba(247, 42, 114, .18);--callout-success-bg: rgba(64, 224, 208, .06);--callout-success-border: rgba(64, 224, 208, .18);--litbar-fuchsia-glow: 0 0 8px 1px rgba(247, 42, 114, .4), 0 0 30px 4px rgba(247, 42, 114, .12);--litbar-fuchsia-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(247, 42, 114, .06) 0%, transparent 100%);--litbar-blue-glow: 0 0 8px 1px rgba(4, 78, 244, .5), 0 0 30px 4px rgba(4, 78, 244, .12);--litbar-blue-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(4, 78, 244, .07) 0%, transparent 100%);--litbar-turquoise-glow: 0 0 8px 1px rgba(64, 224, 208, .35), 0 0 30px 4px rgba(64, 224, 208, .08);--litbar-turquoise-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(64, 224, 208, .05) 0%, transparent 100%);--litbar-gold-glow: 0 0 8px 1px rgba(255, 215, 0, .35), 0 0 30px 4px rgba(255, 215, 0, .08);--litbar-gold-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(255, 215, 0, .04) 0%, transparent 100%);--shadow-glow-fuchsia: 0 0 20px rgba(247, 42, 114, .25);--shadow-glow-fuchsia-soft: 0 4px 40px rgba(247, 42, 114, .08);--shadow-glow-blue: 0 0 20px rgba(4, 78, 244, .25);--shadow-glow-blue-soft: 0 4px 40px rgba(4, 78, 244, .08);--shadow-glow-turquoise-soft: 0 4px 40px rgba(64, 224, 208, .06);--shadow-md: 0 4px 16px rgba(0, 0, 0, .5);--interactive-button-primary-bg: #044EF4;--interactive-button-primary-text: #ffffff;--interactive-button-primary-hover: #0342cf;--interactive-button-primary-active: #022da8;--interactive-button-secondary-bg: transparent;--interactive-button-secondary-text: #ffffff;--interactive-button-secondary-border: rgba(255, 255, 255, .15);--interactive-button-secondary-hover: rgba(255, 255, 255, .06);--interactive-button-ghost-text: #e8e8ec;--interactive-button-ghost-hover: rgba(255, 255, 255, .06);--interactive-button-destructive-bg: #dc2626;--interactive-button-destructive-text: #ffffff;--interactive-button-destructive-hover: #b91c1c;--interactive-button-disabled-bg: #333338;--interactive-button-disabled-text: #73737e;--interactive-input-bg: #2a2a2e;--interactive-input-text: #ffffff;--interactive-input-placeholder: #73737e;--interactive-input-border: rgba(255, 255, 255, .15);--interactive-input-border-focus: #044EF4;--interactive-input-focus-ring: 0 0 0 3px rgba(4, 78, 244, .3);--interactive-input-error-border: #ef4444;--interactive-input-disabled-bg: #1e1e1f;--interactive-input-disabled-text: #73737e;--interactive-status-success: #22c55e;--interactive-status-success-soft: rgba(34, 197, 94, .12);--interactive-status-warning: #FFD700;--interactive-status-warning-soft: rgba(255, 215, 0, .12);--interactive-status-error: #ef4444;--interactive-status-error-soft: rgba(239, 68, 68, .12);--interactive-status-info: #044EF4;--interactive-status-info-soft: rgba(4, 78, 244, .12);--interactive-link-default: #40E0D0;--interactive-link-hover: #F72A72;--interactive-link-visited: #a0a0aa;--interactive-toggle-track-off: #333338;--interactive-toggle-track-on: #044EF4;--interactive-toggle-thumb: #ffffff;--interactive-skeleton-base: #2a2a2e;--interactive-skeleton-shimmer: #333338;--interactive-tooltip-bg: #ffffff;--interactive-tooltip-text: #1e1e1f;--interactive-dropdown-bg: #2a2a2e;--interactive-dropdown-hover: #333338;--interactive-dropdown-border: rgba(255, 255, 255, .15);--interactive-dropdown-separator: rgba(255, 255, 255, .07);--interactive-table-header-bg: transparent;--interactive-table-header-text: #F72A72;--interactive-table-row-hover: rgba(255, 255, 255, .03);--interactive-table-border: rgba(255, 255, 255, .07);--interactive-tab-default: #a0a0aa;--interactive-tab-active: #40E0D0;--interactive-tab-hover: #ffffff;--interactive-tab-indicator: #044EF4}[data-theme=light]{--sw-white: #ffffff;--sw-gray-50: #F6F6F4;--sw-gray-100: #ECECEA;--sw-gray-200: #D4D4D2;--sw-gray-300: #A8A8A6;--sw-gray-400: #737371;--sw-gray-500: #52524F;--sw-gray-600: #3A3A38;--sw-gray-700: #272725;--sw-gray-800: #1A1A18;--sw-black: #0D0D0C;--bg-page: #FAFBFC;--bg-surface: #F3F4F6;--bg-surface-raised: #E8EAF0;--bg-overlay: rgba(250, 251, 252, .94);--bg-subtle: rgba(0, 0, 0, .02);--fg-default: #1A1A18;--fg-secondary: #3A3A38;--fg-muted: #737371;--fg-subtle: #A8A8A6;--fg-on-color: #FAFBFC;--fg-on-gold: #1A1A18;--fg-headings: #070c2d;--fg-emphasis: #F72A72;--fg-emphasis-small: #AB0A42;--border-default: rgba(0, 0, 0, .1);--border-strong: rgba(0, 0, 0, .18);--code-bg: rgba(0, 0, 0, .06);--code-fg: #044EF4;--badge-bg: #ECECEA;--badge-border: rgba(0, 0, 0, .12);--badge-text-fuchsia: #BE1758;--badge-text-blue: #0340C0;--badge-text-turquoise: #0A6E64;--badge-text-gold: #6B5600;--shadow-glow-fuchsia: 0 0 20px rgba(247, 42, 114, .15);--shadow-glow-fuchsia-soft: 0 4px 40px rgba(247, 42, 114, .05);--shadow-glow-blue: 0 0 20px rgba(4, 78, 244, .15);--shadow-glow-blue-soft: 0 4px 40px rgba(4, 78, 244, .05);--shadow-glow-turquoise-soft: 0 4px 40px rgba(64, 224, 208, .04);--shadow-md: 0 4px 16px rgba(0, 0, 0, .08);--callout-info-bg: rgba(4, 78, 244, .06);--callout-info-border: rgba(4, 78, 244, .18);--callout-warn-bg: rgba(255, 215, 0, .04);--callout-warn-border: rgba(255, 215, 0, .16);--callout-danger-bg: rgba(247, 42, 114, .06);--callout-danger-border: rgba(247, 42, 114, .18);--callout-success-bg: rgba(64, 224, 208, .06);--callout-success-border: rgba(64, 224, 208, .18);--litbar-fuchsia-glow: 0 0 8px 1px rgba(247, 42, 114, .4), 0 0 30px 4px rgba(247, 42, 114, .12);--litbar-fuchsia-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(247, 42, 114, .06) 0%, transparent 100%);--litbar-blue-glow: 0 0 8px 1px rgba(4, 78, 244, .5), 0 0 30px 4px rgba(4, 78, 244, .12);--litbar-blue-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(4, 78, 244, .07) 0%, transparent 100%);--litbar-turquoise-glow: 0 0 8px 1px rgba(64, 224, 208, .35), 0 0 30px 4px rgba(64, 224, 208, .08);--litbar-turquoise-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(64, 224, 208, .05) 0%, transparent 100%);--litbar-gold-glow: 0 0 8px 1px rgba(255, 215, 0, .35), 0 0 30px 4px rgba(255, 215, 0, .08);--litbar-gold-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(255, 215, 0, .04) 0%, transparent 100%);--interactive-button-primary-bg: #044EF4;--interactive-button-primary-text: #ffffff;--interactive-button-primary-hover: #0342cf;--interactive-button-primary-active: #022da8;--interactive-button-secondary-bg: transparent;--interactive-button-secondary-text: #1E1D1B;--interactive-button-secondary-border: rgba(0, 0, 0, .18);--interactive-button-secondary-hover: rgba(0, 0, 0, .04);--interactive-button-ghost-text: #3E3B37;--interactive-button-ghost-hover: rgba(0, 0, 0, .04);--interactive-button-destructive-bg: #dc2626;--interactive-button-destructive-text: #ffffff;--interactive-button-destructive-hover: #b91c1c;--interactive-button-disabled-bg: #ECECEA;--interactive-button-disabled-text: #A8A8A6;--interactive-input-bg: #ffffff;--interactive-input-text: #1A1A18;--interactive-input-placeholder: #A8A8A6;--interactive-input-border: rgba(0, 0, 0, .18);--interactive-input-border-focus: #044EF4;--interactive-input-focus-ring: 0 0 0 3px rgba(4, 78, 244, .2);--interactive-input-error-border: #dc2626;--interactive-input-disabled-bg: #F6F6F4;--interactive-input-disabled-text: #A8A8A6;--interactive-status-success: #16a34a;--interactive-status-success-soft: rgba(22, 163, 74, .08);--interactive-status-warning: #a16207;--interactive-status-warning-soft: rgba(161, 98, 7, .08);--interactive-status-error: #dc2626;--interactive-status-error-soft: rgba(220, 38, 38, .08);--interactive-status-info: #044EF4;--interactive-status-info-soft: rgba(4, 78, 244, .08);--interactive-link-default: #044EF4;--interactive-link-hover: #F72A72;--interactive-link-visited: #737371;--interactive-toggle-track-off: #D4D4D2;--interactive-toggle-track-on: #044EF4;--interactive-toggle-thumb: #ffffff;--interactive-skeleton-base: #F6F6F4;--interactive-skeleton-shimmer: #ECECEA;--interactive-tooltip-bg: #1A1A18;--interactive-tooltip-text: #FBFBFA;--interactive-dropdown-bg: #ffffff;--interactive-dropdown-hover: #F6F6F4;--interactive-dropdown-border: rgba(0, 0, 0, .1);--interactive-dropdown-separator: rgba(0, 0, 0, .06);--interactive-table-header-bg: #044EF4;--interactive-table-header-text: #ffffff;--interactive-table-row-hover: rgba(0, 0, 0, .02);--interactive-table-border: rgba(0, 0, 0, .1);--interactive-tab-default: #737371;--interactive-tab-active: #F72A72;--interactive-tab-hover: #1A1A18;--interactive-tab-indicator: #044EF4}@media(prefers-color-scheme:light){:root:not([data-theme]){--sw-white: #ffffff;--sw-gray-50: #F6F6F4;--sw-gray-100: #ECECEA;--sw-gray-200: #D4D4D2;--sw-gray-300: #A8A8A6;--sw-gray-400: #737371;--sw-gray-500: #52524F;--sw-gray-600: #3A3A38;--sw-gray-700: #272725;--sw-gray-800: #1A1A18;--sw-black: #0D0D0C;--bg-page: #FAFBFC;--bg-surface: #F3F4F6;--bg-surface-raised: #E8EAF0;--bg-overlay: rgba(250, 251, 252, .94);--bg-subtle: rgba(0, 0, 0, .02);--fg-default: #1A1A18;--fg-secondary: #3A3A38;--fg-muted: #737371;--fg-subtle: #A8A8A6;--fg-on-color: #FAFBFC;--fg-on-gold: #1A1A18;--fg-headings: #070c2d;--fg-emphasis: #F72A72;--fg-emphasis-small: #AB0A42;--border-default: rgba(0, 0, 0, .1);--border-strong: rgba(0, 0, 0, .18);--code-bg: rgba(0, 0, 0, .06);--code-fg: #044EF4;--badge-bg: #ECECEA;--badge-border: rgba(0, 0, 0, .12);--badge-text-fuchsia: #BE1758;--badge-text-blue: #0340C0;--badge-text-turquoise: #0A6E64;--badge-text-gold: #6B5600;--shadow-glow-fuchsia: 0 0 20px rgba(247, 42, 114, .15);--shadow-glow-fuchsia-soft: 0 4px 40px rgba(247, 42, 114, .05);--shadow-glow-blue: 0 0 20px rgba(4, 78, 244, .15);--shadow-glow-blue-soft: 0 4px 40px rgba(4, 78, 244, .05);--shadow-glow-turquoise-soft: 0 4px 40px rgba(64, 224, 208, .04);--shadow-md: 0 4px 16px rgba(0, 0, 0, .08);--callout-info-bg: rgba(4, 78, 244, .06);--callout-info-border: rgba(4, 78, 244, .18);--callout-warn-bg: rgba(255, 215, 0, .04);--callout-warn-border: rgba(255, 215, 0, .16);--callout-danger-bg: rgba(247, 42, 114, .06);--callout-danger-border: rgba(247, 42, 114, .18);--callout-success-bg: rgba(64, 224, 208, .06);--callout-success-border: rgba(64, 224, 208, .18);--litbar-fuchsia-glow: 0 0 8px 1px rgba(247, 42, 114, .4), 0 0 30px 4px rgba(247, 42, 114, .12);--litbar-fuchsia-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(247, 42, 114, .06) 0%, transparent 100%);--litbar-blue-glow: 0 0 8px 1px rgba(4, 78, 244, .5), 0 0 30px 4px rgba(4, 78, 244, .12);--litbar-blue-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(4, 78, 244, .07) 0%, transparent 100%);--litbar-turquoise-glow: 0 0 8px 1px rgba(64, 224, 208, .35), 0 0 30px 4px rgba(64, 224, 208, .08);--litbar-turquoise-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(64, 224, 208, .05) 0%, transparent 100%);--litbar-gold-glow: 0 0 8px 1px rgba(255, 215, 0, .35), 0 0 30px 4px rgba(255, 215, 0, .08);--litbar-gold-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(255, 215, 0, .04) 0%, transparent 100%);--interactive-button-primary-bg: #044EF4;--interactive-button-primary-text: #ffffff;--interactive-button-primary-hover: #0342cf;--interactive-button-primary-active: #022da8;--interactive-button-secondary-bg: transparent;--interactive-button-secondary-text: #1E1D1B;--interactive-button-secondary-border: rgba(0, 0, 0, .18);--interactive-button-secondary-hover: rgba(0, 0, 0, .04);--interactive-button-ghost-text: #3E3B37;--interactive-button-ghost-hover: rgba(0, 0, 0, .04);--interactive-button-destructive-bg: #dc2626;--interactive-button-destructive-text: #ffffff;--interactive-button-destructive-hover: #b91c1c;--interactive-button-disabled-bg: #ECECEA;--interactive-button-disabled-text: #A8A8A6;--interactive-input-bg: #ffffff;--interactive-input-text: #1A1A18;--interactive-input-placeholder: #A8A8A6;--interactive-input-border: rgba(0, 0, 0, .18);--interactive-input-border-focus: #044EF4;--interactive-input-focus-ring: 0 0 0 3px rgba(4, 78, 244, .2);--interactive-input-error-border: #dc2626;--interactive-input-disabled-bg: #F6F6F4;--interactive-input-disabled-text: #A8A8A6;--interactive-status-success: #16a34a;--interactive-status-success-soft: rgba(22, 163, 74, .08);--interactive-status-warning: #a16207;--interactive-status-warning-soft: rgba(161, 98, 7, .08);--interactive-status-error: #dc2626;--interactive-status-error-soft: rgba(220, 38, 38, .08);--interactive-status-info: #044EF4;--interactive-status-info-soft: rgba(4, 78, 244, .08);--interactive-link-default: #044EF4;--interactive-link-hover: #F72A72;--interactive-link-visited: #737371;--interactive-toggle-track-off: #D4D4D2;--interactive-toggle-track-on: #044EF4;--interactive-toggle-thumb: #ffffff;--interactive-skeleton-base: #F6F6F4;--interactive-skeleton-shimmer: #ECECEA;--interactive-tooltip-bg: #1A1A18;--interactive-tooltip-text: #FBFBFA;--interactive-dropdown-bg: #ffffff;--interactive-dropdown-hover: #F6F6F4;--interactive-dropdown-border: rgba(0, 0, 0, .1);--interactive-dropdown-separator: rgba(0, 0, 0, .06);--interactive-table-header-bg: #044EF4;--interactive-table-header-text: #ffffff;--interactive-table-row-hover: rgba(0, 0, 0, .02);--interactive-table-border: rgba(0, 0, 0, .1);--interactive-tab-default: #737371;--interactive-tab-active: #F72A72;--interactive-tab-hover: #1A1A18;--interactive-tab-indicator: #044EF4}}`,fb="https://fonts.googleapis.com/css2";function un(t,e={}){if(typeof document>"u")return;const i=e.weights??[400],r=e.display??"swap",n=t.replace(/\s+/g,"+"),s=e.italic?`ital,wght@${i.flatMap(c=>[`0,${c}`,`1,${c}`]).join(";")}`:`wght@${i.join(";")}`,a=`${fb}?family=${n}:${s}&display=${r}`;if(document.querySelector(`link[href="${a}"]`))return;const o=document.createElement("link");o.rel="stylesheet",o.href=a,document.head.appendChild(o)}let zc=!1;function Vc(){if(typeof document>"u"||zc)return;zc=!0;const t=new CSSStyleSheet;t.replaceSync(gb),document.adoptedStyleSheets=[...document.adoptedStyleSheets,t]}function Hc(){un("Lexend",{weights:[300,400,500,600,700]}),un("Instrument Sans",{weights:[400,500,600,700]}),un("JetBrains Mono",{weights:[400,500]})}const jc=W(),vb=["text","markdown","code","html"];function dn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function bb(t){if(!t)return{};try{const e=JSON.parse(t);return dn(e)?e:(jc.warn("[CallWidget] user-variables must be a JSON object; ignoring"),{})}catch(e){return jc.warn("[CallWidget] Failed to parse user-variables JSON; ignoring",e),{}}}function mb(t,e=()=>new Date().toISOString()){const i=dn(t.capabilities)?t.capabilities:{},r=dn(t.metadata)?t.metadata:{},n=dn(r.widget)?r.widget:{};return{...t,capabilities:{display_content:{formats:[...vb]},...i},metadata:{...r,widget:{opened_at:e(),...n}}}}const yb=["c2c_","c2t_"],wb="embeds.signalwire.com";function Sb(t){try{return new URL(t.includes("://")?t:`https://${t}`).hostname}catch{return t}}function Cb(t){return yb.some(e=>t.startsWith(e))}function Ab(t,e){return Cb(t)?new yc(Sb(e||wb),t):new wc({token:t})}const Tb=ie`
|
|
2153
|
+
`],Mr([E()],l.SwUiAlert.prototype,"title",2),Mr([E()],l.SwUiAlert.prototype,"description",2),Mr([E({reflect:!0})],l.SwUiAlert.prototype,"type",2),Mr([qr("dialog")],l.SwUiAlert.prototype,"_dialog",2),l.SwUiAlert=Mr([le("sw-ui-alert")],l.SwUiAlert);async function Rr(t){const e=document.createElement("sw-ui-alert");e.title=t.title,t.description!==void 0&&(e.description=t.description),t.type!==void 0&&(e.type=t.type),document.body.appendChild(e),await e.updateComplete;const i=await e.show();return e.remove(),i}const zb=`:root{--sw-blue: #044EF4;--sw-fuchsia: #F72A72;--sw-turquoise: #40E0D0;--sw-gold: #FFD700;--sw-purple: #601BE6;--sw-light-bg: #FAFBFC;--type-family-heading: "Instrument Sans", sans-serif;--type-family-body: "Lexend", sans-serif;--type-family-code: "JetBrains Mono", monospace;--type-size-h1: clamp(2rem, 4.5vw, 3.25rem);--type-size-h2: clamp(1.375rem, 3vw, 2rem);--type-size-h3: clamp(1.125rem, 2vw, 1.375rem);--type-size-body: 16px;--type-size-small: 14px;--type-size-caption: 13px;--type-size-code: 14px;--type-weight-heading: 700;--type-weight-body: 400;--type-weight-medium: 500;--type-weight-semibold: 600;--type-line-height-body: 1.7;--type-line-height-heading: 1.2;--type-line-height-code: 1.75;--type-letter-spacing-heading: -.02em;--type-letter-spacing-eyebrow: .14em;--type-prose-body: 20px;--type-prose-body-small: 18px;--type-prose-h1: clamp(1.75rem, 3.5vw, 2.5rem);--type-prose-h2: clamp(1.375rem, 2.5vw, 1.75rem);--type-prose-h3: clamp(1.125rem, 2vw, 1.375rem);--type-prose-code: 17px;--type-prose-line-height: 1.8;--type-prose-measure: 75%;--type-prose-measure-mobile: 92%;--sp-0: 0;--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.25rem;--sp-6: 1.5rem;--sp-8: 2rem;--sp-10: 2.5rem;--sp-12: 3rem;--sp-16: 4rem;--sp-18: 4.5rem;--sp-20: 5rem;--radius-none: 0;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 10px;--radius-xl: 12px;--radius-full: 100px;--transition-fast: .15s ease;--transition-normal: .2s ease;--transition-slow: .25s ease;--animation-reveal-duration: .5s;--animation-reveal-easing: cubic-bezier(.22, 1, .36, 1);--animation-gradient-duration: 6s;--backgrounds-dots: radial-gradient(circle, rgba(255,255,255,.06) 1px, transparent 1px);--backgrounds-grid: linear-gradient(rgba(255,255,255,.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.03) 1px, transparent 1px);--backgrounds-noise: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='256' height='256' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");--backgrounds-hex: url("data:image/svg+xml,%3Csvg width='60' height='52' viewBox='0 0 60 52' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 0 L60 15 L60 37 L30 52 L0 37 L0 15Z' fill='none' stroke='rgba(255,255,255,0.03)' stroke-width='0.5'/%3E%3C/svg%3E");--backgrounds-diagonal: repeating-linear-gradient(-45deg, transparent, transparent 28px, rgba(255,255,255,.02) 28px, rgba(255,255,255,.02) 29px);--backgrounds-orbs: radial-gradient(ellipse 600px 400px at 15% 20%, rgba(4,78,244,.08) 0%, transparent 70%), radial-gradient(ellipse 500px 350px at 85% 70%, rgba(247,42,114,.06) 0%, transparent 70%), radial-gradient(ellipse 400px 300px at 50% 50%, rgba(96,27,230,.05) 0%, transparent 70%);--backgrounds-rings: radial-gradient(circle 300px at 25% 35%, transparent 60%, rgba(4,78,244,.04) 60%, rgba(4,78,244,.04) 61%, transparent 61%), radial-gradient(circle 200px at 75% 60%, transparent 60%, rgba(247,42,114,.03) 60%, rgba(247,42,114,.03) 61%, transparent 61%), radial-gradient(circle 250px at 50% 80%, transparent 60%, rgba(96,27,230,.03) 60%, rgba(96,27,230,.03) 61%, transparent 61%);--z-index-base: 1;--z-index-navbar: 100;--z-index-overlay: 200;--z-index-modal: 300;--breakpoint-sm: 400px;--breakpoint-md: 768px;--breakpoint-lg: 1024px;--breakpoint-xl: 1080px;--container-max-width: 1080px;--container-padding: 2rem;--container-padding-mobile: 1.25rem;--tok-string: #40E0D0;--tok-keyword: #6e9eff;--tok-property: #ffffff;--tok-operator: #FFD700;--tok-comment: #898995;--tok-number: #ff6da0;--tok-function: #40E0D0;--tok-value: #d4d4d8;--tok-decorator: #6e9eff;--tok-type: #ff6da0;--fill-blue: #044EF4;--fill-fuchsia: #F72A72;--fill-turquoise: #40E0D0;--fill-gold: #FFD700;--cb-bg: #1e1e1f;--cb-fg: #d4d4d8;--cb-border: rgba(255, 255, 255, .07);--cb-label: #73737e;--cb-tab-default: #73737e;--cb-tab-hover: #e8e8ec;--cb-tab-active: #40E0D0}:root,[data-theme=dark]{--sw-white: #ffffff;--sw-gray-50: #f5f5f7;--sw-gray-100: #e8e8ec;--sw-gray-200: #c8c8cf;--sw-gray-300: #a0a0aa;--sw-gray-400: #73737e;--sw-gray-500: #333333;--sw-gray-600: #262630;--sw-gray-700: #1a1a2e;--sw-gray-800: #15152a;--sw-gray-900: #111118;--sw-black: #0a0a12;--bg-page: #0e0e18;--bg-surface: #181a28;--bg-surface-raised: #222436;--bg-overlay: rgba(14, 14, 24, .94);--bg-subtle: rgba(255, 255, 255, .03);--bg-gradient: linear-gradient(135deg, #0a0a12 0%, #0e1028 35%, #0c2060 100%);--bg-gradient-slide: linear-gradient(90deg, #010915 0%, #102A4A 45%, #274A83 100%);--fg-default: #f0f0f4;--fg-secondary: #e8e8ec;--fg-muted: #a0a0aa;--fg-subtle: #73737e;--fg-on-color: #ffffff;--fg-on-gold: #0a0a12;--fg-headings: #f0f0f4;--fg-emphasis: #40E0D0;--fg-emphasis-small: #40E0D0;--border-default: rgba(255, 255, 255, .12);--border-strong: rgba(255, 255, 255, .15);--code-bg: rgba(255, 255, 255, .06);--code-fg: #40E0D0;--badge-bg: rgb(23, 14, 23);--badge-border: rgba(255, 255, 255, .2);--badge-text-fuchsia: #ff5a9e;--badge-text-blue: #7aabff;--badge-text-turquoise: #6aeee0;--badge-text-gold: #ffe44d;--callout-info-bg: rgba(4, 78, 244, .06);--callout-info-border: rgba(4, 78, 244, .18);--callout-warn-bg: rgba(255, 215, 0, .04);--callout-warn-border: rgba(255, 215, 0, .16);--callout-danger-bg: rgba(247, 42, 114, .06);--callout-danger-border: rgba(247, 42, 114, .18);--callout-success-bg: rgba(64, 224, 208, .06);--callout-success-border: rgba(64, 224, 208, .18);--litbar-fuchsia-glow: 0 0 8px 1px rgba(247, 42, 114, .4), 0 0 30px 4px rgba(247, 42, 114, .12);--litbar-fuchsia-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(247, 42, 114, .06) 0%, transparent 100%);--litbar-blue-glow: 0 0 8px 1px rgba(4, 78, 244, .5), 0 0 30px 4px rgba(4, 78, 244, .12);--litbar-blue-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(4, 78, 244, .07) 0%, transparent 100%);--litbar-turquoise-glow: 0 0 8px 1px rgba(64, 224, 208, .35), 0 0 30px 4px rgba(64, 224, 208, .08);--litbar-turquoise-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(64, 224, 208, .05) 0%, transparent 100%);--litbar-gold-glow: 0 0 8px 1px rgba(255, 215, 0, .35), 0 0 30px 4px rgba(255, 215, 0, .08);--litbar-gold-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(255, 215, 0, .04) 0%, transparent 100%);--shadow-glow-fuchsia: 0 0 20px rgba(247, 42, 114, .25);--shadow-glow-fuchsia-soft: 0 4px 40px rgba(247, 42, 114, .08);--shadow-glow-blue: 0 0 20px rgba(4, 78, 244, .25);--shadow-glow-blue-soft: 0 4px 40px rgba(4, 78, 244, .08);--shadow-glow-turquoise-soft: 0 4px 40px rgba(64, 224, 208, .06);--shadow-md: 0 4px 16px rgba(0, 0, 0, .5);--interactive-button-primary-bg: #044EF4;--interactive-button-primary-text: #ffffff;--interactive-button-primary-hover: #0342cf;--interactive-button-primary-active: #022da8;--interactive-button-secondary-bg: transparent;--interactive-button-secondary-text: #ffffff;--interactive-button-secondary-border: rgba(255, 255, 255, .15);--interactive-button-secondary-hover: rgba(255, 255, 255, .06);--interactive-button-ghost-text: #e8e8ec;--interactive-button-ghost-hover: rgba(255, 255, 255, .06);--interactive-button-destructive-bg: #dc2626;--interactive-button-destructive-text: #ffffff;--interactive-button-destructive-hover: #b91c1c;--interactive-button-disabled-bg: #333338;--interactive-button-disabled-text: #73737e;--interactive-input-bg: #2a2a2e;--interactive-input-text: #ffffff;--interactive-input-placeholder: #73737e;--interactive-input-border: rgba(255, 255, 255, .15);--interactive-input-border-focus: #044EF4;--interactive-input-focus-ring: 0 0 0 3px rgba(4, 78, 244, .3);--interactive-input-error-border: #ef4444;--interactive-input-disabled-bg: #1e1e1f;--interactive-input-disabled-text: #73737e;--interactive-status-success: #22c55e;--interactive-status-success-soft: rgba(34, 197, 94, .12);--interactive-status-warning: #FFD700;--interactive-status-warning-soft: rgba(255, 215, 0, .12);--interactive-status-error: #ef4444;--interactive-status-error-soft: rgba(239, 68, 68, .12);--interactive-status-info: #044EF4;--interactive-status-info-soft: rgba(4, 78, 244, .12);--interactive-link-default: #40E0D0;--interactive-link-hover: #F72A72;--interactive-link-visited: #a0a0aa;--interactive-toggle-track-off: #333338;--interactive-toggle-track-on: #044EF4;--interactive-toggle-thumb: #ffffff;--interactive-skeleton-base: #2a2a2e;--interactive-skeleton-shimmer: #333338;--interactive-tooltip-bg: #ffffff;--interactive-tooltip-text: #1e1e1f;--interactive-dropdown-bg: #2a2a2e;--interactive-dropdown-hover: #333338;--interactive-dropdown-border: rgba(255, 255, 255, .15);--interactive-dropdown-separator: rgba(255, 255, 255, .07);--interactive-table-header-bg: transparent;--interactive-table-header-text: #F72A72;--interactive-table-row-hover: rgba(255, 255, 255, .03);--interactive-table-border: rgba(255, 255, 255, .07);--interactive-tab-default: #a0a0aa;--interactive-tab-active: #40E0D0;--interactive-tab-hover: #ffffff;--interactive-tab-indicator: #044EF4}[data-theme=light]{--sw-white: #ffffff;--sw-gray-50: #F6F6F4;--sw-gray-100: #ECECEA;--sw-gray-200: #D4D4D2;--sw-gray-300: #A8A8A6;--sw-gray-400: #737371;--sw-gray-500: #52524F;--sw-gray-600: #3A3A38;--sw-gray-700: #272725;--sw-gray-800: #1A1A18;--sw-black: #0D0D0C;--bg-page: #FAFBFC;--bg-surface: #F3F4F6;--bg-surface-raised: #E8EAF0;--bg-overlay: rgba(250, 251, 252, .94);--bg-subtle: rgba(0, 0, 0, .02);--fg-default: #1A1A18;--fg-secondary: #3A3A38;--fg-muted: #737371;--fg-subtle: #A8A8A6;--fg-on-color: #FAFBFC;--fg-on-gold: #1A1A18;--fg-headings: #070c2d;--fg-emphasis: #F72A72;--fg-emphasis-small: #AB0A42;--border-default: rgba(0, 0, 0, .1);--border-strong: rgba(0, 0, 0, .18);--code-bg: rgba(0, 0, 0, .06);--code-fg: #044EF4;--badge-bg: #ECECEA;--badge-border: rgba(0, 0, 0, .12);--badge-text-fuchsia: #BE1758;--badge-text-blue: #0340C0;--badge-text-turquoise: #0A6E64;--badge-text-gold: #6B5600;--shadow-glow-fuchsia: 0 0 20px rgba(247, 42, 114, .15);--shadow-glow-fuchsia-soft: 0 4px 40px rgba(247, 42, 114, .05);--shadow-glow-blue: 0 0 20px rgba(4, 78, 244, .15);--shadow-glow-blue-soft: 0 4px 40px rgba(4, 78, 244, .05);--shadow-glow-turquoise-soft: 0 4px 40px rgba(64, 224, 208, .04);--shadow-md: 0 4px 16px rgba(0, 0, 0, .08);--callout-info-bg: rgba(4, 78, 244, .06);--callout-info-border: rgba(4, 78, 244, .18);--callout-warn-bg: rgba(255, 215, 0, .04);--callout-warn-border: rgba(255, 215, 0, .16);--callout-danger-bg: rgba(247, 42, 114, .06);--callout-danger-border: rgba(247, 42, 114, .18);--callout-success-bg: rgba(64, 224, 208, .06);--callout-success-border: rgba(64, 224, 208, .18);--litbar-fuchsia-glow: 0 0 8px 1px rgba(247, 42, 114, .4), 0 0 30px 4px rgba(247, 42, 114, .12);--litbar-fuchsia-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(247, 42, 114, .06) 0%, transparent 100%);--litbar-blue-glow: 0 0 8px 1px rgba(4, 78, 244, .5), 0 0 30px 4px rgba(4, 78, 244, .12);--litbar-blue-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(4, 78, 244, .07) 0%, transparent 100%);--litbar-turquoise-glow: 0 0 8px 1px rgba(64, 224, 208, .35), 0 0 30px 4px rgba(64, 224, 208, .08);--litbar-turquoise-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(64, 224, 208, .05) 0%, transparent 100%);--litbar-gold-glow: 0 0 8px 1px rgba(255, 215, 0, .35), 0 0 30px 4px rgba(255, 215, 0, .08);--litbar-gold-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(255, 215, 0, .04) 0%, transparent 100%);--interactive-button-primary-bg: #044EF4;--interactive-button-primary-text: #ffffff;--interactive-button-primary-hover: #0342cf;--interactive-button-primary-active: #022da8;--interactive-button-secondary-bg: transparent;--interactive-button-secondary-text: #1E1D1B;--interactive-button-secondary-border: rgba(0, 0, 0, .18);--interactive-button-secondary-hover: rgba(0, 0, 0, .04);--interactive-button-ghost-text: #3E3B37;--interactive-button-ghost-hover: rgba(0, 0, 0, .04);--interactive-button-destructive-bg: #dc2626;--interactive-button-destructive-text: #ffffff;--interactive-button-destructive-hover: #b91c1c;--interactive-button-disabled-bg: #ECECEA;--interactive-button-disabled-text: #A8A8A6;--interactive-input-bg: #ffffff;--interactive-input-text: #1A1A18;--interactive-input-placeholder: #A8A8A6;--interactive-input-border: rgba(0, 0, 0, .18);--interactive-input-border-focus: #044EF4;--interactive-input-focus-ring: 0 0 0 3px rgba(4, 78, 244, .2);--interactive-input-error-border: #dc2626;--interactive-input-disabled-bg: #F6F6F4;--interactive-input-disabled-text: #A8A8A6;--interactive-status-success: #16a34a;--interactive-status-success-soft: rgba(22, 163, 74, .08);--interactive-status-warning: #a16207;--interactive-status-warning-soft: rgba(161, 98, 7, .08);--interactive-status-error: #dc2626;--interactive-status-error-soft: rgba(220, 38, 38, .08);--interactive-status-info: #044EF4;--interactive-status-info-soft: rgba(4, 78, 244, .08);--interactive-link-default: #044EF4;--interactive-link-hover: #F72A72;--interactive-link-visited: #737371;--interactive-toggle-track-off: #D4D4D2;--interactive-toggle-track-on: #044EF4;--interactive-toggle-thumb: #ffffff;--interactive-skeleton-base: #F6F6F4;--interactive-skeleton-shimmer: #ECECEA;--interactive-tooltip-bg: #1A1A18;--interactive-tooltip-text: #FBFBFA;--interactive-dropdown-bg: #ffffff;--interactive-dropdown-hover: #F6F6F4;--interactive-dropdown-border: rgba(0, 0, 0, .1);--interactive-dropdown-separator: rgba(0, 0, 0, .06);--interactive-table-header-bg: #044EF4;--interactive-table-header-text: #ffffff;--interactive-table-row-hover: rgba(0, 0, 0, .02);--interactive-table-border: rgba(0, 0, 0, .1);--interactive-tab-default: #737371;--interactive-tab-active: #F72A72;--interactive-tab-hover: #1A1A18;--interactive-tab-indicator: #044EF4}@media(prefers-color-scheme:light){:root:not([data-theme]){--sw-white: #ffffff;--sw-gray-50: #F6F6F4;--sw-gray-100: #ECECEA;--sw-gray-200: #D4D4D2;--sw-gray-300: #A8A8A6;--sw-gray-400: #737371;--sw-gray-500: #52524F;--sw-gray-600: #3A3A38;--sw-gray-700: #272725;--sw-gray-800: #1A1A18;--sw-black: #0D0D0C;--bg-page: #FAFBFC;--bg-surface: #F3F4F6;--bg-surface-raised: #E8EAF0;--bg-overlay: rgba(250, 251, 252, .94);--bg-subtle: rgba(0, 0, 0, .02);--fg-default: #1A1A18;--fg-secondary: #3A3A38;--fg-muted: #737371;--fg-subtle: #A8A8A6;--fg-on-color: #FAFBFC;--fg-on-gold: #1A1A18;--fg-headings: #070c2d;--fg-emphasis: #F72A72;--fg-emphasis-small: #AB0A42;--border-default: rgba(0, 0, 0, .1);--border-strong: rgba(0, 0, 0, .18);--code-bg: rgba(0, 0, 0, .06);--code-fg: #044EF4;--badge-bg: #ECECEA;--badge-border: rgba(0, 0, 0, .12);--badge-text-fuchsia: #BE1758;--badge-text-blue: #0340C0;--badge-text-turquoise: #0A6E64;--badge-text-gold: #6B5600;--shadow-glow-fuchsia: 0 0 20px rgba(247, 42, 114, .15);--shadow-glow-fuchsia-soft: 0 4px 40px rgba(247, 42, 114, .05);--shadow-glow-blue: 0 0 20px rgba(4, 78, 244, .15);--shadow-glow-blue-soft: 0 4px 40px rgba(4, 78, 244, .05);--shadow-glow-turquoise-soft: 0 4px 40px rgba(64, 224, 208, .04);--shadow-md: 0 4px 16px rgba(0, 0, 0, .08);--callout-info-bg: rgba(4, 78, 244, .06);--callout-info-border: rgba(4, 78, 244, .18);--callout-warn-bg: rgba(255, 215, 0, .04);--callout-warn-border: rgba(255, 215, 0, .16);--callout-danger-bg: rgba(247, 42, 114, .06);--callout-danger-border: rgba(247, 42, 114, .18);--callout-success-bg: rgba(64, 224, 208, .06);--callout-success-border: rgba(64, 224, 208, .18);--litbar-fuchsia-glow: 0 0 8px 1px rgba(247, 42, 114, .4), 0 0 30px 4px rgba(247, 42, 114, .12);--litbar-fuchsia-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(247, 42, 114, .06) 0%, transparent 100%);--litbar-blue-glow: 0 0 8px 1px rgba(4, 78, 244, .5), 0 0 30px 4px rgba(4, 78, 244, .12);--litbar-blue-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(4, 78, 244, .07) 0%, transparent 100%);--litbar-turquoise-glow: 0 0 8px 1px rgba(64, 224, 208, .35), 0 0 30px 4px rgba(64, 224, 208, .08);--litbar-turquoise-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(64, 224, 208, .05) 0%, transparent 100%);--litbar-gold-glow: 0 0 8px 1px rgba(255, 215, 0, .35), 0 0 30px 4px rgba(255, 215, 0, .08);--litbar-gold-cone: radial-gradient(ellipse 70% 60% at 50% 0%, rgba(255, 215, 0, .04) 0%, transparent 100%);--interactive-button-primary-bg: #044EF4;--interactive-button-primary-text: #ffffff;--interactive-button-primary-hover: #0342cf;--interactive-button-primary-active: #022da8;--interactive-button-secondary-bg: transparent;--interactive-button-secondary-text: #1E1D1B;--interactive-button-secondary-border: rgba(0, 0, 0, .18);--interactive-button-secondary-hover: rgba(0, 0, 0, .04);--interactive-button-ghost-text: #3E3B37;--interactive-button-ghost-hover: rgba(0, 0, 0, .04);--interactive-button-destructive-bg: #dc2626;--interactive-button-destructive-text: #ffffff;--interactive-button-destructive-hover: #b91c1c;--interactive-button-disabled-bg: #ECECEA;--interactive-button-disabled-text: #A8A8A6;--interactive-input-bg: #ffffff;--interactive-input-text: #1A1A18;--interactive-input-placeholder: #A8A8A6;--interactive-input-border: rgba(0, 0, 0, .18);--interactive-input-border-focus: #044EF4;--interactive-input-focus-ring: 0 0 0 3px rgba(4, 78, 244, .2);--interactive-input-error-border: #dc2626;--interactive-input-disabled-bg: #F6F6F4;--interactive-input-disabled-text: #A8A8A6;--interactive-status-success: #16a34a;--interactive-status-success-soft: rgba(22, 163, 74, .08);--interactive-status-warning: #a16207;--interactive-status-warning-soft: rgba(161, 98, 7, .08);--interactive-status-error: #dc2626;--interactive-status-error-soft: rgba(220, 38, 38, .08);--interactive-status-info: #044EF4;--interactive-status-info-soft: rgba(4, 78, 244, .08);--interactive-link-default: #044EF4;--interactive-link-hover: #F72A72;--interactive-link-visited: #737371;--interactive-toggle-track-off: #D4D4D2;--interactive-toggle-track-on: #044EF4;--interactive-toggle-thumb: #ffffff;--interactive-skeleton-base: #F6F6F4;--interactive-skeleton-shimmer: #ECECEA;--interactive-tooltip-bg: #1A1A18;--interactive-tooltip-text: #FBFBFA;--interactive-dropdown-bg: #ffffff;--interactive-dropdown-hover: #F6F6F4;--interactive-dropdown-border: rgba(0, 0, 0, .1);--interactive-dropdown-separator: rgba(0, 0, 0, .06);--interactive-table-header-bg: #044EF4;--interactive-table-header-text: #ffffff;--interactive-table-row-hover: rgba(0, 0, 0, .02);--interactive-table-border: rgba(0, 0, 0, .1);--interactive-tab-default: #737371;--interactive-tab-active: #F72A72;--interactive-tab-hover: #1A1A18;--interactive-tab-indicator: #044EF4}}`,Vb="https://fonts.googleapis.com/css2";function wn(t,e={}){if(typeof document>"u")return;const i=e.weights??[400],r=e.display??"swap",n=t.replace(/\s+/g,"+"),s=e.italic?`ital,wght@${i.flatMap(c=>[`0,${c}`,`1,${c}`]).join(";")}`:`wght@${i.join(";")}`,a=`${Vb}?family=${n}:${s}&display=${r}`;if(document.querySelector(`link[href="${a}"]`))return;const o=document.createElement("link");o.rel="stylesheet",o.href=a,document.head.appendChild(o)}let nl=!1;function sl(){if(typeof document>"u"||nl)return;nl=!0;const t=new CSSStyleSheet;t.replaceSync(zb),document.adoptedStyleSheets=[...document.adoptedStyleSheets,t]}function al(){wn("Lexend",{weights:[300,400,500,600,700]}),wn("Instrument Sans",{weights:[400,500,600,700]}),wn("JetBrains Mono",{weights:[400,500]})}const ol=G(),Hb=["text","markdown","code","html"];function Sn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function jb(t){if(!t)return{};try{const e=JSON.parse(t);return Sn(e)?e:(ol.warn("[CallWidget] user-variables must be a JSON object; ignoring"),{})}catch(e){return ol.warn("[CallWidget] Failed to parse user-variables JSON; ignoring",e),{}}}function Wb(t,e=()=>new Date().toISOString()){const i=Sn(t.capabilities)?t.capabilities:{},r=Sn(t.metadata)?t.metadata:{},n=Sn(r.widget)?r.widget:{};return{...t,capabilities:{display_content:{formats:[...Hb]},...i},metadata:{...r,widget:{opened_at:e(),...n}}}}const Gb=["c2c_","c2t_"],qb="embeds.signalwire.com";function Xb(t){try{return new URL(t.includes("://")?t:`https://${t}`).hostname}catch{return t}}function Yb(t){return Gb.some(e=>t.startsWith(e))}function Kb(t,e){return Yb(t)?new Nc(Xb(e||qb),t):new Uc({token:t})}const Zb=ae`
|
|
2154
2154
|
:host {
|
|
2155
2155
|
display: block;
|
|
2156
2156
|
height: 100%;
|
|
@@ -2170,7 +2170,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2170
2170
|
height: 100%;
|
|
2171
2171
|
overflow: hidden;
|
|
2172
2172
|
}
|
|
2173
|
-
`;function
|
|
2173
|
+
`;function Qb(t){var e,i,r,n;return I`
|
|
2174
2174
|
<div class="call-view-wrapper">
|
|
2175
2175
|
<sw-ui-call-layout
|
|
2176
2176
|
?transcript=${t.transcription}
|
|
@@ -2181,7 +2181,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2181
2181
|
|
|
2182
2182
|
<sw-call-media slot="video"></sw-call-media>
|
|
2183
2183
|
|
|
2184
|
-
${t.hasLayoutLayers?
|
|
2184
|
+
${t.hasLayoutLayers?W:I`<sw-local-camera slot="floating-video" mirror></sw-local-camera>`}
|
|
2185
2185
|
|
|
2186
2186
|
<sw-call-controls
|
|
2187
2187
|
slot="controls"
|
|
@@ -2209,20 +2209,20 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2209
2209
|
@sw-content-drawer-close=${t.onDrawerClose}
|
|
2210
2210
|
></sw-ui-content-drawer>
|
|
2211
2211
|
</div>
|
|
2212
|
-
`}function
|
|
2212
|
+
`}function Jb(){return I`
|
|
2213
2213
|
<div class="call-view-wrapper">
|
|
2214
2214
|
<sw-ui-call-layout loading shadow style="--sw-call-layout-radius: 10px;">
|
|
2215
2215
|
<slot name="background" slot="background"></slot>
|
|
2216
2216
|
</sw-ui-call-layout>
|
|
2217
2217
|
</div>
|
|
2218
|
-
`}var
|
|
2218
|
+
`}var $b=Object.defineProperty,em=Object.getOwnPropertyDescriptor,We=(t,e,i,r)=>{for(var n=r>1?void 0:r?em(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&$b(e,i,n),n};const Cn=G();l.SwCallWidget=class extends ee{constructor(){super(...arguments),this.token="",this.host="",this.destination="",this.modal=!1,this.transcription=!1,this.allowIncomingCalls=!1,this.audioOnly=!1,this.userVariables="",this.disableAutoTheme=!1,this.disableAutoFonts=!1,this._call=null,this._connecting=!1,this._hasLayoutLayers=!1,this._drawer=null,this._callState=new Rs(this),this._devices=new Ps(this),this._transcript=new xr(this),this._userEventCtrl=new Yc(this),this._incomingCalls=new Ea(this),this._client=null,this._subs=[],this._pendingIncoming=!1,this._handleIncomingCall=async e=>{if(!(this._call||this._connecting||this._pendingIncoming)){this._pendingIncoming=!0;try{const i=e.callerName||e.callerNumber||"Unknown Caller";await Rr({title:"Incoming Call",description:`${i} is calling`,type:"confirm"})?(this._wireCall(e.call),e.call.answer()):e.call.reject()}finally{this._pendingIncoming=!1}}},this._onDisplayContent=e=>{this._drawer=e.detail,this._transcript.injectEntry({id:crypto.randomUUID(),type:"system",state:"complete",text:e.detail.title??"Agent shared content",meta:{displayContent:e.detail}})},this._onDrawerClose=()=>{this._drawer=null},this._onModalClose=e=>{if(this._call||this._connecting){this.hangup();return}this.destination||e.preventDefault()}}connectedCallback(){super.connectedCallback(),this.disableAutoTheme||sl(),this.disableAutoFonts||al()}updated(e){super.updated(e),e.has("token")||e.has("host")?this.token?this._refreshClient():e.has("host")&&Cn.debug("[SwCallWidget] host changed but token is empty; skipping client refresh until token is set"):e.has("allowIncomingCalls")&&this._client&&(this.allowIncomingCalls?this._connectIncomingCalls():this._incomingCalls.disconnect())}disconnectedCallback(){super.disconnectedCallback(),this._destroyClient()}_destroyClient(){if(this._subs.forEach(e=>e.unsubscribe()),this._subs=[],this._incomingCalls.disconnect(),this._devices.disconnectCall(),this._devices.disconnect(),this._callState.disconnect(),this._transcript.setCall(void 0),this._client){try{this._client.destroy()}catch(e){Cn.error("[SwCallWidget] Error destroying client:",e)}this._client=null}this._call=null,this._connecting=!1}_refreshClient(){this._destroyClient();try{this._client=new Fc(Kb(this.token,this.host)),this._devices.connectDevices(this._client),this.allowIncomingCalls&&this._connectIncomingCalls()}catch(e){const i=e instanceof Error?e.message:"Failed to initialise client";Cn.error("[SwCallWidget] Failed to initialise client:",e),Rr({title:"Client Error",description:i,type:"alert"})}}async dial(){if(!this._client||this._connecting||this._call)return;if(!this.destination){Rr({title:"Call Error",description:"No destination configured.",type:"alert"});return}this._connecting=!0,this.dispatchEvent(new CustomEvent("sw-dial",{detail:{destination:this.destination},bubbles:!0,composed:!0}));const e=!this.audioOnly;try{const i=await new Promise((r,n)=>{const s=this._client.isConnected$.pipe(z(a=>a),po()).subscribe({next:()=>{const a=Wb(jb(this.userVariables));this._client.dial(this.destination,{audio:!0,video:e,receiveAudio:!0,receiveVideo:e,userVariables:a}).then(r).catch(n)},error:n});this._subs.push(s)});this._wireCall(i)}catch(i){const r=i instanceof Error?i.message:"Failed to connect call";Cn.error("[SwCallWidget] Dial failed:",i),Rr({title:"Call Failed",description:r,type:"alert"})}finally{this._connecting=!1}}async hangup(){this._call&&await this._call.hangup()}_connectIncomingCalls(){this._client&&(this._incomingCalls.onIncomingCall=this._handleIncomingCall,this._subs.push(this._client.isConnected$.pipe(z(Boolean),po()).subscribe(()=>{this._client&&this._incomingCalls.connect(this._client.session.incomingCalls$)})))}_wireCall(e){this._call=e,this._callState.connect(e),this._devices.connectCall(e),this._transcript.setCall(e),this._userEventCtrl.setCall(e),this.addEventListener("sw-display-content",this._onDisplayContent),this._devices.refreshDevices(),this._subs.push(e.layoutLayers$.subscribe(i=>{this._hasLayoutLayers=i.length>0})),this._subs.push(e.status$.subscribe(i=>{(i==="disconnected"||i==="destroyed"||i==="failed")&&this._unwireCall()}))}_unwireCall(){const e=this._call,i=e==null?void 0:e.status;this._callState.disconnect(),this._devices.disconnectCall(),this._transcript.setCall(void 0),this._userEventCtrl.setCall(void 0),this.removeEventListener("sw-display-content",this._onDisplayContent),this._call=null,this._connecting=!1,this._hasLayoutLayers=!1,this._drawer=null,e&&this.dispatchEvent(new CustomEvent("sw-call-ended",{detail:{status:i},bubbles:!0,composed:!0}))}_onSlotChange(e){e.target.assignedElements({flatten:!0}).forEach(r=>{r instanceof HTMLElement&&r.addEventListener("click",()=>this.dial())})}_onHangUp(){this.hangup()}_onFullscreenToggle(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("sw-ui-call-layout");e&&e.toggleFullscreen()}_onTranscriptToggle(){this.transcription=!this.transcription}render(){const e=!!(this._call||this._connecting),i=this._call?Qb({transcription:this.transcription,hasLayoutLayers:this._hasLayoutLayers,drawer:this._drawer,transcriptEntries:this._transcript.state.entries,onHangUp:this._onHangUp,onFullscreenToggle:this._onFullscreenToggle,onTranscriptToggle:this._onTranscriptToggle,onDrawerClose:this._onDrawerClose}):this._connecting?Jb():W;return this.modal?I`
|
|
2219
2219
|
<slot @slotchange=${this._onSlotChange}></slot>
|
|
2220
2220
|
<sw-ui-modal ?open=${e} @sw-modal-close=${this._onModalClose}>
|
|
2221
2221
|
<sw-ui-responsive-container>
|
|
2222
|
-
${i!==
|
|
2222
|
+
${i!==W?i:W}
|
|
2223
2223
|
</sw-ui-responsive-container>
|
|
2224
2224
|
</sw-ui-modal>
|
|
2225
|
-
`:i!==
|
|
2225
|
+
`:i!==W?i:I`<slot @slotchange=${this._onSlotChange}></slot>`}},l.SwCallWidget.styles=[ut,Zb],We([E({type:String})],l.SwCallWidget.prototype,"token",2),We([E({type:String})],l.SwCallWidget.prototype,"host",2),We([E({type:String})],l.SwCallWidget.prototype,"destination",2),We([E({type:Boolean,reflect:!0})],l.SwCallWidget.prototype,"modal",2),We([E({type:Boolean,reflect:!0})],l.SwCallWidget.prototype,"transcription",2),We([E({type:Boolean,reflect:!0,attribute:"allow-incoming-calls"})],l.SwCallWidget.prototype,"allowIncomingCalls",2),We([E({type:Boolean,reflect:!0,attribute:"audio-only"})],l.SwCallWidget.prototype,"audioOnly",2),We([E({type:String,attribute:"user-variables"})],l.SwCallWidget.prototype,"userVariables",2),We([E({type:Boolean,reflect:!0,attribute:"disable-auto-theme"})],l.SwCallWidget.prototype,"disableAutoTheme",2),We([E({type:Boolean,reflect:!0,attribute:"disable-auto-fonts"})],l.SwCallWidget.prototype,"disableAutoFonts",2),We([_()],l.SwCallWidget.prototype,"_call",2),We([_()],l.SwCallWidget.prototype,"_connecting",2),We([_()],l.SwCallWidget.prototype,"_hasLayoutLayers",2),We([_()],l.SwCallWidget.prototype,"_drawer",2),l.SwCallWidget=We([le("sw-call-widget")],l.SwCallWidget);var tm=Object.defineProperty,im=Object.getOwnPropertyDescriptor,Yi=(t,e,i,r)=>{for(var n=r>1?void 0:r?im(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&tm(e,i,n),n};l.SwClickToCall=class extends ee{constructor(){super(...arguments),this.token="",this.host="",this.destination="",this.label="Call",this.audioOnly=!1}render(){return I`
|
|
2226
2226
|
<sw-call-widget
|
|
2227
2227
|
modal
|
|
2228
2228
|
transcription
|
|
@@ -2237,7 +2237,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2237
2237
|
${this.label}
|
|
2238
2238
|
</button>
|
|
2239
2239
|
</sw-call-widget>
|
|
2240
|
-
`}},l.SwClickToCall.styles=[
|
|
2240
|
+
`}},l.SwClickToCall.styles=[ut,ae`
|
|
2241
2241
|
:host {
|
|
2242
2242
|
display: inline-block;
|
|
2243
2243
|
font-family: var(--type-family-body);
|
|
@@ -2271,7 +2271,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2271
2271
|
.call-button sw-ui-icon {
|
|
2272
2272
|
pointer-events: none;
|
|
2273
2273
|
}
|
|
2274
|
-
`],
|
|
2274
|
+
`],Yi([E({type:String})],l.SwClickToCall.prototype,"token",2),Yi([E({type:String})],l.SwClickToCall.prototype,"host",2),Yi([E({type:String})],l.SwClickToCall.prototype,"destination",2),Yi([E({type:String})],l.SwClickToCall.prototype,"label",2),Yi([E({type:Boolean,reflect:!0,attribute:"audio-only"})],l.SwClickToCall.prototype,"audioOnly",2),l.SwClickToCall=Yi([le("sw-click-to-call")],l.SwClickToCall);var rm=Object.defineProperty,nm=Object.getOwnPropertyDescriptor,qt=(t,e,i,r)=>{for(var n=r>1?void 0:r?nm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&rm(e,i,n),n};l.SwDirectory=class extends ee{constructor(){super(...arguments),this.directory=null,this.selectedAddress=null,this.searchQuery="",this.addresses=[],this.loading=!1,this.hasMore=!1,this.subscriptions=[],this.searchDebounceTimer=null,this.intersectionObserver=null,this.isAutoLoadingForSearch=!1}connectedCallback(){super.connectedCallback(),this.subscribeToDirectory()}disconnectedCallback(){super.disconnectedCallback(),this.cleanup()}subscribeToDirectory(){if(this.directory){if(this.directory.addresses$){const e=this.directory.addresses$.subscribe(i=>{this.addresses=i});this.subscriptions.push(e)}if(this.directory.loading$){const e=this.directory.loading$.subscribe(i=>{this.loading=i});this.subscriptions.push(e)}if(this.directory.hasMore$){const e=this.directory.hasMore$.subscribe(i=>{this.hasMore=i});this.subscriptions.push(e)}this.directory.loadMore&&this.directory.loadMore()}}cleanup(){this.subscriptions.forEach(e=>e.unsubscribe()),this.subscriptions=[],this.searchDebounceTimer&&clearTimeout(this.searchDebounceTimer),this.intersectionObserver&&(this.intersectionObserver.disconnect(),this.intersectionObserver=null)}firstUpdated(){this.setupInfiniteScroll()}setupInfiniteScroll(){var i,r;const e=(i=this.shadowRoot)==null?void 0:i.querySelector(".scroll-sentinel");e&&(this.intersectionObserver=new IntersectionObserver(n=>{const s=n[0];s!=null&&s.isIntersecting&&this.hasMore&&!this.loading&&this.handleLoadMore()},{root:(r=this.shadowRoot)==null?void 0:r.querySelector(".list"),rootMargin:"100px",threshold:0}),this.intersectionObserver.observe(e))}updated(e){super.updated(e),e.has("directory")&&(this.cleanup(),this.subscribeToDirectory()),this.intersectionObserver||this.setupInfiniteScroll(),(e.has("addresses")||e.has("searchQuery")||e.has("loading"))&&this.checkAutoLoadForSearch()}async checkAutoLoadForSearch(){this.searchQuery.trim()&&this.filteredAddresses.length===0&&this.hasMore&&!this.loading?(this.isAutoLoadingForSearch=!0,await this.handleLoadMore()):(this.filteredAddresses.length>0||!this.hasMore)&&(this.isAutoLoadingForSearch=!1)}get filteredAddresses(){if(!this.searchQuery.trim())return this.addresses;const e=this.searchQuery.toLowerCase();return this.addresses.filter(i=>i.name.toLowerCase().includes(e)||i.displayName&&i.displayName.toLowerCase().includes(e))}handleSearchInput(e){const i=e.target;this.searchDebounceTimer&&clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=window.setTimeout(()=>{this.searchQuery=i.value},200)}handleItemClick(e){this.selectedAddress=e,this.dispatchEvent(new CustomEvent("sw-address-select",{detail:{address:e},bubbles:!0,composed:!0}))}handleItemDoubleClick(e){this.handleDial(e)}handleDial(e){this.dispatchEvent(new CustomEvent("sw-dial",{detail:{address:e},bubbles:!0,composed:!0}))}async handleLoadMore(){var e;(e=this.directory)!=null&&e.loadMore&&await this.directory.loadMore()}renderAddressIcon(e){const i=e.type==="room"?"room":"person";return I`<sw-ui-icon name=${i} size="20"></sw-ui-icon>`}renderChannelIcons(e){const i=e.channels||{};return I`
|
|
2275
2275
|
<div class="item-channels">
|
|
2276
2276
|
<sw-ui-icon
|
|
2277
2277
|
name="mic-on"
|
|
@@ -2286,12 +2286,12 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2286
2286
|
title="Video"
|
|
2287
2287
|
></sw-ui-icon>
|
|
2288
2288
|
</div>
|
|
2289
|
-
`}renderLoadingIndicator(){return
|
|
2289
|
+
`}renderLoadingIndicator(){return I`
|
|
2290
2290
|
<div class="scroll-loading">
|
|
2291
2291
|
<div class="spinner"></div>
|
|
2292
2292
|
<span>${this.isAutoLoadingForSearch?"Searching...":"Loading more..."}</span>
|
|
2293
2293
|
</div>
|
|
2294
|
-
`}render(){const e=this.loading&&this.addresses.length===0,i=!this.loading&&this.filteredAddresses.length===0&&!this.hasMore,r=this.isAutoLoadingForSearch&&this.filteredAddresses.length===0;return
|
|
2294
|
+
`}render(){const e=this.loading&&this.addresses.length===0,i=!this.loading&&this.filteredAddresses.length===0&&!this.hasMore,r=this.isAutoLoadingForSearch&&this.filteredAddresses.length===0;return I`
|
|
2295
2295
|
<div class="container" part="container">
|
|
2296
2296
|
<div class="search" part="search">
|
|
2297
2297
|
<input
|
|
@@ -2304,8 +2304,8 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2304
2304
|
</div>
|
|
2305
2305
|
|
|
2306
2306
|
<div class="list" part="list" role="listbox">
|
|
2307
|
-
${e?
|
|
2308
|
-
${this.filteredAddresses.map(n=>{var s,a,o;return
|
|
2307
|
+
${e?I`<div class="loading">Loading...</div>`:r?this.renderLoadingIndicator():i?I`<div class="empty">No addresses found</div>`:I`
|
|
2308
|
+
${this.filteredAddresses.map(n=>{var s,a,o;return I`
|
|
2309
2309
|
<div
|
|
2310
2310
|
class="item ${((s=this.selectedAddress)==null?void 0:s.id)===n.id?"selected":""}"
|
|
2311
2311
|
part="item ${((a=this.selectedAddress)==null?void 0:a.id)===n.id?"item-selected":""}"
|
|
@@ -2340,7 +2340,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2340
2340
|
`}
|
|
2341
2341
|
</div>
|
|
2342
2342
|
</div>
|
|
2343
|
-
`}},l.SwDirectory.styles=[
|
|
2343
|
+
`}},l.SwDirectory.styles=[ut,ae`
|
|
2344
2344
|
:host {
|
|
2345
2345
|
display: block;
|
|
2346
2346
|
font-family: var(--type-family-body);
|
|
@@ -2547,7 +2547,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2547
2547
|
.dial-button sw-ui-icon {
|
|
2548
2548
|
pointer-events: none;
|
|
2549
2549
|
}
|
|
2550
|
-
`],
|
|
2550
|
+
`],qt([E({type:Object})],l.SwDirectory.prototype,"directory",2),qt([_()],l.SwDirectory.prototype,"selectedAddress",2),qt([_()],l.SwDirectory.prototype,"searchQuery",2),qt([_()],l.SwDirectory.prototype,"addresses",2),qt([_()],l.SwDirectory.prototype,"loading",2),qt([_()],l.SwDirectory.prototype,"hasMore",2),qt([_()],l.SwDirectory.prototype,"isAutoLoadingForSearch",2),l.SwDirectory=qt([le("sw-directory")],l.SwDirectory);const sm=ae`
|
|
2551
2551
|
:host {
|
|
2552
2552
|
display: inline-flex;
|
|
2553
2553
|
flex-direction: column;
|
|
@@ -2779,13 +2779,13 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2779
2779
|
opacity: 0.4;
|
|
2780
2780
|
cursor: not-allowed;
|
|
2781
2781
|
}
|
|
2782
|
-
`;var
|
|
2782
|
+
`;var am=Object.defineProperty,om=Object.getOwnPropertyDescriptor,et=(t,e,i,r)=>{for(var n=r>1?void 0:r?om(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&am(e,i,n),n};const An=G();l.SwDeviceSelector=class extends ee{constructor(){super(...arguments),this.showPreview=!1,this._videoStream=null,this._audioStream=null,this._testingSpeaker=!1,this._audioIn=[],this._videoIn=[],this._audioOut=[],this._selAudioIn=null,this._selVideoIn=null,this._selAudioOut=null,this._open=!1,this._subs=[],this._onDocumentClick=e=>{e.composedPath().includes(this)||(this._open=!1)}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._onDocumentClick),this._subscribe()}updated(e){super.updated(e),e.has("deviceController")&&(this._unsubscribe(),this._subscribe())}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._onDocumentClick),this._unsubscribe(),this._stopVideoPreview(),this._stopAudioPreview(),this._stopTestTone()}willUpdate(e){if(!this.showPreview){(e.has("showPreview")||e.has("_open"))&&(this._stopVideoPreview(),this._stopAudioPreview());return}const i=e.has("_open")&&this._open,r=e.has("_open")&&!this._open,n=e.has("_selVideoIn"),s=e.has("_selAudioIn");if(r){this._stopVideoPreview(),this._stopAudioPreview(),this._stopTestTone();return}this._open&&(i||n)&&this._selVideoIn&&this._startVideoPreview(this._selVideoIn.deviceId),this._open&&(i||s)&&this._selAudioIn&&this._startAudioPreview(this._selAudioIn.deviceId)}_subscribe(){const e=this.deviceController;e&&(this._subs.push(e.audioInputDevices$.subscribe(i=>{this._audioIn=i})),this._subs.push(e.videoInputDevices$.subscribe(i=>{this._videoIn=i})),this._subs.push(e.audioOutputDevices$.subscribe(i=>{this._audioOut=i})),e.selectedAudioInputDevice$&&this._subs.push(e.selectedAudioInputDevice$.subscribe(i=>{this._selAudioIn=i})),e.selectedVideoInputDevice$&&this._subs.push(e.selectedVideoInputDevice$.subscribe(i=>{this._selVideoIn=i})),e.selectedAudioOutputDevice$&&this._subs.push(e.selectedAudioOutputDevice$.subscribe(i=>{this._selAudioOut=i})))}_unsubscribe(){this._subs.forEach(e=>e.unsubscribe()),this._subs=[]}_toggle(e){e.stopPropagation(),this._open=!this._open}_selectMic(e){var r,n;const i=this._audioIn.find(s=>s.deviceId===e)??null;this._selAudioIn=i,(n=(r=this.deviceController)==null?void 0:r.selectAudioInputDevice)==null||n.call(r,i),i&&this._emitChange("microphone",i)}_selectCamera(e){var r,n;const i=this._videoIn.find(s=>s.deviceId===e)??null;this._selVideoIn=i,(n=(r=this.deviceController)==null?void 0:r.selectVideoInputDevice)==null||n.call(r,i),i&&this._emitChange("camera",i)}_selectSpeaker(e){var r,n;const i=this._audioOut.find(s=>s.deviceId===e)??null;this._selAudioOut=i,(n=(r=this.deviceController)==null?void 0:r.selectAudioOutputDevice)==null||n.call(r,i),i&&this._emitChange("speaker",i)}async _startVideoPreview(e){this._stopVideoPreview();try{this._videoStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:e}}})}catch(i){An.error("sw-device-selector: failed to start camera preview",i),this._videoStream=null}}_stopVideoPreview(){var e;(e=this._videoStream)==null||e.getTracks().forEach(i=>i.stop()),this._videoStream=null}async _startAudioPreview(e){this._stopAudioPreview();try{this._audioStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{exact:e}}})}catch(i){An.error("sw-device-selector: failed to start microphone preview",i),this._audioStream=null}}_stopAudioPreview(){var e;(e=this._audioStream)==null||e.getTracks().forEach(i=>i.stop()),this._audioStream=null}async _testSpeaker(){var r;if(this._testingSpeaker){this._stopTestTone();return}const e=new Audio(l.SwDeviceSelector._TEST_TONE_DATA_URI);e.loop=!0,this._testAudio=e;const i=(r=this._selAudioOut)==null?void 0:r.deviceId;if(i&&typeof e.setSinkId=="function")try{await e.setSinkId(i)}catch(n){An.error("sw-device-selector: setSinkId failed",n)}e.addEventListener("ended",()=>this._stopTestTone());try{await e.play(),this._testingSpeaker=!0}catch(n){An.error("sw-device-selector: failed to play test tone",n),this._stopTestTone()}}_stopTestTone(){this._testAudio&&(this._testAudio.pause(),this._testAudio.src="",this._testAudio=void 0),this._testingSpeaker=!1}_emitChange(e,i){this.dispatchEvent(new CustomEvent("sw-device-change",{detail:{type:e,device:i},bubbles:!0,composed:!0}))}_renderSection(e,i,r,n,s,a){return I`
|
|
2783
2783
|
<div class="section">
|
|
2784
2784
|
<div class="section-header">
|
|
2785
2785
|
<sw-ui-icon name=${e} size="13"></sw-ui-icon>
|
|
2786
2786
|
<span>${i}</span>
|
|
2787
2787
|
</div>
|
|
2788
|
-
${r.length===0?
|
|
2788
|
+
${r.length===0?I`<div class="no-devices">No devices found</div>`:r.map((o,c)=>I`
|
|
2789
2789
|
<div
|
|
2790
2790
|
class="device-item ${o.deviceId===n?"selected":""}"
|
|
2791
2791
|
role="option"
|
|
@@ -2798,22 +2798,22 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2798
2798
|
<span class="device-label">${o.label||`Device ${c+1}`}</span>
|
|
2799
2799
|
</div>
|
|
2800
2800
|
`)}
|
|
2801
|
-
${a??
|
|
2801
|
+
${a??W}
|
|
2802
2802
|
</div>
|
|
2803
|
-
`}_renderCameraPreview(){return this.showPreview?
|
|
2803
|
+
`}_renderCameraPreview(){return this.showPreview?I`
|
|
2804
2804
|
<div class="preview preview-camera" part="preview-camera">
|
|
2805
|
-
${this._videoStream?
|
|
2805
|
+
${this._videoStream?I`<sw-local-camera .stream=${this._videoStream} mirror></sw-local-camera>`:I`<div class="preview-empty">Starting camera…</div>`}
|
|
2806
2806
|
</div>
|
|
2807
|
-
`:null}_renderMicPreview(){return this.showPreview?
|
|
2807
|
+
`:null}_renderMicPreview(){return this.showPreview?I`
|
|
2808
2808
|
<div class="preview preview-mic" part="preview-mic">
|
|
2809
|
-
${this._audioStream?
|
|
2809
|
+
${this._audioStream?I`<sw-audio-level
|
|
2810
2810
|
.stream=${this._audioStream}
|
|
2811
2811
|
bars="9"
|
|
2812
2812
|
orientation="horizontal"
|
|
2813
2813
|
maxSize="22"
|
|
2814
|
-
></sw-audio-level>`:
|
|
2814
|
+
></sw-audio-level>`:I`<div class="preview-empty">Starting microphone…</div>`}
|
|
2815
2815
|
</div>
|
|
2816
|
-
`:null}_renderSpeakerPreview(){return this.showPreview?
|
|
2816
|
+
`:null}_renderSpeakerPreview(){return this.showPreview?I`
|
|
2817
2817
|
<div class="preview preview-speaker" part="preview-speaker">
|
|
2818
2818
|
<button
|
|
2819
2819
|
class="test-speaker"
|
|
@@ -2825,8 +2825,8 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2825
2825
|
<span>${this._testingSpeaker?"Stop test":"Test speaker"}</span>
|
|
2826
2826
|
</button>
|
|
2827
2827
|
</div>
|
|
2828
|
-
`:null}render(){var i,r,n;const e=this._audioIn.length>0||this._videoIn.length>0||this._audioOut.length>0;return
|
|
2829
|
-
${this._open?
|
|
2828
|
+
`:null}render(){var i,r,n;const e=this._audioIn.length>0||this._videoIn.length>0||this._audioOut.length>0;return I`
|
|
2829
|
+
${this._open?I`
|
|
2830
2830
|
<div
|
|
2831
2831
|
class="panel"
|
|
2832
2832
|
role="listbox"
|
|
@@ -2836,7 +2836,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2836
2836
|
${this._renderSection("camera-on","Camera",this._videoIn,(r=this._selVideoIn)==null?void 0:r.deviceId,s=>this._selectCamera(s),this._renderCameraPreview())}
|
|
2837
2837
|
${this._renderSection("speaker-on","Speaker",this._audioOut,(n=this._selAudioOut)==null?void 0:n.deviceId,s=>this._selectSpeaker(s),this._renderSpeakerPreview())}
|
|
2838
2838
|
</div>
|
|
2839
|
-
`:
|
|
2839
|
+
`:W}
|
|
2840
2840
|
|
|
2841
2841
|
<button
|
|
2842
2842
|
class="trigger"
|
|
@@ -2850,7 +2850,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2850
2850
|
<sw-ui-icon name="settings" size="22"></sw-ui-icon>
|
|
2851
2851
|
</button>
|
|
2852
2852
|
<span class="label">Devices</span>
|
|
2853
|
-
`}},l.SwDeviceSelector.styles=[
|
|
2853
|
+
`}},l.SwDeviceSelector.styles=[ut,sm],l.SwDeviceSelector._TEST_TONE_DATA_URI="data:audio/wav;base64,UklGRrQEAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YZAEAACAh46Sl5qcm5mWko2HgXp1cGxqaWlsb3R5gIaNk5icnp2bl5OOiIJ8dnFtamhoam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamlo",et([E({type:Object})],l.SwDeviceSelector.prototype,"deviceController",2),et([E({type:Boolean,reflect:!0,attribute:"show-preview"})],l.SwDeviceSelector.prototype,"showPreview",2),et([_()],l.SwDeviceSelector.prototype,"_videoStream",2),et([_()],l.SwDeviceSelector.prototype,"_audioStream",2),et([_()],l.SwDeviceSelector.prototype,"_testingSpeaker",2),et([_()],l.SwDeviceSelector.prototype,"_audioIn",2),et([_()],l.SwDeviceSelector.prototype,"_videoIn",2),et([_()],l.SwDeviceSelector.prototype,"_audioOut",2),et([_()],l.SwDeviceSelector.prototype,"_selAudioIn",2),et([_()],l.SwDeviceSelector.prototype,"_selVideoIn",2),et([_()],l.SwDeviceSelector.prototype,"_selAudioOut",2),et([_()],l.SwDeviceSelector.prototype,"_open",2),l.SwDeviceSelector=et([le("sw-device-selector")],l.SwDeviceSelector);var cm=Object.defineProperty,lm=Object.getOwnPropertyDescriptor,Pr=(t,e,i,r)=>{for(var n=r>1?void 0:r?lm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&cm(e,i,n),n};l.SwUiDropup=class extends ee{constructor(){super(...arguments),this.items=[],this.open=!1,this._outsideClickHandler=e=>{const i=e.composedPath();!i.includes(this)&&(!this.anchor||!i.includes(this.anchor))&&this.dispatchEvent(new CustomEvent("sw-dropup-close",{bubbles:!0,composed:!0}))}}updated(e){e.has("open")&&(this.open?(document.addEventListener("mousedown",this._outsideClickHandler),this.anchor&&this._positionToAnchor()):document.removeEventListener("mousedown",this._outsideClickHandler))}_positionToAnchor(){const e=this.anchor.getBoundingClientRect(),i=4;this._menu.style.position="fixed",this._menu.style.top=`${e.top-i}px`,this._menu.style.bottom="auto",this._menu.style.left=`${e.left+e.width/2}px`,this._menu.style.right="auto",this._menu.style.transform="translateX(-50%) translateY(-100%)"}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("mousedown",this._outsideClickHandler)}normalizeItem(e){return typeof e=="string"?{label:e,id:e,selected:!1}:e}onSelect(e){const i={...e,selected:!0};this.items=(this.items??[]).map(r=>{const n=this.normalizeItem(r);return{...n,selected:n.id===e.id}}),this.dispatchEvent(new CustomEvent("sw-dropup-select",{detail:i,bubbles:!0,composed:!0}))}render(){const e=(this.items??[]).map(i=>{const r=this.normalizeItem(i);return I`
|
|
2854
2854
|
<button
|
|
2855
2855
|
part="item"
|
|
2856
2856
|
@click=${()=>this.onSelect(r)}
|
|
@@ -2858,9 +2858,9 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2858
2858
|
>
|
|
2859
2859
|
${r.label}
|
|
2860
2860
|
</button>
|
|
2861
|
-
`});return
|
|
2862
|
-
<div part="menu" class="menu ${this.open?"open":""}">${e.length?e:
|
|
2863
|
-
`}},l.SwUiDropup.styles=[
|
|
2861
|
+
`});return I`
|
|
2862
|
+
<div part="menu" class="menu ${this.open?"open":""}">${e.length?e:W}</div>
|
|
2863
|
+
`}},l.SwUiDropup.styles=[ut,ae`
|
|
2864
2864
|
:host {
|
|
2865
2865
|
display: inline-block;
|
|
2866
2866
|
position: relative;
|
|
@@ -2903,11 +2903,11 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2903
2903
|
button:hover {
|
|
2904
2904
|
background: var(--bg-surface);
|
|
2905
2905
|
}
|
|
2906
|
-
`],
|
|
2906
|
+
`],Pr([E({reflect:!0,converter:{fromAttribute(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}},toAttribute(t){return JSON.stringify(t)}}})],l.SwUiDropup.prototype,"items",2),Pr([E({type:Boolean,reflect:!0})],l.SwUiDropup.prototype,"open",2),Pr([E({attribute:!1})],l.SwUiDropup.prototype,"anchor",2),Pr([qr(".menu")],l.SwUiDropup.prototype,"_menu",2),l.SwUiDropup=Pr([le("sw-ui-dropup")],l.SwUiDropup);var um=Object.defineProperty,dm=Object.getOwnPropertyDescriptor,Ki=(t,e,i,r)=>{for(var n=r>1?void 0:r?dm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&um(e,i,n),n};l.SwUiSplitButton=class extends ee{constructor(){super(...arguments),this.items=[],this.active=!1,this._dropupOpen=!1,this._hasNamedSlots=!1}_onDropupSelect(e){this.items=this.items.map(i=>{const r=typeof i=="string"?i:i.id;return typeof i=="string"?{label:i,id:i,selected:i===e.detail.id}:{...i,selected:r===e.detail.id}})}_updateNamedSlots(){var r,n;const e=(r=this.shadowRoot)==null?void 0:r.querySelector('slot[name="active"]'),i=(n=this.shadowRoot)==null?void 0:n.querySelector('slot[name="inactive"]');this._hasNamedSlots=((e==null?void 0:e.assignedElements().length)??0)>0||((i==null?void 0:i.assignedElements().length)??0)>0}_onMainClick(){if(!this._hasNamedSlots){this.dispatchEvent(new CustomEvent("sw-split-button-click",{bubbles:!0,composed:!0}));return}this.active=!this.active,this.dispatchEvent(new CustomEvent("sw-split-button-toggle",{detail:this.active,bubbles:!0,composed:!0}))}render(){const e=this.items.length>0,i=I`
|
|
2907
2907
|
<slot name="active" @slotchange=${this._updateNamedSlots}></slot>
|
|
2908
2908
|
<slot name="inactive" @slotchange=${this._updateNamedSlots}></slot>
|
|
2909
|
-
${this._hasNamedSlots?
|
|
2910
|
-
`;return e?
|
|
2909
|
+
${this._hasNamedSlots?W:I`<slot></slot>`}
|
|
2910
|
+
`;return e?I`
|
|
2911
2911
|
<div class="pill" part="button">
|
|
2912
2912
|
<button class="main" @click=${this._onMainClick}>
|
|
2913
2913
|
${i}
|
|
@@ -2924,11 +2924,11 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
2924
2924
|
@sw-dropup-close=${()=>this._dropupOpen=!1}
|
|
2925
2925
|
@sw-dropup-select=${this._onDropupSelect}
|
|
2926
2926
|
/>
|
|
2927
|
-
`:
|
|
2927
|
+
`:I`
|
|
2928
2928
|
<button class="solo" part="button" @click=${this._onMainClick}>
|
|
2929
2929
|
${i}
|
|
2930
2930
|
</button>
|
|
2931
|
-
`}},l.SwUiSplitButton.styles=[
|
|
2931
|
+
`}},l.SwUiSplitButton.styles=[ut,ae`
|
|
2932
2932
|
:host {
|
|
2933
2933
|
display: inline-flex;
|
|
2934
2934
|
align-items: center;
|
|
@@ -3000,7 +3000,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
3000
3000
|
.solo:hover {
|
|
3001
3001
|
background: var(--sw-split-button-bg-hover, var(--bg-surface-raised));
|
|
3002
3002
|
}
|
|
3003
|
-
`],
|
|
3003
|
+
`],Ki([E({converter:{fromAttribute(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}},toAttribute(t){return JSON.stringify(t)}}})],l.SwUiSplitButton.prototype,"items",2),Ki([E({reflect:!0})],l.SwUiSplitButton.prototype,"active",2),Ki([_()],l.SwUiSplitButton.prototype,"_dropupOpen",2),Ki([_()],l.SwUiSplitButton.prototype,"_hasNamedSlots",2),Ki([qr("#chevron-zone")],l.SwUiSplitButton.prototype,"_chevronBtn",2),l.SwUiSplitButton=Ki([le("sw-ui-split-button")],l.SwUiSplitButton);var hm=Object.defineProperty,pm=Object.getOwnPropertyDescriptor,Fe=(t,e,i,r)=>{for(var n=r>1?void 0:r?pm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&hm(e,i,n),n};l.SwUiControlBar=class extends ee{constructor(){super(...arguments),this.micMuted=!1,this.cameraMuted=!1,this.speakerMuted=!1,this.fullscreen=!1,this.screenSharing=!1,this.handRaised=!1,this.transcriptActive=!1,this.showScreenShare=!1,this.showHandRaise=!1,this.showTranscript=!1,this.showSettings=!1,this.showFullscreen=!0,this.micDevices=[],this.cameraDevices=[],this.speakerDevices=[],this.settingsItems=[]}_dispatch(e,i){this.dispatchEvent(new CustomEvent(e,{detail:i,bubbles:!0,composed:!0}))}_onMicToggle(){this.micMuted=!this.micMuted,this._dispatch("sw-mic-toggle",{muted:this.micMuted})}_onCameraToggle(){this.cameraMuted=!this.cameraMuted,this._dispatch("sw-camera-toggle",{muted:this.cameraMuted})}_onSpeakerToggle(){this.speakerMuted=!this.speakerMuted,this._dispatch("sw-speaker-toggle",{muted:this.speakerMuted})}_onDeviceSelect(e,i){this._dispatch("sw-device-change",{kind:e,deviceId:i.id,label:i.label})}_onFullscreenToggle(){this.fullscreen=!this.fullscreen,this._dispatch("sw-fullscreen-toggle",{fullscreen:this.fullscreen})}_onScreenShareToggle(){this.screenSharing=!this.screenSharing,this._dispatch("sw-screen-share-toggle",{active:this.screenSharing})}_onHandRaiseToggle(){this.handRaised=!this.handRaised,this._dispatch("sw-hand-raise-toggle",{raised:this.handRaised})}_onTranscriptToggle(){this.transcriptActive=!this.transcriptActive,this._dispatch("sw-transcript-toggle",void 0)}_onSettingsSelect(e){this._dispatch("sw-settings-change",{settingId:e.detail.id})}_onHangUp(){this._dispatch("sw-call-hangup",void 0)}_overflowItems(){const e=[];return this.showScreenShare&&e.push({id:"__overflow:screen-share",label:this.screenSharing?"Stop sharing":"Share screen",selected:this.screenSharing}),this.showHandRaise&&e.push({id:"__overflow:hand-raise",label:this.handRaised?"Lower hand":"Raise hand",selected:this.handRaised}),this.showTranscript&&e.push({id:"__overflow:transcript",label:"Transcript",selected:this.transcriptActive}),this.showSettings&&e.push(...this.settingsItems),this.showFullscreen&&e.push({id:"__overflow:fullscreen",label:this.fullscreen?"Exit fullscreen":"Fullscreen",selected:this.fullscreen}),e}_onOverflowSelect(e){switch(e.detail.id){case"__overflow:screen-share":this._onScreenShareToggle();return;case"__overflow:hand-raise":this._onHandRaiseToggle();return;case"__overflow:transcript":this._onTranscriptToggle();return;case"__overflow:fullscreen":this._onFullscreenToggle();return;default:this._dispatch("sw-settings-change",{settingId:e.detail.id})}}render(){return I`
|
|
3004
3004
|
<div class="bar" part="bar">
|
|
3005
3005
|
<!-- SignalWire logo -->
|
|
3006
3006
|
<span class="sw-logo" part="logo" aria-hidden="true">
|
|
@@ -3041,37 +3041,37 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
3041
3041
|
</sw-ui-split-button>
|
|
3042
3042
|
|
|
3043
3043
|
<!-- Screen share (optional) -->
|
|
3044
|
-
${this.showScreenShare?
|
|
3044
|
+
${this.showScreenShare?I`
|
|
3045
3045
|
<sw-ui-split-button
|
|
3046
3046
|
class="optional ${this.screenSharing?"active-toggle":""}"
|
|
3047
3047
|
@sw-split-button-click=${this._onScreenShareToggle}
|
|
3048
3048
|
>
|
|
3049
3049
|
<sw-ui-icon name=${this.screenSharing?"screen-share-off":"screen-share"}></sw-ui-icon>
|
|
3050
3050
|
</sw-ui-split-button>
|
|
3051
|
-
`:
|
|
3051
|
+
`:W}
|
|
3052
3052
|
|
|
3053
3053
|
<!-- Hand raise (optional) -->
|
|
3054
|
-
${this.showHandRaise?
|
|
3054
|
+
${this.showHandRaise?I`
|
|
3055
3055
|
<sw-ui-split-button
|
|
3056
3056
|
class="optional ${this.handRaised?"active-toggle":""}"
|
|
3057
3057
|
@sw-split-button-click=${this._onHandRaiseToggle}
|
|
3058
3058
|
>
|
|
3059
3059
|
<sw-ui-icon name="hand-raise"></sw-ui-icon>
|
|
3060
3060
|
</sw-ui-split-button>
|
|
3061
|
-
`:
|
|
3061
|
+
`:W}
|
|
3062
3062
|
|
|
3063
3063
|
<!-- Transcript (optional) -->
|
|
3064
|
-
${this.showTranscript?
|
|
3064
|
+
${this.showTranscript?I`
|
|
3065
3065
|
<sw-ui-split-button
|
|
3066
3066
|
class="optional ${this.transcriptActive?"active-toggle":""}"
|
|
3067
3067
|
@sw-split-button-click=${this._onTranscriptToggle}
|
|
3068
3068
|
>
|
|
3069
3069
|
<sw-ui-icon name="transcript"></sw-ui-icon>
|
|
3070
3070
|
</sw-ui-split-button>
|
|
3071
|
-
`:
|
|
3071
|
+
`:W}
|
|
3072
3072
|
|
|
3073
3073
|
<!-- Settings (optional) -->
|
|
3074
|
-
${this.showSettings?
|
|
3074
|
+
${this.showSettings?I`
|
|
3075
3075
|
<sw-ui-split-button
|
|
3076
3076
|
class="optional"
|
|
3077
3077
|
.items=${this.settingsItems}
|
|
@@ -3079,14 +3079,14 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
3079
3079
|
>
|
|
3080
3080
|
<sw-ui-icon name="settings"></sw-ui-icon>
|
|
3081
3081
|
</sw-ui-split-button>
|
|
3082
|
-
`:
|
|
3082
|
+
`:W}
|
|
3083
3083
|
|
|
3084
3084
|
<!-- Fullscreen (optional) -->
|
|
3085
|
-
${this.showFullscreen?
|
|
3085
|
+
${this.showFullscreen?I`
|
|
3086
3086
|
<sw-ui-split-button class="optional" @sw-split-button-click=${this._onFullscreenToggle}>
|
|
3087
3087
|
<sw-ui-icon name=${this.fullscreen?"fullscreen-exit":"fullscreen"}></sw-ui-icon>
|
|
3088
3088
|
</sw-ui-split-button>
|
|
3089
|
-
`:
|
|
3089
|
+
`:W}
|
|
3090
3090
|
|
|
3091
3091
|
<!-- Overflow menu (shown on narrow containers) -->
|
|
3092
3092
|
<sw-ui-split-button
|
|
@@ -3105,7 +3105,7 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
3105
3105
|
<!-- Spacer to balance the logo and keep buttons centered -->
|
|
3106
3106
|
<span class="bar-spacer" aria-hidden="true"></span>
|
|
3107
3107
|
</div>
|
|
3108
|
-
`}},l.SwUiControlBar.styles=
|
|
3108
|
+
`}},l.SwUiControlBar.styles=ae`
|
|
3109
3109
|
:host {
|
|
3110
3110
|
display: block;
|
|
3111
3111
|
background: var(--sw-control-bar-bg, transparent);
|
|
@@ -3180,29 +3180,29 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
3180
3180
|
padding: 2px 4px;
|
|
3181
3181
|
}
|
|
3182
3182
|
}
|
|
3183
|
-
`,
|
|
3183
|
+
`,Fe([E({type:Boolean,reflect:!0,attribute:"mic-muted"})],l.SwUiControlBar.prototype,"micMuted",2),Fe([E({type:Boolean,reflect:!0,attribute:"camera-muted"})],l.SwUiControlBar.prototype,"cameraMuted",2),Fe([E({type:Boolean,reflect:!0,attribute:"speaker-muted"})],l.SwUiControlBar.prototype,"speakerMuted",2),Fe([E({type:Boolean,reflect:!0})],l.SwUiControlBar.prototype,"fullscreen",2),Fe([E({type:Boolean,reflect:!0,attribute:"screen-sharing"})],l.SwUiControlBar.prototype,"screenSharing",2),Fe([E({type:Boolean,reflect:!0,attribute:"hand-raised"})],l.SwUiControlBar.prototype,"handRaised",2),Fe([E({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwUiControlBar.prototype,"transcriptActive",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwUiControlBar.prototype,"showScreenShare",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwUiControlBar.prototype,"showHandRaise",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwUiControlBar.prototype,"showTranscript",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwUiControlBar.prototype,"showSettings",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwUiControlBar.prototype,"showFullscreen",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"micDevices",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"cameraDevices",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"speakerDevices",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"settingsItems",2),l.SwUiControlBar=Fe([le("sw-ui-control-bar")],l.SwUiControlBar);const gm="4.0.0-rc.2",fm=!0;(()=>{if(typeof window<"u"){const t=new CustomEvent("signalwire:web-components:ready",{detail:{version:"4.0.0-rc.2"}});window.dispatchEvent(t)}})();var Ls={exports:{}},cl;function vm(){return cl||(cl=1,(function(t){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
|
|
3184
3184
|
* Prism: Lightweight, robust, elegant syntax highlighting
|
|
3185
3185
|
*
|
|
3186
3186
|
* @license MIT <https://opensource.org/licenses/MIT>
|
|
3187
3187
|
* @author Lea Verou <https://lea.verou.me>
|
|
3188
3188
|
* @namespace
|
|
3189
3189
|
* @public
|
|
3190
|
-
*/var i=(function(r){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,s=0,a={},o={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function f(b){return b instanceof c?new c(b.type,f(b.content),b.alias):Array.isArray(b)?b.map(f):b.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(f){return Object.prototype.toString.call(f).slice(8,-1)},objId:function(f){return f.__id||Object.defineProperty(f,"__id",{value:++s}),f.__id},clone:function f(b,y){y=y||{};var A,D;switch(o.util.type(b)){case"Object":if(D=o.util.objId(b),y[D])return y[D];A={},y[D]=A;for(var N in b)b.hasOwnProperty(N)&&(A[N]=f(b[N],y));return A;case"Array":return D=o.util.objId(b),y[D]?y[D]:(A=[],y[D]=A,b.forEach(function(Y,_){A[_]=f(Y,y)}),A);default:return b}},getLanguage:function(f){for(;f;){var b=n.exec(f.className);if(b)return b[1].toLowerCase();f=f.parentElement}return"none"},setLanguage:function(f,b){f.className=f.className.replace(RegExp(n,"gi"),""),f.classList.add("language-"+b)},currentScript:function(){if(typeof document>"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(A){var f=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(A.stack)||[])[1];if(f){var b=document.getElementsByTagName("script");for(var y in b)if(b[y].src==f)return b[y]}return null}},isActive:function(f,b,y){for(var A="no-"+b;f;){var D=f.classList;if(D.contains(b))return!0;if(D.contains(A))return!1;f=f.parentElement}return!!y}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(f,b){var y=o.util.clone(o.languages[f]);for(var A in b)y[A]=b[A];return y},insertBefore:function(f,b,y,A){A=A||o.languages;var D=A[f],N={};for(var Y in D)if(D.hasOwnProperty(Y)){if(Y==b)for(var _ in y)y.hasOwnProperty(_)&&(N[_]=y[_]);y.hasOwnProperty(Y)||(N[Y]=D[Y])}var re=A[f];return A[f]=N,o.languages.DFS(o.languages,function(F,ee){ee===re&&F!=f&&(this[F]=N)}),N},DFS:function f(b,y,A,D){D=D||{};var N=o.util.objId;for(var Y in b)if(b.hasOwnProperty(Y)){y.call(b,Y,b[Y],A||Y);var _=b[Y],re=o.util.type(_);re==="Object"&&!D[N(_)]?(D[N(_)]=!0,f(_,y,null,D)):re==="Array"&&!D[N(_)]&&(D[N(_)]=!0,f(_,y,Y,D))}}},plugins:{},highlightAll:function(f,b){o.highlightAllUnder(document,f,b)},highlightAllUnder:function(f,b,y){var A={callback:y,container:f,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",A),A.elements=Array.prototype.slice.apply(A.container.querySelectorAll(A.selector)),o.hooks.run("before-all-elements-highlight",A);for(var D=0,N;N=A.elements[D++];)o.highlightElement(N,b===!0,A.callback)},highlightElement:function(f,b,y){var A=o.util.getLanguage(f),D=o.languages[A];o.util.setLanguage(f,A);var N=f.parentElement;N&&N.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(N,A);var Y=f.textContent,_={element:f,language:A,grammar:D,code:Y};function re(ee){_.highlightedCode=ee,o.hooks.run("before-insert",_),_.element.innerHTML=_.highlightedCode,o.hooks.run("after-highlight",_),o.hooks.run("complete",_),y&&y.call(_.element)}if(o.hooks.run("before-sanity-check",_),N=_.element.parentElement,N&&N.nodeName.toLowerCase()==="pre"&&!N.hasAttribute("tabindex")&&N.setAttribute("tabindex","0"),!_.code){o.hooks.run("complete",_),y&&y.call(_.element);return}if(o.hooks.run("before-highlight",_),!_.grammar){re(o.util.encode(_.code));return}if(b&&r.Worker){var F=new Worker(o.filename);F.onmessage=function(ee){re(ee.data)},F.postMessage(JSON.stringify({language:_.language,code:_.code,immediateClose:!0}))}else re(o.highlight(_.code,_.grammar,_.language))},highlight:function(f,b,y){var A={code:f,grammar:b,language:y};if(o.hooks.run("before-tokenize",A),!A.grammar)throw new Error('The language "'+A.language+'" has no grammar.');return A.tokens=o.tokenize(A.code,A.grammar),o.hooks.run("after-tokenize",A),c.stringify(o.util.encode(A.tokens),A.language)},tokenize:function(f,b){var y=b.rest;if(y){for(var A in y)b[A]=y[A];delete b.rest}var D=new p;return v(D,D.head,f),h(f,D,b,D.head,0),R(D)},hooks:{all:{},add:function(f,b){var y=o.hooks.all;y[f]=y[f]||[],y[f].push(b)},run:function(f,b){var y=o.hooks.all[f];if(!(!y||!y.length))for(var A=0,D;D=y[A++];)D(b)}},Token:c};r.Prism=o;function c(f,b,y,A){this.type=f,this.content=b,this.alias=y,this.length=(A||"").length|0}c.stringify=function f(b,y){if(typeof b=="string")return b;if(Array.isArray(b)){var A="";return b.forEach(function(re){A+=f(re,y)}),A}var D={type:b.type,content:f(b.content,y),tag:"span",classes:["token",b.type],attributes:{},language:y},N=b.alias;N&&(Array.isArray(N)?Array.prototype.push.apply(D.classes,N):D.classes.push(N)),o.hooks.run("wrap",D);var Y="";for(var _ in D.attributes)Y+=" "+_+'="'+(D.attributes[_]||"").replace(/"/g,""")+'"';return"<"+D.tag+' class="'+D.classes.join(" ")+'"'+Y+">"+D.content+"</"+D.tag+">"};function u(f,b,y,A){f.lastIndex=b;var D=f.exec(y);if(D&&A&&D[1]){var N=D[1].length;D.index+=N,D[0]=D[0].slice(N)}return D}function h(f,b,y,A,D,N){for(var Y in y)if(!(!y.hasOwnProperty(Y)||!y[Y])){var _=y[Y];_=Array.isArray(_)?_:[_];for(var re=0;re<_.length;++re){if(N&&N.cause==Y+","+re)return;var F=_[re],ee=F.inside,lt=!!F.lookbehind,Mt=!!F.greedy,xr=F.alias;if(Mt&&!F.pattern.global){var Is=F.pattern.toString().match(/[imsuy]*$/)[0];F.pattern=RegExp(F.pattern.source,Is+"g")}for(var wn=F.pattern||F,Ae=A.next,ut=D;Ae!==b.tail&&!(N&&ut>=N.reach);ut+=Ae.value.length,Ae=Ae.next){var Bt=Ae.value;if(b.length>f.length)return;if(!(Bt instanceof c)){var he=1,Ye;if(Mt){if(Ye=u(wn,ut,f,lt),!Ye||Ye.index>=f.length)break;var Rt=Ye.index,Te=Ye.index+Ye[0].length,wt=ut;for(wt+=Ae.value.length;Rt>=wt;)Ae=Ae.next,wt+=Ae.value.length;if(wt-=Ae.value.length,ut=wt,Ae.value instanceof c)continue;for(var ne=Ae;ne!==b.tail&&(wt<Te||typeof ne.value=="string");ne=ne.next)he++,wt+=ne.value.length;he--,Bt=f.slice(ut,wt),Ye.index-=ut}else if(Ye=u(wn,0,Bt,lt),!Ye)continue;var Rt=Ye.index,zt=Ye[0],dt=Bt.slice(0,Rt),Dr=Bt.slice(Rt+zt.length),bi=ut+Bt.length;N&&bi>N.reach&&(N.reach=bi);var mi=Ae.prev;dt&&(mi=v(b,mi,dt),ut+=dt.length),m(b,mi,he);var Sn=new c(Y,ee?o.tokenize(zt,ee):zt,xr,zt);if(Ae=v(b,mi,Sn),Dr&&v(b,Ae,Dr),he>1){var St={cause:Y+","+re,reach:bi};h(f,b,y,Ae.prev,ut,St),N&&St.reach>N.reach&&(N.reach=St.reach)}}}}}}function p(){var f={value:null,prev:null,next:null},b={value:null,prev:f,next:null};f.next=b,this.head=f,this.tail=b,this.length=0}function v(f,b,y){var A=b.next,D={value:y,prev:b,next:A};return b.next=D,A.prev=D,f.length++,D}function m(f,b,y){for(var A=b.next,D=0;D<y&&A!==f.tail;D++)A=A.next;b.next=A,A.prev=b,f.length-=D}function R(f){for(var b=[],y=f.head.next;y!==f.tail;)b.push(y.value),y=y.next;return b}if(!r.document)return r.addEventListener&&(o.disableWorkerMessageHandler||r.addEventListener("message",function(f){var b=JSON.parse(f.data),y=b.language,A=b.code,D=b.immediateClose;r.postMessage(o.highlight(A,o.languages[y],y)),D&&r.close()},!1)),o;var C=o.util.currentScript();C&&(o.filename=C.src,C.hasAttribute("data-manual")&&(o.manual=!0));function I(){o.manual||o.highlightAll()}if(!o.manual){var x=document.readyState;x==="loading"||x==="interactive"&&C&&C.defer?document.addEventListener("DOMContentLoaded",I):window.requestAnimationFrame?window.requestAnimationFrame(I):window.setTimeout(I,16)}return o})(e);t.exports&&(t.exports=i),typeof Qa<"u"&&(Qa.Prism=i),i.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(n,s){var a={};a["language-"+s]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:i.languages[s]},a.cdata=/^<!\[CDATA\[|\]\]>$/i;var o={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:a}};o["language-"+s]={pattern:/[\s\S]+/,inside:i.languages[s]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:o},i.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(i.languages.markup.tag,"addAttribute",{value:function(r,n){i.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:i.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.languages.xml,(function(r){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var s=r.languages.markup;s&&(s.tag.addInlined("style","css"),s.tag.addAttribute("style","css"))})(i),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),i.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),i.languages.markup&&(i.languages.markup.tag.addInlined("script","javascript"),i.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),i.languages.js=i.languages.javascript,(function(){if(typeof i>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",n=function(C,I){return"✖ Error "+C+" while fetching file: "+I},s="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",c="loading",u="loaded",h="failed",p="pre[data-src]:not(["+o+'="'+u+'"]):not(['+o+'="'+c+'"])';function v(C,I,x){var f=new XMLHttpRequest;f.open("GET",C,!0),f.onreadystatechange=function(){f.readyState==4&&(f.status<400&&f.responseText?I(f.responseText):f.status>=400?x(n(f.status,f.statusText)):x(s))},f.send(null)}function m(C){var I=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(C||"");if(I){var x=Number(I[1]),f=I[2],b=I[3];return f?b?[x,Number(b)]:[x,void 0]:[x,x]}}i.hooks.add("before-highlightall",function(C){C.selector+=", "+p}),i.hooks.add("before-sanity-check",function(C){var I=C.element;if(I.matches(p)){C.code="",I.setAttribute(o,c);var x=I.appendChild(document.createElement("CODE"));x.textContent=r;var f=I.getAttribute("data-src"),b=C.language;if(b==="none"){var y=(/\.(\w+)$/.exec(f)||[,"none"])[1];b=a[y]||y}i.util.setLanguage(x,b),i.util.setLanguage(I,b);var A=i.plugins.autoloader;A&&A.loadLanguages(b),v(f,function(D){I.setAttribute(o,u);var N=m(I.getAttribute("data-range"));if(N){var Y=D.split(/\r\n?|\n/g),_=N[0],re=N[1]==null?Y.length:N[1];_<0&&(_+=Y.length),_=Math.max(0,Math.min(_-1,Y.length)),re<0&&(re+=Y.length),re=Math.max(0,Math.min(re,Y.length)),D=Y.slice(_,re).join(`
|
|
3191
|
-
`),I.hasAttribute("data-start")||I.setAttribute("data-start",String(_+1))}x.textContent=D,i.highlightElement(x)},function(D){I.setAttribute(o,h),x.textContent=D})}}),i.plugins.fileHighlight={highlight:function(I){for(var x=(I||document).querySelectorAll(p),f=0,b;b=x[f++];)i.highlightElement(b)}};var R=!1;i.fileHighlight=function(){R||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),R=!0),i.plugins.fileHighlight.highlight.apply(this,arguments)}})()})(Ss)),Ss.exports}var Gc=Wb();const Gb=be({__proto__:null,default:qr(Gc)},[Gc]);Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript;const qb=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var qc={},Xc;function Xb(){return Xc||(Xc=1,(function(t){t.languages.typescript=t.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),t.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete t.languages.typescript.parameter,delete t.languages.typescript["literal-property"];var e=t.languages.extend("typescript",{});delete e["class-name"],t.languages.typescript["class-name"].inside=e,t.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e}}}}),t.languages.ts=t.languages.typescript})(Prism)),qc}var Yc=Xb();const Yb=be({__proto__:null,default:qr(Yc)},[Yc]);var Kc={},Zc;function Kb(){return Zc||(Zc=1,Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern://,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python),Kc}var Qc=Kb();const Zb=be({__proto__:null,default:qr(Qc)},[Qc]);(function(t){var e="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",i={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:i,environment:{pattern:RegExp("\\$"+e),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+e),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};t.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+e),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:i}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+e),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},i.inside=t.languages.bash;for(var n=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],s=r.variable[1].inside,a=0;a<n.length;a++)s[n[a]]=t.languages.bash[n[a]];t.languages.sh=t.languages.bash,t.languages.shell=t.languages.bash})(Prism);const Jc=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;const Qb=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;t.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},t.languages.css.atrule.inside.rest=t.languages.css;var i=t.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))})(Prism);const Jb=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/[*&][^\s[\]{},]+/,i=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+i.source+"(?:[ ]+"+e.source+")?|"+e.source+"(?:[ ]+"+i.source+")?)",n=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),s=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(o,c){c=(c||"").replace(/m/g,"")+"m";var u=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<value>>/g,function(){return o});return RegExp(u,c)}t.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,function(){return r})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<key>>/g,function(){return"(?:"+n+"|"+s+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:a(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(s),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:i,important:e,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},t.languages.yml=t.languages.yaml})(Prism);const $b=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/};const em=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function i(h){return h=h.replace(/<inner>/g,function(){return e}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+h+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,n=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;t.languages.markdown=t.languages.extend("markup",{}),t.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:t.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+n+s+"(?:"+n+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+n+s+")(?:"+n+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:t.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+n+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+n+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:t.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:i(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:i(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:i(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:i(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(h){["url","bold","italic","strike","code-snippet"].forEach(function(p){h!==p&&(t.languages.markdown[h].inside.content.inside[p]=t.languages.markdown[p])})}),t.hooks.add("after-tokenize",function(h){if(h.language!=="markdown"&&h.language!=="md")return;function p(v){if(!(!v||typeof v=="string"))for(var m=0,R=v.length;m<R;m++){var C=v[m];if(C.type!=="code"){p(C.content);continue}var I=C.content[1],x=C.content[3];if(I&&x&&I.type==="code-language"&&x.type==="code-block"&&typeof I.content=="string"){var f=I.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp");f=(/[a-z][\w-]*/i.exec(f)||[""])[0].toLowerCase();var b="language-"+f;x.alias?typeof x.alias=="string"?x.alias=[x.alias,b]:x.alias.push(b):x.alias=[b]}}}p(h.tokens)}),t.hooks.add("wrap",function(h){if(h.type==="code-block"){for(var p="",v=0,m=h.classes.length;v<m;v++){var R=h.classes[v],C=/language-(.+)/.exec(R);if(C){p=C[1];break}}var I=t.languages[p];if(I)h.content=t.highlight(u(h.content),I,p);else if(p&&p!=="none"&&t.plugins.autoloader){var x="md-"+new Date().valueOf()+"-"+Math.floor(Math.random()*1e16);h.attributes.id=x,t.plugins.autoloader.loadLanguages(p,function(){var f=document.getElementById(x);f&&(f.innerHTML=t.highlight(f.textContent,t.languages[p],p))})}}});var a=RegExp(t.languages.markup.tag.pattern.source,"gi"),o={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;function u(h){var p=h.replace(a,"");return p=p.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(v,m){if(m=m.toLowerCase(),m[0]==="#"){var R;return m[1]==="x"?R=parseInt(m.slice(2),16):R=Number(m.slice(1)),c(R)}else{var C=o[m];return C||v}}),p}t.languages.md=t.languages.markdown})(Prism);const tm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function gn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let Kt=gn();function $c(t){Kt=t}const el=/[&<>"']/,im=new RegExp(el.source,"g"),tl=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,rm=new RegExp(tl.source,"g"),nm={"&":"&","<":"<",">":">",'"':""","'":"'"},il=t=>nm[t];function $e(t,e){if(e){if(el.test(t))return t.replace(im,il)}else if(tl.test(t))return t.replace(rm,il);return t}const sm=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function am(t){return t.replace(sm,(e,i)=>(i=i.toLowerCase(),i==="colon"?":":i.charAt(0)==="#"?i.charAt(1)==="x"?String.fromCharCode(parseInt(i.substring(2),16)):String.fromCharCode(+i.substring(1)):""))}const om=/(^|[^\[])\^/g;function J(t,e){t=typeof t=="string"?t:t.source,e=e||"";const i={replace:(r,n)=>(n=typeof n=="object"&&"source"in n?n.source:n,n=n.replace(om,"$1"),t=t.replace(r,n),i),getRegex:()=>new RegExp(t,e)};return i}function rl(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}const fn={exec:()=>null};function nl(t,e){const i=t.replace(/\|/g,(s,a,o)=>{let c=!1,u=a;for(;--u>=0&&o[u]==="\\";)c=!c;return c?"|":" |"}),r=i.split(/ \|/);let n=0;if(r[0].trim()||r.shift(),r.length>0&&!r[r.length-1].trim()&&r.pop(),e)if(r.length>e)r.splice(e);else for(;r.length<e;)r.push("");for(;n<r.length;n++)r[n]=r[n].trim().replace(/\\\|/g,"|");return r}function vn(t,e,i){const r=t.length;if(r===0)return"";let n=0;for(;n<r&&t.charAt(r-n-1)===e;)n++;return t.slice(0,r-n)}function cm(t,e){if(t.indexOf(e[1])===-1)return-1;let i=0;for(let r=0;r<t.length;r++)if(t[r]==="\\")r++;else if(t[r]===e[0])i++;else if(t[r]===e[1]&&(i--,i<0))return r;return-1}function sl(t,e,i,r){const n=e.href,s=e.title?$e(e.title):null,a=t[1].replace(/\\([\[\]])/g,"$1");if(t[0].charAt(0)!=="!"){r.state.inLink=!0;const o={type:"link",raw:i,href:n,title:s,text:a,tokens:r.inlineTokens(a)};return r.state.inLink=!1,o}return{type:"image",raw:i,href:n,title:s,text:$e(a)}}function lm(t,e){const i=t.match(/^(\s+)(?:```)/);if(i===null)return e;const r=i[1];return e.split(`
|
|
3190
|
+
*/var i=(function(r){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,s=0,a={},o={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function b(m){return m instanceof c?new c(m.type,b(m.content),m.alias):Array.isArray(m)?m.map(b):m.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(b){return Object.prototype.toString.call(b).slice(8,-1)},objId:function(b){return b.__id||Object.defineProperty(b,"__id",{value:++s}),b.__id},clone:function b(m,y){y=y||{};var w,k;switch(o.util.type(m)){case"Object":if(k=o.util.objId(m),y[k])return y[k];w={},y[k]=w;for(var F in m)m.hasOwnProperty(F)&&(w[F]=b(m[F],y));return w;case"Array":return k=o.util.objId(m),y[k]?y[k]:(w=[],y[k]=w,m.forEach(function(Z,N){w[N]=b(Z,y)}),w);default:return m}},getLanguage:function(b){for(;b;){var m=n.exec(b.className);if(m)return m[1].toLowerCase();b=b.parentElement}return"none"},setLanguage:function(b,m){b.className=b.className.replace(RegExp(n,"gi"),""),b.classList.add("language-"+m)},currentScript:function(){if(typeof document>"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(w){var b=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(w.stack)||[])[1];if(b){var m=document.getElementsByTagName("script");for(var y in m)if(m[y].src==b)return m[y]}return null}},isActive:function(b,m,y){for(var w="no-"+m;b;){var k=b.classList;if(k.contains(m))return!0;if(k.contains(w))return!1;b=b.parentElement}return!!y}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(b,m){var y=o.util.clone(o.languages[b]);for(var w in m)y[w]=m[w];return y},insertBefore:function(b,m,y,w){w=w||o.languages;var k=w[b],F={};for(var Z in k)if(k.hasOwnProperty(Z)){if(Z==m)for(var N in y)y.hasOwnProperty(N)&&(F[N]=y[N]);y.hasOwnProperty(Z)||(F[Z]=k[Z])}var ie=w[b];return w[b]=F,o.languages.DFS(o.languages,function(X,$){$===ie&&X!=b&&(this[X]=F)}),F},DFS:function b(m,y,w,k){k=k||{};var F=o.util.objId;for(var Z in m)if(m.hasOwnProperty(Z)){y.call(m,Z,m[Z],w||Z);var N=m[Z],ie=o.util.type(N);ie==="Object"&&!k[F(N)]?(k[F(N)]=!0,b(N,y,null,k)):ie==="Array"&&!k[F(N)]&&(k[F(N)]=!0,b(N,y,Z,k))}}},plugins:{},highlightAll:function(b,m){o.highlightAllUnder(document,b,m)},highlightAllUnder:function(b,m,y){var w={callback:y,container:b,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",w),w.elements=Array.prototype.slice.apply(w.container.querySelectorAll(w.selector)),o.hooks.run("before-all-elements-highlight",w);for(var k=0,F;F=w.elements[k++];)o.highlightElement(F,m===!0,w.callback)},highlightElement:function(b,m,y){var w=o.util.getLanguage(b),k=o.languages[w];o.util.setLanguage(b,w);var F=b.parentElement;F&&F.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(F,w);var Z=b.textContent,N={element:b,language:w,grammar:k,code:Z};function ie($){N.highlightedCode=$,o.hooks.run("before-insert",N),N.element.innerHTML=N.highlightedCode,o.hooks.run("after-highlight",N),o.hooks.run("complete",N),y&&y.call(N.element)}if(o.hooks.run("before-sanity-check",N),F=N.element.parentElement,F&&F.nodeName.toLowerCase()==="pre"&&!F.hasAttribute("tabindex")&&F.setAttribute("tabindex","0"),!N.code){o.hooks.run("complete",N),y&&y.call(N.element);return}if(o.hooks.run("before-highlight",N),!N.grammar){ie(o.util.encode(N.code));return}if(m&&r.Worker){var X=new Worker(o.filename);X.onmessage=function($){ie($.data)},X.postMessage(JSON.stringify({language:N.language,code:N.code,immediateClose:!0}))}else ie(o.highlight(N.code,N.grammar,N.language))},highlight:function(b,m,y){var w={code:b,grammar:m,language:y};if(o.hooks.run("before-tokenize",w),!w.grammar)throw new Error('The language "'+w.language+'" has no grammar.');return w.tokens=o.tokenize(w.code,w.grammar),o.hooks.run("after-tokenize",w),c.stringify(o.util.encode(w.tokens),w.language)},tokenize:function(b,m){var y=m.rest;if(y){for(var w in y)m[w]=y[w];delete m.rest}var k=new p;return v(k,k.head,b),h(b,k,m,k.head,0),O(k)},hooks:{all:{},add:function(b,m){var y=o.hooks.all;y[b]=y[b]||[],y[b].push(m)},run:function(b,m){var y=o.hooks.all[b];if(!(!y||!y.length))for(var w=0,k;k=y[w++];)k(m)}},Token:c};r.Prism=o;function c(b,m,y,w){this.type=b,this.content=m,this.alias=y,this.length=(w||"").length|0}c.stringify=function b(m,y){if(typeof m=="string")return m;if(Array.isArray(m)){var w="";return m.forEach(function(ie){w+=b(ie,y)}),w}var k={type:m.type,content:b(m.content,y),tag:"span",classes:["token",m.type],attributes:{},language:y},F=m.alias;F&&(Array.isArray(F)?Array.prototype.push.apply(k.classes,F):k.classes.push(F)),o.hooks.run("wrap",k);var Z="";for(var N in k.attributes)Z+=" "+N+'="'+(k.attributes[N]||"").replace(/"/g,""")+'"';return"<"+k.tag+' class="'+k.classes.join(" ")+'"'+Z+">"+k.content+"</"+k.tag+">"};function u(b,m,y,w){b.lastIndex=m;var k=b.exec(y);if(k&&w&&k[1]){var F=k[1].length;k.index+=F,k[0]=k[0].slice(F)}return k}function h(b,m,y,w,k,F){for(var Z in y)if(!(!y.hasOwnProperty(Z)||!y[Z])){var N=y[Z];N=Array.isArray(N)?N:[N];for(var ie=0;ie<N.length;++ie){if(F&&F.cause==Z+","+ie)return;var X=N[ie],$=X.inside,Ut=!!X.lookbehind,Ei=!!X.greedy,Zt=X.alias;if(Ei&&!X.pattern.global){var Ur=X.pattern.toString().match(/[imsuy]*$/)[0];X.pattern=RegExp(X.pattern.source,Ur+"g")}for(var Br=X.pattern||X,Pe=w.next,ht=k;Pe!==m.tail&&!(F&&ht>=F.reach);ht+=Pe.value.length,Pe=Pe.next){var Qt=Pe.value;if(m.length>b.length)return;if(!(Qt instanceof c)){var oe=1,rt;if(Ei){if(rt=u(Br,ht,b,Ut),!rt||rt.index>=b.length)break;var er=rt.index,js=rt.index+rt[0].length,It=ht;for(It+=Pe.value.length;er>=It;)Pe=Pe.next,It+=Pe.value.length;if(It-=Pe.value.length,ht=It,Pe.value instanceof c)continue;for(var ki=Pe;ki!==m.tail&&(It<js||typeof ki.value=="string");ki=ki.next)oe++,It+=ki.value.length;oe--,Qt=b.slice(ht,It),rt.index-=ht}else if(rt=u(Br,0,Qt,Ut),!rt)continue;var er=rt.index,tr=rt[0],ir=Qt.slice(0,er),In=Qt.slice(er+tr.length),rr=ht+Qt.length;F&&rr>F.reach&&(F.reach=rr);var ce=Pe.prev;ir&&(ce=v(m,ce,ir),ht+=ir.length),C(m,ce,oe);var Mn=new c(Z,$?o.tokenize(tr,$):tr,Zt,tr);if(Pe=v(m,ce,Mn),In&&v(m,Pe,In),oe>1){var he={cause:Z+","+ie,reach:rr};h(b,m,y,Pe.prev,ht,he),F&&he.reach>F.reach&&(F.reach=he.reach)}}}}}}function p(){var b={value:null,prev:null,next:null},m={value:null,prev:b,next:null};b.next=m,this.head=b,this.tail=m,this.length=0}function v(b,m,y){var w=m.next,k={value:y,prev:m,next:w};return m.next=k,w.prev=k,b.length++,k}function C(b,m,y){for(var w=m.next,k=0;k<y&&w!==b.tail;k++)w=w.next;m.next=w,w.prev=m,b.length-=k}function O(b){for(var m=[],y=b.head.next;y!==b.tail;)m.push(y.value),y=y.next;return m}if(!r.document)return r.addEventListener&&(o.disableWorkerMessageHandler||r.addEventListener("message",function(b){var m=JSON.parse(b.data),y=m.language,w=m.code,k=m.immediateClose;r.postMessage(o.highlight(w,o.languages[y],y)),k&&r.close()},!1)),o;var A=o.util.currentScript();A&&(o.filename=A.src,A.hasAttribute("data-manual")&&(o.manual=!0));function R(){o.manual||o.highlightAll()}if(!o.manual){var D=document.readyState;D==="loading"||D==="interactive"&&A&&A.defer?document.addEventListener("DOMContentLoaded",R):window.requestAnimationFrame?window.requestAnimationFrame(R):window.setTimeout(R,16)}return o})(e);t.exports&&(t.exports=i),typeof vo<"u"&&(vo.Prism=i),i.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(n,s){var a={};a["language-"+s]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:i.languages[s]},a.cdata=/^<!\[CDATA\[|\]\]>$/i;var o={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:a}};o["language-"+s]={pattern:/[\s\S]+/,inside:i.languages[s]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:o},i.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(i.languages.markup.tag,"addAttribute",{value:function(r,n){i.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:i.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.languages.xml,(function(r){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var s=r.languages.markup;s&&(s.tag.addInlined("style","css"),s.tag.addAttribute("style","css"))})(i),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),i.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),i.languages.markup&&(i.languages.markup.tag.addInlined("script","javascript"),i.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),i.languages.js=i.languages.javascript,(function(){if(typeof i>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",n=function(A,R){return"✖ Error "+A+" while fetching file: "+R},s="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",c="loading",u="loaded",h="failed",p="pre[data-src]:not(["+o+'="'+u+'"]):not(['+o+'="'+c+'"])';function v(A,R,D){var b=new XMLHttpRequest;b.open("GET",A,!0),b.onreadystatechange=function(){b.readyState==4&&(b.status<400&&b.responseText?R(b.responseText):b.status>=400?D(n(b.status,b.statusText)):D(s))},b.send(null)}function C(A){var R=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(A||"");if(R){var D=Number(R[1]),b=R[2],m=R[3];return b?m?[D,Number(m)]:[D,void 0]:[D,D]}}i.hooks.add("before-highlightall",function(A){A.selector+=", "+p}),i.hooks.add("before-sanity-check",function(A){var R=A.element;if(R.matches(p)){A.code="",R.setAttribute(o,c);var D=R.appendChild(document.createElement("CODE"));D.textContent=r;var b=R.getAttribute("data-src"),m=A.language;if(m==="none"){var y=(/\.(\w+)$/.exec(b)||[,"none"])[1];m=a[y]||y}i.util.setLanguage(D,m),i.util.setLanguage(R,m);var w=i.plugins.autoloader;w&&w.loadLanguages(m),v(b,function(k){R.setAttribute(o,u);var F=C(R.getAttribute("data-range"));if(F){var Z=k.split(/\r\n?|\n/g),N=F[0],ie=F[1]==null?Z.length:F[1];N<0&&(N+=Z.length),N=Math.max(0,Math.min(N-1,Z.length)),ie<0&&(ie+=Z.length),ie=Math.max(0,Math.min(ie,Z.length)),k=Z.slice(N,ie).join(`
|
|
3191
|
+
`),R.hasAttribute("data-start")||R.setAttribute("data-start",String(N+1))}D.textContent=k,i.highlightElement(D)},function(k){R.setAttribute(o,h),D.textContent=k})}}),i.plugins.fileHighlight={highlight:function(R){for(var D=(R||document).querySelectorAll(p),b=0,m;m=D[b++];)i.highlightElement(m)}};var O=!1;i.fileHighlight=function(){O||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),O=!0),i.plugins.fileHighlight.highlight.apply(this,arguments)}})()})(Ls)),Ls.exports}var ll=vm();const bm=Ce({__proto__:null,default:rn(ll)},[ll]);Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript;const mm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var ul={},dl;function ym(){return dl||(dl=1,(function(t){t.languages.typescript=t.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),t.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete t.languages.typescript.parameter,delete t.languages.typescript["literal-property"];var e=t.languages.extend("typescript",{});delete e["class-name"],t.languages.typescript["class-name"].inside=e,t.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e}}}}),t.languages.ts=t.languages.typescript})(Prism)),ul}var hl=ym();const wm=Ce({__proto__:null,default:rn(hl)},[hl]);var pl={},gl;function Sm(){return gl||(gl=1,Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern://,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python),pl}var fl=Sm();const Cm=Ce({__proto__:null,default:rn(fl)},[fl]);(function(t){var e="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",i={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:i,environment:{pattern:RegExp("\\$"+e),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+e),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};t.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+e),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:i}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+e),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},i.inside=t.languages.bash;for(var n=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],s=r.variable[1].inside,a=0;a<n.length;a++)s[n[a]]=t.languages.bash[n[a]];t.languages.sh=t.languages.bash,t.languages.shell=t.languages.bash})(Prism);const vl=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;const Am=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;t.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},t.languages.css.atrule.inside.rest=t.languages.css;var i=t.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))})(Prism);const Tm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/[*&][^\s[\]{},]+/,i=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+i.source+"(?:[ ]+"+e.source+")?|"+e.source+"(?:[ ]+"+i.source+")?)",n=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),s=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(o,c){c=(c||"").replace(/m/g,"")+"m";var u=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<value>>/g,function(){return o});return RegExp(u,c)}t.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,function(){return r})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<key>>/g,function(){return"(?:"+n+"|"+s+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:a(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(s),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:i,important:e,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},t.languages.yml=t.languages.yaml})(Prism);const Em=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/};const km=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function i(h){return h=h.replace(/<inner>/g,function(){return e}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+h+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,n=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;t.languages.markdown=t.languages.extend("markup",{}),t.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:t.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+n+s+"(?:"+n+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+n+s+")(?:"+n+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:t.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+n+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+n+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:t.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:i(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:i(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:i(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:i(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(h){["url","bold","italic","strike","code-snippet"].forEach(function(p){h!==p&&(t.languages.markdown[h].inside.content.inside[p]=t.languages.markdown[p])})}),t.hooks.add("after-tokenize",function(h){if(h.language!=="markdown"&&h.language!=="md")return;function p(v){if(!(!v||typeof v=="string"))for(var C=0,O=v.length;C<O;C++){var A=v[C];if(A.type!=="code"){p(A.content);continue}var R=A.content[1],D=A.content[3];if(R&&D&&R.type==="code-language"&&D.type==="code-block"&&typeof R.content=="string"){var b=R.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp");b=(/[a-z][\w-]*/i.exec(b)||[""])[0].toLowerCase();var m="language-"+b;D.alias?typeof D.alias=="string"?D.alias=[D.alias,m]:D.alias.push(m):D.alias=[m]}}}p(h.tokens)}),t.hooks.add("wrap",function(h){if(h.type==="code-block"){for(var p="",v=0,C=h.classes.length;v<C;v++){var O=h.classes[v],A=/language-(.+)/.exec(O);if(A){p=A[1];break}}var R=t.languages[p];if(R)h.content=t.highlight(u(h.content),R,p);else if(p&&p!=="none"&&t.plugins.autoloader){var D="md-"+new Date().valueOf()+"-"+Math.floor(Math.random()*1e16);h.attributes.id=D,t.plugins.autoloader.loadLanguages(p,function(){var b=document.getElementById(D);b&&(b.innerHTML=t.highlight(b.textContent,t.languages[p],p))})}}});var a=RegExp(t.languages.markup.tag.pattern.source,"gi"),o={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;function u(h){var p=h.replace(a,"");return p=p.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(v,C){if(C=C.toLowerCase(),C[0]==="#"){var O;return C[1]==="x"?O=parseInt(C.slice(2),16):O=Number(C.slice(1)),c(O)}else{var A=o[C];return A||v}}),p}t.languages.md=t.languages.markdown})(Prism);const xm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function Tn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let Xt=Tn();function bl(t){Xt=t}const ml=/[&<>"']/,Dm=new RegExp(ml.source,"g"),yl=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Im=new RegExp(yl.source,"g"),Mm={"&":"&","<":"<",">":">",'"':""","'":"'"},wl=t=>Mm[t];function tt(t,e){if(e){if(ml.test(t))return t.replace(Dm,wl)}else if(yl.test(t))return t.replace(Im,wl);return t}const Rm=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function Pm(t){return t.replace(Rm,(e,i)=>(i=i.toLowerCase(),i==="colon"?":":i.charAt(0)==="#"?i.charAt(1)==="x"?String.fromCharCode(parseInt(i.substring(2),16)):String.fromCharCode(+i.substring(1)):""))}const Om=/(^|[^\[])\^/g;function re(t,e){t=typeof t=="string"?t:t.source,e=e||"";const i={replace:(r,n)=>(n=typeof n=="object"&&"source"in n?n.source:n,n=n.replace(Om,"$1"),t=t.replace(r,n),i),getRegex:()=>new RegExp(t,e)};return i}function Sl(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}const En={exec:()=>null};function Cl(t,e){const i=t.replace(/\|/g,(s,a,o)=>{let c=!1,u=a;for(;--u>=0&&o[u]==="\\";)c=!c;return c?"|":" |"}),r=i.split(/ \|/);let n=0;if(r[0].trim()||r.shift(),r.length>0&&!r[r.length-1].trim()&&r.pop(),e)if(r.length>e)r.splice(e);else for(;r.length<e;)r.push("");for(;n<r.length;n++)r[n]=r[n].trim().replace(/\\\|/g,"|");return r}function kn(t,e,i){const r=t.length;if(r===0)return"";let n=0;for(;n<r&&t.charAt(r-n-1)===e;)n++;return t.slice(0,r-n)}function _m(t,e){if(t.indexOf(e[1])===-1)return-1;let i=0;for(let r=0;r<t.length;r++)if(t[r]==="\\")r++;else if(t[r]===e[0])i++;else if(t[r]===e[1]&&(i--,i<0))return r;return-1}function Al(t,e,i,r){const n=e.href,s=e.title?tt(e.title):null,a=t[1].replace(/\\([\[\]])/g,"$1");if(t[0].charAt(0)!=="!"){r.state.inLink=!0;const o={type:"link",raw:i,href:n,title:s,text:a,tokens:r.inlineTokens(a)};return r.state.inLink=!1,o}return{type:"image",raw:i,href:n,title:s,text:tt(a)}}function Lm(t,e){const i=t.match(/^(\s+)(?:```)/);if(i===null)return e;const r=i[1];return e.split(`
|
|
3192
3192
|
`).map(n=>{const s=n.match(/^\s+/);if(s===null)return n;const[a]=s;return a.length>=r.length?n.slice(r.length):n}).join(`
|
|
3193
|
-
`)}class
|
|
3194
|
-
`)}}}fences(e){const i=this.rules.block.fences.exec(e);if(i){const r=i[0],n=
|
|
3193
|
+
`)}class Or{constructor(e){pe(this,"options");pe(this,"rules");pe(this,"lexer");this.options=e||Xt}space(e){const i=this.rules.block.newline.exec(e);if(i&&i[0].length>0)return{type:"space",raw:i[0]}}code(e){const i=this.rules.block.code.exec(e);if(i){const r=i[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:i[0],codeBlockStyle:"indented",text:this.options.pedantic?r:kn(r,`
|
|
3194
|
+
`)}}}fences(e){const i=this.rules.block.fences.exec(e);if(i){const r=i[0],n=Lm(r,i[3]||"");return{type:"code",raw:r,lang:i[2]?i[2].trim().replace(this.rules.inline._escapes,"$1"):i[2],text:n}}}heading(e){const i=this.rules.block.heading.exec(e);if(i){let r=i[2].trim();if(/#$/.test(r)){const n=kn(r,"#");(this.options.pedantic||!n||/ $/.test(n))&&(r=n.trim())}return{type:"heading",raw:i[0],depth:i[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(e){const i=this.rules.block.hr.exec(e);if(i)return{type:"hr",raw:i[0]}}blockquote(e){const i=this.rules.block.blockquote.exec(e);if(i){const r=kn(i[0].replace(/^ *>[ \t]?/gm,""),`
|
|
3195
3195
|
`),n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(r);return this.lexer.state.top=n,{type:"blockquote",raw:i[0],tokens:s,text:r}}}list(e){let i=this.rules.block.list.exec(e);if(i){let r=i[1].trim();const n=r.length>1,s={type:"list",raw:"",ordered:n,start:n?+r.slice(0,-1):"",loose:!1,items:[]};r=n?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=n?r:"[*+-]");const a=new RegExp(`^( {0,3}${r})((?:[ ][^\\n]*)?(?:\\n|$))`);let o="",c="",u=!1;for(;e;){let h=!1;if(!(i=a.exec(e))||this.rules.block.hr.test(e))break;o=i[0],e=e.substring(o.length);let p=i[2].split(`
|
|
3196
|
-
`,1)[0].replace(/^\t+/,
|
|
3197
|
-
`,1)[0],
|
|
3198
|
-
`,e=e.substring(v.length+1),h=!0),!h){const
|
|
3199
|
-
`,1)[0];if(v=
|
|
3200
|
-
`+v.slice(
|
|
3201
|
-
`+v}!
|
|
3202
|
-
`,e=e.substring(
|
|
3203
|
-
`):[]};if(r.header.length===r.align.length){let n=r.align.length,s,a,o,c;for(s=0;s<n;s++){const u=r.align[s];u&&(/^ *-+: *$/.test(u)?r.align[s]="right":/^ *:-+: *$/.test(u)?r.align[s]="center":/^ *:-+ *$/.test(u)?r.align[s]="left":r.align[s]=null)}for(n=r.rows.length,s=0;s<n;s++)r.rows[s]=
|
|
3204
|
-
`?i[1].slice(0,-1):i[1];return{type:"paragraph",raw:i[0],text:r,tokens:this.lexer.inline(r)}}}text(e){const i=this.rules.block.text.exec(e);if(i)return{type:"text",raw:i[0],text:i[0],tokens:this.lexer.inline(i[0])}}escape(e){const i=this.rules.inline.escape.exec(e);if(i)return{type:"escape",raw:i[0],text
|
|
3205
|
-
]`).replace("lheading",
|
|
3196
|
+
`,1)[0].replace(/^\t+/,D=>" ".repeat(3*D.length)),v=e.split(`
|
|
3197
|
+
`,1)[0],C=0;this.options.pedantic?(C=2,c=p.trimStart()):(C=i[2].search(/[^ ]/),C=C>4?1:C,c=p.slice(C),C+=i[1].length);let O=!1;if(!p&&/^ *$/.test(v)&&(o+=v+`
|
|
3198
|
+
`,e=e.substring(v.length+1),h=!0),!h){const D=new RegExp(`^ {0,${Math.min(3,C-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,C-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),m=new RegExp(`^ {0,${Math.min(3,C-1)}}(?:\`\`\`|~~~)`),y=new RegExp(`^ {0,${Math.min(3,C-1)}}#`);for(;e;){const w=e.split(`
|
|
3199
|
+
`,1)[0];if(v=w,this.options.pedantic&&(v=v.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),m.test(v)||y.test(v)||D.test(v)||b.test(e))break;if(v.search(/[^ ]/)>=C||!v.trim())c+=`
|
|
3200
|
+
`+v.slice(C);else{if(O||p.search(/[^ ]/)>=4||m.test(p)||y.test(p)||b.test(p))break;c+=`
|
|
3201
|
+
`+v}!O&&!v.trim()&&(O=!0),o+=w+`
|
|
3202
|
+
`,e=e.substring(w.length+1),p=v.slice(C)}}s.loose||(u?s.loose=!0:/\n *\n *$/.test(o)&&(u=!0));let A=null,R;this.options.gfm&&(A=/^\[[ xX]\] /.exec(c),A&&(R=A[0]!=="[ ] ",c=c.replace(/^\[[ xX]\] +/,""))),s.items.push({type:"list_item",raw:o,task:!!A,checked:R,loose:!1,text:c,tokens:[]}),s.raw+=o}s.items[s.items.length-1].raw=o.trimEnd(),s.items[s.items.length-1].text=c.trimEnd(),s.raw=s.raw.trimEnd();for(let h=0;h<s.items.length;h++)if(this.lexer.state.top=!1,s.items[h].tokens=this.lexer.blockTokens(s.items[h].text,[]),!s.loose){const p=s.items[h].tokens.filter(C=>C.type==="space"),v=p.length>0&&p.some(C=>/\n.*\n/.test(C.raw));s.loose=v}if(s.loose)for(let h=0;h<s.items.length;h++)s.items[h].loose=!0;return s}}html(e){const i=this.rules.block.html.exec(e);if(i)return{type:"html",block:!0,raw:i[0],pre:i[1]==="pre"||i[1]==="script"||i[1]==="style",text:i[0]}}def(e){const i=this.rules.block.def.exec(e);if(i){const r=i[1].toLowerCase().replace(/\s+/g," "),n=i[2]?i[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline._escapes,"$1"):"",s=i[3]?i[3].substring(1,i[3].length-1).replace(this.rules.inline._escapes,"$1"):i[3];return{type:"def",tag:r,raw:i[0],href:n,title:s}}}table(e){const i=this.rules.block.table.exec(e);if(i){if(!/[:|]/.test(i[2]))return;const r={type:"table",raw:i[0],header:Cl(i[1]).map(n=>({text:n,tokens:[]})),align:i[2].replace(/^\||\| *$/g,"").split("|"),rows:i[3]&&i[3].trim()?i[3].replace(/\n[ \t]*$/,"").split(`
|
|
3203
|
+
`):[]};if(r.header.length===r.align.length){let n=r.align.length,s,a,o,c;for(s=0;s<n;s++){const u=r.align[s];u&&(/^ *-+: *$/.test(u)?r.align[s]="right":/^ *:-+: *$/.test(u)?r.align[s]="center":/^ *:-+ *$/.test(u)?r.align[s]="left":r.align[s]=null)}for(n=r.rows.length,s=0;s<n;s++)r.rows[s]=Cl(r.rows[s],r.header.length).map(u=>({text:u,tokens:[]}));for(n=r.header.length,a=0;a<n;a++)r.header[a].tokens=this.lexer.inline(r.header[a].text);for(n=r.rows.length,a=0;a<n;a++)for(c=r.rows[a],o=0;o<c.length;o++)c[o].tokens=this.lexer.inline(c[o].text);return r}}}lheading(e){const i=this.rules.block.lheading.exec(e);if(i)return{type:"heading",raw:i[0],depth:i[2].charAt(0)==="="?1:2,text:i[1],tokens:this.lexer.inline(i[1])}}paragraph(e){const i=this.rules.block.paragraph.exec(e);if(i){const r=i[1].charAt(i[1].length-1)===`
|
|
3204
|
+
`?i[1].slice(0,-1):i[1];return{type:"paragraph",raw:i[0],text:r,tokens:this.lexer.inline(r)}}}text(e){const i=this.rules.block.text.exec(e);if(i)return{type:"text",raw:i[0],text:i[0],tokens:this.lexer.inline(i[0])}}escape(e){const i=this.rules.inline.escape.exec(e);if(i)return{type:"escape",raw:i[0],text:tt(i[1])}}tag(e){const i=this.rules.inline.tag.exec(e);if(i)return!this.lexer.state.inLink&&/^<a /i.test(i[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(i[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:i[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:i[0]}}link(e){const i=this.rules.inline.link.exec(e);if(i){const r=i[2].trim();if(!this.options.pedantic&&/^</.test(r)){if(!/>$/.test(r))return;const a=kn(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{const a=_m(i[2],"()");if(a>-1){const c=(i[0].indexOf("!")===0?5:4)+i[1].length+a;i[2]=i[2].substring(0,a),i[0]=i[0].substring(0,c).trim(),i[3]=""}}let n=i[2],s="";if(this.options.pedantic){const a=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);a&&(n=a[1],s=a[3])}else s=i[3]?i[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(this.options.pedantic&&!/>$/.test(r)?n=n.slice(1):n=n.slice(1,-1)),Al(i,{href:n&&n.replace(this.rules.inline._escapes,"$1"),title:s&&s.replace(this.rules.inline._escapes,"$1")},i[0],this.lexer)}}reflink(e,i){let r;if((r=this.rules.inline.reflink.exec(e))||(r=this.rules.inline.nolink.exec(e))){let n=(r[2]||r[1]).replace(/\s+/g," ");if(n=i[n.toLowerCase()],!n){const s=r[0].charAt(0);return{type:"text",raw:s,text:s}}return Al(r,n,r[0],this.lexer)}}emStrong(e,i,r=""){let n=this.rules.inline.emStrong.lDelim.exec(e);if(!n||n[3]&&r.match(/[\p{L}\p{N}]/u))return;if(!(n[1]||n[2]||"")||!r||this.rules.inline.punctuation.exec(r)){const a=[...n[0]].length-1;let o,c,u=a,h=0;const p=n[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(p.lastIndex=0,i=i.slice(-1*e.length+a);(n=p.exec(i))!=null;){if(o=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!o)continue;if(c=[...o].length,n[3]||n[4]){u+=c;continue}else if((n[5]||n[6])&&a%3&&!((a+c)%3)){h+=c;continue}if(u-=c,u>0)continue;c=Math.min(c,c+u+h);const v=[...n[0]][0].length,C=e.slice(0,a+n.index+v+c);if(Math.min(a,c)%2){const A=C.slice(1,-1);return{type:"em",raw:C,text:A,tokens:this.lexer.inlineTokens(A)}}const O=C.slice(2,-2);return{type:"strong",raw:C,text:O,tokens:this.lexer.inlineTokens(O)}}}}codespan(e){const i=this.rules.inline.code.exec(e);if(i){let r=i[2].replace(/\n/g," ");const n=/[^ ]/.test(r),s=/^ /.test(r)&&/ $/.test(r);return n&&s&&(r=r.substring(1,r.length-1)),r=tt(r,!0),{type:"codespan",raw:i[0],text:r}}}br(e){const i=this.rules.inline.br.exec(e);if(i)return{type:"br",raw:i[0]}}del(e){const i=this.rules.inline.del.exec(e);if(i)return{type:"del",raw:i[0],text:i[2],tokens:this.lexer.inlineTokens(i[2])}}autolink(e){const i=this.rules.inline.autolink.exec(e);if(i){let r,n;return i[2]==="@"?(r=tt(i[1]),n="mailto:"+r):(r=tt(i[1]),n=r),{type:"link",raw:i[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}url(e){let i;if(i=this.rules.inline.url.exec(e)){let r,n;if(i[2]==="@")r=tt(i[0]),n="mailto:"+r;else{let s;do s=i[0],i[0]=this.rules.inline._backpedal.exec(i[0])[0];while(s!==i[0]);r=tt(i[0]),i[1]==="www."?n="http://"+i[0]:n=i[0]}return{type:"link",raw:i[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e){const i=this.rules.inline.text.exec(e);if(i){let r;return this.lexer.state.inRawBlock?r=i[0]:r=tt(i[0]),{type:"text",raw:i[0],text:r}}}}const V={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:En,lheading:/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/};V._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/,V._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,V.def=re(V.def).replace("label",V._label).replace("title",V._title).getRegex(),V.bullet=/(?:[*+-]|\d{1,9}[.)])/,V.listItemStart=re(/^( *)(bull) */).replace("bull",V.bullet).getRegex(),V.list=re(V.list).replace(/bull/g,V.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+V.def.source+")").getRegex(),V._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",V._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,V.html=re(V.html,"i").replace("comment",V._comment).replace("tag",V._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),V.lheading=re(V.lheading).replace(/bull/g,V.bullet).getRegex(),V.paragraph=re(V._paragraph).replace("hr",V.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",V._tag).getRegex(),V.blockquote=re(V.blockquote).replace("paragraph",V.paragraph).getRegex(),V.normal={...V},V.gfm={...V.normal,table:"^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},V.gfm.table=re(V.gfm.table).replace("hr",V.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",V._tag).getRegex(),V.gfm.paragraph=re(V._paragraph).replace("hr",V.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",V.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",V._tag).getRegex(),V.pedantic={...V.normal,html:re(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",V._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:En,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:re(V.normal._paragraph).replace("hr",V.hr).replace("heading",` *#{1,6} *[^
|
|
3205
|
+
]`).replace("lheading",V.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const P={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:En,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,rDelimAst:/^[^_*]*?__[^_*]*?\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\*)[punct](\*+)(?=[\s]|$)|[^punct\s](\*+)(?!\*)(?=[punct\s]|$)|(?!\*)[punct\s](\*+)(?=[^punct\s])|[\s](\*+)(?!\*)(?=[punct])|(?!\*)[punct](\*+)(?!\*)(?=[punct])|[^punct\s](\*+)(?=[^punct\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\s]|$)|[^punct\s](_+)(?!_)(?=[punct\s]|$)|(?!_)[punct\s](_+)(?=[^punct\s])|[\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:En,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^((?![*_])[\spunctuation])/};P._punctuation="\\p{P}$+<=>`^|~",P.punctuation=re(P.punctuation,"u").replace(/punctuation/g,P._punctuation).getRegex(),P.blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,P.anyPunctuation=/\\[punct]/g,P._escapes=/\\([punct])/g,P._comment=re(V._comment).replace("(?:-->|$)","-->").getRegex(),P.emStrong.lDelim=re(P.emStrong.lDelim,"u").replace(/punct/g,P._punctuation).getRegex(),P.emStrong.rDelimAst=re(P.emStrong.rDelimAst,"gu").replace(/punct/g,P._punctuation).getRegex(),P.emStrong.rDelimUnd=re(P.emStrong.rDelimUnd,"gu").replace(/punct/g,P._punctuation).getRegex(),P.anyPunctuation=re(P.anyPunctuation,"gu").replace(/punct/g,P._punctuation).getRegex(),P._escapes=re(P._escapes,"gu").replace(/punct/g,P._punctuation).getRegex(),P._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,P._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,P.autolink=re(P.autolink).replace("scheme",P._scheme).replace("email",P._email).getRegex(),P._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,P.tag=re(P.tag).replace("comment",P._comment).replace("attribute",P._attribute).getRegex(),P._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,P._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,P._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,P.link=re(P.link).replace("label",P._label).replace("href",P._href).replace("title",P._title).getRegex(),P.reflink=re(P.reflink).replace("label",P._label).replace("ref",V._label).getRegex(),P.nolink=re(P.nolink).replace("ref",V._label).getRegex(),P.reflinkSearch=re(P.reflinkSearch,"g").replace("reflink",P.reflink).replace("nolink",P.nolink).getRegex(),P.normal={...P},P.pedantic={...P.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:re(/^!?\[(label)\]\((.*?)\)/).replace("label",P._label).getRegex(),reflink:re(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",P._label).getRegex()},P.gfm={...P.normal,escape:re(P.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},P.gfm.url=re(P.gfm.url,"i").replace("email",P.gfm._extended_email).getRegex(),P.breaks={...P.gfm,br:re(P.br).replace("{2,}","*").getRegex(),text:re(P.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};class vt{constructor(e){pe(this,"tokens");pe(this,"options");pe(this,"state");pe(this,"tokenizer");pe(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Xt,this.options.tokenizer=this.options.tokenizer||new Or,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const i={block:V.normal,inline:P.normal};this.options.pedantic?(i.block=V.pedantic,i.inline=P.pedantic):this.options.gfm&&(i.block=V.gfm,this.options.breaks?i.inline=P.breaks:i.inline=P.gfm),this.tokenizer.rules=i}static get rules(){return{block:V,inline:P}}static lex(e,i){return new vt(i).lex(e)}static lexInline(e,i){return new vt(i).inlineTokens(e)}lex(e){e=e.replace(/\r\n|\r/g,`
|
|
3206
3206
|
`),this.blockTokens(e,this.tokens);let i;for(;i=this.inlineQueue.shift();)this.inlineTokens(i.src,i.tokens);return this.tokens}blockTokens(e,i=[]){this.options.pedantic?e=e.replace(/\t/g," ").replace(/^ +$/gm,""):e=e.replace(/^( *)(\t+)/gm,(o,c,u)=>c+" ".repeat(u.length));let r,n,s,a;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(o=>(r=o.call({lexer:this},e,i))?(e=e.substring(r.raw.length),i.push(r),!0):!1))){if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length),r.raw.length===1&&i.length>0?i[i.length-1].raw+=`
|
|
3207
3207
|
`:i.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length),n=i[i.length-1],n&&(n.type==="paragraph"||n.type==="text")?(n.raw+=`
|
|
3208
3208
|
`+r.raw,n.text+=`
|
|
@@ -3212,9 +3212,9 @@ var SignalWireUI=(function(l){"use strict";var Qm=Object.defineProperty;var jl=l
|
|
|
3212
3212
|
`+r.raw,n.text+=`
|
|
3213
3213
|
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):i.push(r),a=s.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length),n=i[i.length-1],n&&n.type==="text"?(n.raw+=`
|
|
3214
3214
|
`+r.raw,n.text+=`
|
|
3215
|
-
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):i.push(r);continue}if(e){const o="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(o);break}else throw new Error(o)}}return this.state.top=!0,i}inline(e,i=[]){return this.inlineQueue.push({src:e,tokens:i}),i}inlineTokens(e,i=[]){let r,n,s,a=e,o,c,u;if(this.tokens.links){const h=Object.keys(this.tokens.links);if(h.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)h.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(c||(u=""),c=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(h=>(r=h.call({lexer:this},e,i))?(e=e.substring(r.raw.length),i.push(r),!0):!1))){if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),n=i[i.length-1],n&&r.type==="text"&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length),n=i[i.length-1],n&&r.type==="text"&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(r=this.tokenizer.emStrong(e,a,u)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.del(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),i.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),i.push(r);continue}if(s=e,this.options.extensions&&this.options.extensions.startInline){let h=1/0;const p=e.slice(1);let v;this.options.extensions.startInline.forEach(
|
|
3216
|
-
`,n?'<pre><code class="language-'
|
|
3217
|
-
`:"<pre><code>"+(r?e
|
|
3215
|
+
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):i.push(r);continue}if(e){const o="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(o);break}else throw new Error(o)}}return this.state.top=!0,i}inline(e,i=[]){return this.inlineQueue.push({src:e,tokens:i}),i}inlineTokens(e,i=[]){let r,n,s,a=e,o,c,u;if(this.tokens.links){const h=Object.keys(this.tokens.links);if(h.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)h.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(c||(u=""),c=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(h=>(r=h.call({lexer:this},e,i))?(e=e.substring(r.raw.length),i.push(r),!0):!1))){if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),n=i[i.length-1],n&&r.type==="text"&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length),n=i[i.length-1],n&&r.type==="text"&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(r=this.tokenizer.emStrong(e,a,u)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.del(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),i.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),i.push(r);continue}if(s=e,this.options.extensions&&this.options.extensions.startInline){let h=1/0;const p=e.slice(1);let v;this.options.extensions.startInline.forEach(C=>{v=C.call({lexer:this},p),typeof v=="number"&&v>=0&&(h=Math.min(h,v))}),h<1/0&&h>=0&&(s=e.substring(0,h+1))}if(r=this.tokenizer.inlineText(s)){e=e.substring(r.raw.length),r.raw.slice(-1)!=="_"&&(u=r.raw.slice(-1)),c=!0,n=i[i.length-1],n&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(e){const h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return i}}class _r{constructor(e){pe(this,"options");this.options=e||Xt}code(e,i,r){var s;const n=(s=(i||"").match(/^\S*/))==null?void 0:s[0];return e=e.replace(/\n$/,"")+`
|
|
3216
|
+
`,n?'<pre><code class="language-'+tt(n)+'">'+(r?e:tt(e,!0))+`</code></pre>
|
|
3217
|
+
`:"<pre><code>"+(r?e:tt(e,!0))+`</code></pre>
|
|
3218
3218
|
`}blockquote(e){return`<blockquote>
|
|
3219
3219
|
${e}</blockquote>
|
|
3220
3220
|
`}html(e,i){return e}heading(e,i,r){return`<h${i}>${e}</h${i}>
|
|
@@ -3230,8 +3230,9 @@ ${e}</blockquote>
|
|
|
3230
3230
|
`}tablerow(e){return`<tr>
|
|
3231
3231
|
${e}</tr>
|
|
3232
3232
|
`}tablecell(e,i){const r=i.header?"th":"td";return(i.align?`<${r} align="${i.align}">`:`<${r}>`)+e+`</${r}>
|
|
3233
|
-
`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return"<br>"}del(e){return`<del>${e}</del>`}link(e,i,r){const n=
|
|
3234
|
-
`+(a.tokens?this.parseInline(a.tokens):a.text);r+=i?this.renderer.paragraph(o):o;continue}default:{const a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}parseInline(e,i){i=i||this.renderer;let r="";for(let n=0;n<e.length;n++){const s=e[n];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type]){const a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){r+=a||"";continue}}switch(s.type){case"escape":{const a=s;r+=i.text(a.text);break}case"html":{const a=s;r+=i.html(a.text);break}case"link":{const a=s;r+=i.link(a.href,a.title,this.parseInline(a.tokens,i));break}case"image":{const a=s;r+=i.image(a.href,a.title,a.text);break}case"strong":{const a=s;r+=i.strong(this.parseInline(a.tokens,i));break}case"em":{const a=s;r+=i.em(this.parseInline(a.tokens,i));break}case"codespan":{const a=s;r+=i.codespan(a.text);break}case"br":{r+=i.br();break}case"del":{const a=s;r+=i.del(this.parseInline(a.tokens,i));break}case"text":{const a=s;r+=i.text(a.text);break}default:{const a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}}class
|
|
3235
|
-
Please report this to https://github.com/markedjs/marked.`,e){const n="<p>An error occurred:</p><pre>"+$e(r.message+"",!0)+"</pre>";return i?Promise.resolve(n):n}if(i)return Promise.reject(r);throw r}};const gi=new al;function $(t,e){return gi.parse(t,e)}$.options=$.setOptions=function(t){return gi.setOptions(t),$.defaults=gi.defaults,$c($.defaults),$},$.getDefaults=gn,$.defaults=Kt,$.use=function(...t){return gi.use(...t),$.defaults=gi.defaults,$c($.defaults),$},$.walkTokens=function(t,e){return gi.walkTokens(t,e)},$.parseInline=gi.parseInline,$.Parser=mt,$.parser=mt.parse,$.Renderer=Sr,$.TextRenderer=bn,$.Lexer=bt,$.lexer=bt.lex,$.Tokenizer=wr,$.Hooks=ji,$.parse=$;const um=$.options,dm=$.setOptions,hm=$.use,pm=$.walkTokens,gm=$.parseInline,fm=$,vm=mt.parse,bm=bt.lex,mm=Object.freeze(Object.defineProperty({__proto__:null,Hooks:ji,Lexer:bt,Marked:al,Parser:mt,Renderer:Sr,TextRenderer:bn,Tokenizer:wr,get defaults(){return Kt},getDefaults:gn,lexer:bm,marked:$,options:um,parse:fm,parseInline:gm,parser:vm,setOptions:dm,use:hm,walkTokens:pm},Symbol.toStringTag,{value:"Module"}));/*! @license DOMPurify 3.4.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.1/LICENSE */const{entries:ol,setPrototypeOf:cl,isFrozen:ym,getPrototypeOf:wm,getOwnPropertyDescriptor:Sm}=Object;let{freeze:Ve,seal:ct,create:Wi}=Object,{apply:Cs,construct:As}=typeof Reflect<"u"&&Reflect;Ve||(Ve=function(e){return e}),ct||(ct=function(e){return e}),Cs||(Cs=function(e,i){for(var r=arguments.length,n=new Array(r>2?r-2:0),s=2;s<r;s++)n[s-2]=arguments[s];return e.apply(i,n)}),As||(As=function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return new e(...r)});const Cr=ye(Array.prototype.forEach),Cm=ye(Array.prototype.lastIndexOf),ll=ye(Array.prototype.pop),Ar=ye(Array.prototype.push),Am=ye(Array.prototype.splice),He=Array.isArray,Tr=ye(String.prototype.toLowerCase),Ts=ye(String.prototype.toString),ul=ye(String.prototype.match),Gi=ye(String.prototype.replace),dl=ye(String.prototype.indexOf),Tm=ye(String.prototype.trim),Em=ye(Number.prototype.toString),km=ye(Boolean.prototype.toString),hl=typeof BigInt>"u"?null:ye(BigInt.prototype.toString),pl=typeof Symbol>"u"?null:ye(Symbol.prototype.toString),ge=ye(Object.prototype.hasOwnProperty),Er=ye(Object.prototype.toString),_e=ye(RegExp.prototype.test),mn=xm(TypeError);function ye(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return Cs(t,e,r)}}function xm(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return As(t,i)}}function q(t,e){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Tr;if(cl&&cl(t,null),!He(e))return t;let r=e.length;for(;r--;){let n=e[r];if(typeof n=="string"){const s=i(n);s!==n&&(ym(e)||(e[r]=s),n=s)}t[n]=!0}return t}function Dm(t){for(let e=0;e<t.length;e++)ge(t,e)||(t[e]=null);return t}function Xe(t){const e=Wi(null);for(const[i,r]of ol(t))ge(t,i)&&(He(r)?e[i]=Dm(r):r&&typeof r=="object"&&r.constructor===Object?e[i]=Xe(r):e[i]=r);return e}function Im(t){switch(typeof t){case"string":return t;case"number":return Em(t);case"boolean":return km(t);case"bigint":return hl?hl(t):"0";case"symbol":return pl?pl(t):"Symbol()";case"undefined":return Er(t);case"function":case"object":{if(t===null)return Er(t);const e=t,i=qi(e,"toString");if(typeof i=="function"){const r=i(e);return typeof r=="string"?r:Er(r)}return Er(t)}default:return Er(t)}}function qi(t,e){for(;t!==null;){const r=Sm(t,e);if(r){if(r.get)return ye(r.get);if(typeof r.value=="function")return ye(r.value)}t=wm(t)}function i(){return null}return i}function Mm(t){try{return _e(t,""),!0}catch{return!1}}const gl=Ve(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Es=Ve(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),ks=Ve(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Rm=Ve(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),xs=Ve(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Pm=Ve(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),fl=Ve(["#text"]),vl=Ve(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Ds=Ve(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),bl=Ve(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),yn=Ve(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Om=ct(/\{\{[\w\W]*|[\w\W]*\}\}/gm),_m=ct(/<%[\w\W]*|[\w\W]*%>/gm),Lm=ct(/\$\{[\w\W]*/gm),Fm=ct(/^data-[\-\w.\u00B7-\uFFFF]+$/),Um=ct(/^aria-[\-\w]+$/),ml=ct(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Nm=ct(/^(?:\w+script|data):/i),Bm=ct(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),yl=ct(/^html$/i),zm=ct(/^[a-z][.\w]*(-[.\w]+)+$/i);var wl=Object.freeze({__proto__:null,ARIA_ATTR:Um,ATTR_WHITESPACE:Bm,CUSTOM_ELEMENT:zm,DATA_ATTR:Fm,DOCTYPE_NAME:yl,ERB_EXPR:_m,IS_ALLOWED_URI:ml,IS_SCRIPT_OR_DATA:Nm,MUSTACHE_EXPR:Om,TMPLIT_EXPR:Lm});const kr={element:1,text:3,progressingInstruction:7,comment:8,document:9},Vm=function(){return typeof window>"u"?null:window},Hm=function(e,i){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null;const n="data-tt-policy-suffix";i&&i.hasAttribute(n)&&(r=i.getAttribute(n));const s="dompurify"+(r?"#"+r:"");try{return e.createPolicy(s,{createHTML(a){return a},createScriptURL(a){return a}})}catch{return console.warn("TrustedTypes policy "+s+" could not be created."),null}},Sl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Cl(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Vm();const e=H=>Cl(H);if(e.version="3.4.1",e.removed=[],!t||!t.document||t.document.nodeType!==kr.document||!t.Element)return e.isSupported=!1,e;let{document:i}=t;const r=i,n=r.currentScript,{DocumentFragment:s,HTMLTemplateElement:a,Node:o,Element:c,NodeFilter:u,NamedNodeMap:h=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:p,DOMParser:v,trustedTypes:m}=t,R=c.prototype,C=qi(R,"cloneNode"),I=qi(R,"remove"),x=qi(R,"nextSibling"),f=qi(R,"childNodes"),b=qi(R,"parentNode");if(typeof a=="function"){const H=i.createElement("template");H.content&&H.content.ownerDocument&&(i=H.content.ownerDocument)}let y,A="";const{implementation:D,createNodeIterator:N,createDocumentFragment:Y,getElementsByTagName:_}=i,{importNode:re}=r;let F=Sl();e.isSupported=typeof ol=="function"&&typeof b=="function"&&D&&D.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:ee,ERB_EXPR:lt,TMPLIT_EXPR:Mt,DATA_ATTR:xr,ARIA_ATTR:Is,IS_SCRIPT_OR_DATA:wn,ATTR_WHITESPACE:Ae,CUSTOM_ELEMENT:ut}=wl;let{IS_ALLOWED_URI:Bt}=wl,he=null;const Ye=q({},[...gl,...Es,...ks,...xs,...fl]);let Te=null;const wt=q({},[...vl,...Ds,...bl,...yn]);let ne=Object.seal(Wi(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Rt=null,zt=null;const dt=Object.seal(Wi(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Dr=!0,bi=!0,mi=!1,Sn=!0,St=!1,Ir=!0,yi=!1,Ms=!1,Rs=!1,Xi=!1,Cn=!1,An=!1,El=!0,kl=!1;const xl="user-content-";let Ps=!0,Mr=!1,Yi={},Pt=null;const Os=q({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Dl=null;const Il=q({},["audio","video","img","source","image","track"]);let _s=null;const Ml=q({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Tn="http://www.w3.org/1998/Math/MathML",En="http://www.w3.org/2000/svg",Ot="http://www.w3.org/1999/xhtml";let Ki=Ot,Ls=!1,Fs=null;const Wm=q({},[Tn,En,Ot],Ts);let Us=q({},["mi","mo","mn","ms","mtext"]),Ns=q({},["annotation-xml"]);const Gm=q({},["title","style","font","a","script"]);let Rr=null;const qm=["application/xhtml+xml","text/html"],Xm="text/html";let Ee=null,Zi=null;const Ym=i.createElement("form"),Rl=function(d){return d instanceof RegExp||d instanceof Function},Bs=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Zi&&Zi===d)return;(!d||typeof d!="object")&&(d={}),d=Xe(d),Rr=qm.indexOf(d.PARSER_MEDIA_TYPE)===-1?Xm:d.PARSER_MEDIA_TYPE,Ee=Rr==="application/xhtml+xml"?Ts:Tr,he=ge(d,"ALLOWED_TAGS")&&He(d.ALLOWED_TAGS)?q({},d.ALLOWED_TAGS,Ee):Ye,Te=ge(d,"ALLOWED_ATTR")&&He(d.ALLOWED_ATTR)?q({},d.ALLOWED_ATTR,Ee):wt,Fs=ge(d,"ALLOWED_NAMESPACES")&&He(d.ALLOWED_NAMESPACES)?q({},d.ALLOWED_NAMESPACES,Ts):Wm,_s=ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)?q(Xe(Ml),d.ADD_URI_SAFE_ATTR,Ee):Ml,Dl=ge(d,"ADD_DATA_URI_TAGS")&&He(d.ADD_DATA_URI_TAGS)?q(Xe(Il),d.ADD_DATA_URI_TAGS,Ee):Il,Pt=ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)?q({},d.FORBID_CONTENTS,Ee):Os,Rt=ge(d,"FORBID_TAGS")&&He(d.FORBID_TAGS)?q({},d.FORBID_TAGS,Ee):Xe({}),zt=ge(d,"FORBID_ATTR")&&He(d.FORBID_ATTR)?q({},d.FORBID_ATTR,Ee):Xe({}),Yi=ge(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?Xe(d.USE_PROFILES):d.USE_PROFILES:!1,Dr=d.ALLOW_ARIA_ATTR!==!1,bi=d.ALLOW_DATA_ATTR!==!1,mi=d.ALLOW_UNKNOWN_PROTOCOLS||!1,Sn=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,St=d.SAFE_FOR_TEMPLATES||!1,Ir=d.SAFE_FOR_XML!==!1,yi=d.WHOLE_DOCUMENT||!1,Xi=d.RETURN_DOM||!1,Cn=d.RETURN_DOM_FRAGMENT||!1,An=d.RETURN_TRUSTED_TYPE||!1,Rs=d.FORCE_BODY||!1,El=d.SANITIZE_DOM!==!1,kl=d.SANITIZE_NAMED_PROPS||!1,Ps=d.KEEP_CONTENT!==!1,Mr=d.IN_PLACE||!1,Bt=Mm(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:ml,Ki=typeof d.NAMESPACE=="string"?d.NAMESPACE:Ot,Us=ge(d,"MATHML_TEXT_INTEGRATION_POINTS")&&d.MATHML_TEXT_INTEGRATION_POINTS&&typeof d.MATHML_TEXT_INTEGRATION_POINTS=="object"?Xe(d.MATHML_TEXT_INTEGRATION_POINTS):q({},["mi","mo","mn","ms","mtext"]),Ns=ge(d,"HTML_INTEGRATION_POINTS")&&d.HTML_INTEGRATION_POINTS&&typeof d.HTML_INTEGRATION_POINTS=="object"?Xe(d.HTML_INTEGRATION_POINTS):q({},["annotation-xml"]);const S=ge(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?Xe(d.CUSTOM_ELEMENT_HANDLING):Wi(null);if(ne=Wi(null),ge(S,"tagNameCheck")&&Rl(S.tagNameCheck)&&(ne.tagNameCheck=S.tagNameCheck),ge(S,"attributeNameCheck")&&Rl(S.attributeNameCheck)&&(ne.attributeNameCheck=S.attributeNameCheck),ge(S,"allowCustomizedBuiltInElements")&&typeof S.allowCustomizedBuiltInElements=="boolean"&&(ne.allowCustomizedBuiltInElements=S.allowCustomizedBuiltInElements),St&&(bi=!1),Cn&&(Xi=!0),Yi&&(he=q({},fl),Te=Wi(null),Yi.html===!0&&(q(he,gl),q(Te,vl)),Yi.svg===!0&&(q(he,Es),q(Te,Ds),q(Te,yn)),Yi.svgFilters===!0&&(q(he,ks),q(Te,Ds),q(Te,yn)),Yi.mathMl===!0&&(q(he,xs),q(Te,bl),q(Te,yn))),dt.tagCheck=null,dt.attributeCheck=null,ge(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?dt.tagCheck=d.ADD_TAGS:He(d.ADD_TAGS)&&(he===Ye&&(he=Xe(he)),q(he,d.ADD_TAGS,Ee))),ge(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?dt.attributeCheck=d.ADD_ATTR:He(d.ADD_ATTR)&&(Te===wt&&(Te=Xe(Te)),q(Te,d.ADD_ATTR,Ee))),ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)&&q(_s,d.ADD_URI_SAFE_ATTR,Ee),ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)&&(Pt===Os&&(Pt=Xe(Pt)),q(Pt,d.FORBID_CONTENTS,Ee)),ge(d,"ADD_FORBID_CONTENTS")&&He(d.ADD_FORBID_CONTENTS)&&(Pt===Os&&(Pt=Xe(Pt)),q(Pt,d.ADD_FORBID_CONTENTS,Ee)),Ps&&(he["#text"]=!0),yi&&q(he,["html","head","body"]),he.table&&(q(he,["tbody"]),delete Rt.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw mn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw mn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');y=d.TRUSTED_TYPES_POLICY,A=y.createHTML("")}else y===void 0&&(y=Hm(m,n)),y!==null&&typeof A=="string"&&(A=y.createHTML(""));Ve&&Ve(d),Zi=d},Pl=q({},[...Es,...ks,...Rm]),Ol=q({},[...xs,...Pm]),Km=function(d){let S=b(d);(!S||!S.tagName)&&(S={namespaceURI:Ki,tagName:"template"});const O=Tr(d.tagName),de=Tr(S.tagName);return Fs[d.namespaceURI]?d.namespaceURI===En?S.namespaceURI===Ot?O==="svg":S.namespaceURI===Tn?O==="svg"&&(de==="annotation-xml"||Us[de]):!!Pl[O]:d.namespaceURI===Tn?S.namespaceURI===Ot?O==="math":S.namespaceURI===En?O==="math"&&Ns[de]:!!Ol[O]:d.namespaceURI===Ot?S.namespaceURI===En&&!Ns[de]||S.namespaceURI===Tn&&!Us[de]?!1:!Ol[O]&&(Gm[O]||!Pl[O]):!!(Rr==="application/xhtml+xml"&&Fs[d.namespaceURI]):!1},Ct=function(d){Ar(e.removed,{element:d});try{b(d).removeChild(d)}catch{I(d)}},wi=function(d,S){try{Ar(e.removed,{attribute:S.getAttributeNode(d),from:S})}catch{Ar(e.removed,{attribute:null,from:S})}if(S.removeAttribute(d),d==="is")if(Xi||Cn)try{Ct(S)}catch{}else try{S.setAttribute(d,"")}catch{}},_l=function(d){let S=null,O=null;if(Rs)d="<remove></remove>"+d;else{const we=ul(d,/^[\r\n\t ]+/);O=we&&we[0]}Rr==="application/xhtml+xml"&&Ki===Ot&&(d='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+d+"</body></html>");const de=y?y.createHTML(d):d;if(Ki===Ot)try{S=new v().parseFromString(de,Rr)}catch{}if(!S||!S.documentElement){S=D.createDocument(Ki,"template",null);try{S.documentElement.innerHTML=Ls?A:de}catch{}}const Fe=S.body||S.documentElement;return d&&O&&Fe.insertBefore(i.createTextNode(O),Fe.childNodes[0]||null),Ki===Ot?_.call(S,yi?"html":"body")[0]:yi?S.documentElement:Fe},Ll=function(d){return N.call(d.ownerDocument||d,d,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},zs=function(d){return d instanceof p&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof h)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},Vs=function(d){return typeof o=="function"&&d instanceof o};function Vt(H,d,S){Cr(H,O=>{O.call(e,d,S,Zi)})}const Fl=function(d){let S=null;if(Vt(F.beforeSanitizeElements,d,null),zs(d))return Ct(d),!0;const O=Ee(d.nodeName);if(Vt(F.uponSanitizeElement,d,{tagName:O,allowedTags:he}),Ir&&d.hasChildNodes()&&!Vs(d.firstElementChild)&&_e(/<[/\w!]/g,d.innerHTML)&&_e(/<[/\w!]/g,d.textContent)||Ir&&d.namespaceURI===Ot&&O==="style"&&Vs(d.firstElementChild)||d.nodeType===kr.progressingInstruction||Ir&&d.nodeType===kr.comment&&_e(/<[/\w]/g,d.data))return Ct(d),!0;if(Rt[O]||!(dt.tagCheck instanceof Function&&dt.tagCheck(O))&&!he[O]){if(!Rt[O]&&Nl(O)&&(ne.tagNameCheck instanceof RegExp&&_e(ne.tagNameCheck,O)||ne.tagNameCheck instanceof Function&&ne.tagNameCheck(O)))return!1;if(Ps&&!Pt[O]){const de=b(d)||d.parentNode,Fe=f(d)||d.childNodes;if(Fe&&de){const we=Fe.length;for(let Ke=we-1;Ke>=0;--Ke){const ht=C(Fe[Ke],!0);de.insertBefore(ht,x(d))}}}return Ct(d),!0}return d instanceof c&&!Km(d)||(O==="noscript"||O==="noembed"||O==="noframes")&&_e(/<\/no(script|embed|frames)/i,d.innerHTML)?(Ct(d),!0):(St&&d.nodeType===kr.text&&(S=d.textContent,Cr([ee,lt,Mt],de=>{S=Gi(S,de," ")}),d.textContent!==S&&(Ar(e.removed,{element:d.cloneNode()}),d.textContent=S)),Vt(F.afterSanitizeElements,d,null),!1)},Ul=function(d,S,O){if(zt[S]||El&&(S==="id"||S==="name")&&(O in i||O in Ym))return!1;if(!(bi&&!zt[S]&&_e(xr,S))){if(!(Dr&&_e(Is,S))){if(!(dt.attributeCheck instanceof Function&&dt.attributeCheck(S,d))){if(!Te[S]||zt[S]){if(!(Nl(d)&&(ne.tagNameCheck instanceof RegExp&&_e(ne.tagNameCheck,d)||ne.tagNameCheck instanceof Function&&ne.tagNameCheck(d))&&(ne.attributeNameCheck instanceof RegExp&&_e(ne.attributeNameCheck,S)||ne.attributeNameCheck instanceof Function&&ne.attributeNameCheck(S,d))||S==="is"&&ne.allowCustomizedBuiltInElements&&(ne.tagNameCheck instanceof RegExp&&_e(ne.tagNameCheck,O)||ne.tagNameCheck instanceof Function&&ne.tagNameCheck(O))))return!1}else if(!_s[S]){if(!_e(Bt,Gi(O,Ae,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&d!=="script"&&dl(O,"data:")===0&&Dl[d])){if(!(mi&&!_e(wn,Gi(O,Ae,"")))){if(O)return!1}}}}}}}return!0},Zm=q({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Nl=function(d){return!Zm[Tr(d)]&&_e(ut,d)},Bl=function(d){Vt(F.beforeSanitizeAttributes,d,null);const{attributes:S}=d;if(!S||zs(d))return;const O={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Te,forceKeepAttr:void 0};let de=S.length;for(;de--;){const Fe=S[de],{name:we,namespaceURI:Ke,value:ht}=Fe,At=Ee(we),Hs=ht;let Ie=we==="value"?Hs:Tm(Hs);if(O.attrName=At,O.attrValue=Ie,O.keepAttr=!0,O.forceKeepAttr=void 0,Vt(F.uponSanitizeAttribute,d,O),Ie=O.attrValue,kl&&(At==="id"||At==="name")&&dl(Ie,xl)!==0&&(wi(we,d),Ie=xl+Ie),Ir&&_e(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ie)){wi(we,d);continue}if(At==="attributename"&&ul(Ie,"href")){wi(we,d);continue}if(O.forceKeepAttr)continue;if(!O.keepAttr){wi(we,d);continue}if(!Sn&&_e(/\/>/i,Ie)){wi(we,d);continue}St&&Cr([ee,lt,Mt],Hl=>{Ie=Gi(Ie,Hl," ")});const Vl=Ee(d.nodeName);if(!Ul(Vl,At,Ie)){wi(we,d);continue}if(y&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ke)switch(m.getAttributeType(Vl,At)){case"TrustedHTML":{Ie=y.createHTML(Ie);break}case"TrustedScriptURL":{Ie=y.createScriptURL(Ie);break}}if(Ie!==Hs)try{Ke?d.setAttributeNS(Ke,we,Ie):d.setAttribute(we,Ie),zs(d)?Ct(d):ll(e.removed)}catch{wi(we,d)}}Vt(F.afterSanitizeAttributes,d,null)},zl=function(d){let S=null;const O=Ll(d);for(Vt(F.beforeSanitizeShadowDOM,d,null);S=O.nextNode();)Vt(F.uponSanitizeShadowNode,S,null),Fl(S),Bl(S),S.content instanceof s&&zl(S.content);Vt(F.afterSanitizeShadowDOM,d,null)};return e.sanitize=function(H){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},S=null,O=null,de=null,Fe=null;if(Ls=!H,Ls&&(H="<!-->"),typeof H!="string"&&!Vs(H)&&(H=Im(H),typeof H!="string"))throw mn("dirty is not a string, aborting");if(!e.isSupported)return H;if(Ms||Bs(d),e.removed=[],typeof H=="string"&&(Mr=!1),Mr){const ht=H.nodeName;if(typeof ht=="string"){const At=Ee(ht);if(!he[At]||Rt[At])throw mn("root node is forbidden and cannot be sanitized in-place")}}else if(H instanceof o)S=_l("<!---->"),O=S.ownerDocument.importNode(H,!0),O.nodeType===kr.element&&O.nodeName==="BODY"||O.nodeName==="HTML"?S=O:S.appendChild(O);else{if(!Xi&&!St&&!yi&&H.indexOf("<")===-1)return y&&An?y.createHTML(H):H;if(S=_l(H),!S)return Xi?null:An?A:""}S&&Rs&&Ct(S.firstChild);const we=Ll(Mr?H:S);for(;de=we.nextNode();)Fl(de),Bl(de),de.content instanceof s&&zl(de.content);if(Mr)return H;if(Xi){if(St){S.normalize();let ht=S.innerHTML;Cr([ee,lt,Mt],At=>{ht=Gi(ht,At," ")}),S.innerHTML=ht}if(Cn)for(Fe=Y.call(S.ownerDocument);S.firstChild;)Fe.appendChild(S.firstChild);else Fe=S;return(Te.shadowroot||Te.shadowrootmode)&&(Fe=re.call(r,Fe,!0)),Fe}let Ke=yi?S.outerHTML:S.innerHTML;return yi&&he["!doctype"]&&S.ownerDocument&&S.ownerDocument.doctype&&S.ownerDocument.doctype.name&&_e(yl,S.ownerDocument.doctype.name)&&(Ke="<!DOCTYPE "+S.ownerDocument.doctype.name+`>
|
|
3236
|
-
`+Ke),St&&Cr([ee,lt,Mt],ht=>{Ke=Gi(Ke,ht," ")}),y&&An?y.createHTML(Ke):Ke},e.setConfig=function(){let H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Bs(H),Ms=!0},e.clearConfig=function(){Zi=null,Ms=!1},e.isValidAttribute=function(H,d,S){Zi||Bs({});const O=Ee(H),de=Ee(d);return Ul(O,de,S)},e.addHook=function(H,d){typeof d=="function"&&Ar(F[H],d)},e.removeHook=function(H,d){if(d!==void 0){const S=Cm(F[H],d);return S===-1?void 0:Am(F[H],S,1)[0]}return ll(F[H])},e.removeHooks=function(H){F[H]=[]},e.removeAllHooks=function(){F=Sl()},e}var jm=Cl();const Al=Object.freeze(Object.defineProperty({__proto__:null,default:jm},Symbol.toStringTag,{value:"Module"}));return l.CallStateContextController=bs,l.ChatState=Dc,l.DevicesContextController=ms,l.EmbedTokenCredentialProvider=yc,l.IncomingCallController=oa,l.LitElement=Z,l.SignalWire=mc,l.StaticCredentialProvider=wc,l.TranscriptController=gr,l.UserEventController=Mc,l.callStateContext=pt,l.css=ie,l.devicesContext=nr,l.ensureSignalWireFonts=Hc,l.ensureSignalWireTheme=Vc,l.html=k,l.ready=jb,l.showPrompt=mr,l.transcriptContext=xc,l.useGoogleFont=un,l.version=Hb,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l})({});
|
|
3233
|
+
`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return"<br>"}del(e){return`<del>${e}</del>`}link(e,i,r){const n=Sl(e);if(n===null)return r;e=n;let s='<a href="'+e+'"';return i&&(s+=' title="'+i+'"'),s+=">"+r+"</a>",s}image(e,i,r){const n=Sl(e);if(n===null)return r;e=n;let s=`<img src="${e}" alt="${r}"`;return i&&(s+=` title="${i}"`),s+=">",s}text(e){return e}}class xn{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,i,r){return""+r}image(e,i,r){return""+r}br(){return""}}class bt{constructor(e){pe(this,"options");pe(this,"renderer");pe(this,"textRenderer");this.options=e||Xt,this.options.renderer=this.options.renderer||new _r,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new xn}static parse(e,i){return new bt(i).parse(e)}static parseInline(e,i){return new bt(i).parseInline(e)}parse(e,i=!0){let r="";for(let n=0;n<e.length;n++){const s=e[n];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type]){const a=s,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(a.type)){r+=o||"";continue}}switch(s.type){case"space":continue;case"hr":{r+=this.renderer.hr();continue}case"heading":{const a=s;r+=this.renderer.heading(this.parseInline(a.tokens),a.depth,Pm(this.parseInline(a.tokens,this.textRenderer)));continue}case"code":{const a=s;r+=this.renderer.code(a.text,a.lang,!!a.escaped);continue}case"table":{const a=s;let o="",c="";for(let h=0;h<a.header.length;h++)c+=this.renderer.tablecell(this.parseInline(a.header[h].tokens),{header:!0,align:a.align[h]});o+=this.renderer.tablerow(c);let u="";for(let h=0;h<a.rows.length;h++){const p=a.rows[h];c="";for(let v=0;v<p.length;v++)c+=this.renderer.tablecell(this.parseInline(p[v].tokens),{header:!1,align:a.align[v]});u+=this.renderer.tablerow(c)}r+=this.renderer.table(o,u);continue}case"blockquote":{const a=s,o=this.parse(a.tokens);r+=this.renderer.blockquote(o);continue}case"list":{const a=s,o=a.ordered,c=a.start,u=a.loose;let h="";for(let p=0;p<a.items.length;p++){const v=a.items[p],C=v.checked,O=v.task;let A="";if(v.task){const R=this.renderer.checkbox(!!C);u?v.tokens.length>0&&v.tokens[0].type==="paragraph"?(v.tokens[0].text=R+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&v.tokens[0].tokens[0].type==="text"&&(v.tokens[0].tokens[0].text=R+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:R+" "}):A+=R+" "}A+=this.parse(v.tokens,u),h+=this.renderer.listitem(A,O,!!C)}r+=this.renderer.list(h,o,c);continue}case"html":{const a=s;r+=this.renderer.html(a.text,a.block);continue}case"paragraph":{const a=s;r+=this.renderer.paragraph(this.parseInline(a.tokens));continue}case"text":{let a=s,o=a.tokens?this.parseInline(a.tokens):a.text;for(;n+1<e.length&&e[n+1].type==="text";)a=e[++n],o+=`
|
|
3234
|
+
`+(a.tokens?this.parseInline(a.tokens):a.text);r+=i?this.renderer.paragraph(o):o;continue}default:{const a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}parseInline(e,i){i=i||this.renderer;let r="";for(let n=0;n<e.length;n++){const s=e[n];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type]){const a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){r+=a||"";continue}}switch(s.type){case"escape":{const a=s;r+=i.text(a.text);break}case"html":{const a=s;r+=i.html(a.text);break}case"link":{const a=s;r+=i.link(a.href,a.title,this.parseInline(a.tokens,i));break}case"image":{const a=s;r+=i.image(a.href,a.title,a.text);break}case"strong":{const a=s;r+=i.strong(this.parseInline(a.tokens,i));break}case"em":{const a=s;r+=i.em(this.parseInline(a.tokens,i));break}case"codespan":{const a=s;r+=i.codespan(a.text);break}case"br":{r+=i.br();break}case"del":{const a=s;r+=i.del(this.parseInline(a.tokens,i));break}case"text":{const a=s;r+=i.text(a.text);break}default:{const a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}}class Zi{constructor(e){pe(this,"options");this.options=e||Xt}preprocess(e){return e}postprocess(e){return e}}pe(Zi,"passThroughHooks",new Set(["preprocess","postprocess"]));class Tl{constructor(...e){gu(this,Ti);pe(this,"defaults",Tn());pe(this,"options",this.setOptions);pe(this,"parse",Bn(this,Ti,oa).call(this,vt.lex,bt.parse));pe(this,"parseInline",Bn(this,Ti,oa).call(this,vt.lexInline,bt.parseInline));pe(this,"Parser",bt);pe(this,"Renderer",_r);pe(this,"TextRenderer",xn);pe(this,"Lexer",vt);pe(this,"Tokenizer",Or);pe(this,"Hooks",Zi);this.use(...e)}walkTokens(e,i){var n,s;let r=[];for(const a of e)switch(r=r.concat(i.call(this,a)),a.type){case"table":{const o=a;for(const c of o.header)r=r.concat(this.walkTokens(c.tokens,i));for(const c of o.rows)for(const u of c)r=r.concat(this.walkTokens(u.tokens,i));break}case"list":{const o=a;r=r.concat(this.walkTokens(o.items,i));break}default:{const o=a;(s=(n=this.defaults.extensions)==null?void 0:n.childTokens)!=null&&s[o.type]?this.defaults.extensions.childTokens[o.type].forEach(c=>{r=r.concat(this.walkTokens(o[c],i))}):o.tokens&&(r=r.concat(this.walkTokens(o.tokens,i)))}}return r}use(...e){const i=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(r=>{const n={...r};if(n.async=this.defaults.async||n.async||!1,r.extensions&&(r.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){const a=i.renderers[s.name];a?i.renderers[s.name]=function(...o){let c=s.renderer.apply(this,o);return c===!1&&(c=a.apply(this,o)),c}:i.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const a=i[s.level];a?a.unshift(s.tokenizer):i[s.level]=[s.tokenizer],s.start&&(s.level==="block"?i.startBlock?i.startBlock.push(s.start):i.startBlock=[s.start]:s.level==="inline"&&(i.startInline?i.startInline.push(s.start):i.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(i.childTokens[s.name]=s.childTokens)}),n.extensions=i),r.renderer){const s=this.defaults.renderer||new _r(this.defaults);for(const a in r.renderer){const o=r.renderer[a],c=a,u=s[c];s[c]=(...h)=>{let p=o.apply(s,h);return p===!1&&(p=u.apply(s,h)),p||""}}n.renderer=s}if(r.tokenizer){const s=this.defaults.tokenizer||new Or(this.defaults);for(const a in r.tokenizer){const o=r.tokenizer[a],c=a,u=s[c];s[c]=(...h)=>{let p=o.apply(s,h);return p===!1&&(p=u.apply(s,h)),p}}n.tokenizer=s}if(r.hooks){const s=this.defaults.hooks||new Zi;for(const a in r.hooks){const o=r.hooks[a],c=a,u=s[c];Zi.passThroughHooks.has(a)?s[c]=h=>{if(this.defaults.async)return Promise.resolve(o.call(s,h)).then(v=>u.call(s,v));const p=o.call(s,h);return u.call(s,p)}:s[c]=(...h)=>{let p=o.apply(s,h);return p===!1&&(p=u.apply(s,h)),p}}n.hooks=s}if(r.walkTokens){const s=this.defaults.walkTokens,a=r.walkTokens;n.walkTokens=function(o){let c=[];return c.push(a.call(this,o)),s&&(c=c.concat(s.call(this,o))),c}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,i){return vt.lex(e,i??this.defaults)}parser(e,i){return bt.parse(e,i??this.defaults)}}Ti=new WeakSet,oa=function(e,i){return(r,n)=>{const s={...n},a={...this.defaults,...s};this.defaults.async===!0&&s.async===!1&&(a.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),a.async=!0);const o=Bn(this,Ti,vu).call(this,!!a.silent,!!a.async);if(typeof r>"u"||r===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof r!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(r)+", string expected"));if(a.hooks&&(a.hooks.options=a),a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(r):r).then(c=>e(c,a)).then(c=>a.walkTokens?Promise.all(this.walkTokens(c,a.walkTokens)).then(()=>c):c).then(c=>i(c,a)).then(c=>a.hooks?a.hooks.postprocess(c):c).catch(o);try{a.hooks&&(r=a.hooks.preprocess(r));const c=e(r,a);a.walkTokens&&this.walkTokens(c,a.walkTokens);let u=i(c,a);return a.hooks&&(u=a.hooks.postprocess(u)),u}catch(c){return o(c)}}},vu=function(e,i){return r=>{if(r.message+=`
|
|
3235
|
+
Please report this to https://github.com/markedjs/marked.`,e){const n="<p>An error occurred:</p><pre>"+tt(r.message+"",!0)+"</pre>";return i?Promise.resolve(n):n}if(i)return Promise.reject(r);throw r}};const Si=new Tl;function ne(t,e){return Si.parse(t,e)}ne.options=ne.setOptions=function(t){return Si.setOptions(t),ne.defaults=Si.defaults,bl(ne.defaults),ne},ne.getDefaults=Tn,ne.defaults=Xt,ne.use=function(...t){return Si.use(...t),ne.defaults=Si.defaults,bl(ne.defaults),ne},ne.walkTokens=function(t,e){return Si.walkTokens(t,e)},ne.parseInline=Si.parseInline,ne.Parser=bt,ne.parser=bt.parse,ne.Renderer=_r,ne.TextRenderer=xn,ne.Lexer=vt,ne.lexer=vt.lex,ne.Tokenizer=Or,ne.Hooks=Zi,ne.parse=ne;const Fm=ne.options,Nm=ne.setOptions,Um=ne.use,Bm=ne.walkTokens,zm=ne.parseInline,Vm=ne,Hm=bt.parse,jm=vt.lex,Wm=Object.freeze(Object.defineProperty({__proto__:null,Hooks:Zi,Lexer:vt,Marked:Tl,Parser:bt,Renderer:_r,TextRenderer:xn,Tokenizer:Or,get defaults(){return Xt},getDefaults:Tn,lexer:jm,marked:ne,options:Fm,parse:Vm,parseInline:zm,parser:Hm,setOptions:Nm,use:Um,walkTokens:Bm},Symbol.toStringTag,{value:"Module"}));/*! @license DOMPurify 3.4.12 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.12/LICENSE */function El(t,e){(e==null||e>t.length)&&(e=t.length);for(var i=0,r=Array(e);i<e;i++)r[i]=t[i];return r}function Gm(t){if(Array.isArray(t))return t}function qm(t,e){var i=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(i!=null){var r,n,s,a,o=[],c=!0,u=!1;try{if(s=(i=i.call(t)).next,e!==0)for(;!(c=(r=s.call(i)).done)&&(o.push(r.value),o.length!==e);c=!0);}catch(h){u=!0,n=h}finally{try{if(!c&&i.return!=null&&(a=i.return(),Object(a)!==a))return}finally{if(u)throw n}}return o}}function Xm(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
3236
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Ym(t,e){return Gm(t)||qm(t,e)||Km(t,e)||Xm()}function Km(t,e){if(t){if(typeof t=="string")return El(t,e);var i={}.toString.call(t).slice(8,-1);return i==="Object"&&t.constructor&&(i=t.constructor.name),i==="Map"||i==="Set"?Array.from(t):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?El(t,e):void 0}}const kl=Object.entries,xl=Object.setPrototypeOf,Zm=Object.isFrozen,Qm=Object.getPrototypeOf,Jm=Object.getOwnPropertyDescriptor;let Ne=Object.freeze,Ue=Object.seal,Qi=Object.create,Dl=typeof Reflect<"u"&&Reflect,Fs=Dl.apply,Ns=Dl.construct;Ne||(Ne=function(e){return e}),Ue||(Ue=function(e){return e}),Fs||(Fs=function(e,i){for(var r=arguments.length,n=new Array(r>2?r-2:0),s=2;s<r;s++)n[s-2]=arguments[s];return e.apply(i,n)}),Ns||(Ns=function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return new e(...r)});const Ji=Te(Array.prototype.forEach),$m=Te(Array.prototype.lastIndexOf),Il=Te(Array.prototype.pop),$i=Te(Array.prototype.push),ey=Te(Array.prototype.splice),Yt=Array.isArray,Lr=Te(String.prototype.toLowerCase),Us=Te(String.prototype.toString),Ml=Te(String.prototype.match),Fr=Te(String.prototype.replace),Rl=Te(String.prototype.indexOf),ty=Te(String.prototype.trim),iy=Te(Number.prototype.toString),ry=Te(Boolean.prototype.toString),Pl=typeof BigInt>"u"?null:Te(BigInt.prototype.toString),Ol=typeof Symbol>"u"?null:Te(Symbol.prototype.toString),Me=Te(Object.prototype.hasOwnProperty),Nr=Te(Object.prototype.toString),Re=Te(RegExp.prototype.test),Ci=ny(TypeError);function Te(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return Fs(t,e,r)}}function ny(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return Ns(t,i)}}function J(t,e){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Lr;if(xl&&xl(t,null),!Yt(e))return t;let r=e.length;for(;r--;){let n=e[r];if(typeof n=="string"){const s=i(n);s!==n&&(Zm(e)||(e[r]=s),n=s)}t[n]=!0}return t}function sy(t){for(let e=0;e<t.length;e++)Me(t,e)||(t[e]=null);return t}function Ge(t){const e=Qi(null);for(const r of kl(t)){var i=Ym(r,2);const n=i[0],s=i[1];Me(t,n)&&(Yt(s)?e[n]=sy(s):s&&typeof s=="object"&&s.constructor===Object?e[n]=Ge(s):e[n]=s)}return e}function ay(t){switch(typeof t){case"string":return t;case"number":return iy(t);case"boolean":return ry(t);case"bigint":return Pl?Pl(t):"0";case"symbol":return Ol?Ol(t):"Symbol()";case"undefined":return Nr(t);case"function":case"object":{if(t===null)return Nr(t);const e=t,i=Dt(e,"toString");if(typeof i=="function"){const r=i(e);return typeof r=="string"?r:Nr(r)}return Nr(t)}default:return Nr(t)}}function Dt(t,e){for(;t!==null;){const r=Jm(t,e);if(r){if(r.get)return Te(r.get);if(typeof r.value=="function")return Te(r.value)}t=Qm(t)}function i(){return null}return i}function oy(t){try{return Re(t,""),!0}catch{return!1}}const _l=Ne(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Bs=Ne(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),zs=Ne(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),cy=Ne(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Vs=Ne(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),ly=Ne(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Ll=Ne(["#text"]),Fl=Ne(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Hs=Ne(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dominant-baseline","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-orientation","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Nl=Ne(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Dn=Ne(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),uy=Ue(/{{[\w\W]*|^[\w\W]*}}/g),dy=Ue(/<%[\w\W]*|^[\w\W]*%>/g),hy=Ue(/\${[\w\W]*/g),py=Ue(/^data-[\-\w.\u00B7-\uFFFF]+$/),gy=Ue(/^aria-[\-\w]+$/),Ul=Ue(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),fy=Ue(/^(?:\w+script|data):/i),vy=Ue(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),by=Ue(/^html$/i),my=Ue(/^[a-z][.\w]*(-[.\w]+)+$/i),Bl=Ue(/<[/\w!]/g),zl=Ue(/<[/\w]/g),yy=Ue(/<\/no(script|embed|frames)/i),wy=Ue(/\/>/i),it={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Sy=function(){return typeof window>"u"?null:window},Cy=function(e,i){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null;const n="data-tt-policy-suffix";i&&i.hasAttribute(n)&&(r=i.getAttribute(n));const s="dompurify"+(r?"#"+r:"");try{return e.createPolicy(s,{createHTML(a){return a},createScriptURL(a){return a}})}catch{return console.warn("TrustedTypes policy "+s+" could not be created."),null}},Vl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Kt=function(e,i,r,n){return Me(e,i)&&Yt(e[i])?J(n.base?Ge(n.base):{},e[i],n.transform):r};function Hl(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Sy();const e=M=>Hl(M);if(e.version="3.4.12",e.removed=[],!t||!t.document||t.document.nodeType!==it.document||!t.Element)return e.isSupported=!1,e;let i=t.document;const r=i,n=r.currentScript;t.DocumentFragment;const s=t.HTMLTemplateElement,a=t.Node,o=t.Element,c=t.NodeFilter,u=t.NamedNodeMap;u===void 0&&(t.NamedNodeMap||t.MozNamedAttrMap),t.HTMLFormElement;const h=t.DOMParser,p=t.trustedTypes,v=o.prototype,C=Dt(v,"cloneNode"),O=Dt(v,"remove"),A=Dt(v,"nextSibling"),R=Dt(v,"childNodes"),D=Dt(v,"parentNode"),b=Dt(v,"shadowRoot"),m=Dt(v,"attributes"),y=a&&a.prototype?Dt(a.prototype,"nodeType"):null,w=a&&a.prototype?Dt(a.prototype,"nodeName"):null;if(typeof s=="function"){const M=i.createElement("template");M.content&&M.content.ownerDocument&&(i=M.content.ownerDocument)}let k,F="",Z,N=!1,ie=0;const X=function(){if(ie>0)throw Ci('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},$=function(d){X(),ie++;try{return k.createHTML(d)}finally{ie--}},Ut=function(d){X(),ie++;try{return k.createScriptURL(d)}finally{ie--}},Ei=function(){return N||(Z=Cy(p,n),N=!0),Z},Zt=i,Ur=Zt.implementation,Br=Zt.createNodeIterator,Pe=Zt.createDocumentFragment,ht=Zt.getElementsByTagName,Qt=r.importNode;let oe=Vl();e.isSupported=typeof kl=="function"&&typeof D=="function"&&Ur&&Ur.createHTMLDocument!==void 0;const rt=uy,js=dy,It=hy,ki=py,er=gy,tr=fy,ir=vy,In=my;let rr=Ul,ce=null;const Mn=J({},[..._l,...Bs,...zs,...Vs,...Ll]);let he=null;const Gl=J({},[...Fl,...Hs,...Nl,...Dn]);let me=Object.seal(Qi(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),zr=null,ql=null;const Jt=Object.seal(Qi(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Xl=!0,Ws=!0,Yl=!1,Kl=!0,$t=!1,ei=!0,xi=!1,Gs=!1,qs=null,Xs=null,Ys=!1,nr=!1,Rn=!1,Pn=!1,Zl=!0,Ql=!1;const Jl="user-content-";let Ks=!0,Zs=!1,sr={},Mt=null;const Qs=J({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let $l=null;const eu=J({},["audio","video","img","source","image","track"]);let Js=null;const tu=J({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),On="http://www.w3.org/1998/Math/MathML",_n="http://www.w3.org/2000/svg",Rt="http://www.w3.org/1999/xhtml";let ar=Rt,$s=!1,ea=null;const Ty=J({},[On,_n,Rt],Us),iu=Ne(["mi","mo","mn","ms","mtext"]);let ta=J({},iu);const ru=Ne(["annotation-xml"]);let ia=J({},ru);const Ey=J({},["title","style","font","a","script"]);let Vr=null;const ky=["application/xhtml+xml","text/html"],xy="text/html";let ve=null,or=null;const Dy=i.createElement("form"),nu=function(d){return d instanceof RegExp||d instanceof Function},ra=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(or&&or===d)return;(!d||typeof d!="object")&&(d={}),d=Ge(d),Vr=ky.indexOf(d.PARSER_MEDIA_TYPE)===-1?xy:d.PARSER_MEDIA_TYPE,ve=Vr==="application/xhtml+xml"?Us:Lr,ce=Kt(d,"ALLOWED_TAGS",Mn,{transform:ve}),he=Kt(d,"ALLOWED_ATTR",Gl,{transform:ve}),ea=Kt(d,"ALLOWED_NAMESPACES",Ty,{transform:Us}),Js=Kt(d,"ADD_URI_SAFE_ATTR",tu,{transform:ve,base:tu}),$l=Kt(d,"ADD_DATA_URI_TAGS",eu,{transform:ve,base:eu}),Mt=Kt(d,"FORBID_CONTENTS",Qs,{transform:ve}),zr=Kt(d,"FORBID_TAGS",Ge({}),{transform:ve}),ql=Kt(d,"FORBID_ATTR",Ge({}),{transform:ve}),sr=Me(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?Ge(d.USE_PROFILES):d.USE_PROFILES:!1,Xl=d.ALLOW_ARIA_ATTR!==!1,Ws=d.ALLOW_DATA_ATTR!==!1,Yl=d.ALLOW_UNKNOWN_PROTOCOLS||!1,Kl=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,$t=d.SAFE_FOR_TEMPLATES||!1,ei=d.SAFE_FOR_XML!==!1,xi=d.WHOLE_DOCUMENT||!1,nr=d.RETURN_DOM||!1,Rn=d.RETURN_DOM_FRAGMENT||!1,Pn=d.RETURN_TRUSTED_TYPE||!1,Ys=d.FORCE_BODY||!1,Zl=d.SANITIZE_DOM!==!1,Ql=d.SANITIZE_NAMED_PROPS||!1,Ks=d.KEEP_CONTENT!==!1,Zs=d.IN_PLACE||!1,rr=oy(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:Ul,ar=typeof d.NAMESPACE=="string"?d.NAMESPACE:Rt,ta=Me(d,"MATHML_TEXT_INTEGRATION_POINTS")&&d.MATHML_TEXT_INTEGRATION_POINTS&&typeof d.MATHML_TEXT_INTEGRATION_POINTS=="object"?Ge(d.MATHML_TEXT_INTEGRATION_POINTS):J({},iu),ia=Me(d,"HTML_INTEGRATION_POINTS")&&d.HTML_INTEGRATION_POINTS&&typeof d.HTML_INTEGRATION_POINTS=="object"?Ge(d.HTML_INTEGRATION_POINTS):J({},ru);const g=Me(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?Ge(d.CUSTOM_ELEMENT_HANDLING):Qi(null);if(me=Qi(null),Me(g,"tagNameCheck")&&nu(g.tagNameCheck)&&(me.tagNameCheck=g.tagNameCheck),Me(g,"attributeNameCheck")&&nu(g.attributeNameCheck)&&(me.attributeNameCheck=g.attributeNameCheck),Me(g,"allowCustomizedBuiltInElements")&&typeof g.allowCustomizedBuiltInElements=="boolean"&&(me.allowCustomizedBuiltInElements=g.allowCustomizedBuiltInElements),Ue(me),$t&&(Ws=!1),Rn&&(nr=!0),sr&&(ce=J({},Ll),he=Qi(null),sr.html===!0&&(J(ce,_l),J(he,Fl)),sr.svg===!0&&(J(ce,Bs),J(he,Hs),J(he,Dn)),sr.svgFilters===!0&&(J(ce,zs),J(he,Hs),J(he,Dn)),sr.mathMl===!0&&(J(ce,Vs),J(he,Nl),J(he,Dn))),Jt.tagCheck=null,Jt.attributeCheck=null,Me(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?Jt.tagCheck=d.ADD_TAGS:Yt(d.ADD_TAGS)&&(ce===Mn&&(ce=Ge(ce)),J(ce,d.ADD_TAGS,ve))),Me(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?Jt.attributeCheck=d.ADD_ATTR:Yt(d.ADD_ATTR)&&(he===Gl&&(he=Ge(he)),J(he,d.ADD_ATTR,ve))),Me(d,"ADD_URI_SAFE_ATTR")&&Yt(d.ADD_URI_SAFE_ATTR)&&J(Js,d.ADD_URI_SAFE_ATTR,ve),Me(d,"FORBID_CONTENTS")&&Yt(d.FORBID_CONTENTS)&&(Mt===Qs&&(Mt=Ge(Mt)),J(Mt,d.FORBID_CONTENTS,ve)),Me(d,"ADD_FORBID_CONTENTS")&&Yt(d.ADD_FORBID_CONTENTS)&&(Mt===Qs&&(Mt=Ge(Mt)),J(Mt,d.ADD_FORBID_CONTENTS,ve)),Ks&&(ce["#text"]=!0),xi&&J(ce,["html","head","body"]),ce.table&&(J(ce,["tbody"]),delete zr.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ci('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ci('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const T=k;k=d.TRUSTED_TYPES_POLICY;try{F=$("")}catch(L){throw k=T,L}}else d.TRUSTED_TYPES_POLICY===null?(k=void 0,F=""):(k===void 0&&(k=Ei()),k&&typeof F=="string"&&(F=$("")));Ne&&Ne(d),or=d},su=J({},[...Bs,...zs,...cy]),au=J({},[...Vs,...ly]),Iy=function(d,g,T){return g.namespaceURI===Rt?d==="svg":g.namespaceURI===On?d==="svg"&&(T==="annotation-xml"||ta[T]):!!su[d]},My=function(d,g,T){return g.namespaceURI===Rt?d==="math":g.namespaceURI===_n?d==="math"&&ia[T]:!!au[d]},Ry=function(d,g,T){return g.namespaceURI===_n&&!ia[T]||g.namespaceURI===On&&!ta[T]?!1:!au[d]&&(Ey[d]||!su[d])},Py=function(d){let g=D(d);(!g||!g.tagName)&&(g={namespaceURI:ar,tagName:"template"});const T=Lr(d.tagName),L=Lr(g.tagName);return ea[d.namespaceURI]?d.namespaceURI===_n?Iy(T,g,L):d.namespaceURI===On?My(T,g,L):d.namespaceURI===Rt?Ry(T,g,L):!!(Vr==="application/xhtml+xml"&&ea[d.namespaceURI]):!1},ti=function(d){$i(e.removed,{element:d});try{D(d).removeChild(d)}catch{if(O(d),!D(d))throw Ci("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},Ln=function(d){na(d);const g=R(d);if(g){const L=[];Ji(g,j=>{$i(L,j)}),Ji(L,j=>{try{O(j)}catch{}})}const T=m(d);if(T)for(let L=T.length-1;L>=0;--L){const j=T[L],q=j&&j.name;if(typeof q=="string")try{d.removeAttribute(q)}catch{}}},Di=function(d,g){try{$i(e.removed,{attribute:g.getAttributeNode(d),from:g})}catch{$i(e.removed,{attribute:null,from:g})}if(g.removeAttribute(d),d==="is")if(nr||Rn)try{ti(g)}catch{}else try{g.setAttribute(d,"")}catch{}},Oy=function(d){const g=m(d);if(g)for(let T=g.length-1;T>=0;--T){const L=g[T],j=L&&L.name;if(!(typeof j!="string"||he[ve(j)]))try{d.removeAttribute(j)}catch{}}},na=function(d){const g=[d];for(;g.length>0;){const T=g.pop();(y?y(T):T.nodeType)===it.element&&Oy(T);const j=R(T);if(j)for(let q=j.length-1;q>=0;--q)g.push(j[q])}},_y=function(d){if(!ei)return;const g=[d];for(;g.length>0;){const T=g.pop(),L=y?y(T):T.nodeType;if(L===it.processingInstruction||L===it.comment&&Re(zl,T.data)){try{O(T)}catch{}continue}if(L===it.element){const q=T,ye=ve(w?w(T):T.nodeName);try{q.hasAttribute&&q.hasAttribute("patchsrc")&&q.removeAttribute("patchsrc"),q.hasAttribute&&q.hasAttribute("for")&&ye!=="label"&&ye!=="output"&&q.removeAttribute("for")}catch{}}const j=R(T);if(j)for(let q=j.length-1;q>=0;--q)g.push(j[q])}},ou=function(d){let g=null,T=null;if(Ys)d="<remove></remove>"+d;else{const q=Ml(d,/^[\r\n\t ]+/);T=q&&q[0]}Vr==="application/xhtml+xml"&&ar===Rt&&(d='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+d+"</body></html>");const L=k?$(d):d;if(ar===Rt)try{g=new h().parseFromString(L,Vr)}catch{}if(!g||!g.documentElement){g=Ur.createDocument(ar,"template",null);try{g.documentElement.innerHTML=$s?F:L}catch{}}const j=g.body||g.documentElement;return d&&T&&j.insertBefore(i.createTextNode(T),j.childNodes[0]||null),ar===Rt?ht.call(g,xi?"html":"body")[0]:xi?g.documentElement:j},cu=function(d){return Br.call(d.ownerDocument||d,d,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Fn=function(d){return d=Fr(d,rt," "),d=Fr(d,js," "),d=Fr(d,It," "),d},sa=function(d){var g;d.normalize();const T=Br.call(d.ownerDocument||d,d,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null);let L=T.nextNode();for(;L;)L.data=Fn(L.data),L=T.nextNode();const j=(g=d.querySelectorAll)===null||g===void 0?void 0:g.call(d,"template");j&&Ji(j,q=>{cr(q.content)&&sa(q.content)})},Nn=function(d){const g=w?w(d):null;return typeof g!="string"||ve(g)!=="form"?!1:typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||d.attributes!==m(d)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function"||d.nodeType!==y(d)||d.childNodes!==R(d)},cr=function(d){if(!y||typeof d!="object"||d===null)return!1;try{return y(d)===it.documentFragment}catch{return!1}},Hr=function(d){if(!y||typeof d!="object"||d===null)return!1;try{return typeof y(d)=="number"}catch{return!1}};function Pt(M,d,g){M.length!==0&&Ji(M,T=>{T.call(e,d,g,or)})}const Ly=function(d,g){return!!(ei&&d.hasChildNodes()&&!Hr(d.firstElementChild)&&Re(Bl,d.textContent)&&Re(Bl,d.innerHTML)||ei&&d.namespaceURI===Rt&&g==="style"&&Hr(d.firstElementChild)||d.nodeType===it.processingInstruction||ei&&d.nodeType===it.comment&&Re(zl,d.data))},Fy=function(d,g){if(!zr[g]&&du(g)&&(me.tagNameCheck instanceof RegExp&&Re(me.tagNameCheck,g)||me.tagNameCheck instanceof Function&&me.tagNameCheck(g)))return!1;if(Ks&&!Mt[g]){const T=D(d),L=R(d);if(L&&T){const j=L.length;for(let q=j-1;q>=0;--q){const ye=Zs?L[q]:C(L[q],!0);T.insertBefore(ye,A(d))}}}return ti(d),!0},lu=function(d,g){if(Pt(oe.beforeSanitizeElements,d,null),d!==g&&D(d)===null)return!0;if(Nn(d))return ti(d),!0;const T=ve(w?w(d):d.nodeName);if(Pt(oe.uponSanitizeElement,d,{tagName:T,allowedTags:ce}),d!==g&&D(d)===null)return!0;if(Ly(d,T))return ti(d),!0;if(zr[T]||!(Jt.tagCheck instanceof Function&&Jt.tagCheck(T))&&!ce[T]){const j=Fy(d,T);return j===!1&&Pt(oe.afterSanitizeElements,d,null),j}if((y?y(d):d.nodeType)===it.element&&!Py(d)||(T==="noscript"||T==="noembed"||T==="noframes")&&Re(yy,d.innerHTML))return ti(d),!0;if($t&&d.nodeType===it.text){const j=Fn(d.textContent);d.textContent!==j&&($i(e.removed,{element:d.cloneNode()}),d.textContent=j)}return Pt(oe.afterSanitizeElements,d,null),!1},uu=function(d,g,T){if(ql[g]||ei&&g==="patchsrc"||ei&&g==="for"&&d!=="label"&&d!=="output"||Zl&&(g==="id"||g==="name")&&(T in i||T in Dy))return!1;const L=he[g]||Jt.attributeCheck instanceof Function&&Jt.attributeCheck(g,d);if(!(Ws&&Re(ki,g))){if(!(Xl&&Re(er,g))){if(L){if(!Js[g]){if(!Re(rr,Fr(T,ir,""))){if(!((g==="src"||g==="xlink:href"||g==="href")&&d!=="script"&&Rl(T,"data:")===0&&$l[d])){if(!(Yl&&!Re(tr,Fr(T,ir,"")))){if(T)return!1}}}}}else if(!(du(d)&&(me.tagNameCheck instanceof RegExp&&Re(me.tagNameCheck,d)||me.tagNameCheck instanceof Function&&me.tagNameCheck(d))&&(me.attributeNameCheck instanceof RegExp&&Re(me.attributeNameCheck,g)||me.attributeNameCheck instanceof Function&&me.attributeNameCheck(g,d))||g==="is"&&me.allowCustomizedBuiltInElements&&(me.tagNameCheck instanceof RegExp&&Re(me.tagNameCheck,T)||me.tagNameCheck instanceof Function&&me.tagNameCheck(T))))return!1}}return!0},Ny=J({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),du=function(d){return!Ny[Lr(d)]&&Re(In,d)},Uy=function(d,g,T,L){if(k&&typeof p=="object"&&typeof p.getAttributeType=="function"&&!T)switch(p.getAttributeType(d,g)){case"TrustedHTML":return $(L);case"TrustedScriptURL":return Ut(L)}return L},By=function(d,g,T,L){try{T?d.setAttributeNS(T,g,L):d.setAttribute(g,L),Nn(d)?ti(d):Il(e.removed)}catch{Di(g,d)}},hu=function(d){Pt(oe.beforeSanitizeAttributes,d,null);const g=d.attributes;if(!g||Nn(d))return;const T={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:he,forceKeepAttr:void 0};let L=g.length;const j=ve(d.nodeName);for(;L--;){const q=g[L],ye=q.name,ze=q.namespaceURI,yt=q.value,Qe=ve(ye),wt=yt;let Xe=ye==="value"?wt:ty(wt);if(T.attrName=Qe,T.attrValue=Xe,T.keepAttr=!0,T.forceKeepAttr=void 0,Pt(oe.uponSanitizeAttribute,d,T),Xe=T.attrValue,Ql&&(Qe==="id"||Qe==="name")&&Rl(Xe,Jl)!==0&&(Di(ye,d),Xe=Jl+Xe),ei&&Re(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Xe)){Di(ye,d);continue}if(Qe==="attributename"&&Ml(Xe,"href")){Di(ye,d);continue}if(!T.forceKeepAttr){if(!T.keepAttr){Di(ye,d);continue}if(!Kl&&Re(wy,Xe)){Di(ye,d);continue}if($t&&(Xe=Fn(Xe)),!uu(j,Qe,Xe)){Di(ye,d);continue}Xe=Uy(j,Qe,ze,Xe),Xe!==wt&&By(d,ye,ze,Xe)}}Pt(oe.afterSanitizeAttributes,d,null)},Un=function(d){let g=null;const T=cu(d);for(Pt(oe.beforeSanitizeShadowDOM,d,null);g=T.nextNode();)if(Pt(oe.uponSanitizeShadowNode,g,null),lu(g,d),hu(g),cr(g.content)&&Un(g.content),(y?y(g):g.nodeType)===it.element){const j=b(g);cr(j)&&(aa(j),Un(j))}Pt(oe.afterSanitizeShadowDOM,d,null)},aa=function(d){const g=[{node:d,shadow:null}];for(;g.length>0;){const T=g.pop();if(T.shadow){Un(T.shadow);continue}const L=T.node,q=(y?y(L):L.nodeType)===it.element,ye=R(L);if(ye)for(let ze=ye.length-1;ze>=0;--ze)g.push({node:ye[ze],shadow:null});if(q){const ze=w?w(L):null;if(typeof ze=="string"&&ve(ze)==="template"){const yt=L.content;cr(yt)&&g.push({node:yt,shadow:null})}}if(q){const ze=b(L);cr(ze)&&g.push({node:null,shadow:ze},{node:ze,shadow:null})}}};return e.sanitize=function(M){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=null,T=null,L=null,j=null;if($s=!M,$s&&(M="<!-->"),typeof M!="string"&&!Hr(M)&&(M=ay(M),typeof M!="string"))throw Ci("dirty is not a string, aborting");if(!e.isSupported)return M;Gs?(ce=qs,he=Xs):ra(d),(oe.uponSanitizeElement.length>0||oe.uponSanitizeAttribute.length>0)&&(ce=Ge(ce)),oe.uponSanitizeAttribute.length>0&&(he=Ge(he)),e.removed=[];const q=Zs&&typeof M!="string"&&Hr(M);if(q){_y(M);const Qe=w?w(M):M.nodeName;if(typeof Qe=="string"){const wt=ve(Qe);if(!ce[wt]||zr[wt])throw Ln(M),Ci("root node is forbidden and cannot be sanitized in-place")}if(Nn(M))throw Ln(M),Ci("root node is clobbered and cannot be sanitized in-place");try{aa(M)}catch(wt){throw Ln(M),wt}}else if(Hr(M))g=ou("<!---->"),T=g.ownerDocument.importNode(M,!0),T.nodeType===it.element&&T.nodeName==="BODY"||T.nodeName==="HTML"?g=T:g.appendChild(T),aa(T);else{if(!nr&&!$t&&!xi&&M.indexOf("<")===-1)return k&&Pn?$(M):M;if(g=ou(M),!g)return nr?null:Pn?F:""}g&&Ys&&ti(g.firstChild);const ye=q?M:g,ze=cu(ye);try{for(;L=ze.nextNode();)lu(L,ye),hu(L),cr(L.content)&&Un(L.content)}catch(Qe){throw q&&(Ln(M),Ji(e.removed,wt=>{wt.element&&na(wt.element)})),Qe}if(q)return Ji(e.removed,Qe=>{Qe.element&&na(Qe.element)}),$t&&sa(M),M;if(nr){if($t&&sa(g),Rn)for(j=Pe.call(g.ownerDocument);g.firstChild;)j.appendChild(g.firstChild);else j=g;return(he.shadowroot||he.shadowrootmode)&&(j=Qt.call(r,j,!0)),j}let yt=xi?g.outerHTML:g.innerHTML;return xi&&ce["!doctype"]&&g.ownerDocument&&g.ownerDocument.doctype&&g.ownerDocument.doctype.name&&Re(by,g.ownerDocument.doctype.name)&&(yt="<!DOCTYPE "+g.ownerDocument.doctype.name+`>
|
|
3237
|
+
`+yt),$t&&(yt=Fn(yt)),k&&Pn?$(yt):yt},e.setConfig=function(){let M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ra(M),Gs=!0,qs=ce,Xs=he},e.clearConfig=function(){or=null,Gs=!1,qs=null,Xs=null,k=Z,F=""},e.isValidAttribute=function(M,d,g){or||ra({});const T=ve(M),L=ve(d);return uu(T,L,g)},e.addHook=function(M,d){typeof d=="function"&&Me(oe,M)&&$i(oe[M],d)},e.removeHook=function(M,d){if(Me(oe,M)){if(d!==void 0){const g=$m(oe[M],d);return g===-1?void 0:ey(oe[M],g,1)[0]}return Il(oe[M])}},e.removeHooks=function(M){Me(oe,M)&&(oe[M]=[])},e.removeAllHooks=function(){oe=Vl()},e}var Ay=Hl();const jl=Object.freeze(Object.defineProperty({__proto__:null,default:Ay},Symbol.toStringTag,{value:"Module"}));return l.CallStateContextController=Rs,l.ChatState=qc,l.DevicesContextController=Ps,l.EmbedTokenCredentialProvider=Nc,l.IncomingCallController=Ea,l.LitElement=ee,l.SignalWire=Fc,l.StaticCredentialProvider=Uc,l.TranscriptController=xr,l.UserEventController=Yc,l.callStateContext=pt,l.css=ae,l.devicesContext=vr,l.ensureSignalWireFonts=al,l.ensureSignalWireTheme=sl,l.html=I,l.ready=fm,l.showPrompt=Rr,l.transcriptContext=Gc,l.useGoogleFont=wn,l.version=gm,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l})({});
|
|
3237
3238
|
//# sourceMappingURL=signalwire-web-components-embed.iife.js.map
|