@signalwire/web-components 4.0.0-dev-20260515133934 → 4.0.0-rc.0
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 +77 -77
- package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -1
- package/dist/embed/signalwire-web-components-embed.umd.cjs +77 -77
- package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var SignalWireUI=(function(l){"use strict";var
|
|
1
|
+
var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var jl=l=>{throw TypeError(l)};var Zm=(l,ve,Ue)=>ve in l?Km(l,ve,{enumerable:!0,configurable:!0,writable:!0,value:Ue}):l[ve]=Ue;var ce=(l,ve,Ue)=>Zm(l,typeof ve!="symbol"?ve+"":ve,Ue),Qm=(l,ve,Ue)=>ve.has(l)||jl("Cannot "+Ue);var Wl=(l,ve,Ue)=>ve.has(l)?jl("Cannot add the same private member more than once"):ve instanceof WeakSet?ve.add(l):ve.set(l,Ue);var kn=(l,ve,Ue)=>(Qm(l,ve,"access private method"),Ue);var Tl,je,fi,wt,vi,Ws,ql;function ve(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 Ue=globalThis,
|
|
5
|
+
*/const Ue=globalThis,xn=Ue.ShadowRoot&&(Ue.ShadyCSS===void 0||Ue.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Dn=Symbol(),Gs=new WeakMap;let qs=class{constructor(e,i,r){if(this._$cssResult$=!0,r!==Dn)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(xn&&e===void 0){const r=i!==void 0&&i.length===1;r&&(e=Gs.get(i)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),r&&Gs.set(i,e))}return e}toString(){return this.cssText}};const Xl=t=>new qs(typeof t=="string"?t:t+"",void 0,Dn),ie=(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 qs(i,t,Dn)},Yl=(t,e)=>{if(xn)t.adoptedStyleSheets=e.map((i=>i instanceof CSSStyleSheet?i:i.styleSheet));else for(const i of e){const r=document.createElement("style"),n=Ue.litNonce;n!==void 0&&r.setAttribute("nonce",n),r.textContent=i.cssText,t.appendChild(r)}},Xs=xn?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let i="";for(const r of e.cssRules)i+=r.cssText;return Xl(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:Kl,defineProperty:Zl,getOwnPropertyDescriptor:Ql,getOwnPropertyNames:Jl,getOwnPropertySymbols:$l,getPrototypeOf:eu}=Object,Vt=globalThis,Ys=Vt.trustedTypes,tu=Ys?Ys.emptyScript:"",In=Vt.reactiveElementPolyfillSupport,Qi=(t,e)=>t,Pr={toAttribute(t,e){switch(e){case Boolean:t=t?tu: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}},Mn=(t,e)=>!Kl(t,e),Ks={attribute:!0,type:String,converter:Pr,reflect:!1,useDefault:!1,hasChanged:Mn};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),Vt.litPropertyMetadata??(Vt.litPropertyMetadata=new WeakMap);let Si=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=Ks){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&&Zl(this.prototype,e,n)}}static getPropertyDescriptor(e,i,r){const{get:n,set:s}=Ql(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)??Ks}static _$Ei(){if(this.hasOwnProperty(Qi("elementProperties")))return;const e=eu(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(Qi("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Qi("properties"))){const i=this.properties,r=[...Jl(i),...$l(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(Xs(n))}else e!==void 0&&i.push(Xs(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 Yl(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:Pr).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:Pr;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??Mn)(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){}};Si.elementStyles=[],Si.shadowRootOptions={mode:"open"},Si[Qi("elementProperties")]=new Map,Si[Qi("finalized")]=new Map,In==null||In({ReactiveElement:Si}),(Vt.reactiveElementVersions??(Vt.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 Ji=globalThis,Or=Ji.trustedTypes,Zs=Or?Or.createPolicy("lit-html",{createHTML:t=>t}):void 0,Qs="$lit$",Ht=`lit$${Math.random().toFixed(9).slice(2)}$`,Js="?"+Ht,iu=`<${Js}>`,Kt=document,$i=()=>Kt.createComment(""),er=t=>t===null||typeof t!="object"&&typeof t!="function",Rn=Array.isArray,ru=t=>Rn(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Pn=`[
|
|
14
|
+
\f\r]`,tr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,$s=/-->/g,ea=/>/g,Zt=RegExp(`>|${Pn}(?:([^\\s"'>=/]+)(${Pn}*=${Pn}*(?:[^
|
|
15
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),ta=/'/g,ia=/"/g,ra=/^(?:script|style|textarea|title)$/i,nu=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),k=nu(1),jt=Symbol.for("lit-noChange"),j=Symbol.for("lit-nothing"),na=new WeakMap,Qt=Kt.createTreeWalker(Kt,129);function sa(t,e){if(!Rn(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return Zs!==void 0?Zs.createHTML(e):e}const su=(t,e)=>{const i=t.length-1,r=[];let n,s=e===2?"<svg>":e===3?"<math>":"",a=tr;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===tr?h[1]==="!--"?a=$s:h[1]!==void 0?a=ea:h[2]!==void 0?(ra.test(h[2])&&(n=RegExp("</"+h[2],"g")),a=Zt):h[3]!==void 0&&(a=Zt):a===Zt?h[0]===">"?(a=n??tr,p=-1):h[1]===void 0?p=-2:(p=a.lastIndex-h[2].length,u=h[1],a=h[3]===void 0?Zt:h[3]==='"'?ia:ta):a===ia||a===ta?a=Zt:a===$s||a===ea?a=tr:(a=Zt,n=void 0);const m=a===Zt&&t[o+1].startsWith("/>")?" ":"";s+=a===tr?c+iu:p>=0?(r.push(u),c.slice(0,p)+Qs+c.slice(p)+Ht+m):c+Ht+(p===-2?o:m)}return[sa(t,s+(t[i]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),r]};class ir{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]=su(e,i);if(this.el=ir.createElement(u,r),Qt.currentNode=this.el.content,i===2||i===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(n=Qt.nextNode())!==null&&c.length<o;){if(n.nodeType===1){if(n.hasAttributes())for(const p of n.getAttributeNames())if(p.endsWith(Qs)){const v=h[a++],m=n.getAttribute(p).split(Ht),R=/([.?@])?(.*)/.exec(v);c.push({type:1,index:s,name:R[2],strings:m,ctor:R[1]==="."?ou:R[1]==="?"?cu:R[1]==="@"?lu:_r}),n.removeAttribute(p)}else p.startsWith(Ht)&&(c.push({type:6,index:s}),n.removeAttribute(p));if(ra.test(n.tagName)){const p=n.textContent.split(Ht),v=p.length-1;if(v>0){n.textContent=Or?Or.emptyScript:"";for(let m=0;m<v;m++)n.append(p[m],$i()),Qt.nextNode(),c.push({type:2,index:++s});n.append(p[v],$i())}}}else if(n.nodeType===8)if(n.data===Js)c.push({type:2,index:s});else{let p=-1;for(;(p=n.data.indexOf(Ht,p+1))!==-1;)c.push({type:7,index:s}),p+=Ht.length-1}s++}}static createElement(e,i){const r=Kt.createElement("template");return r.innerHTML=e,r}}function Ci(t,e,i=t,r){var a,o;if(e===jt)return e;let n=r!==void 0?(a=i._$Co)==null?void 0:a[r]:i._$Cl;const s=er(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=Ci(t,n._$AS(t,e.values),n,r)),e}class au{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)??Kt).importNode(i,!0);Qt.currentNode=n;let s=Qt.nextNode(),a=0,o=0,c=r[0];for(;c!==void 0;){if(a===c.index){let u;c.type===2?u=new rr(s,s.nextSibling,this,e):c.type===1?u=new c.ctor(s,c.name,c.strings,this,e):c.type===6&&(u=new uu(s,this,e)),this._$AV.push(u),c=r[++o]}a!==(c==null?void 0:c.index)&&(s=Qt.nextNode(),a++)}return Qt.currentNode=Kt,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 rr{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=j,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=Ci(this,e,i),er(e)?e===j||e==null||e===""?(this._$AH!==j&&this._$AR(),this._$AH=j):e!==this._$AH&&e!==jt&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):ru(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!==j&&er(this._$AH)?this._$AA.nextSibling.data=e:this.T(Kt.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=ir.createElement(sa(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 au(n,this),o=a.u(this.options);a.p(i),this.T(o),this._$AH=a}}_$AC(e){let i=na.get(e.strings);return i===void 0&&na.set(e.strings,i=new ir(e)),i}k(e){Rn(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 rr(this.O($i()),this.O($i()),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 _r{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,i,r,n,s){this.type=1,this._$AH=j,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=j}_$AI(e,i=this,r,n){const s=this.strings;let a=!1;if(s===void 0)e=Ci(this,e,i,0),a=!er(e)||e!==this._$AH&&e!==jt,a&&(this._$AH=e);else{const o=e;let c,u;for(e=s[0],c=0;c<s.length-1;c++)u=Ci(this,o[r+c],i,c),u===jt&&(u=this._$AH[c]),a||(a=!er(u)||u!==this._$AH[c]),u===j?e=j:e!==j&&(e+=(u??"")+s[c+1]),this._$AH[c]=u}a&&!n&&this.j(e)}j(e){e===j?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}}class ou extends _r{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===j?void 0:e}}class cu extends _r{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==j)}}class lu extends _r{constructor(e,i,r,n,s){super(e,i,r,n,s),this.type=5}_$AI(e,i=this){if((e=Ci(this,e,i,0)??j)===jt)return;const r=this._$AH,n=e===j&&r!==j||e.capture!==r.capture||e.once!==r.once||e.passive!==r.passive,s=e!==j&&(r===j||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 uu{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){Ci(this,e)}}const On=Ji.litHtmlPolyfillSupport;On==null||On(ir,rr),(Ji.litHtmlVersions??(Ji.litHtmlVersions=[])).push("3.3.1");const du=(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 rr(e.insertBefore($i(),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 Jt=globalThis;let Z=class extends
|
|
19
|
+
*/const Jt=globalThis;let Z=class extends Si{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=du(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 jt}};Z._$litElement$=!0,Z.finalized=!0,(Tl=Jt.litElementHydrateSupport)==null||Tl.call(Jt,{LitElement:Z});const _n=Jt.litElementPolyfillSupport;_n==null||_n({LitElement:Z}),(Jt.litElementVersions??(Jt.litElementVersions=[])).push("4.2.1");/**
|
|
20
20
|
* @license
|
|
21
21
|
* Copyright 2017 Google LLC
|
|
22
22
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
@@ -24,7 +24,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
24
24
|
* @license
|
|
25
25
|
* Copyright 2017 Google LLC
|
|
26
26
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
27
|
-
*/const
|
|
27
|
+
*/const hu={attribute:!0,type:String,converter:Pr,reflect:!1,hasChanged:Mn},pu=(t=hu,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 T(t){return(e,i)=>typeof i=="object"?pu(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
|
|
@@ -32,45 +32,45 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
32
32
|
* @license
|
|
33
33
|
* Copyright 2017 Google LLC
|
|
34
34
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
35
|
-
*/const
|
|
35
|
+
*/const gu=(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 Lr(t,e){return(i,r,n)=>{const s=a=>{var o;return((o=a.renderRoot)==null?void 0:o.querySelector(t))??null};return
|
|
39
|
+
*/function Lr(t,e){return(i,r,n)=>{const s=a=>{var o;return((o=a.renderRoot)==null?void 0:o.querySelector(t))??null};return gu(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 Jm(t){return t}/**
|
|
48
48
|
* @license
|
|
49
49
|
* Copyright 2021 Google LLC
|
|
50
50
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
51
|
-
*/let
|
|
51
|
+
*/let oa=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 fu{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 vu=class extends Event{constructor(e,i){super("context-provider",{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=i}},Ln=class extends fu{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 vu(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 et({context:t,subscribe:e}){return(i,r)=>{typeof r=="object"?r.addInitializer((function(){new oa(this,{context:t,callback:n=>{i.set.call(this,n)},subscribe:e})})):i.constructor.addInitializer((n=>{new oa(n,{context:t,callback:s=>{n[r]=s},subscribe:e})}))}}const pt="sw-call-state";class ca{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 nr="sw-devices";function Fr(t,e){t.srcObject=e}function la(t){t.srcObject&&(t.srcObject=null)}var Fn=function(t,e){return Fn=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])},Fn(t,e)};function We(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");Fn(t,e);function i(){this.constructor=t}t.prototype=e===null?Object.create(e):(i.prototype=e.prototype,new i)}function bu(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 ua(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 Ai(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 Ti(t){return this instanceof Ti?(this.v=t,this):new Ti(t)}function mu(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(m){return function(R){return Promise.resolve(R).then(m,p)}}function o(m,R){r[m]&&(n[m]=function(C){return new Promise(function(I,x){s.push([m,C,I,x])>1||c(m,C)})},R&&(n[m]=R(n[m])))}function c(m,R){try{u(r[m](R))}catch(C){v(s[0][3],C)}}function u(m){m.value instanceof Ti?Promise.resolve(m.value.v).then(h,p):v(s[0][2],m)}function h(m){c("next",m)}function p(m){c("throw",m)}function v(m,R){m(R),s.shift(),s.length&&c(s[0][0],s[0][1])}}function yu(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 Ai=="function"?Ai(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 pe(t){return typeof t=="function"}function Ur(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 Un=Ur(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 Ti=(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=Ci(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 Fn?C.errors:[C]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var v=Ci(p),m=v.next();!m.done;m=v.next()){var R=m.value;try{ha(R)}catch(C){s=s??[],C instanceof Fn?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 Fn(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=Ti.EMPTY;function da(t){return t instanceof Ti||t&&"closed"in t&&pe(t.remove)&&pe(t.add)&&pe(t.unsubscribe)}function ha(t){pe(t)?t():t.unsubscribe()}var bu={Promise:void 0},mu={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){mu.setTimeout(function(){throw t})}function nr(){}function Br(t){t()}var Un=(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=Su,r}return e.create=function(i,r,n){return new Ei(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})(Ti),yu=(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})(),Ei=(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 yu(a),s}return e})(Un);function zr(t){pa(t)}function wu(t){throw t}var Su={closed:!0,next:nr,error:wu,complete:nr},Nn=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function Wt(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?Wt:t.length===1?t[0]:function(i){return t.reduce(function(r,n){return n(r)},i)}}var be=(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=Au(e)?e:new Ei(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 Ei({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[Nn]=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??bu.Promise)!==null&&e!==void 0?e:Promise}function Cu(t){return t&&pe(t.next)&&pe(t.error)&&pe(t.complete)}function Au(t){return t&&t instanceof Un||Cu(t)&&da(t)}function Tu(t){return pe(t==null?void 0:t.lift)}function le(t){return function(e){if(Tu(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 Eu(t,e,i,r,n)}var Eu=(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})(Un),va={schedule:function(t){var e=requestAnimationFrame,i=cancelAnimationFrame,r=e(function(n){i=void 0,t(n)});return new Ti(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},ku=Ur(function(t){return function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),ki=(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 ku},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=Ci(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 Ti(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 be;return i.source=this,i},e.create=function(i,r){return new ba(i,r)},e})(be),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})(ki),xu=(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})(ki),Bn={now:function(){return(Bn.delegate||Date).now()},delegate:void 0},zn=(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=Bn);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})(ki),Iu=(function(t){We(e,t);function e(i,r){return t.call(this)||this}return e.prototype.schedule=function(i,r){return this},e})(Ti),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},Vn=(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})(Iu),Du=1,Hn,jn={};function ya(t){return t in jn?(delete jn[t],!0):!1}var wa={setImmediate:function(t){var e=Du++;return jn[e]=!0,Hn||(Hn=Promise.resolve()),Hn.then(function(){return ya(e)&&t()}),e},clearImmediate:function(t){ya(t)}},Mu=wa.setImmediate,Ru=wa.clearImmediate,Sa={setImmediate:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Mu.apply(void 0,ft([],gt(t)))},clearImmediate:function(t){return Ru(t)},delegate:void 0},Pu=(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})(Vn),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=Bn.now,t})(),Wn=(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),Ou=(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})(Wn),Aa=new Ou(Pu),sr=new Wn(Vn),_u=sr,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=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})(Vn),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;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})(Wn),Ta=new Fu(Lu),$t=new be(function(t){return t.complete()});function Ea(t){return t&&pe(t.schedule)}function Gn(t){return t[t.length-1]}function ka(t){return pe(Gn(t))?t.pop():void 0}function ar(t){return Ea(Gn(t))?t.pop():void 0}function Uu(t,e){return typeof Gn(t)=="number"?t.pop():e}var xa=(function(t){return t&&typeof t.length=="number"&&typeof t!="function"});function Ia(t){return pe(t==null?void 0:t.then)}function Da(t){return pe(t[Nn])}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 Nu(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Pa=Nu();function Oa(t){return pe(t==null?void 0:t[Pa])}function _a(t){return fu(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,Ai(i.read())];case 3:return r=a.sent(),n=r.value,s=r.done,s?[4,Ai(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Ai(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 Ee(t){if(t instanceof be)return t;if(t!=null){if(Da(t))return Bu(t);if(xa(t))return zu(t);if(Ia(t))return Vu(t);if(Ma(t))return Fa(t);if(Oa(t))return Hu(t);if(La(t))return ju(t)}throw Ra(t)}function Bu(t){return new be(function(e){var i=t[Nn]();if(pe(i.subscribe))return i.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function zu(t){return new be(function(e){for(var i=0;i<t.length&&!e.closed;i++)e.next(t[i]);e.complete()})}function Vu(t){return new be(function(e){t.then(function(i){e.closed||(e.next(i),e.complete())},function(i){return e.error(i)}).then(null,pa)})}function Hu(t){return new be(function(e){var i,r;try{for(var n=Ci(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 be(function(e){Wu(t,e).catch(function(i){return e.error(i)})})}function ju(t){return Fa(_a(t))}function Wu(t,e){var i,r,n,s;return gu(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=vu(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 Gu(t,e){return Ee(t).pipe(Ua(e),Hr(e))}function qu(t,e){return Ee(t).pipe(Ua(e),Hr(e))}function Xu(t,e){return new be(function(i){var r=0;return e.schedule(function(){r===t.length?i.complete():(i.next(t[r++]),i.closed||this.schedule())})})}function Yu(t,e){return new be(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 be(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 Ku(t,e){return Na(_a(t),e)}function Zu(t,e){if(t!=null){if(Da(t))return Gu(t,e);if(xa(t))return Xu(t,e);if(Ia(t))return qu(t,e);if(Ma(t))return Na(t,e);if(Oa(t))return Yu(t,e);if(La(t))return Ku(t,e)}throw Ra(t)}function De(t,e){return e?Zu(t,e):Ee(t)}function Et(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=ar(t);return De(t,i)}function Qu(t,e){var i=pe(t)?t:function(){return t},r=function(n){return n.error(i())};return new be(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 Ei({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 or(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?Ju:s,o=i.scheduler,c=o===void 0?sr: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,D=0,x=function(f){R=_t(v,c,function(){try{m.unsubscribe(),Ee(a({meta:h,lastValue:C,seen:D})).subscribe(v)}catch(b){v.error(b)}},f)};m=p.subscribe(ae(v,function(f){R==null||R.unsubscribe(),D++,v.next(C=f),n>0&&x(n)},void 0,void 0,function(){R!=null&&R.closed||R==null||R.unsubscribe(),C=null})),!D&&x(r!=null?typeof r=="number"?r:+r-c.now():n)})}function Ju(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 $u=Array.isArray;function ed(t,e){return $u(e)?t.apply(void 0,ft([],gt(e))):t(e)}function td(t){return E(function(e){return ed(t,e)})}var id=Array.isArray,rd=Object.getPrototypeOf,nd=Object.prototype,sd=Object.keys;function ad(t){if(t.length===1){var e=t[0];if(id(e))return{args:e,keys:null};if(od(e)){var i=sd(e);return{args:i.map(function(r){return e[r]}),keys:i}}}return{args:t,keys:null}}function od(t){return t&&typeof t=="object"&&rd(t)===nd}function cd(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=ar(t),r=ka(t),n=ad(t),s=n.args,a=n.keys;if(s.length===0)return De([],i);var o=new be(ld(s,i,a?function(c){return cd(a,c)}:Wt));return r?o.pipe(td(r)):o}function ld(t,e,i){return i===void 0&&(i=Wt),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=De(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 ud(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 D=!1;Ee(i(C,h++)).subscribe(ae(e,function(x){e.next(x)},function(){D=!0},void 0,function(){if(D)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 qn(t,e,i){return i===void 0&&(i=1/0),pe(e)?qn(function(r,n){return E(function(s,a){return e(r,s,n,a)})(Ee(t(r,n)))},i):(typeof e=="number"&&(i=e),le(function(r,n){return ud(r,n,t,i)}))}function Wa(t){return t===void 0&&(t=1/0),qn(Wt,t)}function dd(){return Wa(1)}function Ga(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return dd()(De(t,ar(t)))}function ei(t){return new be(function(e){Ee(t()).subscribe(e)})}function xi(t,e,i){t===void 0&&(t=0),i===void 0&&(i=_u);var r=-1;return e!=null&&(Ea(e)?i=e:r=e),new be(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=sr),t<0&&(t=0),xi(t,t,e)}function Ii(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=ar(t),r=Uu(t,1/0),n=t;return n.length?n.length===1?Ee(n[0]):Wa(r)(De(n,i)):$t}var hd=new be(nr),pd=Array.isArray;function gd(t){return t.length===1&&pd(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 cr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t=gd(t),t.length===1?Ee(t[0]):new be(fd(t))}function fd(t){return function(e){for(var i=[],r=function(s){i.push(Ee(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 vd(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||Ee(t(u)).subscribe(s=ae(i,o,c))},function(){a=!0,(!r||!s||s.closed)&&i.complete()}))})}function bd(t,e){return e===void 0&&(e=sr),vd(function(){return xi(t,e)})}function ti(t){return le(function(e,i){var r=null,n=!1,s;r=e.subscribe(ae(i,void 0,void 0,function(a){s=Ee(t(a,ti(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 md(t,e){return le(qa(t,e,arguments.length>=2,!1,!0))}var yd=function(t,e){return t.push(e),t};function wd(){return le(function(t,e){md(yd,[])(t).subscribe(e)})}function Xa(t,e){return e===void 0&&(e=sr),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 Sd(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 Me(t){return t<=0?function(){return $t}: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=Wt),t=t??Cd,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 Cd(t,e){return t===e}function Ad(t){return t===void 0&&(t=Td),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 Td(){return new jr}function Xn(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()}),Ee(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(Wt,Me(1),i?Sd(e):Ad(function(){return new jr}))}}function Ka(t,e){return le(qa(t,e,arguments.length>=2,!0))}function kt(t){t===void 0&&(t={});var e=t.connector,i=e===void 0?function(){return new ki}: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,D=function(){p==null||p.unsubscribe(),p=void 0},x=function(){D(),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&&D();var A=v=v??i();y.add(function(){m--,m===0&&!C&&!R&&(p=Yn(f,c))}),A.subscribe(y),!h&&m>0&&(h=new Ei({next:function(I){return A.next(I)},error:function(I){C=!0,D(),p=Yn(x,n,I),A.error(I)},complete:function(){R=!0,D(),p=Yn(x,a),A.complete()}}),Ee(b).subscribe(h))})(u)}}function Yn(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 Ei({next:function(){n.unsubscribe(),t()}});return Ee(e.apply(void 0,ft([],gt(i)))).subscribe(n)}}function et(t,e,i){var r,n=!1;return r=t,kt({connector:function(){return new zn(r,e,i)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function Gr(t){return B(function(e,i){return t<=i})}function Ed(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 kd(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=ar(t);return le(function(r,n){(i?Ga(t,r,i):Ga(t,r)).subscribe(n)})}function Ke(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++;Ee(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){Ee(t).subscribe(ae(i,function(){return i.complete()},nr)),!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)}))}):Wt}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){Ee(t[p]).subscribe(ae(n,function(v){a[p]=v,!c&&!o[p]&&(o[p]=!0,(c=o.every(Wt))&&(o=null))},nr))},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:{}},xd=Xr.exports,Ja;function Id(){return Ja||(Ja=1,(function(t){(function(e,i){t.exports?t.exports=i():e.log=i()})(xd,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,D){var x=C[D];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(),D=0;D<n.length;D++){var x=n[D];this[x]=D<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,D,x){return u(C)||p.apply(this,arguments)}function m(C,D){var x=this,f,b,y,A="loglevel";typeof C=="string"?A+=":"+C:typeof C=="symbol"&&(A=void 0);function I(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 K(){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=D||v,x.getLevel=function(){return y??b??f},x.setLevel=function(F,ee){return y=_(F),ee!==!1&&I(y),h.call(x)},x.setDefaultLevel=function(F){b=_(F),N()||x.setLevel(F,!1)},x.resetLevel=function(){y=null,K(),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(D){if(typeof D!="symbol"&&typeof D!="string"||D==="")throw new TypeError("You must supply a name when creating a logger.");var x=s[D];return x||(x=s[D]=new m(D,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 Dd=Id();const Md=qr(Dd);var Di=class extends Error{constructor(t,e){super(`Unexpected Error${t?` at ${t}`:""}`,e),this.at=t,this.name="UnexpectedError"}},vt=class extends Error{constructor(t="Not Implemented",e){super(t,e),this.reason=t,this.name="UnimplementedError"}},ii=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"}},Rd=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"}},Pd=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"}},Kn=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"}},Zn=class extends Error{constructor(t="localStorage",e){super(`${t} is not available in this environment`,e),this.storageType=t,this.name="StorageNotAvailableError"}},Od=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"}},_d=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"}},Qn=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"}},Ld=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"}},Fd=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"}},Ud=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"}},Nd=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"}},Mi=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"}},Bd=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"}},ri=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="TokenRefreshError"}};const zd=()=>new Date().toISOString(),Ri=Md.getLogger("signalwire"),Vd=Ri.methodFactory;Ri.methodFactory=(t,e,i)=>{const r=Vd(t,e,i);return function(...n){const s=[zd(),"-",...n];r.apply(void 0,s)}};const Hd=Ri.levels.WARN;Ri.setLevel(Hd);let co=null;const jd=t=>{co=t};let Qr={};const Wd=t=>{if(t==null){Qr={};return}Qr={...Qr,...t}},Gd=t=>{Ri.setLevel(t)},Jn=()=>co??Ri,qd=t=>t!=null&&typeof t=="object"&&"method"in t?t.method!=="signalwire.ping":!0,Xd=t=>{const{logWsTraffic:e}=Qr;if(!e)return;const i=Jn();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=qd(r)?JSON.stringify(r,null,2):r;i.debug(`${t.type.toUpperCase()}:
|
|
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{pa(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)pa(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})(),da=Ei.EMPTY;function ha(t){return t instanceof Ei||t&&"closed"in t&&pe(t.remove)&&pe(t.add)&&pe(t.unsubscribe)}function pa(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 ga(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,ha(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){ga(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 Wt(t){return t}function Vr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return fa(t)}function fa(t){return t.length===0?Wt:t.length===1?t[0]:function(i){return t.reduce(function(r,n){return n(r)},i)}}var be=(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=va(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 fa(e)(this)},t.prototype.toPromise=function(e){var i=this;return e=va(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 va(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)&&ha(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),ba={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 ma(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?da:(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 be;return i.source=this,i},e.create=function(i,r){return new ma(i,r)},e})(be),ma=(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:da},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),ya={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),ya.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&&ya.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 wa(t){return t in Wn?(delete Wn[t],!0):!1}var Sa={setImmediate:function(t){var e=Pu++;return Wn[e]=!0,jn||(jn=Promise.resolve()),jn.then(function(){return wa(e)&&t()}),e},clearImmediate:function(t){wa(t)}},Ou=Sa.setImmediate,_u=Sa.clearImmediate,Ca={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=Ca.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&&(Ca.clearImmediate(r),i._scheduled===r&&(i._scheduled=void 0))},e})(Hn),Aa=(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=Aa.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})(Aa),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),Ta=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=ba.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&&(ba.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),Ea=new Bu(Nu),$t=new be(function(t){return t.complete()});function ka(t){return t&&pe(t.schedule)}function qn(t){return t[t.length-1]}function xa(t){return pe(qn(t))?t.pop():void 0}function or(t){return ka(qn(t))?t.pop():void 0}function zu(t,e){return typeof qn(t)=="number"?t.pop():e}var Da=(function(t){return t&&typeof t.length=="number"&&typeof t!="function"});function Ia(t){return pe(t==null?void 0:t.then)}function Ma(t){return pe(t[Bn])}function Ra(t){return Symbol.asyncIterator&&pe(t==null?void 0:t[Symbol.asyncIterator])}function Pa(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 Oa=Vu();function _a(t){return pe(t==null?void 0:t[Oa])}function La(t){return mu(this,arguments,function(){var i,r,n,s;return ua(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 Fa(t){return pe(t==null?void 0:t.getReader)}function Ee(t){if(t instanceof be)return t;if(t!=null){if(Ma(t))return Hu(t);if(Da(t))return ju(t);if(Ia(t))return Wu(t);if(Ra(t))return Ua(t);if(_a(t))return Gu(t);if(Fa(t))return qu(t)}throw Pa(t)}function Hu(t){return new be(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 be(function(e){for(var i=0;i<t.length&&!e.closed;i++)e.next(t[i]);e.complete()})}function Wu(t){return new be(function(e){t.then(function(i){e.closed||(e.next(i),e.complete())},function(i){return e.error(i)}).then(null,ga)})}function Gu(t){return new be(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 Ua(t){return new be(function(e){Xu(t,e).catch(function(i){return e.error(i)})})}function qu(t){return Ua(La(t))}function Xu(t,e){var i,r,n,s;return bu(this,void 0,void 0,function(){var a,o;return ua(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 Na(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 Ee(t).pipe(Na(e),Hr(e))}function Ku(t,e){return Ee(t).pipe(Na(e),Hr(e))}function Zu(t,e){return new be(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 be(function(i){var r;return _t(i,e,function(){r=t[Oa](),_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 Ba(t,e){if(!t)throw new Error("Iterable cannot be null");return new be(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 Ba(La(t),e)}function $u(t,e){if(t!=null){if(Ma(t))return Yu(t,e);if(Da(t))return Zu(t,e);if(Ia(t))return Ku(t,e);if(Ra(t))return Ba(t,e);if(_a(t))return Qu(t,e);if(Fa(t))return Ju(t,e)}throw Pa(t)}function Ie(t,e){return e?$u(t,e):Ee(t)}function Et(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=or(t);return Ie(t,i)}function ed(t,e){var i=pe(t)?t:function(){return t},r=function(n){return n.error(i())};return new be(r)}var jr=Ur(function(t){return function(){t(this),this.name="EmptyError",this.message="no elements in sequence"}});function za(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 Va(t){return t instanceof Date&&!isNaN(t)}var Ha=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=Va(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(),Ee(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 Ha(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 ja(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=or(t),r=xa(t),n=ld(t),s=n.args,a=n.keys;if(s.length===0)return Ie([],i);var o=new be(hd(s,i,a?function(c){return dd(a,c)}:Wt));return r?o.pipe(nd(r)):o}function hd(t,e,i){return i===void 0&&(i=Wt),function(r){Wa(e,function(){for(var n=t.length,s=new Array(n),a=n,o=n,c=function(h){Wa(e,function(){var p=Ie(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 Wa(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;Ee(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)})(Ee(t(r,n)))},i):(typeof e=="number"&&(i=e),le(function(r,n){return pd(r,n,t,i)}))}function Ga(t){return t===void 0&&(t=1/0),Xn(Wt,t)}function gd(){return Ga(1)}function qa(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return gd()(Ie(t,or(t)))}function ei(t){return new be(function(e){Ee(t()).subscribe(e)})}function Di(t,e,i){t===void 0&&(t=0),i===void 0&&(i=Uu);var r=-1;return e!=null&&(ka(e)?i=e:r=e),new be(function(n){var s=Va(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?Ee(n[0]):Ga(r)(Ie(n,i)):$t}var fd=new be(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?Ee(t[0]):new be(md(t))}function md(t){return function(e){for(var i=[],r=function(s){i.push(Ee(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||Ee(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 ti(t){return le(function(e,i){var r=null,n=!1,s;r=e.subscribe(ae(i,void 0,void 0,function(a){s=Ee(t(a,ti(t)(e))),r?(r.unsubscribe(),r=null,s.subscribe(i)):n=!0})),n&&(r.unsubscribe(),r=null,s.subscribe(i))})}function Xa(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(Xa(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 Ya(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 Me(t){return t<=0?function(){return $t}: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=Wt),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()}),Ee(t(o,n++)).subscribe(s))},function(){a=!0,!s&&r.complete()}))})}function Ka(t,e){var i=arguments.length>=2;return function(r){return r.pipe(Wt,Me(1),i?Td(e):kd(function(){return new jr}))}}function Za(t,e){return le(Xa(t,e,arguments.length>=2,!0))}function kt(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()}}),Ee(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 Ee(e.apply(void 0,ft([],gt(i)))).subscribe(n)}}function tt(t,e,i){var r,n=!1;return r=t,kt({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?qa(t,r,i):qa(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++;Ee(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){Ee(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)}))}):Wt}function Qa(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=xa(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){Ee(t[p]).subscribe(ae(n,function(v){a[p]=v,!c&&!o[p]&&(o[p]=!0,(c=o.every(Wt))&&(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 Ja=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,$a;function Rd(){return $a||($a=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"}},vt=class extends Error{constructor(t="Not Implemented",e){super(t,e),this.reason=t,this.name="UnimplementedError"}},ii=class extends Error{constructor(t="Invalid Credentials",e){super(t,e),this.reason=t,this.name="InvalidCredentialsError"}},eo=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketConnectionError"}},to=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"}},io=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"}},ro=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"}},no=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="InvalidParams"}},so=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"}},ao=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"}},oo=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"}},co=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="DeviceTokenError"}},ri=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 lo=null;const qd=t=>{lo=t};let Qr={};const Xd=t=>{if(t==null){Qr={};return}Qr={...Qr,...t}},Yd=t=>{Pi.setLevel(t)},$n=()=>lo??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()}:
|
|
66
66
|
`,n,`
|
|
67
|
-
`)},W=()=>{const t=Jn();return new Proxy(t,{get(e,i,r){if(i==="wsTraffic")return Xd;const n=Jn(),s=Reflect.get(n,i);return typeof s=="function"?s.bind(n):s}})};function ue(){return B(t=>t!=null)}const tt=(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 Yd(t,e){return Vr(B(t),E(e))}function fe(t,e){return Vr(Yd(t,i=>tt(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 lr extends Error{}lr.prototype.name="InvalidTokenError";function Kd(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 Zd(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 Kd(e)}catch{return atob(e)}}function Qd(t,e){if(typeof t!="string")throw new lr("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 lr(`Invalid token specified: missing part #${i+1}`);let n;try{n=Zd(r)}catch(s){throw new lr(`Invalid token specified: invalid base64 for part #${i+1} (${s.message})`)}try{return JSON.parse(n)}catch(s){throw new lr(`Invalid token specified: invalid json for part #${i+1} (${s.message})`)}}const Re=[];for(let t=0;t<256;++t)Re.push((t+256).toString(16).slice(1));function Jd(t,e=0){return(Re[t[e+0]]+Re[t[e+1]]+Re[t[e+2]]+Re[t[e+3]]+"-"+Re[t[e+4]]+Re[t[e+5]]+"-"+Re[t[e+6]]+Re[t[e+7]]+"-"+Re[t[e+8]]+Re[t[e+9]]+"-"+Re[t[e+10]]+Re[t[e+11]]+Re[t[e+12]]+Re[t[e+13]]+Re[t[e+14]]+Re[t[e+15]]).toLowerCase()}const $d=new Uint8Array(16);function eh(){return crypto.getRandomValues($d)}function Jr(t,e,i){return crypto.randomUUID?crypto.randomUUID():th(t)}function th(t,e,i){var n;t=t||{};const r=t.random??((n=t.rng)==null?void 0:n.call(t))??eh();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,Jd(r)}var te=class{constructor(){this.subscriptions=[],this.subjects=[],this._destroyed$=new ki}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 ki;return this.subjects.push(t),t}createReplaySubject(t,e){const i=new zn(t,e);return this.subjects.push(i),i}createBehaviorSubject(t){const e=new xu(t);return this.subjects.push(e),e}get destroyed$(){return this._destroyed$.asObservable()}};const ih=10,rh=100,nh=1,sh=({delayLimit:t=Number.MAX_SAFE_INTEGER,initialDelay:e=rh,variation:i=nh})=>{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}},ah=async({asyncCallable:t,maxRetries:e=ih,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()},Pi=W(),$n={method:"GET",headers:{Accept:"application/json"}},$r={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};var oh=(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){Pi.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=sh({initialDelay:this.retryDelayMin,variation:i,delayLimit:this.retryDelayMax});return ah({asyncCallable:async()=>this.executeRequest(e),maxRetries:this.maxRetries,delayFn:r,validator:n=>{if(n.status>=500&&n.status<600)throw new Di(`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;Pi.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 Pi.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}):(Pi.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}`,Pi.debug("[HTTPRequestController] Using Bearer token auth, token length:",r.token.length)):Pi.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 ch=5,lh=(t,e)=>({deviceId:t.deviceId,label:t.label,groupId:t.groupId,kind:e});var uh=class{constructor(){this._stacks={audioinput:[],audiooutput:[],videoinput:[]}}push(t,e){const i=lh(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,ch)}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 dh=1e3,ho=600,po=6e3,hh=300*1e3,ph=1e4,gh=100,fh=3e3,vh=1500,bh=0,go="sw:preferences",mh="sat:refresh",fo="/api/fabric/subscriber/devices/token",vo="/api/fabric/subscriber/devices/refresh",ur=900,yh=3e4,bo=3,wh=1e3,mo=5,Sh=1e3,Ch=3e4,Ah=5e3,yo=-32003,wo=-32602,So=-32002,Th=1e3,Eh=10,kh=2e3,xh=3,Ih=.05,Dh=4,Mh=30,Rh=3,Ph=3e3,Oh=1e4,_h=1e4,Lh=3,Fh=5e3,Uh=2e3,Nh=1e4,Bh=3e3,zh=5e3,Vh=3,Hh=1e4,jh=5e3,Wh=100,Co=33,Gh=.03,qh=250,Xh=!0,Yh=!0,Kh="sw:device:audioinput",Zh="sw:device:audiooutput",Qh="sw:device:videoinput",Jh=!1,$h=!0,ep=!0,tp=!0,ip=150,rp=300,np=!0,sp=!0,ap=!0,op=!1,cp=51e4;function it(t){return t*1e3}function rt(t){return Math.round(t/100)/10}const Ao=W();var g=class Hl{static get instance(){return this._instance??(this._instance=new Hl),this._instance}constructor(){this.deviceDebounceTime=vh,this.devicePollingInterval=bh,this.reconnectCallsTimeout=hh,this.connectionTimeout=ph,this.reconnectDelayMin=gh,this.reconnectDelayMax=fh,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=Th,this.statsBaselineSamples=Eh,this.statsNoPacketThreshold=kh,this.statsRttSpikeMultiplier=xh,this.statsPacketLossThreshold=Ih,this.statsJitterSpikeMultiplier=Dh,this.statsHistorySize=Mh,this.keyframeMaxBurst=Rh,this.keyframeBurstWindow=Ph,this.keyframeCooldown=Oh,this.reinviteDebounceTime=_h,this.reinviteMaxAttempts=Lh,this.reinviteTimeout=Fh,this.recoveryDebounceTime=Uh,this.recoveryCooldown=Nh,this.iceDisconnectedGracePeriod=Bh,this.iceRestartTimeout=zh,this.maxRecoveryAttempts=Vh,this.enableRelayFallback=np,this.enableNetworkChangeDetection=sp,this.enableServerHangupInterception=ap,this.persistDeviceSelection=Xh,this.syncDevicesToActiveCalls=Yh,this.autoMuteVideoOnHidden=Jh,this.refreshDevicesOnVisible=$h,this.checkConnectionOnVisible=ep,this.defaultAudioConstraints=void 0,this.defaultVideoConstraints=void 0,this.stereoAudio=op,this.enableAutoDegradation=tp,this.degradationBitrateThreshold=ip,this.degradationRecoveryThreshold=rp,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 lp=["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 dp(){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 hp(t){const e=g.instance;for(const i of lp)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 pp=class{constructor(){this._storage=null}enableSavePreferences(t){this._storage=t,this._loadFromStorage()}get connectionTimeout(){return rt(g.instance.connectionTimeout)}set connectionTimeout(t){g.instance.connectionTimeout=it(t),this._saveToStorage()}get reconnectCallsTimeout(){return rt(g.instance.reconnectCallsTimeout)}set reconnectCallsTimeout(t){g.instance.reconnectCallsTimeout=it(t),this._saveToStorage()}get reconnectDelayMin(){return rt(g.instance.reconnectDelayMin)}set reconnectDelayMin(t){g.instance.reconnectDelayMin=it(t),this._saveToStorage()}get reconnectDelayMax(){return rt(g.instance.reconnectDelayMax)}set reconnectDelayMax(t){g.instance.reconnectDelayMax=it(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 rt(g.instance.deviceDebounceTime)}set deviceDebounceTime(t){g.instance.deviceDebounceTime=it(t),this._saveToStorage()}get devicePollingInterval(){return rt(g.instance.devicePollingInterval)}set devicePollingInterval(t){g.instance.devicePollingInterval=it(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 rt(g.instance.iceCandidateTimeout)}set iceCandidateTimeout(t){g.instance.iceCandidateTimeout=it(t),this._saveToStorage()}get iceGatheringTimeout(){return rt(g.instance.iceGatheringTimeout)}set iceGatheringTimeout(t){g.instance.iceGatheringTimeout=it(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 rt(g.instance.recoveryDebounceTime)}set recoveryDebounceTime(t){g.instance.recoveryDebounceTime=it(t),this._saveToStorage()}get recoveryCooldown(){return rt(g.instance.recoveryCooldown)}set recoveryCooldown(t){g.instance.recoveryCooldown=it(t),this._saveToStorage()}get iceDisconnectedGracePeriod(){return rt(g.instance.iceDisconnectedGracePeriod)}set iceDisconnectedGracePeriod(t){g.instance.iceDisconnectedGracePeriod=it(t),this._saveToStorage()}get iceRestartTimeout(){return rt(g.instance.iceRestartTimeout)}set iceRestartTimeout(t){g.instance.iceRestartTimeout=it(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=dp();this._storage.setItem(go,t,"local").catch(e=>{Ao.error(`[ClientPreferences] Failed to save preferences: ${String(e)}`)})}_loadFromStorage(){this._storage&&this._storage.getItem(go,"local").then(t=>{t&&hp(t)}).catch(t=>{Ao.error(`[ClientPreferences] Failed to load preferences: ${String(t)}`)})}};function bt(t){return t instanceof Error?t:new Error(String(t))}const nt=W(),To={audioinput:Kh,audiooutput:Zh,videoinput:Qh},gp={audioinput:[],audiooutput:[],videoinput:[]},Eo={audioinput:null,audiooutput:null,videoinput:null};var fp=class extends te{constructor(t,e){super(),this.webRTCApiProvider=t,this.deviceChangeHandler=()=>{nt.debug("[DeviceController] Device change detected"),this.enumerateDevices()},this._devicesState$=this.createBehaviorSubject(gp),this._selectedDevicesState$=this.createBehaviorSubject(Eo),this._errors$=this.createReplaySubject(1),this._deviceHistory=new uh,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=>nt.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=>nt.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=>nt.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){nt.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 nt.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(To[t],i,"local")}catch(r){nt.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(To[t],"local");e&&(this._persistedDevices={...this._persistedDevices,[t]:e})}catch(e){nt.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(Eo),await this.enumerateDevices()}enableDeviceMonitoring(){this.disableDeviceMonitoring(),this.webRTCApiProvider.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler),g.instance.devicePollingInterval>0&&(this._devicesPoolingSubscription=Wr(g.instance.devicePollingInterval).subscribe(()=>{nt.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),nt.debug("[DeviceController] Devices enumerated:",{audioInputs:t.audioinput.length,audioOutputs:t.audiooutput.length,videoInputs:t.videoinput.length})}catch(t){nt.error("[DeviceController] Failed to enumerate devices:",t),this._errors$.next(bt(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 nt.error("[DeviceController] Failed to get device capabilities:",e),this._errors$.next(bt(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()}},ko=class{constructor(){if(typeof localStorage>"u")throw new Zn("localStorage");if(typeof sessionStorage>"u")throw new Zn("sessionStorage");try{const t="__storage_test__";localStorage.setItem(t,"test"),localStorage.removeItem(t)}catch(t){throw W().error("LocalStorage is not accessible:",t),new Zn("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()}},vp=class{constructor(t=new ko){this.storageImpl=t}serialize(t,e){if(t==null)return null;try{return JSON.stringify(t)}catch(i){throw new Od(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 Qn(t,n)}}async getItem(t,e="session"){let i;try{i=await this.storageImpl.getItem(t,e)}catch(r){throw new Ld(t,r)}if(!i)return null;try{return JSON.parse(i)}catch(r){throw new _d(t,r)}}async removeItem(t,e="session"){try{await this.storageImpl.removeItem(t,e)}catch(i){throw new Qn(t,i)}}async clearAll(){try{await this.storageImpl.clear("local"),await this.storageImpl.clear("session")}catch(t){throw new Qn("clearAll",t)}}},bp=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 ko),this._storageManager=new vp(this._storageImpl)),this._storageManager}get http(){return this._httpRequestController??(this._httpRequestController=new oh(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 fp(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 Gt=W(),mp="sw-dpop",yp=1,qt="keys",es="dpop-keypair",en=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(/=+$/,"")},xo=t=>en(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 en(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))};async function ts(){return new Promise((t,e)=>{const i=indexedDB.open(mp,yp);i.onupgradeneeded=()=>{const r=i.result;r.objectStoreNames.contains(qt)||r.createObjectStore(qt)},i.onsuccess=()=>t(i.result),i.onerror=()=>e(i.error??new Error("Failed to open IndexedDB"))})}async function wp(){try{const t=await ts();return await new Promise((e,i)=>{const r=t.transaction(qt,"readonly"),n=r.objectStore(qt).get(es);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 Gt.warn("[DPoP] Failed to load key pair from IndexedDB:",t),null}}async function Sp(t){try{const e=await ts();await new Promise((i,r)=>{const n=e.transaction(qt,"readwrite");n.objectStore(qt).put(t,es),n.oncomplete=()=>{e.close(),i()},n.onerror=()=>{e.close(),r(n.error??new Error("Failed to save key pair to IndexedDB"))}})}catch(e){Gt.warn("[DPoP] Failed to save key pair to IndexedDB:",e)}}async function Do(){try{const t=await ts();await new Promise((e,i)=>{const r=t.transaction(qt,"readwrite");r.objectStore(qt).delete(es),r.oncomplete=()=>{t.close(),e()},r.onerror=()=>{t.close(),i(r.error??new Error("Failed to delete key pair from IndexedDB"))}})}catch(t){Gt.warn("[DPoP] Failed to delete key pair from IndexedDB:",t)}}var Cp=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 wp();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,Gt.debug("[DPoP] Key pair restored from IndexedDB, fingerprint:",this._fingerprint),this._fingerprint}catch(e){Gt.warn("[DPoP] Stored key pair unusable, generating new one:",e),await Do()}return Gt.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 Sp(this._keyPair),Gt.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=en(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,Do(),Gt.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=`${xo(JSON.stringify(e))}.${xo(JSON.stringify(t))}`;return`${i}.${en(await crypto.subtle.sign("RSASSA-PKCS1-v1_5",this.privateKey,new TextEncoder().encode(i)))}`}};const Oi=W();function Mo(){return typeof window<"u"&&typeof window.addEventListener=="function"}function Ro(){if(typeof navigator>"u")return;const{connection:t}=navigator;return(t==null?void 0:t.effectiveType)??void 0}function Po(){if(!(typeof navigator>"u"))return navigator.connection??void 0}var Ap=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(!Mo()){Oi.debug("NetworkMonitor: no browser environment detected, skipping event listeners");return}window.addEventListener("online",this._onOnline),window.addEventListener("offline",this._onOffline);const t=Po();t&&t.addEventListener("change",this._onConnectionChange),this._listenersAttached=!0,Oi.debug("NetworkMonitor: event listeners attached")}removeListeners(){if(this._listenersAttached){if(Mo()){window.removeEventListener("online",this._onOnline),window.removeEventListener("offline",this._onOffline);const t=Po();t&&t.removeEventListener("change",this._onConnectionChange)}this._listenersAttached=!1,Oi.debug("NetworkMonitor: event listeners removed")}}handleOnline(){Oi.info("NetworkMonitor: browser went online"),this._isOnline$.next(!0),this._networkChange$.next({type:"online",timestamp:Date.now(),networkType:Ro()})}handleOffline(){Oi.info("NetworkMonitor: browser went offline"),this._isOnline$.next(!1),this._networkChange$.next({type:"offline",timestamp:Date.now()})}handleConnectionChange(){const t=Ro();Oi.info(`NetworkMonitor: connection changed — effectiveType=${t??"unknown"}`),this._networkChange$.next({type:"connection_change",timestamp:Date.now(),networkType:t})}};function Oo(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=Tp(n.mimeType);s&&!i.has(s)&&(i.add(s),r.push(s))}return r}function Tp(t){const e=t.indexOf("/");return e>=0?t.substring(e+1):t}function Ep(){return typeof globalThis>"u"?!1:"RTCRtpScriptTransform"in globalThis||"MediaStreamTrackProcessor"in globalThis}function kp(){return typeof HTMLMediaElement>"u"?!1:"setSinkId"in HTMLMediaElement.prototype}function xp(){return typeof RTCRtpSender>"u"?!1:typeof RTCRtpSender.prototype.setParameters=="function"}function _o(t){const e=(t==null?void 0:t.mediaDevices)??Lo(),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:Ip(),simulcast:xp(),insertableStreams:Ep(),audioOutputSelection:kp(),videoCodecs:Oo("video"),audioCodecs:Oo("audio")};return Object.freeze(n)}function Ip(){if(typeof navigator>"u")return!1;const t=Lo();return!t||typeof t.getDisplayMedia!="function"?!1:navigator.userAgent.includes("Chrome/")}function Lo(){return typeof navigator<"u"?navigator.mediaDevices:null}const tn=W(),Dp=10,Mp=1e4,Rp=5e3,Pp=5e3;var Op=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??Dp,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){tn.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 tn.error("[PreflightRunner] Preflight test failed:",i),new Bd("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")),Pp))]);for(const o of s.getTracks())o.kind==="audio"&&o.readyState==="live"&&(r=!0),o.kind==="video"&&o.readyState==="live"&&(n=!0)}catch(a){tn.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,Mp);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 tn.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"),Me(1),or(Rp)));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 rn=W();function _p(){try{return typeof document<"u"&&typeof document.addEventListener=="function"&&typeof document.visibilityState=="string"}catch{return!1}}function Fo(){try{if(typeof document<"u"&&typeof document.visibilityState=="string")return document.visibilityState==="visible"?"visible":"hidden"}catch{}return"visible"}var Lp=class extends te{constructor(){super(),this._visibility$=this.createBehaviorSubject(Fo()),this._visibilityChange$=this.createSubject(),this._hasVisibilityApi=_p(),this._boundHandler=this._handleVisibilityChange.bind(this),this._hasVisibilityApi?(document.addEventListener("visibilitychange",this._boundHandler),rn.debug("VisibilityController: listening for visibilitychange events")):rn.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),rn.debug("VisibilityController: removed visibilitychange listener")),super.destroy()}_handleVisibilityChange(){const t=Fo(),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),rn.debug("VisibilityController: visibility changed",{from:e,to:t})}},Fp=class extends te{constructor(t,e){super(),this.fromPath=t,this.http=e,this.fetched$=ei(()=>De(this.fetch())).pipe(et(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}},Up=class extends Fp{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 _i=t=>({jsonrpc:"2.0",id:t.id??Jr(),...t}),Uo=t=>({jsonrpc:"2.0",...t}),Np={major:4,minor:0,revision:0},Bp=t=>_i({method:"signalwire.connect",params:{version:Np,event_acks:!0,...t}}),zp=t=>{const{dpop_token:e,...i}=t;return _i({method:"signalwire.reauthenticate",params:{authentication:i,...e?{dpop_token:e}:{}}})},Vp=(t,e)=>Uo({id:t,result:{timestamp:Date.now()/1e3}}),is=({method:t,params:e})=>_i({method:t,params:e}),Hp={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"},jp=new Set(["remoteSdp","localStream","remoteStream"]),Wp=t=>{if(!Object.prototype.hasOwnProperty.call(t,"dialogParams"))return t;const e=t.dialogParams,i=Object.entries(e).reduce((r,[n,s])=>{if(jp.has(n))return r;const a=Hp[n]??n;return{...r,[a]:s}},{});return{...t,dialogParams:i}},ni=t=>(e={})=>_i({method:t,params:Wp(e)}),No=t=>_i({method:"webrtc.verto",params:t}),Gp=ni("verto.invite"),qp=ni("verto.bye"),nn=ni("verto.modify"),Xp=ni("verto.info"),Yp=ni("verto.answer"),Kp=ni("verto.subscribe"),Zp=ni("verto.pong"),Qp={NORMAL_CLEARING:"16",USER_BUSY:"17",MEDIA_TIMEOUT:"804"},Jp=t=>Uo({id:t,result:{}}),Li=W();var $p=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 Li.warn("[AttachManager] Failed to retrieve attached calls from storage",t),{}}}async writeAttached(t){try{await this.storage.setItem(this.attachKey,t)}catch(e){Li.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){Li.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}),Li.info(`[AttachManager] Reattached call ${e} (attempt ${a})`),s=!0;break}catch(o){Li.warn(`[AttachManager] Reattach attempt ${a}/3 failed for call ${e}:`,o),a<3&&await new Promise(c=>setTimeout(c,(a+1)*1e3))}s||(Li.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 si={on:!1,off:!1},rs={muteAudio:si,muteVideo:si,deaf:si,raisehand:si,microphoneVolume:!1,microphoneSensitivity:!1,speakerVolume:!1,position:!1,meta:!1,remove:!1,audioFlags:!1},Bo={self:rs,member:rs,end:!1,setLayout:!1,sendDigit:!1,vmutedHide:si,lock:si,device:!1,screenshare:!1};function Fi(t){return t.length===0?si:{on:t.some(e=>!e.endsWith(".off")),off:t.some(e=>!e.endsWith(".on"))}}function zo(t,e,i,r){return t.filter(n=>n===e||n===`${e}.${i}`||n.startsWith(`${e}.${i}.${r}`))}function ai(t,e,i,r){return t.some(n=>n===e||i!==null&&n===`${e}.${i}`||n.startsWith(`${e}.${i?`${i}.`:""}${r}`))}function Vo(t,e){return t.filter(i=>i.startsWith(e)||i===e).length===0?rs:{muteAudio:Fi(zo(t,e,"mute","audio")),muteVideo:Fi(zo(t,e,"mute","video")),deaf:Fi(t.filter(i=>i===e||i.startsWith(`${e}.deaf`))),raisehand:Fi(t.filter(i=>i===e||i.startsWith(`${e}.raisehand`))),microphoneVolume:ai(t,e,"microphone","volume"),microphoneSensitivity:ai(t,e,"microphone","sensitivity"),speakerVolume:ai(t,e,"speaker","volume"),position:ai(t,e,null,"position"),meta:ai(t,e,null,"meta"),remove:ai(t,e,null,"remove"),audioFlags:ai(t,e,null,"audioflags")}}function eg(t){return t.length===0?Bo:{self:Vo(t,"self"),member:Vo(t,"member"),end:t.some(e=>e==="end"),setLayout:t.some(e=>e.startsWith("layout")),sendDigit:t.some(e=>e.startsWith("digit")),vmutedHide:Fi(t.filter(e=>e.startsWith("vmuted"))),lock:Fi(t.filter(e=>e.startsWith("lock"))),device:t.some(e=>e==="device"),screenshare:t.some(e=>e==="screenshare")}}var tg=class extends te{constructor(...t){super(...t),this._state$=this.createBehaviorSubject(Bo)}updateFromRaw(t){const e=eg(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 ig(t){return t?"call.undeaf":"call.deaf"}function rg(t){return t?"call.lowerhand":"call.raisehand"}const oi=W(),ng={};var Ho=class extends te{constructor(t,e,i){super(),this.executeMethod=e,this.deviceController=i,this._state$=this.createBehaviorSubject(ng),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 value(){return this._state$.value}async toggleDeaf(){const t=ig(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(){throw new vt}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){await this.executeMethod(this.id,"call.member.position.set",{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 vt}async updateMeta(t){throw new vt}destroy(){this.executeMethod=void 0,super.destroy()}},jo=class extends Ho{constructor(t,e,i,r){super(t,e,r),this.vertoManager=i,this._studioAudio$=this.createBehaviorSubject(!1),this.capabilities=new tg}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 Wo=t=>t instanceof jo;function ke(t){return typeof t=="object"&&t!==null}function G(t,e){return e in t}function ns(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&G(t,"method")&&typeof t.method=="string"}function ss(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&(G(t,"result")||G(t,"error"))}function sg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&(G(t,"error")&&ke(t.error)&&G(t.error,"code")&&G(t.error,"message")||G(t,"result")&&ke(t.result)&&G(t.result,"code")&&t.result.code!=="200"&&G(t.result,"message"))}function Le(t){return e=>Go(e)&&e.event_type===t}function as(t){return ns(t)&&t.method==="signalwire.event"&&ke(t.params)&&G(t.params,"event_type")}function Go(t){return ke(t)&&G(t,"event_type")&&typeof t.event_type=="string"&&G(t,"params")}function ag(t){return Go(t)&&(cg(t)||lg(t)||qo(t)||Xo(t)||ug(t)||dg(t)||hg(t)||Yo(t)||Ko(t)||Zo(t)||Qo(t)||os(t)||sn(t)||Jo(t)||$o(t))}const og=Le("signalwire.authorization.state"),sn=Le("webrtc.message"),cg=Le("call.joined"),lg=Le("call.left"),qo=Le("call.updated"),Xo=Le("call.state"),ug=Le("call.play"),dg=Le("call.connect"),hg=Le("room.updated"),Yo=Le("member.updated"),Ko=Le("member.joined"),Zo=Le("member.left"),Qo=Le("member.talking"),os=Le("layout.changed"),Jo=Le("conversation.message"),$o=Le("conversation.message.updated");function ec(t){return ke(t)&&G(t,"room_session")&&G(t,"call_id")&&G(t,"member_id")&&G(t,"capabilities")}function pg(t){return ke(t)&&G(t,"room_id")&&G(t,"room_session_id")&&G(t,"layout")}const Ze=W(),gg={};var fg=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(gg),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;Ze.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=>{Ze.debug("[CallEventsManager] Handling member update event for member ID:",t),this.upsertParticipant(t)}),this.subscribeTo(this.webRtcCallSession.memberLeft$,t=>{Ze.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)):Ze.warn(`[CallEventsManager] Received member.left event for unknown member ID: ${t.member.member_id}`)}),this.subscribeTo(this.webRtcCallSession.callUpdated$,t=>{Ze.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=>{Ze.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)&&Ze.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:(Ze.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=>{Wo(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=>{Ze.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;Ze.debug("[CallEventsManager] Updating participant:",t.member_id,{oldValue:i,newValue:t}),e.upnext({...i,...t}),Wo(e)&&this._self$.next(e),this._participants$.next(this._participants$.value)}get callJoinedEvent$(){return this.cachedObservable("callJoinedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(B(ec),Se(t=>{Ze.debug("[CallEventsManager] Call joined event:",t)})))}get layoutChangedEvent$(){return this.cachedObservable("layoutChangedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(fe(pg,"layout"),Se(t=>{Ze.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=>{Ze.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 vg=new Set(["sendrecv","sendonly","recvonly","inactive"]);function bg(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();vg.has(a)&&(n=a)}return r&&(e[r]=n??"sendrecv"),e}function tc(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
|
+
`)},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 uo=W();function ho(){return E(t=>{if(t.error)throw uo.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 uo.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 Re=[];for(let t=0;t<256;++t)Re.push((t+256).toString(16).slice(1));function th(t,e=0){return(Re[t[e+0]]+Re[t[e+1]]+Re[t[e+2]]+Re[t[e+3]]+"-"+Re[t[e+4]]+Re[t[e+5]]+"-"+Re[t[e+6]]+Re[t[e+7]]+"-"+Re[t[e+8]]+Re[t[e+9]]+"-"+Re[t[e+10]]+Re[t[e+11]]+Re[t[e+12]]+Re[t[e+13]]+Re[t[e+14]]+Re[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(Ta)),this._observableCache.set(i,r)),r}deferEmission(t){return t.pipe(Hr(Ta))}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 io(`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,po=600,go=6e3,fh=300*1e3,vh=1e4,bh=100,mh=3e3,yh=1500,wh=0,fo="sw:preferences",Sh="sat:refresh",vo="/api/fabric/subscriber/devices/token",bo="/api/fabric/subscriber/devices/refresh",en=900,mo=3e4,yo=3,Ch=1e3,wo=5,Ah=1e3,Th=3e4,Eh=5e3,kh=3e4,So=-32003,Co=-32602,Ao=-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,To=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 Eo=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=po,this.iceGatheringTimeout=go,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(fo,t,"local").catch(e=>{Eo.error(`[ClientPreferences] Failed to save preferences: ${String(e)}`)})}_loadFromStorage(){this._storage&&this._storage.getItem(fo,"local").then(t=>{t&&fp(t)}).catch(t=>{Eo.error(`[ClientPreferences] Failed to load preferences: ${String(t)}`)})}};function bt(t){return t instanceof Error?t:new Error(String(t))}const st=W(),ko={audioinput:Jh,audiooutput:$h,videoinput:ep},bp={audioinput:[],audiooutput:[],videoinput:[]},xo={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(xo),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(Ya(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(ko[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(ko[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(xo),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(bt(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(bt(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()}},Do=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 Do){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 Do),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 Gt=W(),Sp="sw-dpop",Cp=1,qt="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(/=+$/,"")},Io=t=>tn(new TextEncoder().encode(t).buffer),Mo=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(qt)||r.createObjectStore(qt)},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(qt,"readonly"),n=r.objectStore(qt).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 Gt.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(qt,"readwrite");n.objectStore(qt).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){Gt.warn("[DPoP] Failed to save key pair to IndexedDB:",e)}}async function Ro(){try{const t=await is();await new Promise((e,i)=>{const r=t.transaction(qt,"readwrite");r.objectStore(qt).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){Gt.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 Mo(this._publicJwk),this._initialized=!0,Gt.debug("[DPoP] Key pair restored from IndexedDB, fingerprint:",this._fingerprint),this._fingerprint}catch(e){Gt.warn("[DPoP] Stored key pair unusable, generating new one:",e),await Ro()}return Gt.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 Mo(this._publicJwk),this._initialized=!0,await Tp(this._keyPair),Gt.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,Ro(),Gt.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=`${Io(JSON.stringify(e))}.${Io(JSON.stringify(t))}`;return`${i}.${tn(await crypto.subtle.sign("RSASSA-PKCS1-v1_5",this.privateKey,new TextEncoder().encode(i)))}`}};const _i=W();function Po(){return typeof window<"u"&&typeof window.addEventListener=="function"}function Oo(){if(typeof navigator>"u")return;const{connection:t}=navigator;return(t==null?void 0:t.effectiveType)??void 0}function _o(){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(!Po()){_i.debug("NetworkMonitor: no browser environment detected, skipping event listeners");return}window.addEventListener("online",this._onOnline),window.addEventListener("offline",this._onOffline);const t=_o();t&&t.addEventListener("change",this._onConnectionChange),this._listenersAttached=!0,_i.debug("NetworkMonitor: event listeners attached")}removeListeners(){if(this._listenersAttached){if(Po()){window.removeEventListener("online",this._onOnline),window.removeEventListener("offline",this._onOffline);const t=_o();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:Oo()})}handleOffline(){_i.info("NetworkMonitor: browser went offline"),this._isOnline$.next(!1),this._networkChange$.next({type:"offline",timestamp:Date.now()})}handleConnectionChange(){const t=Oo();_i.info(`NetworkMonitor: connection changed — effectiveType=${t??"unknown"}`),this._networkChange$.next({type:"connection_change",timestamp:Date.now(),networkType:t})}};function Lo(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 Fo(t){const e=(t==null?void 0:t.mediaDevices)??Uo(),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:Lo("video"),audioCodecs:Lo("audio")};return Object.freeze(n)}function Rp(){if(typeof navigator>"u")return!1;const t=Uo();return!t||typeof t.getDisplayMedia!="function"?!1:navigator.userAgent.includes("Chrome/")}function Uo(){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"),Me(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 No(){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(No()),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=No(),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$=ei(()=>Ie(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}),Bo=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)=>Bo({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}},ni=t=>(e={})=>Li({method:t,params:Xp(e)}),zo=t=>Li({method:"webrtc.verto",params:t}),Yp=ni("verto.invite"),Kp=ni("verto.bye"),sn=ni("verto.modify"),Zp=ni("verto.info"),Qp=ni("verto.answer"),Jp=ni("verto.subscribe"),$p=ni("verto.pong"),eg={NORMAL_CLEARING:"16",USER_BUSY:"17",MEDIA_TIMEOUT:"804"},tg=t=>Bo({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 si={on:!1,off:!1},ns={muteAudio:si,muteVideo:si,deaf:si,raisehand:si,microphoneVolume:!1,microphoneSensitivity:!1,speakerVolume:!1,position:!1,meta:!1,remove:!1,audioFlags:!1},Vo={self:ns,member:ns,end:!1,setLayout:!1,sendDigit:!1,vmutedHide:si,lock:si,device:!1,screenshare:!1};function Ui(t){return t.length===0?si:{on:t.some(e=>!e.endsWith(".off")),off:t.some(e=>!e.endsWith(".on"))}}function Ho(t,e,i,r){return t.filter(n=>n===e||n===`${e}.${i}`||n.startsWith(`${e}.${i}.${r}`))}function ai(t,e,i,r){return t.some(n=>n===e||i!==null&&n===`${e}.${i}`||n.startsWith(`${e}.${i?`${i}.`:""}${r}`))}function jo(t,e){return t.filter(i=>i.startsWith(e)||i===e).length===0?ns:{muteAudio:Ui(Ho(t,e,"mute","audio")),muteVideo:Ui(Ho(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:ai(t,e,"microphone","volume"),microphoneSensitivity:ai(t,e,"microphone","sensitivity"),speakerVolume:ai(t,e,"speaker","volume"),position:ai(t,e,null,"position"),meta:ai(t,e,null,"meta"),remove:ai(t,e,null,"remove"),audioFlags:ai(t,e,null,"audioflags")}}function rg(t){return t.length===0?Vo:{self:jo(t,"self"),member:jo(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(Vo)}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 Wo=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 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(){throw new vt}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){await this.executeMethod(this.id,"call.member.position.set",{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 vt}async updateMeta(t){throw new vt}destroy(){this.executeMethod=void 0,super.destroy()}},Go=class extends Wo{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 qo=t=>t instanceof Go;function ke(t){return typeof t=="object"&&t!==null}function G(t,e){return e in t}function ss(t){return ke(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 ke(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 ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")&&typeof t.id=="string"&&(G(t,"error")&&ke(t.error)&&G(t.error,"code")&&G(t.error,"message")||G(t,"result")&&ke(t.result)&&G(t.result,"code")&&t.result.code!=="200"&&G(t.result,"message"))}function Le(t){return e=>Xo(e)&&e.event_type===t}function os(t){return ss(t)&&t.method==="signalwire.event"&&ke(t.params)&&G(t.params,"event_type")}function Xo(t){return ke(t)&&G(t,"event_type")&&typeof t.event_type=="string"&&G(t,"params")}function lg(t){return Xo(t)&&(dg(t)||hg(t)||Yo(t)||Ko(t)||pg(t)||gg(t)||fg(t)||Zo(t)||Qo(t)||Jo(t)||$o(t)||cs(t)||an(t)||ec(t)||tc(t))}const ug=Le("signalwire.authorization.state"),an=Le("webrtc.message"),dg=Le("call.joined"),hg=Le("call.left"),Yo=Le("call.updated"),Ko=Le("call.state"),pg=Le("call.play"),gg=Le("call.connect"),fg=Le("room.updated"),Zo=Le("member.updated"),Qo=Le("member.joined"),Jo=Le("member.left"),$o=Le("member.talking"),cs=Le("layout.changed"),ec=Le("conversation.message"),tc=Le("conversation.message.updated");function ic(t){return ke(t)&&G(t,"room_session")&&G(t,"call_id")&&G(t,"member_id")&&G(t,"capabilities")}function vg(t){return ke(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=>{qo(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}),qo(e)&&this._self$.next(e),this._participants$.next(this._participants$.value)}get callJoinedEvent$(){return this.cachedObservable("callJoinedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(B(ic),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 rc(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 Sg(t,e=[],i=[]){if(!t||e.length===0&&i.length===0)return t;const r=Tg(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(nc(a,e)):o.startsWith("m=audio")&&i.length>0?n.push(nc(a,i)):n.push(a)}return n.join("")}function Cg(t,e=dp){if(!t)return t;const i=Eg(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(kg(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 cs=W();var Eg=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??Gh,this._speakingHoldMs=t.speakingHoldMs??qh,this._pollIntervalMs=t.pollIntervalMs??Co;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){cs.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=>{cs.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=>{cs.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=W();var kg=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;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 Be=W(),rc=(t,e)=>t&&e?"sendrecv":t&&!e?"sendonly":!t&&e?"recvonly":"inactive";var xg=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 rc(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 rc(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 Mi("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 Mi("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 Mi("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 Mi("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 nc=class extends te{constructor(t={},e,i){super(),this.options=t,this.firstSDPExchangeCompleted=!1,this.negotiationNeeded$=this.createSubject(),this.localDescription$=ei(()=>De(this.init())).pipe(Ke(()=>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")}))),et(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(bt(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?bg(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 kg({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||!tc(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(bd(0),Xn(async()=>this.startNegotiation())),{next:()=>{z.debug("[RTCPeerConnectionController] Start Negotiation completed successfully")},error:t=>{z.error("[RTCPeerConnectionController] Start Negotiation error:",t),this._errors$.next(bt(t))}}),this.subscribeTo(Ii(this.deviceController.selectedAudioInputDevice$.pipe(E(t=>["audio",t])),this.deviceController.selectedVideoInputDevice$.pipe(E(t=>["video",t]))).pipe(Ed(()=>!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(bt(t)),this.destroy()}}setupPeerConnection(){this.peerConnection=new this.WebRTCPeerConnectionConstructor(this.rtcConfiguration),this.peerConnection.addEventListener("negotiationneeded",this.onnegotiationneededHandler),this._iceGatheringController=new Tg(this.peerConnection,this.isNegotiating$,{iceCandidateTimeout:this.options.iceCandidateTimeout,iceGatheringTimeout:this.options.iceGatheringTimeout,relayOnly:this.options.relayOnly}),this.transceiverController=new xg({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(bt(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(bt(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=wg(e,i,r),z.debug("[RTCPeerConnectionController] Applied codec preferences to SDP",{preferredAudioCodecs:i,preferredVideoCodecs:r})),n&&(e=yg(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(bt(i)),this.negotiationEnded(),e&&this.restoreIceTransportPolicy(),i}e&&Ge(cr(this._iceGatheringState$.pipe(B(i=>i==="complete"),Me(1)),xi(Hh).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(bt(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 Eg}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(bt(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(bt(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 ls(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")}function sc(t){if(!ls(t))return!1;const e=t;return e.method==="verto.invite"&&ke(e.params)&&G(e.params,"sdp")&&G(e.params,"callID")}function us(t){return ls(t)?t.method==="verto.bye":!1}function ac(t){return ls(t)?t.method==="verto.attach":!1}function Ig(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.answer"&&ke(t.params)&&G(t.params,"callID")}function Dg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.media"&&ke(t.params)&&G(t.params,"callID")&&G(t.params,"sdp")}function Mg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.mediaParams"&&ke(t.params)&&G(t.params,"mediaParams")}function Rg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.ping"}const V=W();function Pg(t){return t.isInvite&&!t.reattach&&!t.explicitNodeId?"":t.currentNodeId??""}var Og=class extends te{constructor(t){super(),this.callSession=t}destroy(){this.callSession=void 0,super.destroy()}},_g=class extends Og{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=nn({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=nn({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=Zp({...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(ec),w(this.destroyed$))}get vertoMedia$(){return this.webRtcCallSession.webrtcMessages$.pipe(fe(Dg,"params"),w(this.destroyed$))}get vertoAnswer$(){return this.cachedObservable("vertoAnswer$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Ig,"params"),w(this.destroyed$)))}get vertoMediaParams$(){return this.cachedObservable("vertoMediaParams$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Mg,"params"),w(this.destroyed$)))}get vertoBye$(){return this.cachedObservable("vertoBye$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(us,"params"),w(this.destroyed$)))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(ac,"params"),w(this.destroyed$)))}get vertoPing$(){return this.cachedObservable("vertoPing$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Rg,"params"),w(this.destroyed$)))}async executeVerto(t,e={}){var s,a;const i=No({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=tt(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=tt(t,"result.result.result.action"),n=tt(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&&tt(t,"result.result.result.message")==="CALL CREATED"){this.emitMainSignalingStatus(e.id,"trying"),this._nodeId$.next(tt(t,"result.node_id")??null);const r=tt(t,"result.result.result.memberID")??null,n=tt(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 nc({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(cr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(w(this.destroyed$))).catch(()=>null);if(e===null){V.debug("[WebRTCManager] Inbound answer handler aborted (destroyed).");return}if(us(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),kd(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=Yp({dialogParams:n,sdp:r});this.sendLocalDescriptionOnceAccepted(a,t)}else if(s){const a=Gp({dialogParams:n,sdp:r});this.sendLocalDescription(a,t)}else{const a=nn({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:Pg({isInvite:sc(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(cr(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(us(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:dh}}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 nc({...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"),Me(1),or(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:Qp[e]}:{};await this.executeVerto(qp({...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=Xp({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=nn({...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 oc=W();var Lg=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??Co}get level$(){return this.deferEmission(Wr(this._pollIntervalMs,Ta).pipe(E(()=>this.computeLevel())))}setStream(t){if(this._source){try{this._source.disconnect()}catch(e){oc.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=>{oc.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(),Fg=1e3,Ug=10,Ng=2e3,Bg=3e3,zg=3,Vg=5,Hg=5,jg=10,Wg=4,Gg=30;function qg(t,e){const i=t+e;return i===0?0:t/i*100}function Xg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="inbound-rtp"}function Yg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="candidate-pair"}var Kg=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??Fg,this.baselineSampleCount=e.baselineSamples??Ug,this.noAudioPacketThresholdMs=e.noAudioPacketThresholdMs??Ng,this.noVideoPacketThresholdMs=e.noVideoPacketThresholdMs??Bg,this.rttSpikeWarningMultiplier=e.rttSpikeWarningMultiplier??zg,this.rttSpikeCriticalMultiplier=e.rttSpikeCriticalMultiplier??Vg,this.packetLossWarningPercent=e.packetLossWarningPercent??Hg,this.packetLossCriticalPercent=e.packetLossCriticalPercent??jg,this.jitterSpikeMultiplier=e.jitterSpikeMultiplier??Wg,this.historyWindowSeconds=e.historyWindowSeconds??Gg}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(qn(t=>De(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),Ke(()=>De(this.peerConnection.getStats()).pipe(ti(e=>(dr.warn("[RTCStatsMonitor] Failed to get stats:",e),$t)))),B(()=>this.running),E(e=>this.extractSample(e))),e=>this._sample$.next(e)),this.subscribeTo(this._sample$.pipe(Me(this.baselineSampleCount),wd(),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=>{Xg(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)),Yg(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=qg(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(),Zg=2e3,Qg=1e4,Jg=3e3,$g=5e3,ef=3,tf=3,rf=3e3,nf=1e4,sf=150,af=300,of=5,cf=new Set(["high_rtt","high_jitter","high_packet_loss"]);var lf=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??Zg,cooldownMs:i.cooldownMs??Qg,iceGracePeriodMs:i.iceGracePeriodMs??Jg,iceRestartTimeoutMs:i.iceRestartTimeoutMs??$g,maxAttempts:i.maxAttempts??ef,enableRelayFallback:i.enableRelayFallback??!0,keyframeMaxBurst:i.keyframeMaxBurst??tf,keyframeBurstWindowMs:i.keyframeBurstWindowMs??rf,keyframeCooldownMs:i.keyframeCooldownMs??nf,degradationBitrateThreshold:i.degradationBitrateThreshold??sf,degradationRecoveryThreshold:i.degradationRecoveryThreshold??af,enableAutoDegradation:i.enableAutoDegradation??!0,packetLossRecoveryDelaySec:i.packetLossRecoveryDelaySec??of},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),Xn(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(Ke(([e,i])=>e&&!i?xi(t):$t),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}`),De(this.runTiers(t)).pipe(Se(()=>this.startCooldown()),ti(e=>(oe.error("CallRecoveryManager: tiered recovery failed",e),this.startCooldown(),$t)))}async runTiers(t){if(this.executeKeyframe(t.detail),t.issueType&&cf.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=xi(this._config.cooldownMs).pipe(Me(1),w(this._destroyed$),B(()=>this._recoveryState$.value==="cooldown")).subscribe(()=>this.transitionTo("idle"))}emitEvent(t){this._recoveryEvent$.next(t)}},uf=class{constructor(t,e,i){this.executeMethod=t,this.vertoManager=e,this.deviceController=i}createSelfParticipant(t){return new jo(t,this.executeMethod,this.vertoManager,this.deviceController)}createParticipant(t){return new Ho(t,this.executeMethod,this.deviceController)}};const df=93.2,hf=.024,pf=2.5,gf=0,ff=100,vf=1,bf=5,mf=4,yf=3.5,wf=3,Sf=2;function Cf(t,e,i){const r=df-(t/2+e)*hf-i*pf,n=Math.min(ff,Math.max(gf,r)),s=1+.035*n+n*(n-60)*(100-n)*7e-6;return Math.min(bf,Math.max(vf,s))}function Af(t){return t>=mf?"excellent":t>=yf?"good":t>=wf?"fair":t>=Sf?"poor":"critical"}const me=W(),Tf=5/3,Ef=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 me.warn(`Failed to parse destination URI: ${t}`,e),{}}};var kf=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,...Ef(e.to),...e.userVariables}),this.subscribeTo(this.webrtcMessages$,o=>{const c=tt(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 uf(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(De([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 vt}async toggleIncomingAudio(){throw new vt}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 vt}async startStreaming(){throw new vt}async setMeta(t){throw new vt}async updateMeta(t){throw new vt}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),n=_i({method:e,params:r});try{const c=await this.clientSession.execute(n);if(sg(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 me.error(`[Call] Error executing method ${e} with params`,r,c),c}}buildMethodParams(t,e){const i={node_id:this.nodeId??"",call_id:this.id,member_id:this.vertoManager.selfId??""};return typeof t=="object"?{...e,self:i,targets:[t]}:{...e,self:i,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(me.debug(`[Call] initResilienceSubsystems: pc=${t?"exists":"undefined"}, connectionState=${t==null?void 0:t.connectionState}`),!t){me.warn("[Call] No peer connection available, skipping resilience init");return}try{const e=g.instance;this._statsMonitor=new Kg(t,{pollingIntervalMs:e.statsPollingInterval,baselineSamples:e.statsBaselineSamples,noAudioPacketThresholdMs:e.statsNoPacketThreshold,rttSpikeWarningMultiplier:e.statsRttSpikeMultiplier,rttSpikeCriticalMultiplier:e.statsRttSpikeMultiplier*Tf,packetLossWarningPercent:e.statsPacketLossThreshold*100,packetLossCriticalPercent:e.statsPacketLossThreshold*200,jitterSpikeMultiplier:e.statsJitterSpikeMultiplier,historyWindowSeconds:e.statsHistorySize}),this._recoveryManager=new lf({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(),me.debug("[Call] Recovery manager disabled video")}catch{me.debug("[Call] Recovery manager failed to disable video")}},enableVideo:()=>{this.vertoManager.unmuteMainVideoInputDevice().catch(()=>{me.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=Cf(n.roundTripTime,n.audio.jitter,o);this._qualityScore$.next(c),this._qualityLevel$.next(Af(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"&&(me.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;me.debug("[Call] WebSocket reconnected — notifying recovery manager"),(i=this._recoveryManager)==null||i.handleWebSocketReconnect()}),this._statsMonitor.start(),me.debug("[Call] Resilience subsystems initialized for call",this.id)}catch(e){me.warn("[Call] Failed to initialize resilience subsystems:",e)}}async waitForPeerConnectionConnected(){const t=this.rtcPeerConnection;if(!t)return!1;const e=Date.now()+jh;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,Wh))}}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{me.debug("[Call] Checking if event is for this call session:",t);const e=tt(t,"params.params.callID")??tt(t,"params.call_id"),i=tt(t,"params.room_session_id");return me.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 me.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=>{me.debug("[Call] Received call session event:",t)}),w(this.destroyed$),kt()))}get callUpdated$(){return this.publicCachedObservable("callUpdated$",()=>this.callSessionEvents$.pipe(fe(qo,"params"),w(this.destroyed$)))}get memberJoined$(){return this.publicCachedObservable("memberJoined$",()=>this.callSessionEvents$.pipe(fe(Ko,"params"),w(this.destroyed$)))}get memberLeft$(){return this.publicCachedObservable("memberLeft$",()=>this.callSessionEvents$.pipe(fe(Zo,"params"),w(this.destroyed$)))}get memberUpdated$(){return this.publicCachedObservable("memberUpdated$",()=>this.callSessionEvents$.pipe(fe(Yo,"params"),w(this.destroyed$)))}get memberTalking$(){return this.publicCachedObservable("memberTalking$",()=>this.callSessionEvents$.pipe(fe(Qo,"params"),w(this.destroyed$)))}get callStates$(){return this.publicCachedObservable("callStates$",()=>this.callSessionEvents$.pipe(fe(Xo,"params"),w(this.destroyed$)))}get layoutUpdates$(){return this.publicCachedObservable("layoutUpdates$",()=>this.callSessionEvents$.pipe(fe(os,"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),me.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(sn,"params"),Se(t=>me.debug("[Call] Event is a WebRTC message event:",t)),w(this.destroyed$),kt()))}get callEvent$(){return this.cachedObservable("callEvent$",()=>this.callSessionEvents$.pipe(fe(ag,"params"),Se(t=>me.debug("[Call] Event is a call event:",t)),w(this.destroyed$),kt()))}get layoutEvent$(){return this.cachedObservable("layoutEvent$",()=>this.callEvent$.pipe(fe(os,"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(r=>r!==null)));await this.executeMethod(i,"call.layout.set",{layout:t,positions:e})}async transfer(t){return this.vertoManager.transfer(t)}setLocalMicrophoneGain(t){const e=this.vertoManager.ensureLocalAudioPipeline();if(!e){me.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$))):Et(100).pipe(w(this._destroyed$))}get localAudioLevel$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localAudioLevel$",()=>t.level$.pipe(w(this._destroyed$),kt())):Et(0).pipe(w(this._destroyed$))}get localSpeaking$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localSpeaking$",()=>t.speaking$.pipe(w(this._destroyed$),kt())):Et(!1).pipe(w(this._destroyed$))}enablePushToTalk(){const t=this.vertoManager.ensureLocalAudioPipeline();if(!t){me.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 Lg);const t=this._remoteAudioMeter;return this.subscribeTo(this.vertoManager.remoteStream$,e=>{t.setStream(e)}),t.level$.pipe(w(this._destroyed$),kt())})}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=Kp({sessid:this.id,eventChannel:[t]}),i={callID:this.id,node_id:this.vertoManager.nodeId??"",message:e};await this.clientSession.execute(No(i))}};function xf(t){return t instanceof Yr?"timeout":t instanceof Lt?"signaling":t instanceof Mi?"media":t instanceof $a||t instanceof eo?"network":"internal"}const If=new Set([yo,So,wo]);function Df(t){return!(t instanceof so||t instanceof Mi||t instanceof Yr||t instanceof Lt&&If.has(t.code))}var Mf=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 kf(this.sessionManager,e,{initializeManagers:i=>({vertoManager:new _g(i,this.attachManager,this.deviceController,this.webRTCApiProvider,{nodeId:e.nodeId,onError:r=>{const n={kind:xf(r),fatal:Df(r),error:r,callId:i.id};i.emitError(n)},onModifyFailed:()=>{i.notifyModifyFailed()}}),callEventsManager:new fg(i)}),deviceController:this.deviceController,networkChange$:this.networkChange$},t)}};const ds=W();var cc=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({...$n,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({...$n,url:`${this.endpoint}/${String(t)}`});if(e.ok&&e.body)return JSON.parse(e.body)}},lc=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$=ei(()=>De(this.init())).pipe(Ke(()=>this._hasMore$),L(),et(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 zn(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()}},uc=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()}},dc=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$=ei(this.initConversationMessages).pipe(E(()=>this.textMessage),et(1),w(this.destroyed$)),this.history$=ei(this.initConversationMessages).pipe(E(()=>this.history),et(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(),et(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(),et(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(),et(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(),et(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(),et(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 uc(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 uc(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 vt}get activity(){throw new vt}};const ci=W(),Rf=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 Pf=(gi=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)??gi.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(B(h=>h.id===e.id),Me(1)),new be(h=>{const p=setTimeout(()=>{h.error(new Yr(e.id,n))},n);return()=>clearTimeout(p)}),s?new be(h=>{const p=()=>{h.error(new DOMException("The operation was aborted","AbortError"))};return s.addEventListener("abort",p),()=>s.removeEventListener("abort",p)}):hd).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)}},gi.defaultTimeoutMs=5e3,gi);const X=W(),Of=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 Di("Error building Address name");return r};var _f=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 Mf(this,n,s,a,c),this.initialized$=ei(()=>De(this.init())).pipe(et(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 Kn(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"),Xn(()=>(X.debug("[Session] Connection established, initiating authentication"),De(this.authenticate()).pipe(ti(t=>(this.handleAuthenticationError(t).catch(e=>{X.error("[Session] Error handling authentication failure:",e)}),$t)))))),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 Fd(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 Ud(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(og,"params"),Se(t=>{X.debug("[Session] Authorization state event received:",t.authorization_state)})))}get signalingEvent$(){return this.cachedObservable("signalingEvent$",()=>this.transport.incomingEvent$.pipe(fe(as,"params"),kt()))}get vertoInvite$(){return this.cachedObservable("vertoInvite$",()=>this.signalingEvent$.pipe(B(sn),B(t=>sc(t.params)),E(t=>({node_id:t.node_id,...t.params.params}))))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.signalingEvent$.pipe(B(sn),B(t=>ac(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),Me(1),or({first:15e3})))}async handleAuthenticationError(t){X.error("Authentication error:",t);const e=t instanceof Lt&&(t.code===yo||t.code===wo||t.code===So),i=await Ge(this.authorizationState$.pipe(Me(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 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 Kn(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=zp({project:((n=this._authorization$.value)==null?void 0:n.project_id)??"",jwt_token:t,...s?{dpop_token:s}:{}});await Ba(De(this.transport.execute(a)).pipe(uo(),Me(1),ti(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 Kn(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(Me(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=Bp({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(De(this.transport.execute(s)).pipe(uo(),E(u=>u.result),B(Rf),Se(()=>{X.debug("[Session] Response passed filter, processing authentication result")}),Me(1),ti(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.cleanupStoredConnectionParams()}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 dc?t.defaultChannel:t;let r;try{return r=await this.createCall({to:i,...e}),await Ge(cr(r.selfId$.pipe(B(n=>!!n),Me(1),or(this.callCreateTimeout)),r.errors$.pipe(Me(1),Ke(n=>Qu(()=>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=Of(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"),Me(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()}},Lf=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 Ff=t=>typeof t=="string",hs=W();var Uf=class extends cc{constructor(t,e){super(`/api/fabric/conversations/${t}/messages`,"page_size=100",e),this.groupId=t}},Nf=class extends lc{constructor(t,e,i,r){super(new Uf(t,i),e,r)}},Bf=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(Ff(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 Nf(e,this.clientSession.signalingEvent$.pipe(fe(Jo,"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 st=W();function zf(t){return t.expires_at?t.expires_at:t.expires_in?Math.floor(Date.now()/1e3)+t.expires_in:(st.warn("[DeviceToken] Could not determine token expiry, using default"),Math.floor(Date.now()/1e3)+ur)}function hc(t){return t.expires_in?t.expires_in:t.expires_at?Math.max(t.expires_at-Math.floor(Date.now()/1e3),1):ur}var Vf=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._effectiveExpireIn=ur,this.subscribeTo(this._currentToken$.pipe(B(Boolean),Ke(n=>{const s=zf(n),a=Math.max(s*1e3-Date.now()-yh,1e3);return st.debug(`[DeviceToken] Scheduling Client Bound SAT refresh in ${a}ms`),xi(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(mh))){st.debug("[DeviceToken] No sat:refresh scope, skipping Client Bound SAT activation");return}this._session=e,this._updateCredential=i;try{const s=await this.obtainToken();!s.expires_at&&!s.expires_in&&r.expires_at&&(s.expires_at=r.expires_at),this._effectiveExpireIn=hc(s);const a=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});await e.reauthenticate(s.token,a,{clientBound:!0}),i({token:s.token}),st.info("[DeviceToken] Client Bound SAT activated successfully"),this._currentToken$.next(s)}catch(s){st.error("[DeviceToken] Failed to activate Client Bound SAT:",s),this.errorHandler(new Zr(s,"Failed to activate Client Bound SAT"));const a=this.getCredential(),o=r.expires_at??(a.expiry_at?a.expiry_at/1e3:Date.now()/1e3+ur/1e3);this._currentToken$.next({token:a.token??"",expires_at:o})}}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:ur})});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){st.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 ri(`Failed to refresh device token: ${n.status} ${n.statusText}`);const s=JSON.parse(n.body);if(!s.token)throw new ri("Device token refresh response missing token field");!s.expires_at&&!s.expires_in&&(s.expires_in=this._effectiveExpireIn),this._effectiveExpireIn=hc(s);const a=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await t.reauthenticate(s.token,a),i({token:s.token}),st.info("[DeviceToken] Client Bound SAT refreshed successfully"),s}async executeRefresh(){if(this._refreshInProgress){st.debug("[DeviceToken] Refresh already in progress, skipping");return}const t=this._session,e=this._updateCredential;if(!t||!e){st.warn("[DeviceToken] Cannot refresh: session or updateCredential not set");return}if(!t.authenticated){st.debug("[DeviceToken] Session not authenticated, deferring refresh");return}this._refreshInProgress=!0;try{const i=this.getCredential().token;if(!i)throw new ri("No current token available for refresh");const r=await this.retryRefresh(t,i,e);this._currentToken$.next(r)}catch(i){st.error("[DeviceToken] Automatic Client Bound SAT refresh failed:",i),this.errorHandler(i instanceof ri?i:new ri("Automatic token refresh failed",i))}finally{this._refreshInProgress=!1}}async retryRefresh(t,e,i){let r;for(let n=0;n<bo;n++)try{return await this.refreshToken(t,e,i)}catch(s){if(r=s,n<bo-1){const a=wh*Math.pow(2,n);st.warn(`[DeviceToken] Refresh attempt ${n+1} failed, retrying in ${a}ms`),await new Promise(o=>setTimeout(o,a))}}throw r instanceof Error?r:new ri("All refresh retries exhausted",r)}destroy(){super.destroy()}};const ps=W(),Hf=1e3;function jf(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"unknown"}var Wf=class extends te{constructor(t){super(),this._events=[],this._calls=[],this._deviceChanges=[],this._eventRecorded$=this.createSubject(),this._sdkVersion=t.sdkVersion,this._maxEvents=t.maxEvents??Hf,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:jf(),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 pc=t=>((t==null?void 0:t.length)??0)===0,Gf=t=>{t.pipe(Me(1)).subscribe()},qf=W();var Xf=class extends cc{constructor(t){super("/api/fabric/addresses","sort_by=name&sort_order=asc",t)}async name(t){const e=await this.http.request({...$n,url:`${this.endpoint}?name=${encodeURIComponent(t)}`});if(e.ok&&e.body){const i=JSON.parse(e.body);if(!pc(i.data))return i.data[0]}qf.error("Failed to fetch addresses")}},Yf=class extends lc{constructor(t,e,i){super(new Xf(e),t,i)}},Kf=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 dc(n,this.conversationManager,this),a=(o=this._statesCollection.get$(n))==null?void 0:o.pipe(ue(),E(c=>(s.upnext(c),s)));a&&(Gf(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 Yf(e.signalingEvent$.pipe(fe($o,"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));pc(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 gc=W();var Zf=(wt=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??wt.DEFAULT_RECONNECT_DELAY_MIN_MS,this.reconnectDelayMax=n.reconnectDelayMax??wt.DEFAULT_RECONNECT_DELAY_MAX_MS,this.connectionTimeout=n.connectionTimeout??wt.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?(gc.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 Di("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){gc.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 Rd("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)}}},wt.DEFAULT_RECONNECT_DELAY_MIN_MS=1e3,wt.DEFAULT_RECONNECT_DELAY_MAX_MS=3e4,wt.DEFAULT_CONNECTION_TIMEOUT_MS=1e4,wt);function Qf(t){return ns(t)&&t.method==="signalwire.ping"}const Pe=W();var Jf=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(as(s))try{Pe.debug("[Transport] Sending event ack",{eventId:s.id}),this.send(Jp(s.id))}catch(a){Pe.error("[Transport] Failed to send event acknowledgment:",a)}}),this.replySignalwirePing=()=>B(s=>{if(Qf(s)){try{Pe.debug("[Transport] Received ping, sending pong",{pingId:s.id}),this.send(Vp(s.id))}catch(a){Pe.error("[Transport] Failed to send ping response:",a)}return!1}return!0}),this.discardStaleEvents=()=>B(s=>{if(!as(s))return!0;const a=s.params.event_channel;if(!a)return!0;const o=this._currentProtocol;if(!o)return!0;if(!a.includes(o)){const c=s.params.event_type;return Pe.warn(`[Transport] Discarding stale event: ${c} (event_channel does not match current protocol)`),!1}return!0}),this._outgoingMessages$=this.createSubject(),this._webSocketConnections=new Zf(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$=ei(()=>De(this._init())).pipe(et(1),w(this.destroyed$)),this._jsonRPCMessage$=this._webSocketConnections.incomingMessages$.pipe(E(s=>{var a;try{return JSON.parse(s.data)}catch(o){return Pe.error("[Transport] Failed to parse incoming message:",o),(a=this.onError)==null||a.call(this,new Nd(o)),null}}),B(s=>s!==null&&(ss(s)||ns(s))),ti(s=>{var a;return Pe.error("[Transport] Message processing error:",s),(a=this.onError)==null||a.call(this,s instanceof Error?s:new Error(String(s),{cause:s})),$t}),kt(),w(this.destroyed$)),this._jsonRPCResponse$=this._jsonRPCMessage$.pipe(B(ss)),this._incomingEvent$=this._jsonRPCMessage$.pipe(this.ackEvent(),this.replySignalwirePing(),B(s=>!ss(s)),this.discardStaleEvents(),kt(),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?(Pe.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"),Me(1),or(1e4)).subscribe({next:r=>{var n;if(r==="connected")this.isConnecting=!1,this.isConnected=!0,Pe.debug("[Transport] Connection established"),t();else{this.isConnecting=!1;const s=new eo("Failed to connect");Pe.error("[Transport] Connection failed"),(n=this.onError)==null||n.call(this,s),e(s)}},error:r=>{var n;this.isConnecting=!1,Pe.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")),()=>{Pe.debug("[Transport] Disconnected"),this.isConnected=!1})})})}reconnect(){this._webSocketConnections.reconnect()}async execute(t,e){return this.send(t),new Pf(t,this._jsonRPCResponse$,e).promise}send(t){const e=JSON.stringify(t);this._outgoingMessages$.next(e)}disconnect(){Pe.debug("[Transport] Disconnecting"),this.isConnected=!1,this.isConnecting=!1,this._webSocketConnections.disconnect()}destroy(){Pe.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 Pe.error("Failed to retrieve protocol from storage:",t),t}}async _updateProtocolInStorage(t){if(!t){try{await this.storage.removeItem(this.protocolKey)}catch(e){throw Pe.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 Pe.error("Failed to update protocol in storage:",e),e}}async _init(){return await this._loadProtocolFromStorage(),!0}};const Y=W(),$f=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 te{constructor(t,e={}){super(),this.preferences=new pp,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._options={},this._deps=new bp,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&&jd(this._options.logger),this._options.logLevel&&Gd(this._options.logLevel),this._options.debug&&Wd(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=>{Y.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=>{Y.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 Cp;const e=await this._dpopManager.init();return Y.debug("[SignalWire] DPoP initialized, fingerprint available"),e}catch(e){Y.warn("[SignalWire] DPoP initialization failed, proceeding without DPoP:",e),this._dpopManager=void 0;return}}async resolveCredentials(){const t=await this.initDPoP();if(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 Y.debug(`[SignalWire] Using cached credential from ${e}Storage`),await this.validateCredentials(void 0,i)}catch{}throw new ii("No credential provider and no cached session. Provide a CredentialProvider or enable persistSession with a prior login.")}async validateCredentials(t,e,i){var s;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 ii("No credentials available.");if(n.token)try{const a=Qd(n.token,{header:!0});this._deps.ch=a.ch}catch(a){throw Y.error("[SignalWire] Invalid JWT token provided in credentials:",a),new ii("Invalid JWT token provided in credentials.",{cause:a})}if(!n.token&&!n.authorizationState)throw Y.error("[SignalWire] No valid authentication credentials provided."),new ii("No valid authentication credentials provided.");if(!this._deps.persistSession&&n.expiry_at&&n.expiry_at<Date.now())throw Y.error("[SignalWire] Provided credentials have expired."),new ii("Provided credentials have expired.");if(n.expiry_at&&(t!=null&&t.refresh)&&this.scheduleCredentialRefresh(t,n.expiry_at),this._deps.credential=n,this.persistCredential(n),this.isConnected&&this._clientSession.authenticated&&n.token)try{await this._clientSession.reauthenticate(n.token),Y.info("[SignalWire] Session refreshed with new credentials.")}catch(a){Y.error("[SignalWire] Failed to refresh session with new credentials:",a),this._errors$.next(a instanceof Error?a:new Error(String(a),{cause:a}))}}scheduleCredentialRefresh(t,e,i=0){this._refreshTimerId!==void 0&&clearTimeout(this._refreshTimerId);const r=i===0?Math.max(e-Date.now()-Ah,1e3):Math.min(Sh*Math.pow(2,i)*(.5+Math.random()*.5),Ch);this._refreshTimerId=setTimeout(async()=>{try{if(!t.refresh)throw new ii("Credential provider does not support refresh");const n=await t.refresh();this._deps.credential=n,this.persistCredential(n),Y.info("[SignalWire] Credentials refreshed successfully."),n.expiry_at&&this.scheduleCredentialRefresh(t,n.expiry_at,0)}catch(n){const s=i+1;Y.error(`[SignalWire] Credential refresh failed (attempt ${s}/${mo}):`,n),this._errors$.next(n instanceof Error?n:new Error(String(n),{cause:n})),s<mo?this.scheduleCredentialRefresh(t,e,s):(Y.error("[SignalWire] Credential refresh exhausted all retries. Disconnecting."),this._errors$.next(new ri("Credential refresh failed after max retries")),this.disconnect())}},r)}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 Up(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){Y.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){Y.error("[SignalWire] AttachManager not initialized");return}if(this._options.reconnectAttachedCalls)try{await this._attachManager.reattachCalls()}catch(t){Y.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 Di("User not initialized before connect");if(!await Ge(a.fetched$))throw new Di("Failed to fetch user information - fetched$ emitted false");this._deps.user=a}catch(a){throw Y.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 Di("Error fetching user information",{cause:a})}const t=a=>{this._errors$.next(a)};this._transport=new Jf(this._deps.storage,this._deps.protocolKey,this._deps.WebSocket,g.instance.relayHost??this._deps.relayHost,t),this._attachManager=new $p(this._deps.storage,this._deps.deviceController,g.instance.reconnectCallsTimeout,this._deps.attachedCallsKey),this._clientSession=new _f(()=>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 Lf(this._clientSession),this._clientSession.onBeforeReconnect=async()=>{var a;if(this._credentialProvider)try{const o=(a=this._dpopManager)!=null&&a.initialized?this._dpopManager.fingerprint:void 0;Y.debug("[SignalWire] Credential expired, refreshing before reconnect");const c=await this._credentialProvider.authenticate(o?{fingerprint:o}:void 0);this._deps.credential=c,Y.debug("[SignalWire] Credential refreshed successfully for reconnect")}catch(o){throw Y.error("[SignalWire] Failed to refresh credentials for reconnect:",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o})),o}},this.subscribeTo(this._clientSession.errors$,a=>{this._errors$.next(a)}),await this._clientSession.connect(),(n=this._dpopManager)!=null&&n.initialized&&(this._refreshTimerId&&(clearTimeout(this._refreshTimerId),this._refreshTimerId=void 0,Y.debug("[SignalWire] Developer refresh disabled — Client Bound SAT activation starting")),this._deviceTokenManager=new Vf(this._dpopManager,this._deps.http,a=>this._errors$.next(a),()=>this._deps.credential),await this._deviceTokenManager.activate(this._deps.user,this._clientSession,a=>{this._deps.credential={...this._deps.credential,...a}})),this.subscribeTo(this._clientSession.authenticated$.pipe(Gr(1),B(Boolean)),async()=>{try{this._deviceTokenManager&&(await this._deviceTokenManager.activate(this._deps.user,this._clientSession,a=>{this._deps.credential={...this._deps.credential,...a}}),Y.debug("[SignalWire] Client Bound SAT re-activated after reconnect"))}catch(a){Y.error("[SignalWire] Client Bound SAT re-activation failed (non-fatal):",a),this._errors$.next(a instanceof Error?a:new Error(String(a),{cause:a}))}try{Y.debug("[SignalWire] Re-registering user after reconnect"),await this.register(),Y.debug("[SignalWire] User re-registered successfully after reconnect")}catch(a){Y.error("[SignalWire] Re-registration failed after reconnect:",a),this._errors$.next(a instanceof Error?a:new Error(String(a),{cause:a}))}});const e=new Bf(this._clientSession,this._deps.http,()=>this._deps.getUserFromAddressId(),t),i=new Kf(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(Ke(t=>t?this._clientSession.authenticated$:Et(!1))))}get errors$(){return this.deferEmission(this._errors$.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){Y.warn("[SignalWire] Failed to detect platform capabilities:",t)}try{this._networkMonitor=new Ap}catch(t){Y.warn("[SignalWire] Failed to initialize NetworkMonitor:",t)}try{this._visibilityController=new Lp,this.subscribeTo(this._visibilityController.visibilityChange$.pipe(B(t=>t.to==="visible"&&g.instance.refreshDevicesOnVisible)),()=>{Y.debug("[SignalWire] Page visible, re-enumerating devices");try{this._deviceController.disableDeviceMonitoring(),this._deviceController.enableDeviceMonitoring()}catch{}})}catch(t){Y.warn("[SignalWire] Failed to initialize VisibilityController:",t)}try{this._diagnosticsCollector=new Wf({sdkVersion:"3.30.0"})}catch(t){Y.warn("[SignalWire] Failed to initialize DiagnosticsCollector:",t)}}async disconnect(){var t;this._refreshTimerId&&(clearTimeout(this._refreshTimerId),this._refreshTimerId=void 0),(t=this._diagnosticsCollector)==null||t.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){Y.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(is({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;Y.debug("[SignalWire] Failed to register user, trying reauthentication...");try{await this._clientSession.reauthenticate(this._deps.credential.token),Y.debug("[SignalWire] Reauthentication successful, retrying register()"),await this._transport.execute(is({method:"subscriber.online",params:{}})),this._isRegistered$.next(!0)}catch(e){Y.error("[SignalWire] Reauthentication failed during register():",e);const i=new ii("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(is({method:"subscriber.offline",params:{}})),this._isRegistered$.next(!1)}catch(t){throw Y.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,...$f(t),...e};return await this.waitAuthentication(),Y.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 Op(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 Y.warn("[SignalWire] setSinkId not supported on this element / browser"),!1;try{return await i.setSinkId(e.deviceId),!0}catch(r){return Y.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){Y.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;this._refreshTimerId&&(clearTimeout(this._refreshTimerId),this._refreshTimerId=void 0),(t=this._deviceTokenManager)==null||t.destroy(),(e=this._dpopManager)==null||e.destroy(),this._attachManager&&this._attachManager.detachAll(),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 ev=W();var vc=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 Pd(`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}):(ev.error("[EmbedCredentialProvider] Request failed:",n),n)}}async authenticate(){return{token:await this.fetchSAT(),expiry_at:Date.now()+3600*1e3}}async refresh(){return this.authenticate()}},bc=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:"3.30.0"}});window.dispatchEvent(t)}})();var tv=Object.defineProperty,iv=Object.getOwnPropertyDescriptor,hr=(t,e,i,r)=>{for(var n=r>1?void 0:r?iv(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&&tv(e,i,n),n};const rv=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=>{rv.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 Ag(t,e=[],i=[]){return Sg(t,i,e)}function Tg(t){return t.split(/(?=m=)/)}function nc(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 C,I;const m=((C=s.get(p))==null?void 0:C.toUpperCase())??"",R=((I=s.get(v))==null?void 0:I.toUpperCase())??"";return a.indexOf(m)-a.indexOf(R)});const u=[...o,...c];return[[...r.slice(0,3),...u].join(" "),...i.slice(1)].join(`\r
|
|
71
|
+
`)}function Eg(t){const e=/a=rtpmap:(\d+)\s+opus\/48000/i.exec(t);return e?e[1]:null}function kg(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 Ne=W();var xg=class extends te{constructor(t,e,i={}){super(),this.peerConnection=t,this.peerConnectionControllerNegotiating$=e,this.onicegatheringstatechangeHandler=()=>{const{iceGatheringState:r}=this.peerConnection;Ne.debug(`[ICEGatheringController] ICE gathering state changed to: ${r}`),r==="gathering"&&this._iceCandidatesState.next({state:"gathering",validSDP:!1})},this.onicecandidateHandler=r=>{Ne.debug("[ICEGatheringController] ICE candidate event received:",r.candidate),this.removeTimer("iceCandidateTimer"),r.candidate?this.iceCandidateTimer=setTimeout(()=>{this.peerConnection.iceGatheringState!=="complete"&&(Ne.warn("[ICEGatheringController] ICE candidate timeout, using current SDP"),this.handleICECandidateTimeout())},this.iceCandidateTimeout):(Ne.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??po,this.iceGatheringTimeout=i.iceGatheringTimeout??go,this.relayOnly=i.relayOnly??!1,this.setupEventListeners(),this.subscribeTo(this.peerConnectionControllerNegotiating$.pipe(B(r=>r)),r=>{r&&(this.setupEventListeners(),this.iceGatheringTimer=setTimeout(()=>{this.peerConnection.iceGatheringState!=="complete"&&(Ne.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(Qa(this.peerConnectionControllerNegotiating$),B(([t,e])=>e),E(([t,e])=>t.state))}get hasValidLocalDescriptionSDP(){var e;const t=(e=this.peerConnection.localDescription)==null?void 0:e.sdp;return rc(t??"")}get isRelayOnly(){return this.relayOnly}setRelayOnly(t){this.relayOnly=t}handleICEGatheringComplete(){Ne.debug("[ICEGatheringController] Handling ICE gathering complete"),Ne.debug(`[ICEGatheringController] Checking ICE gathering state: ${this.peerConnection.iceGatheringState}`),Ne.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?(Ne.debug("[ICEGatheringController] Local SDP is valid"),this._iceCandidatesState.next({state:"timeout",validSDP:t}),this.stopGathering()):Ne.debug(`### ICE gathering timeout
|
|
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??To;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,Ea).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 Ft=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;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 Be=W(),sc=(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 sc(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 sc(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 ac=class extends te{constructor(t={},e,i){super(),this.options=t,this.firstSDPExchangeCompleted=!1,this.negotiationNeeded$=this.createSubject(),this.localDescription$=ei(()=>Ie(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(bt(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||!rc(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(bt(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(bt(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(bt(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(bt(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(bt(i)),this.negotiationEnded(),e&&this.restoreIceTransportPolicy(),i}e&&Ge(lr(this._iceGatheringState$.pipe(B(i=>i==="complete"),Me(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(bt(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(bt(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(bt(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 ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"id")}function oc(t){if(!us(t))return!1;const e=t;return e.method==="verto.invite"&&ke(e.params)&&G(e.params,"sdp")&&G(e.params,"callID")}function ds(t){return us(t)?t.method==="verto.bye":!1}function cc(t){return us(t)?t.method==="verto.attach":!1}function Rg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.answer"&&ke(t.params)&&G(t.params,"callID")}function Pg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.media"&&ke(t.params)&&G(t.params,"callID")&&G(t.params,"sdp")}function Og(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.mediaParams"&&ke(t.params)&&G(t.params,"mediaParams")}function _g(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.ping"}const V=W();function Lg(t){return t.isInvite&&!t.reattach&&!t.explicitNodeId?"":t.currentNodeId??""}var Fg=class extends te{constructor(t){super(),this.callSession=t}destroy(){this.callSession=void 0,super.destroy()}},Ug=class extends Fg{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 ao(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(ic),w(this.destroyed$))}get vertoMedia$(){return this.webRtcCallSession.webrtcMessages$.pipe(fe(Pg,"params"),w(this.destroyed$))}get vertoAnswer$(){return this.cachedObservable("vertoAnswer$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Rg,"params"),w(this.destroyed$)))}get vertoMediaParams$(){return this.cachedObservable("vertoMediaParams$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Og,"params"),w(this.destroyed$)))}get vertoBye$(){return this.cachedObservable("vertoBye$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(ds,"params"),w(this.destroyed$)))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(cc,"params"),w(this.destroyed$)))}get vertoPing$(){return this.cachedObservable("vertoPing$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(_g,"params"),w(this.destroyed$)))}async executeVerto(t,e={}){var s,a;const i=zo({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 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,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(ds(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:Lg({isInvite:oc(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(ds(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 no("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 ac({...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"),Me(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 Ng=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??To}get level$(){return this.deferEmission(Wr(this._pollIntervalMs,Ea).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(),Bg=1e3,zg=10,Vg=2e3,Hg=3e3,jg=3,Wg=5,Gg=5,qg=10,Xg=4,Yg=30;function Kg(t,e){const i=t+e;return i===0?0:t/i*100}function Zg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="inbound-rtp"}function Qg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="candidate-pair"}var Jg=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??Bg,this.baselineSampleCount=e.baselineSamples??zg,this.noAudioPacketThresholdMs=e.noAudioPacketThresholdMs??Vg,this.noVideoPacketThresholdMs=e.noVideoPacketThresholdMs??Hg,this.rttSpikeWarningMultiplier=e.rttSpikeWarningMultiplier??jg,this.rttSpikeCriticalMultiplier=e.rttSpikeCriticalMultiplier??Wg,this.packetLossWarningPercent=e.packetLossWarningPercent??Gg,this.packetLossCriticalPercent=e.packetLossCriticalPercent??qg,this.jitterSpikeMultiplier=e.jitterSpikeMultiplier??Xg,this.historyWindowSeconds=e.historyWindowSeconds??Yg}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=>Ie(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(()=>Ie(this.peerConnection.getStats()).pipe(ti(e=>(dr.warn("[RTCStatsMonitor] Failed to get stats:",e),$t)))),B(()=>this.running),E(e=>this.extractSample(e))),e=>this._sample$.next(e)),this.subscribeTo(this._sample$.pipe(Me(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(Za((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(Za((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=>{Zg(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)),Qg(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=Kg(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(),$g=2e3,ef=1e4,tf=3e3,rf=5e3,nf=3,sf=3,af=3e3,of=1e4,cf=150,lf=300,uf=5,df=new Set(["high_rtt","high_jitter","high_packet_loss"]);var hf=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??$g,cooldownMs:i.cooldownMs??ef,iceGracePeriodMs:i.iceGracePeriodMs??tf,iceRestartTimeoutMs:i.iceRestartTimeoutMs??rf,maxAttempts:i.maxAttempts??nf,enableRelayFallback:i.enableRelayFallback??!0,keyframeMaxBurst:i.keyframeMaxBurst??sf,keyframeBurstWindowMs:i.keyframeBurstWindowMs??af,keyframeCooldownMs:i.keyframeCooldownMs??of,degradationBitrateThreshold:i.degradationBitrateThreshold??cf,degradationRecoveryThreshold:i.degradationRecoveryThreshold??lf,enableAutoDegradation:i.enableAutoDegradation??!0,packetLossRecoveryDelaySec:i.packetLossRecoveryDelaySec??uf},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")}),Ya(this._config.debounceTimeMs),Qa(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(ja([this._bandwidthConstrained$,this._hasPacketLoss$]).pipe(Ze(([e,i])=>e&&!i?Di(t):$t),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}`),Ie(this.runTiers(t)).pipe(Se(()=>this.startCooldown()),ti(e=>(oe.error("CallRecoveryManager: tiered recovery failed",e),this.startCooldown(),$t)))}async runTiers(t){if(this.executeKeyframe(t.detail),t.issueType&&df.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(Me(1),w(this._destroyed$),B(()=>this._recoveryState$.value==="cooldown")).subscribe(()=>this.transitionTo("idle"))}emitEvent(t){this._recoveryEvent$.next(t)}},pf=class{constructor(t,e,i){this.executeMethod=t,this.vertoManager=e,this.deviceController=i}createSelfParticipant(t){return new Go(t,this.executeMethod,this.vertoManager,this.deviceController)}createParticipant(t){return new Wo(t,this.executeMethod,this.deviceController)}};const gf=93.2,ff=.024,vf=2.5,bf=0,mf=100,yf=1,wf=5,Sf=4,Cf=3.5,Af=3,Tf=2;function Ef(t,e,i){const r=gf-(t/2+e)*ff-i*vf,n=Math.min(mf,Math.max(bf,r)),s=1+.035*n+n*(n-60)*(100-n)*7e-6;return Math.min(wf,Math.max(yf,s))}function kf(t){return t>=Sf?"excellent":t>=Cf?"good":t>=Af?"fair":t>=Tf?"poor":"critical"}const me=W(),xf=5/3,Df=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 me.warn(`Failed to parse destination URI: ${t}`,e),{}}};var If=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,...Df(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 pf(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(Ie([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 vt}async toggleIncomingAudio(){throw new vt}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 vt}async startStreaming(){throw new vt}async setMeta(t){throw new vt}async updateMeta(t){throw new vt}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),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 me.error(`[Call] Error executing method ${e} with params`,r,c),c}}buildMethodParams(t,e){const i={node_id:this.nodeId??"",call_id:this.id,member_id:this.vertoManager.selfId??""};return typeof t=="object"?{...e,self:i,targets:[t]}:{...e,self:i,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(me.debug(`[Call] initResilienceSubsystems: pc=${t?"exists":"undefined"}, connectionState=${t==null?void 0:t.connectionState}`),!t){me.warn("[Call] No peer connection available, skipping resilience init");return}try{const e=g.instance;this._statsMonitor=new Jg(t,{pollingIntervalMs:e.statsPollingInterval,baselineSamples:e.statsBaselineSamples,noAudioPacketThresholdMs:e.statsNoPacketThreshold,rttSpikeWarningMultiplier:e.statsRttSpikeMultiplier,rttSpikeCriticalMultiplier:e.statsRttSpikeMultiplier*xf,packetLossWarningPercent:e.statsPacketLossThreshold*100,packetLossCriticalPercent:e.statsPacketLossThreshold*200,jitterSpikeMultiplier:e.statsJitterSpikeMultiplier,historyWindowSeconds:e.statsHistorySize}),this._recoveryManager=new hf({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(),me.debug("[Call] Recovery manager disabled video")}catch{me.debug("[Call] Recovery manager failed to disable video")}},enableVideo:()=>{this.vertoManager.unmuteMainVideoInputDevice().catch(()=>{me.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=Ef(n.roundTripTime,n.audio.jitter,o);this._qualityScore$.next(c),this._qualityLevel$.next(kf(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"&&(me.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;me.debug("[Call] WebSocket reconnected — notifying recovery manager"),(i=this._recoveryManager)==null||i.handleWebSocketReconnect()}),this._statsMonitor.start(),me.debug("[Call] Resilience subsystems initialized for call",this.id)}catch(e){me.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{me.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 me.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 me.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=>{me.debug("[Call] Received call session event:",t)}),w(this.destroyed$),kt()))}get callUpdated$(){return this.publicCachedObservable("callUpdated$",()=>this.callSessionEvents$.pipe(fe(Yo,"params"),w(this.destroyed$)))}get memberJoined$(){return this.publicCachedObservable("memberJoined$",()=>this.callSessionEvents$.pipe(fe(Qo,"params"),w(this.destroyed$)))}get memberLeft$(){return this.publicCachedObservable("memberLeft$",()=>this.callSessionEvents$.pipe(fe(Jo,"params"),w(this.destroyed$)))}get memberUpdated$(){return this.publicCachedObservable("memberUpdated$",()=>this.callSessionEvents$.pipe(fe(Zo,"params"),w(this.destroyed$)))}get memberTalking$(){return this.publicCachedObservable("memberTalking$",()=>this.callSessionEvents$.pipe(fe($o,"params"),w(this.destroyed$)))}get callStates$(){return this.publicCachedObservable("callStates$",()=>this.callSessionEvents$.pipe(fe(Ko,"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),me.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=>me.debug("[Call] Event is a WebRTC message event:",t)),w(this.destroyed$),kt()))}get callEvent$(){return this.cachedObservable("callEvent$",()=>this.callSessionEvents$.pipe(fe(lg,"params"),Se(t=>me.debug("[Call] Event is a call event:",t)),w(this.destroyed$),kt()))}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 no(`Layout ${t} is not available in the current call layouts: ${this.layouts.join(", ")}`);const i=await Ge(this.selfId$.pipe(B(r=>r!==null)));await this.executeMethod(i,"call.layout.set",{layout:t,positions:e})}async transfer(t){return this.vertoManager.transfer(t)}setLocalMicrophoneGain(t){const e=this.vertoManager.ensureLocalAudioPipeline();if(!e){me.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$))):Et(100).pipe(w(this._destroyed$))}get localAudioLevel$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localAudioLevel$",()=>t.level$.pipe(w(this._destroyed$),kt())):Et(0).pipe(w(this._destroyed$))}get localSpeaking$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localSpeaking$",()=>t.speaking$.pipe(w(this._destroyed$),kt())):Et(!1).pipe(w(this._destroyed$))}enablePushToTalk(){const t=this.vertoManager.ensureLocalAudioPipeline();if(!t){me.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 Ng);const t=this._remoteAudioMeter;return this.subscribeTo(this.vertoManager.remoteStream$,e=>{t.setStream(e)}),t.level$.pipe(w(this._destroyed$),kt())})}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(zo(i))}};function Mf(t){return t instanceof Yr?"timeout":t instanceof Lt?"signaling":t instanceof Ri?"media":t instanceof eo||t instanceof to?"network":"internal"}const Rf=new Set([So,Ao,Co]);function Pf(t){return!(t instanceof ao||t instanceof Ri||t instanceof Yr||t instanceof Lt&&Rf.has(t.code))}var Of=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 If(this.sessionManager,e,{initializeManagers:i=>({vertoManager:new Ug(i,this.attachManager,this.deviceController,this.webRTCApiProvider,{nodeId:e.nodeId,onError:r=>{const n={kind:Mf(r),fatal:Pf(r),error:r,callId:i.id};i.emitError(n)},onModifyFailed:()=>{i.notifyModifyFailed()}}),callEventsManager:new mg(i)}),deviceController:this.deviceController,networkChange$:this.networkChange$},t)}};const hs=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 hs.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$=ei(()=>Ie(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){hs.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 oo("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){hs.error(`Failed to fetch data for (${String(t)}:${String(e)}) :`,s),this._loading$.next(!1),(n=this.onError)==null||n.call(this,new oo(`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$=ei(this.initConversationMessages).pipe(E(()=>this.textMessage),tt(1),w(this.destroyed$)),this.history$=ei(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 vt}get activity(){throw new vt}};const ci=W(),_f=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 Lf=(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),Me(1)),new be(h=>{const p=setTimeout(()=>{h.error(new Yr(e.id,n))},n);return()=>clearTimeout(p)}),s?new be(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(),Ff=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 Uf=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 Of(this,n,s,a,c),this.initialized$=ei(()=>Ie(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"),Ie(this.authenticate()).pipe(ti(t=>(this.handleAuthenticationError(t).catch(e=>{X.error("[Session] Error handling authentication failure:",e)}),$t)))))),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"),kt()))}get vertoInvite$(){return this.cachedObservable("vertoInvite$",()=>this.signalingEvent$.pipe(B(an),B(t=>oc(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=>cc(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),Me(1),cr({first:15e3})))}async handleAuthenticationError(t){X.error("Authentication error:",t);const e=t instanceof Lt&&(t.code===So||t.code===Co||t.code===Ao),i=await Ge(this.authorizationState$.pipe(Me(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 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 za(Ie(this.transport.execute(a)).pipe(ho(),Me(1),ti(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(ja({protocol:this.transport.protocol$,authorization_state:this.authorizationState$}).pipe(Me(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 za(Ie(this.transport.execute(s)).pipe(ho(),E(u=>u.result),B(_f),Se(()=>{X.debug("[Session] Response passed filter, processing authentication result")}),Me(1),ti(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.cleanupStoredConnectionParams()}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),Me(1),cr(this.callCreateTimeout)),r.errors$.pipe(Me(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 ro(n instanceof Ha?"Call create timeout":"Call creation failed",n,"outbound");throw this._errors$.next(s),s}}async createCall(t={}){try{const e=Ff(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"),Me(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 ro("Call create error",e,t.initOffer?"inbound":"outbound")}}destroy(){for(const t of Object.values(this._calls$.value))t.hangup();super.destroy()}},Nf=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 Bf=t=>typeof t=="string",ps=W();var zf=class extends uc{constructor(t,e){super(`/api/fabric/conversations/${t}/messages`,"page_size=100",e),this.groupId=t}},Vf=class extends dc{constructor(t,e,i,r){super(new zf(t,i),e,r)}},Hf=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(Bf(r.group_id))return this.groupIds.set(t,r.group_id),r.group_id}throw new so("Join Failed - Unexpected response")}catch(i){throw ps.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 Vf(e,this.clientSession.signalingEvent$.pipe(fe(ec,"params"),Se(i=>ps.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 so("Send Text Failed - Unexpected response")}catch(n){throw ps.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 jf=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()-mo,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()>mo}async obtainToken(){const t=await this.dpopManager.createHttpProof({method:"POST",uri:vo}),e=await this.http.request({url:vo,...$r,body:JSON.stringify({dpop_token:t,expire_in:en})});if(!e.ok||!e.body)throw new co(`Failed to obtain device token: ${e.status} ${e.statusText}`);const i=JSON.parse(e.body);if(!i.token)throw new co("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:bo,accessToken:e}),n=await this.http.request({url:bo,...$r,body:JSON.stringify({dpop_token:r,expire_in:this._effectiveExpireIn})});if(!n.ok||!n.body)throw new ri(`Failed to refresh device token: ${n.status} ${n.statusText}`);const s=JSON.parse(n.body);if(!s.token)throw new ri("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 ri("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 ri?i:new ri("Automatic token refresh failed",i))}finally{this._refreshInProgress=!1}}async retryRefresh(t,e,i){let r;for(let n=0;n<yo;n++)try{return await this.refreshToken(t,e,i)}catch(s){if(r=s,n<yo-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 ri("All refresh retries exhausted",r)}pause(){this._paused=!0}resume(){this._paused=!1}destroy(){super.destroy()}};const li=W(),Wf=(t,e,i,r)=>new jf(t,e,i,r);var Gf=class extends te{constructor(t,e){super(),this.deps=e,this._activating=!1,this._activationGeneration=0,t!=null&&t.initialized&&(this._deviceTokenManager=(e.deviceTokenManagerFactory??Wf)(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 ii("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}/${wo}):`,n),this.deps.notifier.onError(n instanceof Error?n:new Error(String(n),{cause:n})),s<wo?this.scheduleDeveloperRefresh(t,e,s):(li.error("[Coordinator] Credential refresh exhausted all retries. Disconnecting."),this.deps.notifier.onError(new ri("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 gs=W(),qf=1e3;function Xf(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"unknown"}var Yf=class extends te{constructor(t){super(),this._events=[],this._calls=[],this._deviceChanges=[],this._eventRecorded$=this.createSubject(),this._sdkVersion=t.sdkVersion,this._maxEvents=t.maxEvents??qf,gs.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:Xf(),exportedAt:Date.now(),events:[...this._events],calls:[...this._calls],deviceChanges:[...this._deviceChanges]}}clear(){this._events=[],this._calls=[],this._deviceChanges=[],gs.debug("DiagnosticsCollector buffers cleared")}destroy(){gs.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,Kf=t=>{t.pipe(Me(1)).subscribe()},Zf=W();var Qf=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]}Zf.error("Failed to fetch addresses")}},Jf=class extends dc{constructor(t,e,i){super(new Qf(e),t,i)}},$f=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&&(Kf(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 Jf(e.signalingEvent$.pipe(fe(tc,"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 ev=(wt=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??wt.DEFAULT_RECONNECT_DELAY_MIN_MS,this.reconnectDelayMax=n.reconnectDelayMax??wt.DEFAULT_RECONNECT_DELAY_MAX_MS,this.connectionTimeout=n.connectionTimeout??wt.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 eo("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)}}},wt.DEFAULT_RECONNECT_DELAY_MIN_MS=1e3,wt.DEFAULT_RECONNECT_DELAY_MAX_MS=3e4,wt.DEFAULT_CONNECTION_TIMEOUT_MS=1e4,wt);function tv(t){return ss(t)&&t.method==="signalwire.ping"}const Pe=W();var iv=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{Pe.debug("[Transport] Sending event ack",{eventId:s.id}),this.send(tg(s.id))}catch(a){Pe.error("[Transport] Failed to send event acknowledgment:",a)}}),this.replySignalwirePing=()=>B(s=>{if(tv(s)){try{Pe.debug("[Transport] Received ping, sending pong",{pingId:s.id}),this.send(Wp(s.id))}catch(a){Pe.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;const o=this._currentProtocol;if(!o)return!0;if(!a.includes(o)){const c=s.params.event_type;return Pe.warn(`[Transport] Discarding stale event: ${c} (event_channel does not match current protocol)`),!1}return!0}),this._outgoingMessages$=this.createSubject(),this._webSocketConnections=new ev(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$=ei(()=>Ie(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 Pe.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))),ti(s=>{var a;return Pe.error("[Transport] Message processing error:",s),(a=this.onError)==null||a.call(this,s instanceof Error?s:new Error(String(s),{cause:s})),$t}),kt(),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(),kt(),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?(Pe.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"),Me(1),cr(1e4)).subscribe({next:r=>{var n;if(r==="connected")this.isConnecting=!1,this.isConnected=!0,Pe.debug("[Transport] Connection established"),t();else{this.isConnecting=!1;const s=new to("Failed to connect");Pe.error("[Transport] Connection failed"),(n=this.onError)==null||n.call(this,s),e(s)}},error:r=>{var n;this.isConnecting=!1,Pe.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")),()=>{Pe.debug("[Transport] Disconnected"),this.isConnected=!1})})})}reconnect(){this._webSocketConnections.reconnect()}async execute(t,e){return this.send(t),new Lf(t,this._jsonRPCResponse$,e).promise}send(t){const e=JSON.stringify(t);this._outgoingMessages$.next(e)}disconnect(){Pe.debug("[Transport] Disconnecting"),this.isConnected=!1,this.isConnecting=!1,this._webSocketConnections.disconnect()}destroy(){Pe.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 Pe.error("Failed to retrieve protocol from storage:",t),t}}async _updateProtocolInStorage(t){if(!t){try{await this.storage.removeItem(this.protocolKey)}catch(e){throw Pe.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 Pe.error("Failed to update protocol in storage:",e),e}}async _init(){return await this._loadProtocolFromStorage(),!0}};const K=W(),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 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 Gf(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 ii("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 ii("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 ii("Invalid JWT token provided in credentials.",{cause:o})}if(!n.token&&!n.authorizationState)throw K.error("[SignalWire] No valid authentication credentials provided."),new ii("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 ii("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 iv(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 Uf(()=>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 Nf(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 Hf(this._clientSession,this._deps.http,()=>this._deps.getUserFromAddressId(),t),i=new $f(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$:Et(!1))))}get errors$(){return this.deferEmission(this._errors$.asObservable())}get warnings$(){return this.deferEmission(this._warnings$.asObservable())}get platformCapabilities(){return this._platformCapabilities??(this._platformCapabilities=Fo(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=Fo(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 Yf({sdkVersion:"4.0.0-rc.0"})}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 ii("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,...rv(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._attachManager&&this._attachManager.detachAll(),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 nv=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 io(`Request timeout after ${e}ms`,{cause:n}):(nv.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.0"}});window.dispatchEvent(t)}})();var sv=Object.defineProperty,av=Object.getOwnPropertyDescriptor,hr=(t,e,i,r)=>{for(var n=r>1?void 0:r?av(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&&sv(e,i,n),n};const ov=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=>{ov.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&&la(e)}render(){return k`
|
|
74
74
|
<div class="mcu-content" part="container">
|
|
75
75
|
<div class="padding-wrapper">
|
|
76
76
|
<div class="mcu-wrapper">
|
|
@@ -142,7 +142,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
142
142
|
height: 100%;
|
|
143
143
|
pointer-events: none;
|
|
144
144
|
}
|
|
145
|
-
`,hr([T({type:Object})],l.SwCallMedia.prototype,"call",2),hr([T({attribute:!1})],l.SwCallMedia.prototype,"stream",2),hr([
|
|
145
|
+
`,hr([T({type:Object})],l.SwCallMedia.prototype,"call",2),hr([T({attribute:!1})],l.SwCallMedia.prototype,"stream",2),hr([et({context:pt,subscribe:!0}),P()],l.SwCallMedia.prototype,"_callState",2),hr([et({context:nr,subscribe:!0}),P()],l.SwCallMedia.prototype,"_devicesState",2),l.SwCallMedia=hr([se("sw-call-media")],l.SwCallMedia);var cv=Object.defineProperty,lv=Object.getOwnPropertyDescriptor,ui=(t,e,i,r)=>{for(var n=r>1?void 0:r?lv(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&&cv(e,i,n),n};l.SwSelfMedia=class extends Z{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}%;
|
|
@@ -177,15 +177,15 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
177
177
|
video {
|
|
178
178
|
display: block;
|
|
179
179
|
}
|
|
180
|
-
`,
|
|
180
|
+
`,ui([T({type:Boolean,reflect:!0})],l.SwSelfMedia.prototype,"mirror",2),ui([T({type:Object})],l.SwSelfMedia.prototype,"call",2),ui([et({context:pt,subscribe:!0}),P()],l.SwSelfMedia.prototype,"_callState",2),ui([P()],l.SwSelfMedia.prototype,"_directLocalStream",2),ui([P()],l.SwSelfMedia.prototype,"_directLayoutLayers",2),ui([P()],l.SwSelfMedia.prototype,"_directSelf",2),l.SwSelfMedia=ui([se("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 Sc={ATTRIBUTE:1,CHILD:2},Cc=t=>(...e)=>({_$litDirective$:t,values:e});let Ac=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 fs extends Ac{constructor(e){if(super(e),this.it=j,e.type!==Sc.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===j||e==null)return this._t=void 0,this.it=e;if(e===jt)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:[]}}}fs.directiveName="unsafeHTML",fs.resultType=1;const on=Cc(fs),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 Gm=Object.defineProperty;var zl=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 dv=Object.defineProperty,hv=Object.getOwnPropertyDescriptor,vs=(t,e,i,r)=>{for(var n=r>1?void 0:r?hv(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&&dv(e,i,n),n};const pv=24;l.SwUiIcon=class extends Z{constructor(){super(...arguments),this.name="close",this.size=pv}render(){const e=uv[this.name];if(!e)return k``;const i=e.replace("<svg",`<svg width="${this.size}" height="${this.size}"`);return k`${on(i)}`}},l.SwUiIcon.styles=ie`
|
|
269
269
|
:host {
|
|
270
270
|
display: inline-flex;
|
|
271
271
|
align-items: center;
|
|
@@ -276,7 +276,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
276
276
|
svg {
|
|
277
277
|
display: block;
|
|
278
278
|
}
|
|
279
|
-
`,
|
|
279
|
+
`,vs([T({reflect:!0})],l.SwUiIcon.prototype,"name",2),vs([T({type:Number})],l.SwUiIcon.prototype,"size",2),l.SwUiIcon=vs([se("sw-ui-icon")],l.SwUiIcon);var gv=Object.defineProperty,fv=Object.getOwnPropertyDescriptor,Ut=(t,e,i,r)=>{for(var n=r>1?void 0:r?fv(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&&gv(e,i,n),n};l.SwLocalCamera=class extends Z{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,Fr(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&&la(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 k`
|
|
280
280
|
<video part="video" autoplay playsinline muted></video>
|
|
281
281
|
${this._effectiveMuted?k`<div part="placeholder" class="muted-overlay">
|
|
282
282
|
<sw-ui-icon name="camera-off" size="28"></sw-ui-icon>
|
|
@@ -317,7 +317,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
317
317
|
.muted-overlay sw-ui-icon {
|
|
318
318
|
color: var(--bg-surface-raised);
|
|
319
319
|
}
|
|
320
|
-
`,Ut([T({attribute:!1})],l.SwLocalCamera.prototype,"stream",2),Ut([T({type:Boolean,reflect:!0,attribute:"video-muted"})],l.SwLocalCamera.prototype,"videoMuted",2),Ut([T({type:Object})],l.SwLocalCamera.prototype,"call",2),Ut([T({type:Boolean,reflect:!0})],l.SwLocalCamera.prototype,"mirror",2),Ut([
|
|
320
|
+
`,Ut([T({attribute:!1})],l.SwLocalCamera.prototype,"stream",2),Ut([T({type:Boolean,reflect:!0,attribute:"video-muted"})],l.SwLocalCamera.prototype,"videoMuted",2),Ut([T({type:Object})],l.SwLocalCamera.prototype,"call",2),Ut([T({type:Boolean,reflect:!0})],l.SwLocalCamera.prototype,"mirror",2),Ut([et({context:pt,subscribe:!0}),P()],l.SwLocalCamera.prototype,"_callState",2),Ut([et({context:nr,subscribe:!0}),P()],l.SwLocalCamera.prototype,"_devicesState",2),Ut([P()],l.SwLocalCamera.prototype,"_directLocalStream",2),Ut([P()],l.SwLocalCamera.prototype,"_aspectRatio",2),l.SwLocalCamera=Ut([se("sw-local-camera")],l.SwLocalCamera);const at=ie`
|
|
321
321
|
:host {
|
|
322
322
|
text-align: start;
|
|
323
323
|
letter-spacing: normal;
|
|
@@ -331,7 +331,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
331
331
|
white-space: normal;
|
|
332
332
|
text-shadow: none;
|
|
333
333
|
}
|
|
334
|
-
`;var
|
|
334
|
+
`;var vv=Object.defineProperty,bv=Object.getOwnPropertyDescriptor,di=(t,e,i,r)=>{for(var n=r>1?void 0:r?bv(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&&vv(e,i,n),n};l.SwParticipants=class extends Z{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 k`
|
|
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" />
|
|
@@ -512,7 +512,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
512
512
|
.menu-item.danger:hover {
|
|
513
513
|
background: rgba(239, 68, 68, 0.2);
|
|
514
514
|
}
|
|
515
|
-
`],
|
|
515
|
+
`],di([et({context:pt,subscribe:!0}),P()],l.SwParticipants.prototype,"_callState",2),di([T({type:Object})],l.SwParticipants.prototype,"call",2),di([P()],l.SwParticipants.prototype,"_directLayoutLayers",2),di([P()],l.SwParticipants.prototype,"_directParticipants",2),di([P()],l.SwParticipants.prototype,"_directSelf",2),di([P()],l.SwParticipants.prototype,"_openMenuId",2),l.SwParticipants=di([se("sw-participants")],l.SwParticipants);var mv=Object.defineProperty,yv=Object.getOwnPropertyDescriptor,xt=(t,e,i,r)=>{for(var n=r>1?void 0:r?yv(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&&mv(e,i,n),n};const bs=W();l.SwParticipantControls=class extends Z{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){bs.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){bs.error("[ParticipantControls] Toggle video failed:",i)}}async _remove(){const e=this._participant;if(e!=null&&e.remove)try{await e.remove()}catch(i){bs.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 k`<div class="panel"><div class="empty">Participant not found</div></div>`;const i=this._canMuteAudio||this._canMuteVideo||this._canRemove||this.showVolume||this.showPin;return k`
|
|
516
516
|
<div class="panel" part="panel">
|
|
517
517
|
<div class="name" part="name">${e.name??"Participant"}</div>
|
|
518
518
|
|
|
@@ -685,7 +685,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
685
685
|
text-align: center;
|
|
686
686
|
padding: 6px;
|
|
687
687
|
}
|
|
688
|
-
`],xt([T({type:String,attribute:"participant-id"})],l.SwParticipantControls.prototype,"participantId",2),xt([T({type:Boolean,reflect:!0,attribute:"show-volume"})],l.SwParticipantControls.prototype,"showVolume",2),xt([T({type:Boolean,reflect:!0,attribute:"show-pin"})],l.SwParticipantControls.prototype,"showPin",2),xt([
|
|
688
|
+
`],xt([T({type:String,attribute:"participant-id"})],l.SwParticipantControls.prototype,"participantId",2),xt([T({type:Boolean,reflect:!0,attribute:"show-volume"})],l.SwParticipantControls.prototype,"showVolume",2),xt([T({type:Boolean,reflect:!0,attribute:"show-pin"})],l.SwParticipantControls.prototype,"showPin",2),xt([et({context:pt,subscribe:!0}),P()],l.SwParticipantControls.prototype,"_callState",2),xt([T({type:Object})],l.SwParticipantControls.prototype,"call",2),xt([P()],l.SwParticipantControls.prototype,"_directParticipants",2),xt([P()],l.SwParticipantControls.prototype,"_directCapabilities",2),xt([P()],l.SwParticipantControls.prototype,"_volume",2),xt([P()],l.SwParticipantControls.prototype,"_isPinned",2),l.SwParticipantControls=xt([se("sw-participant-controls")],l.SwParticipantControls);var wv=Object.defineProperty,Sv=Object.getOwnPropertyDescriptor,Dt=(t,e,i,r)=>{for(var n=r>1?void 0:r?Sv(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};const cn=W();l.SwAudioLevel=class extends Z{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,cn.error("[SwAudioLevel] Failed to acquire microphone:",e)}))}setupAudioAnalysis(){const e=this._activeStream??this._effectiveStream;if(!e)return;if(e.getAudioTracks().length===0){cn.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){cn.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=>cn.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 k`
|
|
689
689
|
<div
|
|
690
690
|
class="container"
|
|
691
691
|
part="container"
|
|
@@ -766,7 +766,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
766
766
|
.bar.level-high {
|
|
767
767
|
background-color: var(--interactive-button-destructive-bg);
|
|
768
768
|
}
|
|
769
|
-
`,
|
|
769
|
+
`,Dt([T({type:Object})],l.SwAudioLevel.prototype,"stream",2),Dt([T({type:Object})],l.SwAudioLevel.prototype,"call",2),Dt([et({context:pt,subscribe:!0}),P()],l.SwAudioLevel.prototype,"_callState",2),Dt([P()],l.SwAudioLevel.prototype,"_directLocalStream",2),Dt([T({type:Number})],l.SwAudioLevel.prototype,"bars",2),Dt([T({type:String,reflect:!0})],l.SwAudioLevel.prototype,"orientation",2),Dt([T({type:Boolean,reflect:!0,attribute:"auto-request"})],l.SwAudioLevel.prototype,"autoRequest",2),Dt([T({type:Number})],l.SwAudioLevel.prototype,"maxSize",2),Dt([P()],l.SwAudioLevel.prototype,"_levels",2),l.SwAudioLevel=Dt([se("sw-audio-level")],l.SwAudioLevel);var Cv=Object.defineProperty,Av=Object.getOwnPropertyDescriptor,ot=(t,e,i,r)=>{for(var n=r>1?void 0:r?Av(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&&Cv(e,i,n),n};const pr=W();l.SwCallControls=class extends Z{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=>{pr.error("[CallControls] Screen share failed:",r)}):i.stopScreenShare().catch(r=>{pr.error("[CallControls] Stop screen share failed:",r)}))}_onHandRaiseToggle(e){const i=this._effectiveSelf;i&&i.toggleHandraise().catch(r=>{pr.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=>{pr.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=>pr.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 k``;const e=this._effectiveSelf,i=(e==null?void 0:e.screenShareStatus)==="started",r=(e==null?void 0:e.handraised)??!1,n=this._devices;return k`
|
|
770
770
|
<sw-ui-control-bar
|
|
771
771
|
exportparts="bar,logo,button,chevron"
|
|
772
772
|
.micMuted=${(n==null?void 0:n.audioMuted)??!1}
|
|
@@ -799,7 +799,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
799
799
|
:host {
|
|
800
800
|
display: block;
|
|
801
801
|
}
|
|
802
|
-
`,ot([
|
|
802
|
+
`,ot([et({context:nr,subscribe:!0}),P()],l.SwCallControls.prototype,"_devices",2),ot([et({context:pt,subscribe:!0}),P()],l.SwCallControls.prototype,"_callState",2),ot([T({type:Object})],l.SwCallControls.prototype,"call",2),ot([P()],l.SwCallControls.prototype,"_directSelf",2),ot([P()],l.SwCallControls.prototype,"_fullscreen",2),ot([T({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwCallControls.prototype,"showScreenShare",2),ot([T({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwCallControls.prototype,"showHandRaise",2),ot([T({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwCallControls.prototype,"showTranscript",2),ot([T({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwCallControls.prototype,"transcriptActive",2),ot([T({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwCallControls.prototype,"showSettings",2),ot([T({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwCallControls.prototype,"showFullscreen",2),l.SwCallControls=ot([se("sw-call-controls")],l.SwCallControls);var Tv=Object.defineProperty,Ev=Object.getOwnPropertyDescriptor,Ni=(t,e,i,r)=>{for(var n=r>1?void 0:r?Ev(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&&Tv(e,i,n),n};l.SwCallStatus=class extends Z{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 k`
|
|
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">
|
|
@@ -899,7 +899,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
899
899
|
opacity: 0.6;
|
|
900
900
|
font-size: 0.85em;
|
|
901
901
|
}
|
|
902
|
-
`],
|
|
902
|
+
`],Ni([T({type:Object})],l.SwCallStatus.prototype,"call",2),Ni([et({context:pt,subscribe:!0}),P()],l.SwCallStatus.prototype,"_callState",2),Ni([P()],l.SwCallStatus.prototype,"_directStatus",2),Ni([P()],l.SwCallStatus.prototype,"_callStartTime",2),Ni([P()],l.SwCallStatus.prototype,"_duration",2),l.SwCallStatus=Ni([se("sw-call-status")],l.SwCallStatus);const hi=()=>Promise.resolve(),Tc=()=>{},Ec=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:hi,toggleLock:hi,toggleHold:hi,setLayout:hi,startRecording:hi,startStreaming:hi,sendDigits:hi,answer:Tc,reject:Tc});class ms{constructor(e){this._subscriptions=[],this._state={...Ec},this._batching=!1,this._provider=new Ln(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({...Ec})}_patch(e){this._state={...this._state,...e},this._batching||this._publish()}_publish(){this._provider.setValue(this._state)}}const xe=()=>Promise.resolve(),kc=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:xe,toggleVideoMute:xe,toggleSpeakerMute:xe,echoCancellation:!0,autoGain:!0,noiseSuppression:!0,toggleEchoCancellation:xe,toggleAutoGain:xe,toggleNoiseSuppression:xe});class ys{constructor(e){this._dc=null,this._deviceSubs=[],this._callSubs=[],this._state={...kc},this._provider=new Ln(e,{context:nr,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():xe,toggleVideoMute:u?()=>u.toggleMuteVideo():xe,toggleSpeakerMute:u?()=>u.toggleDeaf():xe,toggleEchoCancellation:u?()=>u.toggleEchoCancellation():xe,toggleAutoGain:u?()=>u.toggleAudioInputAutoGain():xe,toggleNoiseSuppression:u?()=>u.toggleNoiseSuppression():xe})}),r=e.self$.pipe(Ze(u=>u?u.audioMuted$:Et(!1))).subscribe(u=>this._patch({audioMuted:u})),n=e.self$.pipe(Ze(u=>u?u.videoMuted$:Et(!1))).subscribe(u=>this._patch({videoMuted:u})),s=e.self$.pipe(Ze(u=>u?u.deaf$:Et(!1))).subscribe(u=>this._patch({speakerMuted:u})),a=e.self$.pipe(Ze(u=>u?u.echoCancellation$:Et(!0))).subscribe(u=>this._patch({echoCancellation:u})),o=e.self$.pipe(Ze(u=>u?u.autoGain$:Et(!0))).subscribe(u=>this._patch({autoGain:u})),c=e.self$.pipe(Ze(u=>u?u.noiseSuppression$:Et(!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:xe,toggleVideoMute:xe,toggleSpeakerMute:xe,echoCancellation:!0,autoGain:!0,noiseSuppression:!0,toggleEchoCancellation:xe,toggleAutoGain:xe,toggleNoiseSuppression:xe})}disconnect(){this._deviceSubs.forEach(e=>e.unsubscribe()),this._deviceSubs=[],this.disconnectCall(),this._patch({...kc})}_patch(e){this._state={...this._state,...e},this._provider.setValue(this._state)}}var kv=Object.defineProperty,xv=Object.getOwnPropertyDescriptor,ws=(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&&kv(e,i,n),n};l.SwCallProvider=class extends Z{constructor(){super(...arguments),this.call=void 0,this.deviceController=void 0,this._callState=new ms(this),this._devices=new ys(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 k`<slot></slot>`}},l.SwCallProvider.styles=ie`:host { display: contents; }`,ws([T({attribute:!1})],l.SwCallProvider.prototype,"call",2),ws([T({attribute:!1})],l.SwCallProvider.prototype,"deviceController",2),l.SwCallProvider=ws([se("sw-call-provider")],l.SwCallProvider);var Dv=Object.defineProperty,Iv=Object.getOwnPropertyDescriptor,Bi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Iv(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&&Dv(e,i,n),n};const Mv=/^[0-9*#]$/,Rv=500,Pv=[{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 Z{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()},Rv)}_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}Mv.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 k`
|
|
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 Gm=Object.defineProperty;var zl=l
|
|
|
926
926
|
</div>
|
|
927
927
|
|
|
928
928
|
<div class="keypad" part="keypad" role="group" aria-label="Telephone keypad">
|
|
929
|
-
${
|
|
929
|
+
${Pv.map(e=>k`
|
|
930
930
|
<button
|
|
931
931
|
class="key ${this.pressedKey===e.digit?"pressed":""}"
|
|
932
932
|
part="key ${this.pressedKey===e.digit?"key-pressed":""}"
|
|
@@ -1119,7 +1119,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
1119
1119
|
.call-button sw-ui-icon {
|
|
1120
1120
|
pointer-events: none;
|
|
1121
1121
|
}
|
|
1122
|
-
`],
|
|
1122
|
+
`],Bi([T({type:Boolean,reflect:!0,attribute:"show-call-button"})],l.SwUiDialpad.prototype,"showCallButton",2),Bi([T({type:Boolean,reflect:!0,attribute:"allow-text"})],l.SwUiDialpad.prototype,"allowText",2),Bi([T({type:String})],l.SwUiDialpad.prototype,"placeholder",2),Bi([P()],l.SwUiDialpad.prototype,"digits",2),Bi([P()],l.SwUiDialpad.prototype,"pressedKey",2),l.SwUiDialpad=Bi([se("sw-ui-dialpad")],l.SwUiDialpad);var Ov=Object.defineProperty,_v=Object.getOwnPropertyDescriptor,pi=(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=W();l.SwCallDialpad=class extends Z{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=>{Lv.error("Failed to send DTMF:",o)})}render(){return k`
|
|
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 Gm=Object.defineProperty;var zl=l
|
|
|
1127
1127
|
placeholder=${this.placeholder}
|
|
1128
1128
|
@sw-digit-press=${this._onDigitPress}
|
|
1129
1129
|
></sw-ui-dialpad>
|
|
1130
|
-
`}},
|
|
1130
|
+
`}},pi([et({context:pt,subscribe:!0}),P()],l.SwCallDialpad.prototype,"_callState",2),pi([T({type:Object})],l.SwCallDialpad.prototype,"call",2),pi([P()],l.SwCallDialpad.prototype,"_directStatus",2),pi([T({type:Boolean,reflect:!0,attribute:"show-call-button"})],l.SwCallDialpad.prototype,"showCallButton",2),pi([T({type:Boolean,reflect:!0,attribute:"allow-text"})],l.SwCallDialpad.prototype,"allowText",2),pi([T({type:String})],l.SwCallDialpad.prototype,"placeholder",2),l.SwCallDialpad=pi([se("sw-call-dialpad")],l.SwCallDialpad);const xc="transcript";class Dc{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 Ic=W(),Fv=["ai.partial_result","ai.speech_detect","ai.response_utterance","ai.completion"];function Uv(t){return t.replace(/\s*\{confidence=[\d.]+\}\s*/g,"").trim()}function ln(t){return typeof t=="string"?t:""}class gr{constructor(e){this._chat=new Dc,this._injected=[],this._subscriptions=[],this._host=e,this._provider=new Ln(e,{context:xc,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 Fv){const r=e.subscribe(i).subscribe({next:n=>{try{this._route(i,this._extractParams(n))}catch(s){Ic.warn(`[TranscriptController] handler for ${i} threw`,s)}},error:n=>{Ic.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(ln(i.text));break;case"ai.speech_detect":{const r=Uv(ln(i.text));this._chat.onUserComplete(r);break}case"ai.response_utterance":{const r=ln(i.utterance??i.text);this._chat.onAiChunk(gr._stripVoiceDirectives(r));break}case"ai.completion":{const r=ln(i.text);this._chat.onAiComplete(gr._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 Nv=W(),Bv="user_event",zv=["text","markdown","code","html"];function Vv(t){return zv.includes(t)?t:"text"}class Mc{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(Bv).subscribe(r=>{Nv.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:Vv(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 Hv=Object.defineProperty,jv=Object.getOwnPropertyDescriptor,fr=(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.SwUiCallLayout=class extends Z{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 k`
|
|
1131
1131
|
<div class="root">
|
|
1132
1132
|
<div class="video">
|
|
1133
1133
|
<slot name="background"></slot>
|
|
@@ -1349,7 +1349,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
1349
1349
|
display: none;
|
|
1350
1350
|
}
|
|
1351
1351
|
}
|
|
1352
|
-
`,fr([T({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"transcript",2),fr([T({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"loading",2),fr([T({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"shadow",2),fr([P()],l.SwUiCallLayout.prototype,"_fullscreen",2),l.SwUiCallLayout=fr([se("sw-ui-call-layout")],l.SwUiCallLayout);var
|
|
1352
|
+
`,fr([T({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"transcript",2),fr([T({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"loading",2),fr([T({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"shadow",2),fr([P()],l.SwUiCallLayout.prototype,"_fullscreen",2),l.SwUiCallLayout=fr([se("sw-ui-call-layout")],l.SwUiCallLayout);var Wv=Object.getOwnPropertyDescriptor,Gv=(t,e,i,r)=>{for(var n=r>1?void 0:r?Wv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=a(n)||n);return n};l.SwUiResponsiveContainer=class extends Z{render(){return k`<div class="container"><slot></slot></div>`}},l.SwUiResponsiveContainer.styles=ie`
|
|
1353
1353
|
.container {
|
|
1354
1354
|
margin: 0 auto;
|
|
1355
1355
|
|
|
@@ -1407,7 +1407,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
1407
1407
|
max-height: 90vh;
|
|
1408
1408
|
}
|
|
1409
1409
|
}
|
|
1410
|
-
`,l.SwUiResponsiveContainer=
|
|
1410
|
+
`,l.SwUiResponsiveContainer=Gv([se("sw-ui-responsive-container")],l.SwUiResponsiveContainer);var qv=Object.defineProperty,Xv=Object.getOwnPropertyDescriptor,Ss=(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};l.SwUiModal=class extends Z{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 k`<dialog part="dialog backdrop">
|
|
1411
1411
|
<div part="panel"><slot></slot></div>
|
|
1412
1412
|
</dialog>`}},l.SwUiModal.styles=ie`
|
|
1413
1413
|
:host {
|
|
@@ -1497,15 +1497,15 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
1497
1497
|
dialog.closing::backdrop {
|
|
1498
1498
|
animation: var(--sw-modal-backdrop-close-animation);
|
|
1499
1499
|
}
|
|
1500
|
-
`,
|
|
1500
|
+
`,Ss([T({type:Boolean,reflect:!0})],l.SwUiModal.prototype,"open",2),Ss([Lr("dialog")],l.SwUiModal.prototype,"dialog",2),l.SwUiModal=Ss([se("sw-ui-modal")],l.SwUiModal);/**
|
|
1501
1501
|
* @license
|
|
1502
1502
|
* Copyright 2018 Google LLC
|
|
1503
1503
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
1504
|
-
*/const Ic="important",Wv=" !"+Ic,Gv=yc(class extends wc{constructor(t){var e;if(super(t),t.type!==mc.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(Wv);r.includes("-")||s?i.setProperty(r,s?n.slice(0,-11):n,s?Ic:""):i[r]=n}}return jt}}),qv="data:image/webp;base64,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",Xv="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 Yv=Object.defineProperty,Kv=Object.getOwnPropertyDescriptor,Bi=(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};l.SwUiBackground=class extends Z{constructor(){super(...arguments),this.default=!1,this.blurAmount="20px",this._loaded=!1}get _src(){return this.default?qv:this.src}get _thumbnail(){return this.default?Xv:this.thumbnail}willUpdate(e){(e.has("src")||e.has("default"))&&(this._loaded=!1)}render(){return k`
|
|
1504
|
+
*/const Rc="important",Yv=" !"+Rc,Kv=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(Yv);r.includes("-")||s?i.setProperty(r,s?n.slice(0,-11):n,s?Rc:""):i[r]=n}}return jt}}),Zv="data:image/webp;base64,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",Qv="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 Jv=Object.defineProperty,$v=Object.getOwnPropertyDescriptor,zi=(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.SwUiBackground=class extends Z{constructor(){super(...arguments),this.default=!1,this.blurAmount="20px",this._loaded=!1}get _src(){return this.default?Zv:this.src}get _thumbnail(){return this.default?Qv:this.thumbnail}willUpdate(e){(e.has("src")||e.has("default"))&&(this._loaded=!1)}render(){return k`
|
|
1505
1505
|
${this._thumbnail?k`<div
|
|
1506
1506
|
part="thumb"
|
|
1507
1507
|
class=${`thumb${this._loaded?" hidden":""}`}
|
|
1508
|
-
style=${
|
|
1508
|
+
style=${Kv({"background-image":`url('${this._thumbnail}')`,filter:`blur(${this.blurAmount})`})}
|
|
1509
1509
|
></div>`:j}
|
|
1510
1510
|
${this._src?k`<img
|
|
1511
1511
|
part="image"
|
|
@@ -1552,11 +1552,11 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
1552
1552
|
opacity: 1;
|
|
1553
1553
|
transform: scale(1);
|
|
1554
1554
|
}
|
|
1555
|
-
`,
|
|
1555
|
+
`,zi([T({type:Boolean,reflect:!0})],l.SwUiBackground.prototype,"default",2),zi([T({type:String})],l.SwUiBackground.prototype,"thumbnail",2),zi([T({type:String})],l.SwUiBackground.prototype,"src",2),zi([T({type:String,attribute:"blur-amount"})],l.SwUiBackground.prototype,"blurAmount",2),zi([P()],l.SwUiBackground.prototype,"_loaded",2),l.SwUiBackground=zi([se("sw-ui-background")],l.SwUiBackground);let eb=null;const Pc=()=>eb??(eb=Promise.resolve().then(()=>jb)),tb={javascript:()=>Promise.resolve().then(()=>Wb),typescript:()=>Promise.resolve().then(()=>qb),python:()=>Promise.resolve().then(()=>Yb),bash:()=>Promise.resolve().then(()=>Jc),shell:()=>Promise.resolve().then(()=>Jc),json:()=>Promise.resolve().then(()=>Kb),css:()=>Promise.resolve().then(()=>Zb),yaml:()=>Promise.resolve().then(()=>Qb),sql:()=>Promise.resolve().then(()=>Jb),markdown:()=>Promise.resolve().then(()=>$b)},ib={typescript:["javascript"]},Oc=new Set;async function _c(t){if(Oc.has(t))return;await Pc();for(const i of ib[t]??[])await _c(i);const e=tb[t];e&&(await e(),Oc.add(t))}async function Lc(t,e){const i=(e||"plaintext").toLowerCase();await _c(i);const r=await Pc(),n=r.languages[i];return n?r.highlight(t,n,i):t}var rb=Object.defineProperty,nb=Object.getOwnPropertyDescriptor,It=(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&&rb(e,i,n),n};const Fc=W(),Uc={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 Nc=!1;function Bc(t){return Nc||(t.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute("rel","noopener noreferrer")}),Nc=!0),t}l.SwUiContentDrawer=class extends Z{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(()=>vm),Promise.resolve().then(()=>Al)]),c=await a.parse(i,{async:!0});s=Bc(o).sanitize(c,Uc)}else if(r==="html"){const{default:a}=await Promise.resolve().then(()=>Al);s=Bc(a).sanitize(i,Uc)}else r==="code"&&(s=await Lc(i,n||"plaintext"));if(e!==this._renderId)return;this._renderedHtml=s,this._renderFormat=r}catch(s){if(Fc.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{Fc.error("[ContentDrawer] Clipboard write failed")}}_renderBody(){return this.format==="text"||this._renderFormat!==this.format?k`<div class="content-text">${this.content}</div>`:this._renderFormat==="code"?k`
|
|
1556
1556
|
<div class="content-code">
|
|
1557
|
-
<pre><code>${
|
|
1557
|
+
<pre><code>${on(this._renderedHtml)}</code></pre>
|
|
1558
1558
|
</div>
|
|
1559
|
-
`:k`<div class="content-rich">${
|
|
1559
|
+
`:k`<div class="content-rich">${on(this._renderedHtml)}</div>`}render(){const e=this.format==="code"&&this.language;return k`
|
|
1560
1560
|
<div class="panel" part="panel">
|
|
1561
1561
|
<div class="header" part="header">
|
|
1562
1562
|
${this.title?k`<span class="title" part="title">${this.title}</span>`:j}
|
|
@@ -1812,10 +1812,10 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
1812
1812
|
.token.important,
|
|
1813
1813
|
.token.bold { font-weight: bold; }
|
|
1814
1814
|
.token.italic { font-style: italic; }
|
|
1815
|
-
`,
|
|
1816
|
-
`)}function
|
|
1815
|
+
`,It([T({type:Boolean,reflect:!0})],l.SwUiContentDrawer.prototype,"open",2),It([T({type:Boolean,reflect:!0})],l.SwUiContentDrawer.prototype,"narrow",2),It([T({type:String})],l.SwUiContentDrawer.prototype,"title",2),It([T({type:String})],l.SwUiContentDrawer.prototype,"content",2),It([T({type:String})],l.SwUiContentDrawer.prototype,"format",2),It([T({type:String})],l.SwUiContentDrawer.prototype,"language",2),It([P()],l.SwUiContentDrawer.prototype,"_renderedHtml",2),It([P()],l.SwUiContentDrawer.prototype,"_renderFormat",2),It([P()],l.SwUiContentDrawer.prototype,"_copied",2),l.SwUiContentDrawer=It([se("sw-ui-content-drawer")],l.SwUiContentDrawer);function sb(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(...ab(n),"");return r.length>0&&i.push("---",""),i.join(`
|
|
1816
|
+
`)}function ab(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(...ob(t.meta.displayContent)),e}function ob(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 cb=Object.defineProperty,lb=Object.getOwnPropertyDescriptor,vr=(t,e,i,r)=>{for(var n=r>1?void 0:r?lb(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&&cb(e,i,n),n};l.SwUiTranscriptView=class extends Z{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 Lc(r,n);this._codeCache=new Map(this._codeCache).set(i.id,s)})),await this.updateComplete,this._autoScroll())}_downloadTranscript(){const e=sb(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 j;const r=this._codeCache.get(e.id);return k`
|
|
1817
1817
|
<div class="meta-code" part="code">
|
|
1818
|
-
<pre><code>${r?
|
|
1818
|
+
<pre><code>${r?on(r):i.content}</code></pre>
|
|
1819
1819
|
</div>
|
|
1820
1820
|
`}render(){const e=this.entries.some(i=>i.state==="complete");return k`
|
|
1821
1821
|
<div class="header" part="header">
|
|
@@ -2076,7 +2076,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2076
2076
|
.token.italic {
|
|
2077
2077
|
font-style: italic;
|
|
2078
2078
|
}
|
|
2079
|
-
`],vr([T({attribute:!1})],l.SwUiTranscriptView.prototype,"entries",2),vr([T({type:String})],l.SwUiTranscriptView.prototype,"header",2),vr([T({type:String,attribute:"empty-text"})],l.SwUiTranscriptView.prototype,"emptyText",2),vr([P()],l.SwUiTranscriptView.prototype,"_codeCache",2),l.SwUiTranscriptView=vr([se("sw-ui-transcript-view")],l.SwUiTranscriptView);var
|
|
2079
|
+
`],vr([T({attribute:!1})],l.SwUiTranscriptView.prototype,"entries",2),vr([T({type:String})],l.SwUiTranscriptView.prototype,"header",2),vr([T({type:String,attribute:"empty-text"})],l.SwUiTranscriptView.prototype,"emptyText",2),vr([P()],l.SwUiTranscriptView.prototype,"_codeCache",2),l.SwUiTranscriptView=vr([se("sw-ui-transcript-view")],l.SwUiTranscriptView);var ub=Object.defineProperty,db=Object.getOwnPropertyDescriptor,br=(t,e,i,r)=>{for(var n=r>1?void 0:r?db(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 Z{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 k`
|
|
2080
2080
|
<dialog>
|
|
2081
2081
|
<h2 class="title">${this.title}</h2>
|
|
2082
2082
|
<div class="body">
|
|
@@ -2150,7 +2150,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=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 cb=`: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}}`,lb="https://fonts.googleapis.com/css2";function ln(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=`${lb}?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 Uc=!1;function Nc(){if(typeof document>"u"||Uc)return;Uc=!0;const t=new CSSStyleSheet;t.replaceSync(cb),document.adoptedStyleSheets=[...document.adoptedStyleSheets,t]}function Bc(){ln("Lexend",{weights:[300,400,500,600,700]}),ln("Instrument Sans",{weights:[400,500,600,700]}),ln("JetBrains Mono",{weights:[400,500]})}const zc=W(),ub=["text","markdown","code","html"];function un(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function db(t){if(!t)return{};try{const e=JSON.parse(t);return un(e)?e:(zc.warn("[CallWidget] user-variables must be a JSON object; ignoring"),{})}catch(e){return zc.warn("[CallWidget] Failed to parse user-variables JSON; ignoring",e),{}}}function hb(t,e=()=>new Date().toISOString()){const i=un(t.capabilities)?t.capabilities:{},r=un(t.metadata)?t.metadata:{},n=un(r.widget)?r.widget:{};return{...t,capabilities:{display_content:{formats:[...ub]},...i},metadata:{...r,widget:{opened_at:e(),...n}}}}const pb=["c2c_","c2t_"],gb="embeds.signalwire.com";function fb(t){try{return new URL(t.includes("://")?t:`https://${t}`).hostname}catch{return t}}function vb(t){return pb.some(e=>t.startsWith(e))}function bb(t,e){return vb(t)?new vc(fb(e||gb),t):new bc({token:t})}const mb=ie`
|
|
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 hb=`: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}}`,pb="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=`${pb}?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(hb),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(),gb=["text","markdown","code","html"];function dn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function fb(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 vb(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:[...gb]},...i},metadata:{...r,widget:{opened_at:e(),...n}}}}const bb=["c2c_","c2t_"],mb="embeds.signalwire.com";function yb(t){try{return new URL(t.includes("://")?t:`https://${t}`).hostname}catch{return t}}function wb(t){return bb.some(e=>t.startsWith(e))}function Sb(t,e){return wb(t)?new yc(yb(e||mb),t):new wc({token:t})}const Cb=ie`
|
|
2154
2154
|
:host {
|
|
2155
2155
|
display: block;
|
|
2156
2156
|
height: 100%;
|
|
@@ -2170,7 +2170,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2170
2170
|
height: 100%;
|
|
2171
2171
|
overflow: hidden;
|
|
2172
2172
|
}
|
|
2173
|
-
`;function
|
|
2173
|
+
`;function Ab(t){var e,i,r,n;return k`
|
|
2174
2174
|
<div class="call-view-wrapper">
|
|
2175
2175
|
<sw-ui-call-layout
|
|
2176
2176
|
?transcript=${t.transcription}
|
|
@@ -2209,20 +2209,20 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2209
2209
|
@sw-content-drawer-close=${t.onDrawerClose}
|
|
2210
2210
|
></sw-ui-content-drawer>
|
|
2211
2211
|
</div>
|
|
2212
|
-
`}function
|
|
2212
|
+
`}function Tb(){return k`
|
|
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 Eb=Object.defineProperty,kb=Object.getOwnPropertyDescriptor,ze=(t,e,i,r)=>{for(var n=r>1?void 0:r?kb(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};const hn=W();l.SwCallWidget=class extends Z{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 ms(this),this._devices=new ys(this),this._transcript=new gr(this),this._userEventCtrl=new Mc(this),this._incomingCalls=new ca(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 mr({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||Vc(),this.disableAutoFonts||Hc()}updated(e){super.updated(e),e.has("token")||e.has("host")?this.token?this._refreshClient():e.has("host")&&hn.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){hn.error("[SwCallWidget] Error destroying client:",e)}this._client=null}this._call=null,this._connecting=!1}_refreshClient(){this._destroyClient();try{this._client=new mc(Sb(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";hn.error("[SwCallWidget] Failed to initialise client:",e),mr({title:"Client Error",description:i,type:"alert"})}}async dial(){if(!this._client||this._connecting||this._call)return;if(!this.destination){mr({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(B(a=>a),Ka()).subscribe({next:()=>{const a=vb(fb(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";hn.error("[SwCallWidget] Dial failed:",i),mr({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(B(Boolean),Ka()).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?Ab({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?Tb():j;return this.modal?k`
|
|
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
2222
|
${i!==j?i:j}
|
|
2223
2223
|
</sw-ui-responsive-container>
|
|
2224
2224
|
</sw-ui-modal>
|
|
2225
|
-
`:i!==j?i:k`<slot @slotchange=${this._onSlotChange}></slot>`}},l.SwCallWidget.styles=[at,
|
|
2225
|
+
`:i!==j?i:k`<slot @slotchange=${this._onSlotChange}></slot>`}},l.SwCallWidget.styles=[at,Cb],ze([T({type:String})],l.SwCallWidget.prototype,"token",2),ze([T({type:String})],l.SwCallWidget.prototype,"host",2),ze([T({type:String})],l.SwCallWidget.prototype,"destination",2),ze([T({type:Boolean,reflect:!0})],l.SwCallWidget.prototype,"modal",2),ze([T({type:Boolean,reflect:!0})],l.SwCallWidget.prototype,"transcription",2),ze([T({type:Boolean,reflect:!0,attribute:"allow-incoming-calls"})],l.SwCallWidget.prototype,"allowIncomingCalls",2),ze([T({type:Boolean,reflect:!0,attribute:"audio-only"})],l.SwCallWidget.prototype,"audioOnly",2),ze([T({type:String,attribute:"user-variables"})],l.SwCallWidget.prototype,"userVariables",2),ze([T({type:Boolean,reflect:!0,attribute:"disable-auto-theme"})],l.SwCallWidget.prototype,"disableAutoTheme",2),ze([T({type:Boolean,reflect:!0,attribute:"disable-auto-fonts"})],l.SwCallWidget.prototype,"disableAutoFonts",2),ze([P()],l.SwCallWidget.prototype,"_call",2),ze([P()],l.SwCallWidget.prototype,"_connecting",2),ze([P()],l.SwCallWidget.prototype,"_hasLayoutLayers",2),ze([P()],l.SwCallWidget.prototype,"_drawer",2),l.SwCallWidget=ze([se("sw-call-widget")],l.SwCallWidget);var xb=Object.defineProperty,Db=Object.getOwnPropertyDescriptor,Vi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Db(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&&xb(e,i,n),n};l.SwClickToCall=class extends Z{constructor(){super(...arguments),this.token="",this.host="",this.destination="",this.label="Call",this.audioOnly=!1}render(){return k`
|
|
2226
2226
|
<sw-call-widget
|
|
2227
2227
|
modal
|
|
2228
2228
|
transcription
|
|
@@ -2271,7 +2271,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2271
2271
|
.call-button sw-ui-icon {
|
|
2272
2272
|
pointer-events: none;
|
|
2273
2273
|
}
|
|
2274
|
-
`],
|
|
2274
|
+
`],Vi([T({type:String})],l.SwClickToCall.prototype,"token",2),Vi([T({type:String})],l.SwClickToCall.prototype,"host",2),Vi([T({type:String})],l.SwClickToCall.prototype,"destination",2),Vi([T({type:String})],l.SwClickToCall.prototype,"label",2),Vi([T({type:Boolean,reflect:!0,attribute:"audio-only"})],l.SwClickToCall.prototype,"audioOnly",2),l.SwClickToCall=Vi([se("sw-click-to-call")],l.SwClickToCall);var Ib=Object.defineProperty,Mb=Object.getOwnPropertyDescriptor,Xt=(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=(r?a(e,i,n):a(n))||n);return r&&n&&Ib(e,i,n),n};l.SwDirectory=class extends Z{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 k`<sw-ui-icon name=${i} size="20"></sw-ui-icon>`}renderChannelIcons(e){const i=e.channels||{};return k`
|
|
2275
2275
|
<div class="item-channels">
|
|
2276
2276
|
<sw-ui-icon
|
|
2277
2277
|
name="mic-on"
|
|
@@ -2547,7 +2547,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2547
2547
|
.dial-button sw-ui-icon {
|
|
2548
2548
|
pointer-events: none;
|
|
2549
2549
|
}
|
|
2550
|
-
`],Xt([T({type:Object})],l.SwDirectory.prototype,"directory",2),Xt([P()],l.SwDirectory.prototype,"selectedAddress",2),Xt([P()],l.SwDirectory.prototype,"searchQuery",2),Xt([P()],l.SwDirectory.prototype,"addresses",2),Xt([P()],l.SwDirectory.prototype,"loading",2),Xt([P()],l.SwDirectory.prototype,"hasMore",2),Xt([P()],l.SwDirectory.prototype,"isAutoLoadingForSearch",2),l.SwDirectory=Xt([se("sw-directory")],l.SwDirectory);const
|
|
2550
|
+
`],Xt([T({type:Object})],l.SwDirectory.prototype,"directory",2),Xt([P()],l.SwDirectory.prototype,"selectedAddress",2),Xt([P()],l.SwDirectory.prototype,"searchQuery",2),Xt([P()],l.SwDirectory.prototype,"addresses",2),Xt([P()],l.SwDirectory.prototype,"loading",2),Xt([P()],l.SwDirectory.prototype,"hasMore",2),Xt([P()],l.SwDirectory.prototype,"isAutoLoadingForSearch",2),l.SwDirectory=Xt([se("sw-directory")],l.SwDirectory);const Rb=ie`
|
|
2551
2551
|
:host {
|
|
2552
2552
|
display: inline-flex;
|
|
2553
2553
|
flex-direction: column;
|
|
@@ -2779,7 +2779,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2779
2779
|
opacity: 0.4;
|
|
2780
2780
|
cursor: not-allowed;
|
|
2781
2781
|
}
|
|
2782
|
-
`;var
|
|
2782
|
+
`;var Pb=Object.defineProperty,Ob=Object.getOwnPropertyDescriptor,Je=(t,e,i,r)=>{for(var n=r>1?void 0:r?Ob(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&&Pb(e,i,n),n};const pn=W();l.SwDeviceSelector=class extends Z{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){pn.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){pn.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){pn.error("sw-device-selector: setSinkId failed",n)}e.addEventListener("ended",()=>this._stopTestTone());try{await e.play(),this._testingSpeaker=!0}catch(n){pn.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 k`
|
|
2783
2783
|
<div class="section">
|
|
2784
2784
|
<div class="section-header">
|
|
2785
2785
|
<sw-ui-icon name=${e} size="13"></sw-ui-icon>
|
|
@@ -2850,7 +2850,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=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=[at,
|
|
2853
|
+
`}},l.SwDeviceSelector.styles=[at,Rb],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",Je([T({type:Object})],l.SwDeviceSelector.prototype,"deviceController",2),Je([T({type:Boolean,reflect:!0,attribute:"show-preview"})],l.SwDeviceSelector.prototype,"showPreview",2),Je([P()],l.SwDeviceSelector.prototype,"_videoStream",2),Je([P()],l.SwDeviceSelector.prototype,"_audioStream",2),Je([P()],l.SwDeviceSelector.prototype,"_testingSpeaker",2),Je([P()],l.SwDeviceSelector.prototype,"_audioIn",2),Je([P()],l.SwDeviceSelector.prototype,"_videoIn",2),Je([P()],l.SwDeviceSelector.prototype,"_audioOut",2),Je([P()],l.SwDeviceSelector.prototype,"_selAudioIn",2),Je([P()],l.SwDeviceSelector.prototype,"_selVideoIn",2),Je([P()],l.SwDeviceSelector.prototype,"_selAudioOut",2),Je([P()],l.SwDeviceSelector.prototype,"_open",2),l.SwDeviceSelector=Je([se("sw-device-selector")],l.SwDeviceSelector);var _b=Object.defineProperty,Lb=Object.getOwnPropertyDescriptor,yr=(t,e,i,r)=>{for(var n=r>1?void 0:r?Lb(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};l.SwUiDropup=class extends Z{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 k`
|
|
2854
2854
|
<button
|
|
2855
2855
|
part="item"
|
|
2856
2856
|
@click=${()=>this.onSelect(r)}
|
|
@@ -2903,7 +2903,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
2903
2903
|
button:hover {
|
|
2904
2904
|
background: var(--bg-surface);
|
|
2905
2905
|
}
|
|
2906
|
-
`],yr([T({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),yr([T({type:Boolean,reflect:!0})],l.SwUiDropup.prototype,"open",2),yr([T({attribute:!1})],l.SwUiDropup.prototype,"anchor",2),yr([Lr(".menu")],l.SwUiDropup.prototype,"_menu",2),l.SwUiDropup=yr([se("sw-ui-dropup")],l.SwUiDropup);var
|
|
2906
|
+
`],yr([T({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),yr([T({type:Boolean,reflect:!0})],l.SwUiDropup.prototype,"open",2),yr([T({attribute:!1})],l.SwUiDropup.prototype,"anchor",2),yr([Lr(".menu")],l.SwUiDropup.prototype,"_menu",2),l.SwUiDropup=yr([se("sw-ui-dropup")],l.SwUiDropup);var Fb=Object.defineProperty,Ub=Object.getOwnPropertyDescriptor,Hi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Ub(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.SwUiSplitButton=class extends Z{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=k`
|
|
2907
2907
|
<slot name="active" @slotchange=${this._updateNamedSlots}></slot>
|
|
2908
2908
|
<slot name="inactive" @slotchange=${this._updateNamedSlots}></slot>
|
|
2909
2909
|
${this._hasNamedSlots?j:k`<slot></slot>`}
|
|
@@ -3000,7 +3000,7 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
3000
3000
|
.solo:hover {
|
|
3001
3001
|
background: var(--sw-split-button-bg-hover, var(--bg-surface-raised));
|
|
3002
3002
|
}
|
|
3003
|
-
`],
|
|
3003
|
+
`],Hi([T({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),Hi([T({reflect:!0})],l.SwUiSplitButton.prototype,"active",2),Hi([P()],l.SwUiSplitButton.prototype,"_dropupOpen",2),Hi([P()],l.SwUiSplitButton.prototype,"_hasNamedSlots",2),Hi([Lr("#chevron-zone")],l.SwUiSplitButton.prototype,"_chevronBtn",2),l.SwUiSplitButton=Hi([se("sw-ui-split-button")],l.SwUiSplitButton);var Nb=Object.defineProperty,Bb=Object.getOwnPropertyDescriptor,Oe=(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&&Nb(e,i,n),n};l.SwUiControlBar=class extends Z{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 k`
|
|
3004
3004
|
<div class="bar" part="bar">
|
|
3005
3005
|
<!-- SignalWire logo -->
|
|
3006
3006
|
<span class="sw-logo" part="logo" aria-hidden="true">
|
|
@@ -3180,18 +3180,18 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
3180
3180
|
padding: 2px 4px;
|
|
3181
3181
|
}
|
|
3182
3182
|
}
|
|
3183
|
-
`,Oe([T({type:Boolean,reflect:!0,attribute:"mic-muted"})],l.SwUiControlBar.prototype,"micMuted",2),Oe([T({type:Boolean,reflect:!0,attribute:"camera-muted"})],l.SwUiControlBar.prototype,"cameraMuted",2),Oe([T({type:Boolean,reflect:!0,attribute:"speaker-muted"})],l.SwUiControlBar.prototype,"speakerMuted",2),Oe([T({type:Boolean,reflect:!0})],l.SwUiControlBar.prototype,"fullscreen",2),Oe([T({type:Boolean,reflect:!0,attribute:"screen-sharing"})],l.SwUiControlBar.prototype,"screenSharing",2),Oe([T({type:Boolean,reflect:!0,attribute:"hand-raised"})],l.SwUiControlBar.prototype,"handRaised",2),Oe([T({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwUiControlBar.prototype,"transcriptActive",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwUiControlBar.prototype,"showScreenShare",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwUiControlBar.prototype,"showHandRaise",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwUiControlBar.prototype,"showTranscript",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwUiControlBar.prototype,"showSettings",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwUiControlBar.prototype,"showFullscreen",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"micDevices",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"cameraDevices",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"speakerDevices",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"settingsItems",2),l.SwUiControlBar=Oe([se("sw-ui-control-bar")],l.SwUiControlBar);const
|
|
3183
|
+
`,Oe([T({type:Boolean,reflect:!0,attribute:"mic-muted"})],l.SwUiControlBar.prototype,"micMuted",2),Oe([T({type:Boolean,reflect:!0,attribute:"camera-muted"})],l.SwUiControlBar.prototype,"cameraMuted",2),Oe([T({type:Boolean,reflect:!0,attribute:"speaker-muted"})],l.SwUiControlBar.prototype,"speakerMuted",2),Oe([T({type:Boolean,reflect:!0})],l.SwUiControlBar.prototype,"fullscreen",2),Oe([T({type:Boolean,reflect:!0,attribute:"screen-sharing"})],l.SwUiControlBar.prototype,"screenSharing",2),Oe([T({type:Boolean,reflect:!0,attribute:"hand-raised"})],l.SwUiControlBar.prototype,"handRaised",2),Oe([T({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwUiControlBar.prototype,"transcriptActive",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwUiControlBar.prototype,"showScreenShare",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwUiControlBar.prototype,"showHandRaise",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwUiControlBar.prototype,"showTranscript",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwUiControlBar.prototype,"showSettings",2),Oe([T({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwUiControlBar.prototype,"showFullscreen",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"micDevices",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"cameraDevices",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"speakerDevices",2),Oe([T({attribute:!1})],l.SwUiControlBar.prototype,"settingsItems",2),l.SwUiControlBar=Oe([se("sw-ui-control-bar")],l.SwUiControlBar);const zb="4.0.0-rc.0",Vb=!0;(()=>{if(typeof window<"u"){const t=new CustomEvent("signalwire:web-components:ready",{detail:{version:"4.0.0-rc.0"}});window.dispatchEvent(t)}})();var Cs={exports:{}},Wc;function Hb(){return Wc||(Wc=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,I;switch(o.util.type(b)){case"Object":if(I=o.util.objId(b),y[I])return y[I];A={},y[I]=A;for(var N in b)b.hasOwnProperty(N)&&(A[N]=f(b[N],y));return A;case"Array":return I=o.util.objId(b),y[I]?y[I]:(A=[],y[I]=A,b.forEach(function(K,_){A[_]=f(K,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 I=f.classList;if(I.contains(b))return!0;if(I.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 I=A[f],N={};for(var K in I)if(I.hasOwnProperty(K)){if(K==b)for(var _ in y)y.hasOwnProperty(_)&&(N[_]=y[_]);y.hasOwnProperty(K)||(N[K]=I[K])}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,I){I=I||{};var N=o.util.objId;for(var K in b)if(b.hasOwnProperty(K)){y.call(b,K,b[K],A||K);var _=b[K],re=o.util.type(_);re==="Object"&&!I[N(_)]?(I[N(_)]=!0,f(_,y,null,I)):re==="Array"&&!I[N(_)]&&(I[N(_)]=!0,f(_,y,K,I))}}},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 I=0,N;N=A.elements[I++];)o.highlightElement(N,b===!0,A.callback)},highlightElement:function(f,b,y){var A=o.util.getLanguage(f),I=o.languages[A];o.util.setLanguage(f,A);var N=f.parentElement;N&&N.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(N,A);var K=f.textContent,_={element:f,language:A,grammar:I,code:K};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 I=new p;return v(I,I.head,f),h(f,I,b,I.head,0),R(I)},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,I;I=y[A++];)I(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 I={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(I.classes,N):I.classes.push(N)),o.hooks.run("wrap",I);var K="";for(var _ in I.attributes)K+=" "+_+'="'+(I.attributes[_]||"").replace(/"/g,""")+'"';return"<"+I.tag+' class="'+I.classes.join(" ")+'"'+K+">"+I.content+"</"+I.tag+">"};function u(f,b,y,A){f.lastIndex=b;var I=f.exec(y);if(I&&A&&I[1]){var N=I[1].length;I.index+=N,I[0]=I[0].slice(N)}return I}function h(f,b,y,A,I,N){for(var K in y)if(!(!y.hasOwnProperty(K)||!y[K])){var _=y[K];_=Array.isArray(_)?_:[_];for(var re=0;re<_.length;++re){if(N&&N.cause==K+","+re)return;var F=_[re],ee=F.inside,lt=!!F.lookbehind,Mt=!!F.greedy,xr=F.alias;if(Mt&&!F.pattern.global){var Ds=F.pattern.toString().match(/[imsuy]*$/)[0];F.pattern=RegExp(F.pattern.source,Ds+"g")}for(var yn=F.pattern||F,Ce=A.next,ut=I;Ce!==b.tail&&!(N&&ut>=N.reach);ut+=Ce.value.length,Ce=Ce.next){var Nt=Ce.value;if(b.length>f.length)return;if(!(Nt instanceof c)){var he=1,Xe;if(Mt){if(Xe=u(yn,ut,f,lt),!Xe||Xe.index>=f.length)break;var Rt=Xe.index,Ae=Xe.index+Xe[0].length,St=ut;for(St+=Ce.value.length;Rt>=St;)Ce=Ce.next,St+=Ce.value.length;if(St-=Ce.value.length,ut=St,Ce.value instanceof c)continue;for(var ne=Ce;ne!==b.tail&&(St<Ae||typeof ne.value=="string");ne=ne.next)he++,St+=ne.value.length;he--,Nt=f.slice(ut,St),Xe.index-=ut}else if(Xe=u(yn,0,Nt,lt),!Xe)continue;var Rt=Xe.index,Bt=Xe[0],dt=Nt.slice(0,Rt),Ir=Nt.slice(Rt+Bt.length),vi=ut+Nt.length;N&&vi>N.reach&&(N.reach=vi);var bi=Ce.prev;dt&&(bi=v(b,bi,dt),ut+=dt.length),m(b,bi,he);var wn=new c(K,ee?o.tokenize(Bt,ee):Bt,xr,Bt);if(Ce=v(b,bi,wn),Ir&&v(b,Ce,Ir),he>1){var Ct={cause:K+","+re,reach:vi};h(f,b,y,Ce.prev,ut,Ct),N&&Ct.reach>N.reach&&(N.reach=Ct.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,I={value:y,prev:b,next:A};return b.next=I,A.prev=I,f.length++,I}function m(f,b,y){for(var A=b.next,I=0;I<y&&A!==f.tail;I++)A=A.next;b.next=A,A.prev=b,f.length-=I}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,I=b.immediateClose;r.postMessage(o.highlight(A,o.languages[y],y)),I&&r.close()},!1)),o;var C=o.util.currentScript();C&&(o.filename=C.src,C.hasAttribute("data-manual")&&(o.manual=!0));function D(){o.manual||o.highlightAll()}if(!o.manual){var x=document.readyState;x==="loading"||x==="interactive"&&C&&C.defer?document.addEventListener("DOMContentLoaded",D):window.requestAnimationFrame?window.requestAnimationFrame(D):window.setTimeout(D,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,D){return"✖ Error "+C+" while fetching file: "+D},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,D,x){var f=new XMLHttpRequest;f.open("GET",C,!0),f.onreadystatechange=function(){f.readyState==4&&(f.status<400&&f.responseText?D(f.responseText):f.status>=400?x(n(f.status,f.statusText)):x(s))},f.send(null)}function m(C){var D=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(C||"");if(D){var x=Number(D[1]),f=D[2],b=D[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 D=C.element;if(D.matches(p)){C.code="",D.setAttribute(o,c);var x=D.appendChild(document.createElement("CODE"));x.textContent=r;var f=D.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(D,b);var A=i.plugins.autoloader;A&&A.loadLanguages(b),v(f,function(I){D.setAttribute(o,u);var N=m(D.getAttribute("data-range"));if(N){var K=I.split(/\r\n?|\n/g),_=N[0],re=N[1]==null?K.length:N[1];_<0&&(_+=K.length),_=Math.max(0,Math.min(_-1,K.length)),re<0&&(re+=K.length),re=Math.max(0,Math.min(re,K.length)),I=K.slice(_,re).join(`
|
|
3191
|
-
`),D.hasAttribute("data-start")||D.setAttribute("data-start",String(_+1))}x.textContent=I,i.highlightElement(x)},function(I){D.setAttribute(o,h),x.textContent=I})}}),i.plugins.fileHighlight={highlight:function(D){for(var x=(D||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 Hc=Nb();const Bb=ve({__proto__:null,default:qr(Hc)},[Hc]);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 zb=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var jc={},Wc;function Vb(){return Wc||(Wc=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)),jc}var Gc=Vb();const Hb=ve({__proto__:null,default:qr(Gc)},[Gc]);var qc={},Xc;function jb(){return Xc||(Xc=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),qc}var Yc=jb();const Wb=ve({__proto__:null,default:qr(Yc)},[Yc]);(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 Kc=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 Gb=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 qb=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 Xb=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 Yb=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 D=C.content[1],x=C.content[3];if(D&&x&&D.type==="code-language"&&x.type==="code-block"&&typeof D.content=="string"){var f=D.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 D=t.languages[p];if(D)h.content=t.highlight(u(h.content),D,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 Kb=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function pn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let Yt=pn();function Zc(t){Yt=t}const Qc=/[&<>"']/,Zb=new RegExp(Qc.source,"g"),Jc=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Qb=new RegExp(Jc.source,"g"),Jb={"&":"&","<":"<",">":">",'"':""","'":"'"},$c=t=>Jb[t];function Je(t,e){if(e){if(Qc.test(t))return t.replace(Zb,$c)}else if(Jc.test(t))return t.replace(Qb,$c);return t}const $b=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function em(t){return t.replace($b,(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 tm=/(^|[^\[])\^/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(tm,"$1"),t=t.replace(r,n),i),getRegex:()=>new RegExp(t,e)};return i}function el(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}const gn={exec:()=>null};function tl(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 fn(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 im(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 il(t,e,i,r){const n=e.href,s=e.title?Je(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:Je(a)}}function rm(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 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 Ms=F.pattern.toString().match(/[imsuy]*$/)[0];F.pattern=RegExp(F.pattern.source,Ms+"g")}for(var wn=F.pattern||F,Ce=A.next,ut=D;Ce!==b.tail&&!(N&&ut>=N.reach);ut+=Ce.value.length,Ce=Ce.next){var Nt=Ce.value;if(b.length>f.length)return;if(!(Nt 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,Ae=Ye.index+Ye[0].length,St=ut;for(St+=Ce.value.length;Rt>=St;)Ce=Ce.next,St+=Ce.value.length;if(St-=Ce.value.length,ut=St,Ce.value instanceof c)continue;for(var ne=Ce;ne!==b.tail&&(St<Ae||typeof ne.value=="string");ne=ne.next)he++,St+=ne.value.length;he--,Nt=f.slice(ut,St),Ye.index-=ut}else if(Ye=u(wn,0,Nt,lt),!Ye)continue;var Rt=Ye.index,Bt=Ye[0],dt=Nt.slice(0,Rt),Dr=Nt.slice(Rt+Bt.length),bi=ut+Nt.length;N&&bi>N.reach&&(N.reach=bi);var mi=Ce.prev;dt&&(mi=v(b,mi,dt),ut+=dt.length),m(b,mi,he);var Sn=new c(Y,ee?o.tokenize(Bt,ee):Bt,xr,Bt);if(Ce=v(b,mi,Sn),Dr&&v(b,Ce,Dr),he>1){var Ct={cause:Y+","+re,reach:bi};h(f,b,y,Ce.prev,ut,Ct),N&&Ct.reach>N.reach&&(N.reach=Ct.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 Ja<"u"&&(Ja.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)}})()})(Cs)),Cs.exports}var Gc=Hb();const jb=ve({__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 Wb=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var qc={},Xc;function Gb(){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=Gb();const qb=ve({__proto__:null,default:qr(Yc)},[Yc]);var Kc={},Zc;function Xb(){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=Xb();const Yb=ve({__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 Kb=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 Zb=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 Qb=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 Jb=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 $b=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 Yt=gn();function $c(t){Yt=t}const el=/[&<>"']/,em=new RegExp(el.source,"g"),tl=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,tm=new RegExp(tl.source,"g"),im={"&":"&","<":"<",">":">",'"':""","'":"'"},il=t=>im[t];function $e(t,e){if(e){if(el.test(t))return t.replace(em,il)}else if(tl.test(t))return t.replace(tm,il);return t}const rm=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function nm(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 sm=/(^|[^\[])\^/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(sm,"$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 am(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 om(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 wr{constructor(e){ce(this,"options");ce(this,"rules");ce(this,"lexer");this.options=e||Yt}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:
|
|
3194
|
-
`)}}}fences(e){const i=this.rules.block.fences.exec(e);if(i){const r=i[0],n=
|
|
3193
|
+
`)}class wr{constructor(e){ce(this,"options");ce(this,"rules");ce(this,"lexer");this.options=e||Yt}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:vn(r,`
|
|
3194
|
+
`)}}}fences(e){const i=this.rules.block.fences.exec(e);if(i){const r=i[0],n=om(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=vn(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=vn(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
3196
|
`,1)[0].replace(/^\t+/,x=>" ".repeat(3*x.length)),v=e.split(`
|
|
3197
3197
|
`,1)[0],m=0;this.options.pedantic?(m=2,c=p.trimStart()):(m=i[2].search(/[^ ]/),m=m>4?1:m,c=p.slice(m),m+=i[1].length);let R=!1;if(!p&&/^ *$/.test(v)&&(o+=v+`
|
|
@@ -3199,10 +3199,10 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
3199
3199
|
`,1)[0];if(v=A,this.options.pedantic&&(v=v.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),b.test(v)||y.test(v)||x.test(v)||f.test(e))break;if(v.search(/[^ ]/)>=m||!v.trim())c+=`
|
|
3200
3200
|
`+v.slice(m);else{if(R||p.search(/[^ ]/)>=4||b.test(p)||y.test(p)||f.test(p))break;c+=`
|
|
3201
3201
|
`+v}!R&&!v.trim()&&(R=!0),o+=A+`
|
|
3202
|
-
`,e=e.substring(A.length+1),p=v.slice(m)}}s.loose||(u?s.loose=!0:/\n *\n *$/.test(o)&&(u=!0));let C=null,
|
|
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",U.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const M={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:
|
|
3202
|
+
`,e=e.substring(A.length+1),p=v.slice(m)}}s.loose||(u?s.loose=!0:/\n *\n *$/.test(o)&&(u=!0));let C=null,I;this.options.gfm&&(C=/^\[[ xX]\] /.exec(c),C&&(I=C[0]!=="[ ] ",c=c.replace(/^\[[ xX]\] +/,""))),s.items.push({type:"list_item",raw:o,task:!!C,checked:I,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(m=>m.type==="space"),v=p.length>0&&p.some(m=>/\n.*\n/.test(m.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:nl(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]=nl(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:$e(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=vn(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{const a=am(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)),sl(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 sl(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,m=e.slice(0,a+n.index+v+c);if(Math.min(a,c)%2){const C=m.slice(1,-1);return{type:"em",raw:m,text:C,tokens:this.lexer.inlineTokens(C)}}const R=m.slice(2,-2);return{type:"strong",raw:m,text:R,tokens:this.lexer.inlineTokens(R)}}}}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=$e(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=$e(i[1]),n="mailto:"+r):(r=$e(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=$e(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=$e(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=$e(i[0]),{type:"text",raw:i[0],text:r}}}}const U={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:fn,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]+/};U._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/,U._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,U.def=J(U.def).replace("label",U._label).replace("title",U._title).getRegex(),U.bullet=/(?:[*+-]|\d{1,9}[.)])/,U.listItemStart=J(/^( *)(bull) */).replace("bull",U.bullet).getRegex(),U.list=J(U.list).replace(/bull/g,U.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+U.def.source+")").getRegex(),U._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",U._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,U.html=J(U.html,"i").replace("comment",U._comment).replace("tag",U._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),U.lheading=J(U.lheading).replace(/bull/g,U.bullet).getRegex(),U.paragraph=J(U._paragraph).replace("hr",U.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",U._tag).getRegex(),U.blockquote=J(U.blockquote).replace("paragraph",U.paragraph).getRegex(),U.normal={...U},U.gfm={...U.normal,table:"^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},U.gfm.table=J(U.gfm.table).replace("hr",U.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",U._tag).getRegex(),U.gfm.paragraph=J(U._paragraph).replace("hr",U.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",U.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",U._tag).getRegex(),U.pedantic={...U.normal,html:J(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",U._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:fn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:J(U.normal._paragraph).replace("hr",U.hr).replace("heading",` *#{1,6} *[^
|
|
3205
|
+
]`).replace("lheading",U.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const M={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:fn,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:fn,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^((?![*_])[\spunctuation])/};M._punctuation="\\p{P}$+<=>`^|~",M.punctuation=J(M.punctuation,"u").replace(/punctuation/g,M._punctuation).getRegex(),M.blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,M.anyPunctuation=/\\[punct]/g,M._escapes=/\\([punct])/g,M._comment=J(U._comment).replace("(?:-->|$)","-->").getRegex(),M.emStrong.lDelim=J(M.emStrong.lDelim,"u").replace(/punct/g,M._punctuation).getRegex(),M.emStrong.rDelimAst=J(M.emStrong.rDelimAst,"gu").replace(/punct/g,M._punctuation).getRegex(),M.emStrong.rDelimUnd=J(M.emStrong.rDelimUnd,"gu").replace(/punct/g,M._punctuation).getRegex(),M.anyPunctuation=J(M.anyPunctuation,"gu").replace(/punct/g,M._punctuation).getRegex(),M._escapes=J(M._escapes,"gu").replace(/punct/g,M._punctuation).getRegex(),M._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,M._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])?)+(?![-_])/,M.autolink=J(M.autolink).replace("scheme",M._scheme).replace("email",M._email).getRegex(),M._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,M.tag=J(M.tag).replace("comment",M._comment).replace("attribute",M._attribute).getRegex(),M._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,M._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,M._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,M.link=J(M.link).replace("label",M._label).replace("href",M._href).replace("title",M._title).getRegex(),M.reflink=J(M.reflink).replace("label",M._label).replace("ref",U._label).getRegex(),M.nolink=J(M.nolink).replace("ref",U._label).getRegex(),M.reflinkSearch=J(M.reflinkSearch,"g").replace("reflink",M.reflink).replace("nolink",M.nolink).getRegex(),M.normal={...M},M.pedantic={...M.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:J(/^!?\[(label)\]\((.*?)\)/).replace("label",M._label).getRegex(),reflink:J(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",M._label).getRegex()},M.gfm={...M.normal,escape:J(M.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.!#$%&'*+\/=?_`{\|}~-]+@)))/},M.gfm.url=J(M.gfm.url,"i").replace("email",M.gfm._extended_email).getRegex(),M.breaks={...M.gfm,br:J(M.br).replace("{2,}","*").getRegex(),text:J(M.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};class mt{constructor(e){ce(this,"tokens");ce(this,"options");ce(this,"state");ce(this,"tokenizer");ce(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Yt,this.options.tokenizer=this.options.tokenizer||new wr,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:U.normal,inline:M.normal};this.options.pedantic?(i.block=U.pedantic,i.inline=M.pedantic):this.options.gfm&&(i.block=U.gfm,this.options.breaks?i.inline=M.breaks:i.inline=M.gfm),this.tokenizer.rules=i}static get rules(){return{block:U,inline:M}}static lex(e,i){return new mt(i).lex(e)}static lexInline(e,i){return new mt(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+=`
|
|
@@ -3213,8 +3213,8 @@ var SignalWireUI=(function(l){"use strict";var Gm=Object.defineProperty;var zl=l
|
|
|
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
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(m=>{v=m.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 Sr{constructor(e){ce(this,"options");this.options=e||Yt}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-'
|
|
3217
|
-
`:"<pre><code>"+(r?e
|
|
3216
|
+
`,n?'<pre><code class="language-'+$e(n)+'">'+(r?e:$e(e,!0))+`</code></pre>
|
|
3217
|
+
`:"<pre><code>"+(r?e:$e(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,8 @@ ${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>"+Je(r.message+"",!0)+"</pre>";return i?Promise.resolve(n):n}if(i)return Promise.reject(r);throw r}};const pi=new rl;function $(t,e){return pi.parse(t,e)}$.options=$.setOptions=function(t){return pi.setOptions(t),$.defaults=pi.defaults,Zc($.defaults),$},$.getDefaults=pn,$.defaults=Yt,$.use=function(...t){return pi.use(...t),$.defaults=pi.defaults,Zc($.defaults),$},$.walkTokens=function(t,e){return pi.walkTokens(t,e)},$.parseInline=pi.parseInline,$.Parser=yt,$.parser=yt.parse,$.Renderer=Sr,$.TextRenderer=vn,$.Lexer=mt,$.lexer=mt.lex,$.Tokenizer=wr,$.Hooks=Hi,$.parse=$;const nm=$.options,sm=$.setOptions,am=$.use,om=$.walkTokens,cm=$.parseInline,lm=$,um=yt.parse,dm=mt.lex,hm=Object.freeze(Object.defineProperty({__proto__:null,Hooks:Hi,Lexer:mt,Marked:rl,Parser:yt,Renderer:Sr,TextRenderer:vn,Tokenizer:wr,get defaults(){return Yt},getDefaults:pn,lexer:dm,marked:$,options:nm,parse:lm,parseInline:cm,parser:um,setOptions:sm,use:am,walkTokens:om},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:nl,setPrototypeOf:sl,isFrozen:pm,getPrototypeOf:gm,getOwnPropertyDescriptor:fm}=Object;let{freeze:Ve,seal:ct,create:ji}=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),vm=ye(Array.prototype.lastIndexOf),al=ye(Array.prototype.pop),Ar=ye(Array.prototype.push),bm=ye(Array.prototype.splice),He=Array.isArray,Tr=ye(String.prototype.toLowerCase),Ts=ye(String.prototype.toString),ol=ye(String.prototype.match),Wi=ye(String.prototype.replace),cl=ye(String.prototype.indexOf),mm=ye(String.prototype.trim),ym=ye(Number.prototype.toString),wm=ye(Boolean.prototype.toString),ll=typeof BigInt>"u"?null:ye(BigInt.prototype.toString),ul=typeof Symbol>"u"?null:ye(Symbol.prototype.toString),ge=ye(Object.prototype.hasOwnProperty),Er=ye(Object.prototype.toString),_e=ye(RegExp.prototype.test),bn=Sm(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 Sm(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(sl&&sl(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&&(pm(e)||(e[r]=s),n=s)}t[n]=!0}return t}function Cm(t){for(let e=0;e<t.length;e++)ge(t,e)||(t[e]=null);return t}function qe(t){const e=ji(null);for(const[i,r]of nl(t))ge(t,i)&&(He(r)?e[i]=Cm(r):r&&typeof r=="object"&&r.constructor===Object?e[i]=qe(r):e[i]=r);return e}function Am(t){switch(typeof t){case"string":return t;case"number":return ym(t);case"boolean":return wm(t);case"bigint":return ll?ll(t):"0";case"symbol":return ul?ul(t):"Symbol()";case"undefined":return Er(t);case"function":case"object":{if(t===null)return Er(t);const e=t,i=Gi(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 Gi(t,e){for(;t!==null;){const r=fm(t,e);if(r){if(r.get)return ye(r.get);if(typeof r.value=="function")return ye(r.value)}t=gm(t)}function i(){return null}return i}function Tm(t){try{return _e(t,""),!0}catch{return!1}}const dl=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"]),Em=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"]),km=Ve(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),hl=Ve(["#text"]),pl=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"]),Is=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"]),gl=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"]),mn=Ve(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),xm=ct(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Im=ct(/<%[\w\W]*|[\w\W]*%>/gm),Dm=ct(/\$\{[\w\W]*/gm),Mm=ct(/^data-[\-\w.\u00B7-\uFFFF]+$/),Rm=ct(/^aria-[\-\w]+$/),fl=ct(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Pm=ct(/^(?:\w+script|data):/i),Om=ct(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),vl=ct(/^html$/i),_m=ct(/^[a-z][.\w]*(-[.\w]+)+$/i);var bl=Object.freeze({__proto__:null,ARIA_ATTR:Rm,ATTR_WHITESPACE:Om,CUSTOM_ELEMENT:_m,DATA_ATTR:Mm,DOCTYPE_NAME:vl,ERB_EXPR:Im,IS_ALLOWED_URI:fl,IS_SCRIPT_OR_DATA:Pm,MUSTACHE_EXPR:xm,TMPLIT_EXPR:Dm});const kr={element:1,text:3,progressingInstruction:7,comment:8,document:9},Lm=function(){return typeof window>"u"?null:window},Fm=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}},ml=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function yl(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Lm();const e=H=>yl(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=Gi(R,"cloneNode"),D=Gi(R,"remove"),x=Gi(R,"nextSibling"),f=Gi(R,"childNodes"),b=Gi(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:I,createNodeIterator:N,createDocumentFragment:K,getElementsByTagName:_}=i,{importNode:re}=r;let F=ml();e.isSupported=typeof nl=="function"&&typeof b=="function"&&I&&I.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:ee,ERB_EXPR:lt,TMPLIT_EXPR:Mt,DATA_ATTR:xr,ARIA_ATTR:Ds,IS_SCRIPT_OR_DATA:yn,ATTR_WHITESPACE:Ce,CUSTOM_ELEMENT:ut}=bl;let{IS_ALLOWED_URI:Nt}=bl,he=null;const Xe=q({},[...dl,...Es,...ks,...xs,...hl]);let Ae=null;const St=q({},[...pl,...Is,...gl,...mn]);let ne=Object.seal(ji(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,Bt=null;const dt=Object.seal(ji(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Ir=!0,vi=!0,bi=!1,wn=!0,Ct=!1,Dr=!0,mi=!1,Ms=!1,Rs=!1,qi=!1,Sn=!1,Cn=!1,Cl=!0,Al=!1;const Tl="user-content-";let Ps=!0,Mr=!1,Xi={},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 El=null;const kl=q({},["audio","video","img","source","image","track"]);let _s=null;const xl=q({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),An="http://www.w3.org/1998/Math/MathML",Tn="http://www.w3.org/2000/svg",Ot="http://www.w3.org/1999/xhtml";let Yi=Ot,Ls=!1,Fs=null;const Nm=q({},[An,Tn,Ot],Ts);let Us=q({},["mi","mo","mn","ms","mtext"]),Ns=q({},["annotation-xml"]);const Bm=q({},["title","style","font","a","script"]);let Rr=null;const zm=["application/xhtml+xml","text/html"],Vm="text/html";let Te=null,Ki=null;const Hm=i.createElement("form"),Il=function(d){return d instanceof RegExp||d instanceof Function},Bs=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Ki&&Ki===d)return;(!d||typeof d!="object")&&(d={}),d=qe(d),Rr=zm.indexOf(d.PARSER_MEDIA_TYPE)===-1?Vm:d.PARSER_MEDIA_TYPE,Te=Rr==="application/xhtml+xml"?Ts:Tr,he=ge(d,"ALLOWED_TAGS")&&He(d.ALLOWED_TAGS)?q({},d.ALLOWED_TAGS,Te):Xe,Ae=ge(d,"ALLOWED_ATTR")&&He(d.ALLOWED_ATTR)?q({},d.ALLOWED_ATTR,Te):St,Fs=ge(d,"ALLOWED_NAMESPACES")&&He(d.ALLOWED_NAMESPACES)?q({},d.ALLOWED_NAMESPACES,Ts):Nm,_s=ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)?q(qe(xl),d.ADD_URI_SAFE_ATTR,Te):xl,El=ge(d,"ADD_DATA_URI_TAGS")&&He(d.ADD_DATA_URI_TAGS)?q(qe(kl),d.ADD_DATA_URI_TAGS,Te):kl,Pt=ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)?q({},d.FORBID_CONTENTS,Te):Os,Rt=ge(d,"FORBID_TAGS")&&He(d.FORBID_TAGS)?q({},d.FORBID_TAGS,Te):qe({}),Bt=ge(d,"FORBID_ATTR")&&He(d.FORBID_ATTR)?q({},d.FORBID_ATTR,Te):qe({}),Xi=ge(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?qe(d.USE_PROFILES):d.USE_PROFILES:!1,Ir=d.ALLOW_ARIA_ATTR!==!1,vi=d.ALLOW_DATA_ATTR!==!1,bi=d.ALLOW_UNKNOWN_PROTOCOLS||!1,wn=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ct=d.SAFE_FOR_TEMPLATES||!1,Dr=d.SAFE_FOR_XML!==!1,mi=d.WHOLE_DOCUMENT||!1,qi=d.RETURN_DOM||!1,Sn=d.RETURN_DOM_FRAGMENT||!1,Cn=d.RETURN_TRUSTED_TYPE||!1,Rs=d.FORCE_BODY||!1,Cl=d.SANITIZE_DOM!==!1,Al=d.SANITIZE_NAMED_PROPS||!1,Ps=d.KEEP_CONTENT!==!1,Mr=d.IN_PLACE||!1,Nt=Tm(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:fl,Yi=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"?qe(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"?qe(d.HTML_INTEGRATION_POINTS):q({},["annotation-xml"]);const S=ge(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?qe(d.CUSTOM_ELEMENT_HANDLING):ji(null);if(ne=ji(null),ge(S,"tagNameCheck")&&Il(S.tagNameCheck)&&(ne.tagNameCheck=S.tagNameCheck),ge(S,"attributeNameCheck")&&Il(S.attributeNameCheck)&&(ne.attributeNameCheck=S.attributeNameCheck),ge(S,"allowCustomizedBuiltInElements")&&typeof S.allowCustomizedBuiltInElements=="boolean"&&(ne.allowCustomizedBuiltInElements=S.allowCustomizedBuiltInElements),Ct&&(vi=!1),Sn&&(qi=!0),Xi&&(he=q({},hl),Ae=ji(null),Xi.html===!0&&(q(he,dl),q(Ae,pl)),Xi.svg===!0&&(q(he,Es),q(Ae,Is),q(Ae,mn)),Xi.svgFilters===!0&&(q(he,ks),q(Ae,Is),q(Ae,mn)),Xi.mathMl===!0&&(q(he,xs),q(Ae,gl),q(Ae,mn))),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===Xe&&(he=qe(he)),q(he,d.ADD_TAGS,Te))),ge(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?dt.attributeCheck=d.ADD_ATTR:He(d.ADD_ATTR)&&(Ae===St&&(Ae=qe(Ae)),q(Ae,d.ADD_ATTR,Te))),ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)&&q(_s,d.ADD_URI_SAFE_ATTR,Te),ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)&&(Pt===Os&&(Pt=qe(Pt)),q(Pt,d.FORBID_CONTENTS,Te)),ge(d,"ADD_FORBID_CONTENTS")&&He(d.ADD_FORBID_CONTENTS)&&(Pt===Os&&(Pt=qe(Pt)),q(Pt,d.ADD_FORBID_CONTENTS,Te)),Ps&&(he["#text"]=!0),mi&&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 bn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw bn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');y=d.TRUSTED_TYPES_POLICY,A=y.createHTML("")}else y===void 0&&(y=Fm(m,n)),y!==null&&typeof A=="string"&&(A=y.createHTML(""));Ve&&Ve(d),Ki=d},Dl=q({},[...Es,...ks,...Em]),Ml=q({},[...xs,...km]),jm=function(d){let S=b(d);(!S||!S.tagName)&&(S={namespaceURI:Yi,tagName:"template"});const O=Tr(d.tagName),de=Tr(S.tagName);return Fs[d.namespaceURI]?d.namespaceURI===Tn?S.namespaceURI===Ot?O==="svg":S.namespaceURI===An?O==="svg"&&(de==="annotation-xml"||Us[de]):!!Dl[O]:d.namespaceURI===An?S.namespaceURI===Ot?O==="math":S.namespaceURI===Tn?O==="math"&&Ns[de]:!!Ml[O]:d.namespaceURI===Ot?S.namespaceURI===Tn&&!Ns[de]||S.namespaceURI===An&&!Us[de]?!1:!Ml[O]&&(Bm[O]||!Dl[O]):!!(Rr==="application/xhtml+xml"&&Fs[d.namespaceURI]):!1},At=function(d){Ar(e.removed,{element:d});try{b(d).removeChild(d)}catch{D(d)}},yi=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(qi||Sn)try{At(S)}catch{}else try{S.setAttribute(d,"")}catch{}},Rl=function(d){let S=null,O=null;if(Rs)d="<remove></remove>"+d;else{const we=ol(d,/^[\r\n\t ]+/);O=we&&we[0]}Rr==="application/xhtml+xml"&&Yi===Ot&&(d='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+d+"</body></html>");const de=y?y.createHTML(d):d;if(Yi===Ot)try{S=new v().parseFromString(de,Rr)}catch{}if(!S||!S.documentElement){S=I.createDocument(Yi,"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),Yi===Ot?_.call(S,mi?"html":"body")[0]:mi?S.documentElement:Fe},Pl=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 zt(H,d,S){Cr(H,O=>{O.call(e,d,S,Ki)})}const Ol=function(d){let S=null;if(zt(F.beforeSanitizeElements,d,null),zs(d))return At(d),!0;const O=Te(d.nodeName);if(zt(F.uponSanitizeElement,d,{tagName:O,allowedTags:he}),Dr&&d.hasChildNodes()&&!Vs(d.firstElementChild)&&_e(/<[/\w!]/g,d.innerHTML)&&_e(/<[/\w!]/g,d.textContent)||Dr&&d.namespaceURI===Ot&&O==="style"&&Vs(d.firstElementChild)||d.nodeType===kr.progressingInstruction||Dr&&d.nodeType===kr.comment&&_e(/<[/\w]/g,d.data))return At(d),!0;if(Rt[O]||!(dt.tagCheck instanceof Function&&dt.tagCheck(O))&&!he[O]){if(!Rt[O]&&Ll(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 Ye=we-1;Ye>=0;--Ye){const ht=C(Fe[Ye],!0);de.insertBefore(ht,x(d))}}}return At(d),!0}return d instanceof c&&!jm(d)||(O==="noscript"||O==="noembed"||O==="noframes")&&_e(/<\/no(script|embed|frames)/i,d.innerHTML)?(At(d),!0):(Ct&&d.nodeType===kr.text&&(S=d.textContent,Cr([ee,lt,Mt],de=>{S=Wi(S,de," ")}),d.textContent!==S&&(Ar(e.removed,{element:d.cloneNode()}),d.textContent=S)),zt(F.afterSanitizeElements,d,null),!1)},_l=function(d,S,O){if(Bt[S]||Cl&&(S==="id"||S==="name")&&(O in i||O in Hm))return!1;if(!(vi&&!Bt[S]&&_e(xr,S))){if(!(Ir&&_e(Ds,S))){if(!(dt.attributeCheck instanceof Function&&dt.attributeCheck(S,d))){if(!Ae[S]||Bt[S]){if(!(Ll(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(Nt,Wi(O,Ce,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&d!=="script"&&cl(O,"data:")===0&&El[d])){if(!(bi&&!_e(yn,Wi(O,Ce,"")))){if(O)return!1}}}}}}}return!0},Wm=q({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Ll=function(d){return!Wm[Tr(d)]&&_e(ut,d)},Fl=function(d){zt(F.beforeSanitizeAttributes,d,null);const{attributes:S}=d;if(!S||zs(d))return;const O={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ae,forceKeepAttr:void 0};let de=S.length;for(;de--;){const Fe=S[de],{name:we,namespaceURI:Ye,value:ht}=Fe,Tt=Te(we),Hs=ht;let Ie=we==="value"?Hs:mm(Hs);if(O.attrName=Tt,O.attrValue=Ie,O.keepAttr=!0,O.forceKeepAttr=void 0,zt(F.uponSanitizeAttribute,d,O),Ie=O.attrValue,Al&&(Tt==="id"||Tt==="name")&&cl(Ie,Tl)!==0&&(yi(we,d),Ie=Tl+Ie),Dr&&_e(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ie)){yi(we,d);continue}if(Tt==="attributename"&&ol(Ie,"href")){yi(we,d);continue}if(O.forceKeepAttr)continue;if(!O.keepAttr){yi(we,d);continue}if(!wn&&_e(/\/>/i,Ie)){yi(we,d);continue}Ct&&Cr([ee,lt,Mt],Bl=>{Ie=Wi(Ie,Bl," ")});const Nl=Te(d.nodeName);if(!_l(Nl,Tt,Ie)){yi(we,d);continue}if(y&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ye)switch(m.getAttributeType(Nl,Tt)){case"TrustedHTML":{Ie=y.createHTML(Ie);break}case"TrustedScriptURL":{Ie=y.createScriptURL(Ie);break}}if(Ie!==Hs)try{Ye?d.setAttributeNS(Ye,we,Ie):d.setAttribute(we,Ie),zs(d)?At(d):al(e.removed)}catch{yi(we,d)}}zt(F.afterSanitizeAttributes,d,null)},Ul=function(d){let S=null;const O=Pl(d);for(zt(F.beforeSanitizeShadowDOM,d,null);S=O.nextNode();)zt(F.uponSanitizeShadowNode,S,null),Ol(S),Fl(S),S.content instanceof s&&Ul(S.content);zt(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=Am(H),typeof H!="string"))throw bn("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 Tt=Te(ht);if(!he[Tt]||Rt[Tt])throw bn("root node is forbidden and cannot be sanitized in-place")}}else if(H instanceof o)S=Rl("<!---->"),O=S.ownerDocument.importNode(H,!0),O.nodeType===kr.element&&O.nodeName==="BODY"||O.nodeName==="HTML"?S=O:S.appendChild(O);else{if(!qi&&!Ct&&!mi&&H.indexOf("<")===-1)return y&&Cn?y.createHTML(H):H;if(S=Rl(H),!S)return qi?null:Cn?A:""}S&&Rs&&At(S.firstChild);const we=Pl(Mr?H:S);for(;de=we.nextNode();)Ol(de),Fl(de),de.content instanceof s&&Ul(de.content);if(Mr)return H;if(qi){if(Ct){S.normalize();let ht=S.innerHTML;Cr([ee,lt,Mt],Tt=>{ht=Wi(ht,Tt," ")}),S.innerHTML=ht}if(Sn)for(Fe=K.call(S.ownerDocument);S.firstChild;)Fe.appendChild(S.firstChild);else Fe=S;return(Ae.shadowroot||Ae.shadowrootmode)&&(Fe=re.call(r,Fe,!0)),Fe}let Ye=mi?S.outerHTML:S.innerHTML;return mi&&he["!doctype"]&&S.ownerDocument&&S.ownerDocument.doctype&&S.ownerDocument.doctype.name&&_e(vl,S.ownerDocument.doctype.name)&&(Ye="<!DOCTYPE "+S.ownerDocument.doctype.name+`>
|
|
3236
|
-
`+
|
|
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=rl(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=rl(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 bn{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 yt{constructor(e){ce(this,"options");ce(this,"renderer");ce(this,"textRenderer");this.options=e||Yt,this.options.renderer=this.options.renderer||new Sr,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new bn}static parse(e,i){return new yt(i).parse(e)}static parseInline(e,i){return new yt(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,nm(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],m=v.checked,R=v.task;let C="";if(v.task){const I=this.renderer.checkbox(!!m);u?v.tokens.length>0&&v.tokens[0].type==="paragraph"?(v.tokens[0].text=I+" "+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=I+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:I+" "}):C+=I+" "}C+=this.parse(v.tokens,u),h+=this.renderer.listitem(C,R,!!m)}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 ji{constructor(e){ce(this,"options");this.options=e||Yt}preprocess(e){return e}postprocess(e){return e}}ce(ji,"passThroughHooks",new Set(["preprocess","postprocess"]));class al{constructor(...e){Wl(this,vi);ce(this,"defaults",gn());ce(this,"options",this.setOptions);ce(this,"parse",kn(this,vi,Ws).call(this,mt.lex,yt.parse));ce(this,"parseInline",kn(this,vi,Ws).call(this,mt.lexInline,yt.parseInline));ce(this,"Parser",yt);ce(this,"Renderer",Sr);ce(this,"TextRenderer",bn);ce(this,"Lexer",mt);ce(this,"Tokenizer",wr);ce(this,"Hooks",ji);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 Sr(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 wr(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 ji;for(const a in r.hooks){const o=r.hooks[a],c=a,u=s[c];ji.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 mt.lex(e,i??this.defaults)}parser(e,i){return yt.parse(e,i??this.defaults)}}vi=new WeakSet,Ws=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=kn(this,vi,ql).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)}}},ql=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>"+$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=Yt,$.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=yt,$.parser=yt.parse,$.Renderer=Sr,$.TextRenderer=bn,$.Lexer=mt,$.lexer=mt.lex,$.Tokenizer=wr,$.Hooks=ji,$.parse=$;const cm=$.options,lm=$.setOptions,um=$.use,dm=$.walkTokens,hm=$.parseInline,pm=$,gm=yt.parse,fm=mt.lex,vm=Object.freeze(Object.defineProperty({__proto__:null,Hooks:ji,Lexer:mt,Marked:al,Parser:yt,Renderer:Sr,TextRenderer:bn,Tokenizer:wr,get defaults(){return Yt},getDefaults:gn,lexer:fm,marked:$,options:cm,parse:pm,parseInline:hm,parser:gm,setOptions:lm,use:um,walkTokens:dm},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:bm,getPrototypeOf:mm,getOwnPropertyDescriptor:ym}=Object;let{freeze:Ve,seal:ct,create:Wi}=Object,{apply:As,construct:Ts}=typeof Reflect<"u"&&Reflect;Ve||(Ve=function(e){return e}),ct||(ct=function(e){return e}),As||(As=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)}),Ts||(Ts=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),wm=ye(Array.prototype.lastIndexOf),ll=ye(Array.prototype.pop),Ar=ye(Array.prototype.push),Sm=ye(Array.prototype.splice),He=Array.isArray,Tr=ye(String.prototype.toLowerCase),Es=ye(String.prototype.toString),ul=ye(String.prototype.match),Gi=ye(String.prototype.replace),dl=ye(String.prototype.indexOf),Cm=ye(String.prototype.trim),Am=ye(Number.prototype.toString),Tm=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=Em(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 As(t,e,r)}}function Em(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return Ts(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&&(bm(e)||(e[r]=s),n=s)}t[n]=!0}return t}function km(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]=km(r):r&&typeof r=="object"&&r.constructor===Object?e[i]=Xe(r):e[i]=r);return e}function xm(t){switch(typeof t){case"string":return t;case"number":return Am(t);case"boolean":return Tm(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=ym(t,e);if(r){if(r.get)return ye(r.get);if(typeof r.value=="function")return ye(r.value)}t=mm(t)}function i(){return null}return i}function Dm(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"]),ks=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"]),xs=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"]),Im=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"]),Ds=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"]),Mm=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"]),Is=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"]),Rm=ct(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Pm=ct(/<%[\w\W]*|[\w\W]*%>/gm),Om=ct(/\$\{[\w\W]*/gm),_m=ct(/^data-[\-\w.\u00B7-\uFFFF]+$/),Lm=ct(/^aria-[\-\w]+$/),ml=ct(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Fm=ct(/^(?:\w+script|data):/i),Um=ct(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),yl=ct(/^html$/i),Nm=ct(/^[a-z][.\w]*(-[.\w]+)+$/i);var wl=Object.freeze({__proto__:null,ARIA_ATTR:Lm,ATTR_WHITESPACE:Um,CUSTOM_ELEMENT:Nm,DATA_ATTR:_m,DOCTYPE_NAME:yl,ERB_EXPR:Pm,IS_ALLOWED_URI:ml,IS_SCRIPT_OR_DATA:Fm,MUSTACHE_EXPR:Rm,TMPLIT_EXPR:Om});const kr={element:1,text:3,progressingInstruction:7,comment:8,document:9},Bm=function(){return typeof window>"u"?null:window},zm=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]:Bm();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:Ms,IS_SCRIPT_OR_DATA:wn,ATTR_WHITESPACE:Ce,CUSTOM_ELEMENT:ut}=wl;let{IS_ALLOWED_URI:Nt}=wl,he=null;const Ye=q({},[...gl,...ks,...xs,...Ds,...fl]);let Ae=null;const St=q({},[...vl,...Is,...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,Bt=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,Ct=!1,Ir=!0,yi=!1,Rs=!1,Ps=!1,Xi=!1,Cn=!1,An=!1,El=!0,kl=!1;const xl="user-content-";let Os=!0,Mr=!1,Yi={},Pt=null;const _s=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 Ls=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,Fs=!1,Us=null;const Hm=q({},[Tn,En,Ot],Es);let Ns=q({},["mi","mo","mn","ms","mtext"]),Bs=q({},["annotation-xml"]);const jm=q({},["title","style","font","a","script"]);let Rr=null;const Wm=["application/xhtml+xml","text/html"],Gm="text/html";let Te=null,Zi=null;const qm=i.createElement("form"),Rl=function(d){return d instanceof RegExp||d instanceof Function},zs=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=Wm.indexOf(d.PARSER_MEDIA_TYPE)===-1?Gm:d.PARSER_MEDIA_TYPE,Te=Rr==="application/xhtml+xml"?Es:Tr,he=ge(d,"ALLOWED_TAGS")&&He(d.ALLOWED_TAGS)?q({},d.ALLOWED_TAGS,Te):Ye,Ae=ge(d,"ALLOWED_ATTR")&&He(d.ALLOWED_ATTR)?q({},d.ALLOWED_ATTR,Te):St,Us=ge(d,"ALLOWED_NAMESPACES")&&He(d.ALLOWED_NAMESPACES)?q({},d.ALLOWED_NAMESPACES,Es):Hm,Ls=ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)?q(Xe(Ml),d.ADD_URI_SAFE_ATTR,Te):Ml,Dl=ge(d,"ADD_DATA_URI_TAGS")&&He(d.ADD_DATA_URI_TAGS)?q(Xe(Il),d.ADD_DATA_URI_TAGS,Te):Il,Pt=ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)?q({},d.FORBID_CONTENTS,Te):_s,Rt=ge(d,"FORBID_TAGS")&&He(d.FORBID_TAGS)?q({},d.FORBID_TAGS,Te):Xe({}),Bt=ge(d,"FORBID_ATTR")&&He(d.FORBID_ATTR)?q({},d.FORBID_ATTR,Te):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,Ct=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,Ps=d.FORCE_BODY||!1,El=d.SANITIZE_DOM!==!1,kl=d.SANITIZE_NAMED_PROPS||!1,Os=d.KEEP_CONTENT!==!1,Mr=d.IN_PLACE||!1,Nt=Dm(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:ml,Ki=typeof d.NAMESPACE=="string"?d.NAMESPACE:Ot,Ns=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"]),Bs=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),Ct&&(bi=!1),Cn&&(Xi=!0),Yi&&(he=q({},fl),Ae=Wi(null),Yi.html===!0&&(q(he,gl),q(Ae,vl)),Yi.svg===!0&&(q(he,ks),q(Ae,Is),q(Ae,yn)),Yi.svgFilters===!0&&(q(he,xs),q(Ae,Is),q(Ae,yn)),Yi.mathMl===!0&&(q(he,Ds),q(Ae,bl),q(Ae,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,Te))),ge(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?dt.attributeCheck=d.ADD_ATTR:He(d.ADD_ATTR)&&(Ae===St&&(Ae=Xe(Ae)),q(Ae,d.ADD_ATTR,Te))),ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)&&q(Ls,d.ADD_URI_SAFE_ATTR,Te),ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)&&(Pt===_s&&(Pt=Xe(Pt)),q(Pt,d.FORBID_CONTENTS,Te)),ge(d,"ADD_FORBID_CONTENTS")&&He(d.ADD_FORBID_CONTENTS)&&(Pt===_s&&(Pt=Xe(Pt)),q(Pt,d.ADD_FORBID_CONTENTS,Te)),Os&&(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=zm(m,n)),y!==null&&typeof A=="string"&&(A=y.createHTML(""));Ve&&Ve(d),Zi=d},Pl=q({},[...ks,...xs,...Im]),Ol=q({},[...Ds,...Mm]),Xm=function(d){let S=b(d);(!S||!S.tagName)&&(S={namespaceURI:Ki,tagName:"template"});const O=Tr(d.tagName),de=Tr(S.tagName);return Us[d.namespaceURI]?d.namespaceURI===En?S.namespaceURI===Ot?O==="svg":S.namespaceURI===Tn?O==="svg"&&(de==="annotation-xml"||Ns[de]):!!Pl[O]:d.namespaceURI===Tn?S.namespaceURI===Ot?O==="math":S.namespaceURI===En?O==="math"&&Bs[de]:!!Ol[O]:d.namespaceURI===Ot?S.namespaceURI===En&&!Bs[de]||S.namespaceURI===Tn&&!Ns[de]?!1:!Ol[O]&&(jm[O]||!Pl[O]):!!(Rr==="application/xhtml+xml"&&Us[d.namespaceURI]):!1},At=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{At(S)}catch{}else try{S.setAttribute(d,"")}catch{}},_l=function(d){let S=null,O=null;if(Ps)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=Fs?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)},Vs=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")},Hs=function(d){return typeof o=="function"&&d instanceof o};function zt(H,d,S){Cr(H,O=>{O.call(e,d,S,Zi)})}const Fl=function(d){let S=null;if(zt(F.beforeSanitizeElements,d,null),Vs(d))return At(d),!0;const O=Te(d.nodeName);if(zt(F.uponSanitizeElement,d,{tagName:O,allowedTags:he}),Ir&&d.hasChildNodes()&&!Hs(d.firstElementChild)&&_e(/<[/\w!]/g,d.innerHTML)&&_e(/<[/\w!]/g,d.textContent)||Ir&&d.namespaceURI===Ot&&O==="style"&&Hs(d.firstElementChild)||d.nodeType===kr.progressingInstruction||Ir&&d.nodeType===kr.comment&&_e(/<[/\w]/g,d.data))return At(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(Os&&!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 At(d),!0}return d instanceof c&&!Xm(d)||(O==="noscript"||O==="noembed"||O==="noframes")&&_e(/<\/no(script|embed|frames)/i,d.innerHTML)?(At(d),!0):(Ct&&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)),zt(F.afterSanitizeElements,d,null),!1)},Ul=function(d,S,O){if(Bt[S]||El&&(S==="id"||S==="name")&&(O in i||O in qm))return!1;if(!(bi&&!Bt[S]&&_e(xr,S))){if(!(Dr&&_e(Ms,S))){if(!(dt.attributeCheck instanceof Function&&dt.attributeCheck(S,d))){if(!Ae[S]||Bt[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(!Ls[S]){if(!_e(Nt,Gi(O,Ce,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&d!=="script"&&dl(O,"data:")===0&&Dl[d])){if(!(mi&&!_e(wn,Gi(O,Ce,"")))){if(O)return!1}}}}}}}return!0},Ym=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!Ym[Tr(d)]&&_e(ut,d)},Bl=function(d){zt(F.beforeSanitizeAttributes,d,null);const{attributes:S}=d;if(!S||Vs(d))return;const O={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ae,forceKeepAttr:void 0};let de=S.length;for(;de--;){const Fe=S[de],{name:we,namespaceURI:Ke,value:ht}=Fe,Tt=Te(we),js=ht;let De=we==="value"?js:Cm(js);if(O.attrName=Tt,O.attrValue=De,O.keepAttr=!0,O.forceKeepAttr=void 0,zt(F.uponSanitizeAttribute,d,O),De=O.attrValue,kl&&(Tt==="id"||Tt==="name")&&dl(De,xl)!==0&&(wi(we,d),De=xl+De),Ir&&_e(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,De)){wi(we,d);continue}if(Tt==="attributename"&&ul(De,"href")){wi(we,d);continue}if(O.forceKeepAttr)continue;if(!O.keepAttr){wi(we,d);continue}if(!Sn&&_e(/\/>/i,De)){wi(we,d);continue}Ct&&Cr([ee,lt,Mt],Hl=>{De=Gi(De,Hl," ")});const Vl=Te(d.nodeName);if(!Ul(Vl,Tt,De)){wi(we,d);continue}if(y&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ke)switch(m.getAttributeType(Vl,Tt)){case"TrustedHTML":{De=y.createHTML(De);break}case"TrustedScriptURL":{De=y.createScriptURL(De);break}}if(De!==js)try{Ke?d.setAttributeNS(Ke,we,De):d.setAttribute(we,De),Vs(d)?At(d):ll(e.removed)}catch{wi(we,d)}}zt(F.afterSanitizeAttributes,d,null)},zl=function(d){let S=null;const O=Ll(d);for(zt(F.beforeSanitizeShadowDOM,d,null);S=O.nextNode();)zt(F.uponSanitizeShadowNode,S,null),Fl(S),Bl(S),S.content instanceof s&&zl(S.content);zt(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(Fs=!H,Fs&&(H="<!-->"),typeof H!="string"&&!Hs(H)&&(H=xm(H),typeof H!="string"))throw mn("dirty is not a string, aborting");if(!e.isSupported)return H;if(Rs||zs(d),e.removed=[],typeof H=="string"&&(Mr=!1),Mr){const ht=H.nodeName;if(typeof ht=="string"){const Tt=Te(ht);if(!he[Tt]||Rt[Tt])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&&!Ct&&!yi&&H.indexOf("<")===-1)return y&&An?y.createHTML(H):H;if(S=_l(H),!S)return Xi?null:An?A:""}S&&Ps&&At(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(Ct){S.normalize();let ht=S.innerHTML;Cr([ee,lt,Mt],Tt=>{ht=Gi(ht,Tt," ")}),S.innerHTML=ht}if(Cn)for(Fe=Y.call(S.ownerDocument);S.firstChild;)Fe.appendChild(S.firstChild);else Fe=S;return(Ae.shadowroot||Ae.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),Ct&&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]:{};zs(H),Rs=!0},e.clearConfig=function(){Zi=null,Rs=!1},e.isValidAttribute=function(H,d,S){Zi||zs({});const O=Te(H),de=Te(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=wm(F[H],d);return S===-1?void 0:Sm(F[H],S,1)[0]}return ll(F[H])},e.removeHooks=function(H){F[H]=[]},e.removeAllHooks=function(){F=Sl()},e}var Vm=Cl();const Al=Object.freeze(Object.defineProperty({__proto__:null,default:Vm},Symbol.toStringTag,{value:"Module"}));return l.CallStateContextController=ms,l.ChatState=Dc,l.DevicesContextController=ys,l.EmbedTokenCredentialProvider=yc,l.IncomingCallController=ca,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=Vb,l.showPrompt=mr,l.transcriptContext=xc,l.useGoogleFont=un,l.version=zb,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l})({});
|
|
3237
3237
|
//# sourceMappingURL=signalwire-web-components-embed.iife.js.map
|