@signalwire/web-components 4.0.0-beta.12 → 4.0.0-beta.13
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/components/UI/controls/sw-ui-dialpad.d.ts +1 -1
- package/dist/components/UI/controls/sw-ui-dialpad.d.ts.map +1 -1
- package/dist/components/UI/controls/sw-ui-dialpad.js +9 -8
- package/dist/components/UI/controls/sw-ui-dialpad.js.map +1 -1
- package/dist/components/UI/controls/sw-ui-dropup.d.ts +1 -1
- package/dist/components/UI/controls/sw-ui-dropup.d.ts.map +1 -1
- package/dist/components/UI/controls/sw-ui-dropup.js +9 -8
- package/dist/components/UI/controls/sw-ui-dropup.js.map +1 -1
- package/dist/components/UI/controls/sw-ui-split-button.d.ts +1 -1
- package/dist/components/UI/controls/sw-ui-split-button.d.ts.map +1 -1
- package/dist/components/UI/controls/sw-ui-split-button.js +13 -12
- package/dist/components/UI/controls/sw-ui-split-button.js.map +1 -1
- package/dist/components/UI/host-reset.d.ts +16 -0
- package/dist/components/UI/host-reset.d.ts.map +1 -0
- package/dist/components/UI/host-reset.js +20 -0
- package/dist/components/UI/host-reset.js.map +1 -0
- package/dist/components/UI/sw-ui-alert.d.ts +1 -1
- package/dist/components/UI/sw-ui-alert.d.ts.map +1 -1
- package/dist/components/UI/sw-ui-alert.js +14 -13
- package/dist/components/UI/sw-ui-alert.js.map +1 -1
- package/dist/components/UI/sw-ui-transcript-view.d.ts +1 -1
- package/dist/components/UI/sw-ui-transcript-view.d.ts.map +1 -1
- package/dist/components/UI/sw-ui-transcript-view.js +6 -5
- package/dist/components/UI/sw-ui-transcript-view.js.map +1 -1
- package/dist/components/sw-call-media.d.ts +0 -9
- package/dist/components/sw-call-media.d.ts.map +1 -1
- package/dist/components/sw-call-media.js +60 -102
- package/dist/components/sw-call-media.js.map +1 -1
- package/dist/components/sw-call-status.d.ts +1 -1
- package/dist/components/sw-call-status.d.ts.map +1 -1
- package/dist/components/sw-call-status.js +6 -5
- package/dist/components/sw-call-status.js.map +1 -1
- package/dist/components/sw-call-widget/sw-call-widget.d.ts +1 -1
- package/dist/components/sw-call-widget/sw-call-widget.d.ts.map +1 -1
- package/dist/components/sw-call-widget/sw-call-widget.js +15 -14
- package/dist/components/sw-call-widget/sw-call-widget.js.map +1 -1
- package/dist/components/sw-click-to-call.d.ts +1 -1
- package/dist/components/sw-click-to-call.d.ts.map +1 -1
- package/dist/components/sw-click-to-call.js +9 -8
- package/dist/components/sw-click-to-call.js.map +1 -1
- package/dist/components/sw-device-selector/sw-device-selector.d.ts +1 -1
- package/dist/components/sw-device-selector/sw-device-selector.d.ts.map +1 -1
- package/dist/components/sw-device-selector/sw-device-selector.js +5 -4
- package/dist/components/sw-device-selector/sw-device-selector.js.map +1 -1
- package/dist/components/sw-directory.d.ts +1 -1
- package/dist/components/sw-directory.d.ts.map +1 -1
- package/dist/components/sw-directory.js +6 -5
- package/dist/components/sw-directory.js.map +1 -1
- package/dist/components/sw-participant-controls.d.ts +1 -1
- package/dist/components/sw-participant-controls.d.ts.map +1 -1
- package/dist/components/sw-participant-controls.js +6 -5
- package/dist/components/sw-participant-controls.js.map +1 -1
- package/dist/components/sw-participants.d.ts +1 -1
- package/dist/components/sw-participants.d.ts.map +1 -1
- package/dist/components/sw-participants.js +20 -19
- package/dist/components/sw-participants.js.map +1 -1
- package/dist/embed/signalwire-web-components-embed.iife.js +195 -182
- package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -1
- package/dist/embed/signalwire-web-components-embed.umd.cjs +195 -182
- package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -1
- package/dist/index.js +46 -46
- package/dist/node_modules/dompurify/dist/purify.es.js +692 -423
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -1
- package/dist/utils/video.js +6 -21
- package/dist/utils/video.js.map +1 -1
- package/package.json +5 -4
- package/dist/constants.js +0 -5
- package/dist/constants.js.map +0 -1
- package/dist/utils/debounce.js +0 -13
- package/dist/utils/debounce.js.map +0 -1
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
var SignalWireUI=(function(l){"use strict";var
|
|
1
|
+
var SignalWireUI=(function(l){"use strict";var Wy=Object.defineProperty;var fu=l=>{throw TypeError(l)};var Gy=(l,Ce,Ve)=>Ce in l?Wy(l,Ce,{enumerable:!0,configurable:!0,writable:!0,value:Ve}):l[Ce]=Ve;var pe=(l,Ce,Ve)=>Gy(l,typeof Ce!="symbol"?Ce+"":Ce,Ve),qy=(l,Ce,Ve)=>Ce.has(l)||fu("Cannot "+Ve);var vu=(l,Ce,Ve)=>Ce.has(l)?fu("Cannot add the same private member more than once"):Ce instanceof WeakSet?Ce.add(l):Ce.set(l,Ve);var Vn=(l,Ce,Ve)=>(qy(l,Ce,"access private method"),Ve);var ql,Xe,Ai,yt,Ti,da,mu;function Ce(t,e){for(var i=0;i<e.length;i++){const r=e[i];if(typeof r!="string"&&!Array.isArray(r)){for(const n in r)if(n!=="default"&&!(n in t)){const s=Object.getOwnPropertyDescriptor(r,n);s&&Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:()=>r[n]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}/**
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
-
*/const
|
|
5
|
+
*/const Ve=globalThis,Hn=Ve.ShadowRoot&&(Ve.ShadyCSS===void 0||Ve.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,jn=Symbol(),ha=new WeakMap;let pa=class{constructor(e,i,r){if(this._$cssResult$=!0,r!==jn)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(Hn&&e===void 0){const r=i!==void 0&&i.length===1;r&&(e=ha.get(i)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),r&&ha.set(i,e))}return e}toString(){return this.cssText}};const yu=t=>new pa(typeof t=="string"?t:t+"",void 0,jn),ae=(t,...e)=>{const i=t.length===1?t[0]:e.reduce(((r,n,s)=>r+(a=>{if(a._$cssResult$===!0)return a.cssText;if(typeof a=="number")return a;throw Error("Value passed to 'css' function must be a 'css' function result: "+a+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[s+1]),t[0]);return new pa(i,t,jn)},wu=(t,e)=>{if(Hn)t.adoptedStyleSheets=e.map((i=>i instanceof CSSStyleSheet?i:i.styleSheet));else for(const i of e){const r=document.createElement("style"),n=Ve.litNonce;n!==void 0&&r.setAttribute("nonce",n),r.textContent=i.cssText,t.appendChild(r)}},ga=Hn?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let i="";for(const r of e.cssRules)i+=r.cssText;return yu(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:Su,defineProperty:Cu,getOwnPropertyDescriptor:Au,getOwnPropertyNames:Tu,getOwnPropertySymbols:Eu,getPrototypeOf:ku}=Object,zt=globalThis,fa=zt.trustedTypes,xu=fa?fa.emptyScript:"",Wn=zt.reactiveElementPolyfillSupport,lr=(t,e)=>t,jr={toAttribute(t,e){switch(e){case Boolean:t=t?xu: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}},Gn=(t,e)=>!Su(t,e),va={attribute:!0,type:String,converter:jr,reflect:!1,useDefault:!1,hasChanged:Gn};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),zt.litPropertyMetadata??(zt.litPropertyMetadata=new WeakMap);let Ii=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??(this.l=[])).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,i=va){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&&Cu(this.prototype,e,n)}}static getPropertyDescriptor(e,i,r){const{get:n,set:s}=Au(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)??va}static _$Ei(){if(this.hasOwnProperty(lr("elementProperties")))return;const e=ku(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(lr("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(lr("properties"))){const i=this.properties,r=[...Tu(i),...Eu(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(ga(n))}else e!==void 0&&i.push(ga(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 wu(e,this.constructor.elementStyles),e}connectedCallback(){var e;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$EO)==null||e.forEach((i=>{var r;return(r=i.hostConnected)==null?void 0:r.call(i)}))}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$EO)==null||e.forEach((i=>{var r;return(r=i.hostDisconnected)==null?void 0:r.call(i)}))}attributeChangedCallback(e,i,r){this._$AK(e,r)}_$ET(e,i){var s;const r=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,r);if(n!==void 0&&r.reflect===!0){const a=(((s=r.converter)==null?void 0:s.toAttribute)!==void 0?r.converter:jr).toAttribute(i,r.type);this._$Em=e,a==null?this.removeAttribute(n):this.setAttribute(n,a),this._$Em=null}}_$AK(e,i){var s,a;const r=this.constructor,n=r._$Eh.get(e);if(n!==void 0&&this._$Em!==n){const o=r.getPropertyOptions(n),c=typeof o.converter=="function"?{fromAttribute:o.converter}:((s=o.converter)==null?void 0:s.fromAttribute)!==void 0?o.converter:jr;this._$Em=n;const u=c.fromAttribute(i,o.type);this[n]=u??((a=this._$Ej)==null?void 0:a.get(n))??u,this._$Em=null}}requestUpdate(e,i,r){var n;if(e!==void 0){const s=this.constructor,a=this[e];if(r??(r=s.getPropertyOptions(e)),!((r.hasChanged??Gn)(a,i)||r.useDefault&&r.reflect&&a===((n=this._$Ej)==null?void 0:n.get(e))&&!this.hasAttribute(s._$Eu(e,r))))return;this.C(e,i,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,i,{useDefault:r,reflect:n,wrapped:s},a){r&&!(this._$Ej??(this._$Ej=new Map)).has(e)&&(this._$Ej.set(e,a??i??this[e]),s!==!0||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||r||(i=void 0),this._$AL.set(e,i)),n===!0&&this._$Em!==e&&(this._$Eq??(this._$Eq=new Set)).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(i){Promise.reject(i)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var r;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[s,a]of this._$Ep)this[s]=a;this._$Ep=void 0}const n=this.constructor.elementProperties;if(n.size>0)for(const[s,a]of n){const{wrapped:o}=a,c=this[s];o!==!0||this._$AL.has(s)||c===void 0||this.C(s,void 0,a,c)}}let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),(r=this._$EO)==null||r.forEach((n=>{var s;return(s=n.hostUpdate)==null?void 0:s.call(n)})),this.update(i)):this._$EM()}catch(n){throw e=!1,this._$EM(),n}e&&this._$AE(i)}willUpdate(e){}_$AE(e){var i;(i=this._$EO)==null||i.forEach((r=>{var n;return(n=r.hostUpdated)==null?void 0:n.call(r)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&(this._$Eq=this._$Eq.forEach((i=>this._$ET(i,this[i])))),this._$EM()}updated(e){}firstUpdated(e){}};Ii.elementStyles=[],Ii.shadowRootOptions={mode:"open"},Ii[lr("elementProperties")]=new Map,Ii[lr("finalized")]=new Map,Wn==null||Wn({ReactiveElement:Ii}),(zt.reactiveElementVersions??(zt.reactiveElementVersions=[])).push("2.1.1");/**
|
|
10
10
|
* @license
|
|
11
11
|
* Copyright 2017 Google LLC
|
|
12
12
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
13
|
-
*/const
|
|
14
|
-
\f\r]
|
|
15
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),
|
|
13
|
+
*/const ur=globalThis,Wr=ur.trustedTypes,ba=Wr?Wr.createPolicy("lit-html",{createHTML:t=>t}):void 0,ma="$lit$",Vt=`lit$${Math.random().toFixed(9).slice(2)}$`,ya="?"+Vt,Du=`<${ya}>`,ni=document,dr=()=>ni.createComment(""),hr=t=>t===null||typeof t!="object"&&typeof t!="function",qn=Array.isArray,Iu=t=>qn(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Xn=`[
|
|
14
|
+
\f\r]`,pr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,wa=/-->/g,Sa=/>/g,si=RegExp(`>|${Xn}(?:([^\\s"'>=/]+)(${Xn}*=${Xn}*(?:[^
|
|
15
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Ca=/'/g,Aa=/"/g,Ta=/^(?:script|style|textarea|title)$/i,Mu=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),I=Mu(1),Ht=Symbol.for("lit-noChange"),W=Symbol.for("lit-nothing"),Ea=new WeakMap,ai=ni.createTreeWalker(ni,129);function ka(t,e){if(!qn(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return ba!==void 0?ba.createHTML(e):e}const Ru=(t,e)=>{const i=t.length-1,r=[];let n,s=e===2?"<svg>":e===3?"<math>":"",a=pr;for(let o=0;o<i;o++){const c=t[o];let u,h,p=-1,v=0;for(;v<c.length&&(a.lastIndex=v,h=a.exec(c),h!==null);)v=a.lastIndex,a===pr?h[1]==="!--"?a=wa:h[1]!==void 0?a=Sa:h[2]!==void 0?(Ta.test(h[2])&&(n=RegExp("</"+h[2],"g")),a=si):h[3]!==void 0&&(a=si):a===si?h[0]===">"?(a=n??pr,p=-1):h[1]===void 0?p=-2:(p=a.lastIndex-h[2].length,u=h[1],a=h[3]===void 0?si:h[3]==='"'?Aa:Ca):a===Aa||a===Ca?a=si:a===wa||a===Sa?a=pr:(a=si,n=void 0);const C=a===si&&t[o+1].startsWith("/>")?" ":"";s+=a===pr?c+Du:p>=0?(r.push(u),c.slice(0,p)+ma+c.slice(p)+Vt+C):c+Vt+(p===-2?o:C)}return[ka(t,s+(t[i]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),r]};class gr{constructor({strings:e,_$litType$:i},r){let n;this.parts=[];let s=0,a=0;const o=e.length-1,c=this.parts,[u,h]=Ru(e,i);if(this.el=gr.createElement(u,r),ai.currentNode=this.el.content,i===2||i===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(n=ai.nextNode())!==null&&c.length<o;){if(n.nodeType===1){if(n.hasAttributes())for(const p of n.getAttributeNames())if(p.endsWith(ma)){const v=h[a++],C=n.getAttribute(p).split(Vt),_=/([.?@])?(.*)/.exec(v);c.push({type:1,index:s,name:_[2],strings:C,ctor:_[1]==="."?_u:_[1]==="?"?Ou:_[1]==="@"?Lu:Gr}),n.removeAttribute(p)}else p.startsWith(Vt)&&(c.push({type:6,index:s}),n.removeAttribute(p));if(Ta.test(n.tagName)){const p=n.textContent.split(Vt),v=p.length-1;if(v>0){n.textContent=Wr?Wr.emptyScript:"";for(let C=0;C<v;C++)n.append(p[C],dr()),ai.nextNode(),c.push({type:2,index:++s});n.append(p[v],dr())}}}else if(n.nodeType===8)if(n.data===ya)c.push({type:2,index:s});else{let p=-1;for(;(p=n.data.indexOf(Vt,p+1))!==-1;)c.push({type:7,index:s}),p+=Vt.length-1}s++}}static createElement(e,i){const r=ni.createElement("template");return r.innerHTML=e,r}}function Mi(t,e,i=t,r){var a,o;if(e===Ht)return e;let n=r!==void 0?(a=i._$Co)==null?void 0:a[r]:i._$Cl;const s=hr(e)?void 0:e._$litDirective$;return(n==null?void 0:n.constructor)!==s&&((o=n==null?void 0:n._$AO)==null||o.call(n,!1),s===void 0?n=void 0:(n=new s(t),n._$AT(t,i,r)),r!==void 0?(i._$Co??(i._$Co=[]))[r]=n:i._$Cl=n),n!==void 0&&(e=Mi(t,n._$AS(t,e.values),n,r)),e}class Pu{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)??ni).importNode(i,!0);ai.currentNode=n;let s=ai.nextNode(),a=0,o=0,c=r[0];for(;c!==void 0;){if(a===c.index){let u;c.type===2?u=new fr(s,s.nextSibling,this,e):c.type===1?u=new c.ctor(s,c.name,c.strings,this,e):c.type===6&&(u=new Fu(s,this,e)),this._$AV.push(u),c=r[++o]}a!==(c==null?void 0:c.index)&&(s=ai.nextNode(),a++)}return ai.currentNode=ni,n}p(e){let i=0;for(const r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,i),i+=r.strings.length-2):r._$AI(e[i])),i++}}class fr{get _$AU(){var e;return((e=this._$AM)==null?void 0:e._$AU)??this._$Cv}constructor(e,i,r,n){this.type=2,this._$AH=W,this._$AN=void 0,this._$AA=e,this._$AB=i,this._$AM=r,this.options=n,this._$Cv=(n==null?void 0:n.isConnected)??!0}get parentNode(){let e=this._$AA.parentNode;const i=this._$AM;return i!==void 0&&(e==null?void 0:e.nodeType)===11&&(e=i.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,i=this){e=Mi(this,e,i),hr(e)?e===W||e==null||e===""?(this._$AH!==W&&this._$AR(),this._$AH=W):e!==this._$AH&&e!==Ht&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Iu(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==W&&hr(this._$AH)?this._$AA.nextSibling.data=e:this.T(ni.createTextNode(e)),this._$AH=e}$(e){var s;const{values:i,_$litType$:r}=e,n=typeof r=="number"?this._$AC(e):(r.el===void 0&&(r.el=gr.createElement(ka(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 Pu(n,this),o=a.u(this.options);a.p(i),this.T(o),this._$AH=a}}_$AC(e){let i=Ea.get(e.strings);return i===void 0&&Ea.set(e.strings,i=new gr(e)),i}k(e){qn(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let r,n=0;for(const s of e)n===i.length?i.push(r=new fr(this.O(dr()),this.O(dr()),this,this.options)):r=i[n],r._$AI(s),n++;n<i.length&&(this._$AR(r&&r._$AB.nextSibling,n),i.length=n)}_$AR(e=this._$AA.nextSibling,i){var r;for((r=this._$AP)==null?void 0:r.call(this,!1,!0,i);e!==this._$AB;){const n=e.nextSibling;e.remove(),e=n}}setConnected(e){var i;this._$AM===void 0&&(this._$Cv=e,(i=this._$AP)==null||i.call(this,e))}}class Gr{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,i,r,n,s){this.type=1,this._$AH=W,this._$AN=void 0,this.element=e,this.name=i,this._$AM=n,this.options=s,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=W}_$AI(e,i=this,r,n){const s=this.strings;let a=!1;if(s===void 0)e=Mi(this,e,i,0),a=!hr(e)||e!==this._$AH&&e!==Ht,a&&(this._$AH=e);else{const o=e;let c,u;for(e=s[0],c=0;c<s.length-1;c++)u=Mi(this,o[r+c],i,c),u===Ht&&(u=this._$AH[c]),a||(a=!hr(u)||u!==this._$AH[c]),u===W?e=W:e!==W&&(e+=(u??"")+s[c+1]),this._$AH[c]=u}a&&!n&&this.j(e)}j(e){e===W?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}}class _u extends Gr{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===W?void 0:e}}class Ou extends Gr{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==W)}}class Lu extends Gr{constructor(e,i,r,n,s){super(e,i,r,n,s),this.type=5}_$AI(e,i=this){if((e=Mi(this,e,i,0)??W)===Ht)return;const r=this._$AH,n=e===W&&r!==W||e.capture!==r.capture||e.once!==r.once||e.passive!==r.passive,s=e!==W&&(r===W||n);n&&this.element.removeEventListener(this.name,this,r),s&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var i;typeof this._$AH=="function"?this._$AH.call(((i=this.options)==null?void 0:i.host)??this.element,e):this._$AH.handleEvent(e)}}class Fu{constructor(e,i,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=i,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){Mi(this,e)}}const Yn=ur.litHtmlPolyfillSupport;Yn==null||Yn(gr,fr),(ur.litHtmlVersions??(ur.litHtmlVersions=[])).push("3.3.1");const Nu=(t,e,i)=>{const r=(i==null?void 0:i.renderBefore)??e;let n=r._$litPart$;if(n===void 0){const s=(i==null?void 0:i.renderBefore)??null;r._$litPart$=n=new fr(e.insertBefore(dr(),s),s,void 0,i??{})}return n._$AI(t),n};/**
|
|
16
16
|
* @license
|
|
17
17
|
* Copyright 2017 Google LLC
|
|
18
18
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
19
|
-
*/const
|
|
19
|
+
*/const oi=globalThis;let ee=class extends Ii{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var i;const e=super.createRenderRoot();return(i=this.renderOptions).renderBefore??(i.renderBefore=e.firstChild),e}update(e){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Nu(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 Ht}};ee._$litElement$=!0,ee.finalized=!0,(ql=oi.litElementHydrateSupport)==null||ql.call(oi,{LitElement:ee});const Kn=oi.litElementPolyfillSupport;Kn==null||Kn({LitElement:ee}),(oi.litElementVersions??(oi.litElementVersions=[])).push("4.2.1");/**
|
|
20
20
|
* @license
|
|
21
21
|
* Copyright 2017 Google LLC
|
|
22
22
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
23
|
-
*/const
|
|
23
|
+
*/const le=t=>(e,i)=>{i!==void 0?i.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};/**
|
|
24
24
|
* @license
|
|
25
25
|
* Copyright 2017 Google LLC
|
|
26
26
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
27
|
-
*/const
|
|
27
|
+
*/const Uu={attribute:!0,type:String,converter:jr,reflect:!1,hasChanged:Gn},Bu=(t=Uu,e,i)=>{const{kind:r,metadata:n}=i;let s=globalThis.litPropertyMetadata.get(n);if(s===void 0&&globalThis.litPropertyMetadata.set(n,s=new Map),r==="setter"&&((t=Object.create(t)).wrapped=!0),s.set(i.name,t),r==="accessor"){const{name:a}=i;return{set(o){const c=e.get.call(this);e.set.call(this,o),this.requestUpdate(a,c,t)},init(o){return o!==void 0&&this.C(a,void 0,t,o),o}}}if(r==="setter"){const{name:a}=i;return function(o){const c=this[a];e.call(this,o),this.requestUpdate(a,c,t)}}throw Error("Unsupported decorator location: "+r)};function E(t){return(e,i)=>typeof i=="object"?Bu(t,e,i):((r,n,s)=>{const a=n.hasOwnProperty(s);return n.constructor.createProperty(s,r),a?Object.getOwnPropertyDescriptor(n,s):void 0})(t,e,i)}/**
|
|
28
28
|
* @license
|
|
29
29
|
* Copyright 2017 Google LLC
|
|
30
30
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
31
|
-
*/function
|
|
31
|
+
*/function O(t){return E({...t,state:!0,attribute:!1})}/**
|
|
32
32
|
* @license
|
|
33
33
|
* Copyright 2017 Google LLC
|
|
34
34
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
35
|
-
*/const
|
|
35
|
+
*/const zu=(t,e,i)=>(i.configurable=!0,i.enumerable=!0,Reflect.decorate&&typeof e!="object"&&Object.defineProperty(t,e,i),i);/**
|
|
36
36
|
* @license
|
|
37
37
|
* Copyright 2017 Google LLC
|
|
38
38
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
39
|
-
*/function
|
|
39
|
+
*/function qr(t,e){return(i,r,n)=>{const s=a=>{var o;return((o=a.renderRoot)==null?void 0:o.querySelector(t))??null};return zu(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 xa=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 Xy(t){return t}/**
|
|
48
48
|
* @license
|
|
49
49
|
* Copyright 2021 Google LLC
|
|
50
50
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
51
|
-
*/let
|
|
51
|
+
*/let Da=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 xa(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 Vu{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 Hu=class extends Event{constructor(e,i){super("context-provider",{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=i}},Zn=class extends Vu{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 xa(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 Hu(this.context,this.host))}};/**
|
|
60
60
|
* @license
|
|
61
61
|
* Copyright 2022 Google LLC
|
|
62
62
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
63
|
-
*/function
|
|
63
|
+
*/function nt({context:t,subscribe:e}){return(i,r)=>{typeof r=="object"?r.addInitializer((function(){new Da(this,{context:t,callback:n=>{i.set.call(this,n)},subscribe:e})})):i.constructor.addInitializer((n=>{new Da(n,{context:t,callback:s=>{n[r]=s},subscribe:e})}))}}const pt="sw-call-state";class Ia{constructor(e){this._subscription=null,this._seenCallIds=new Set,this._callback=null,e.addController(this)}hostConnected(){}hostDisconnected(){this.disconnect()}set onIncomingCall(e){this._callback=e}connect(e){this.disconnect(),this._subscription=e.subscribe(i=>{var r;for(const n of i)this._seenCallIds.has(n.id)||(this._seenCallIds.add(n.id),(r=this._callback)==null||r.call(this,{call:n,callerName:n.fromName,callerNumber:n.from}))})}disconnect(){var e;(e=this._subscription)==null||e.unsubscribe(),this._subscription=null,this._seenCallIds.clear()}}const vr="sw-devices";function Xr(t,e){t.srcObject=e}function Ma(t){t.srcObject&&(t.srcObject=null)}var Qn=function(t,e){return Qn=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])},Qn(t,e)};function Ke(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");Qn(t,e);function i(){this.constructor=t}t.prototype=e===null?Object.create(e):(i.prototype=e.prototype,new i)}function ju(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 Ra(t,e){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,n,s,a=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return a.next=o(0),a.throw=o(1),a.return=o(2),typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function o(u){return function(h){return c([u,h])}}function c(u){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(r=1,n&&(s=u[0]&2?n.return:u[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,u[1])).done)return s;switch(n=0,s&&(u=[u[0]&2,s.value]),u[0]){case 0:case 1:s=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,n=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(u[0]===6||u[0]===2)){i=0;continue}if(u[0]===3&&(!s||u[1]>s[0]&&u[1]<s[3])){i.label=u[1];break}if(u[0]===6&&i.label<s[1]){i.label=s[1],s=u;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(u);break}s[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(h){u=[6,h],n=0}finally{r=s=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}function Ri(t){var e=typeof Symbol=="function"&&Symbol.iterator,i=e&&t[e],r=0;if(i)return i.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function gt(t,e){var i=typeof Symbol=="function"&&t[Symbol.iterator];if(!i)return t;var r=i.call(t),n,s=[],a;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)s.push(n.value)}catch(o){a={error:o}}finally{try{n&&!n.done&&(i=r.return)&&i.call(r)}finally{if(a)throw a.error}}return s}function ft(t,e,i){if(i||arguments.length===2)for(var r=0,n=e.length,s;r<n;r++)(s||!(r in e))&&(s||(s=Array.prototype.slice.call(e,0,r)),s[r]=e[r]);return t.concat(s||Array.prototype.slice.call(e))}function Pi(t){return this instanceof Pi?(this.v=t,this):new Pi(t)}function Wu(t,e,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=i.apply(t,e||[]),n,s=[];return n=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),o("next"),o("throw"),o("return",a),n[Symbol.asyncIterator]=function(){return this},n;function a(C){return function(_){return Promise.resolve(_).then(C,p)}}function o(C,_){r[C]&&(n[C]=function(A){return new Promise(function(R,D){s.push([C,A,R,D])>1||c(C,A)})},_&&(n[C]=_(n[C])))}function c(C,_){try{u(r[C](_))}catch(A){v(s[0][3],A)}}function u(C){C.value instanceof Pi?Promise.resolve(C.value.v).then(h,p):v(s[0][2],C)}function h(C){c("next",C)}function p(C){c("throw",C)}function v(C,_){C(_),s.shift(),s.length&&c(s[0][0],s[0][1])}}function Gu(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],i;return e?e.call(t):(t=typeof Ri=="function"?Ri(t):t[Symbol.iterator](),i={},r("next"),r("throw"),r("return"),i[Symbol.asyncIterator]=function(){return this},i);function r(s){i[s]=t[s]&&function(a){return new Promise(function(o,c){a=t[s](a),n(o,c,a.done,a.value)})}}function n(s,a,o,c){Promise.resolve(c).then(function(u){s({value:u,done:o})},a)}}typeof SuppressedError=="function"&&SuppressedError;function be(t){return typeof t=="function"}function Yr(t){var e=function(r){Error.call(r),r.stack=new Error().stack},i=t(e);return i.prototype=Object.create(Error.prototype),i.prototype.constructor=i,i}var Jn=Yr(function(t){return function(i){t(this),this.message=i?i.length+` errors occurred during unsubscription:
|
|
64
64
|
`+i.map(function(r,n){return n+1+") "+r.toString()}).join(`
|
|
65
|
-
`):"",this.name="UnsubscriptionError",this.errors=i}});function Ur(t,e){if(t){var i=t.indexOf(e);0<=i&&t.splice(i,1)}}var Ai=(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=Si(a),c=o.next();!c.done;c=o.next()){var u=c.value;u.remove(this)}}catch(y){e={error:y}}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(y){s=y instanceof Ln?y.errors:[y]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var f=Si(p),m=f.next();!m.done;m=f.next()){var R=m.value;try{ha(R)}catch(y){s=s??[],y instanceof Ln?s=gt(gt([],pt(s)),pt(y.errors)):s.push(y)}}}catch(y){r={error:y}}finally{try{m&&!m.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}}if(s)throw new Ln(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)&&Ur(i,e)},t.prototype.remove=function(e){var i=this._finalizers;i&&Ur(i,e),e instanceof t&&e._removeParent(this)},t.EMPTY=(function(){var e=new t;return e.closed=!0,e})(),t})(),ua=Ai.EMPTY;function da(t){return t instanceof Ai||t&&"closed"in t&&pe(t.remove)&&pe(t.add)&&pe(t.unsubscribe)}function ha(t){pe(t)?t():t.unsubscribe()}var Su={Promise:void 0},Cu={setTimeout:function(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];return setTimeout.apply(void 0,gt([t,e],pt(i)))},clearTimeout:function(t){return clearTimeout(t)},delegate:void 0};function pa(t){Cu.setTimeout(function(){throw t})}function rr(){}function Nr(t){t()}var Fn=(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=Eu,r}return e.create=function(i,r,n){return new Ti(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})(Ai),Au=(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){Br(r)}},t.prototype.error=function(e){var i=this.partialObserver;if(i.error)try{i.error(e)}catch(r){Br(r)}else Br(e)},t.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(i){Br(i)}},t})(),Ti=(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 Au(a),s}return e})(Fn);function Br(t){pa(t)}function Tu(t){throw t}var Eu={closed:!0,next:rr,error:Tu,complete:rr},Un=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function jt(t){return t}function zr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return ga(t)}function ga(t){return t.length===0?jt: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=xu(e)?e:new Ti(e,i,r);return Nr(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 Ti({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[Un]=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??Su.Promise)!==null&&e!==void 0?e:Promise}function ku(t){return t&&pe(t.next)&&pe(t.error)&&pe(t.complete)}function xu(t){return t&&t instanceof Fn||ku(t)&&da(t)}function Du(t){return pe(t==null?void 0:t.lift)}function le(t){return function(e){if(Du(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 Iu(t,e,i,r,n)}var Iu=(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})(Fn),va={schedule:function(t){var e=requestAnimationFrame,i=cancelAnimationFrame,r=e(function(n){i=void 0,t(n)});return new Ai(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,gt([],pt(t)))},cancelAnimationFrame:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return cancelAnimationFrame.apply(void 0,gt([],pt(t)))},delegate:void 0},Mu=Fr(function(t){return function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),Ei=(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 Mu},e.prototype.next=function(i){var r=this;Nr(function(){var n,s;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var a=Si(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;Nr(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;Nr(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 Ai(function(){r.currentObservers=null,Ur(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})(Ei),Ru=(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})(Ei),Nn={now:function(){return(Nn.delegate||Date).now()},delegate:void 0},Bn=(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=Nn);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})(Ei),Pu=(function(t){We(e,t);function e(i,r){return t.call(this)||this}return e.prototype.schedule=function(i,r){return this},e})(Ai),ma={setInterval:function(t,e){for(var i=[],r=2;r<arguments.length;r++)i[r-2]=arguments[r];return setInterval.apply(void 0,gt([t,e],pt(i)))},clearInterval:function(t){return clearInterval(t)},delegate:void 0},zn=(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,Ur(s,this),r!=null&&(this.id=this.recycleAsyncId(n,r,null)),this.delay=null,t.prototype.unsubscribe.call(this)}},e})(Pu),Ou=1,Vn,Hn={};function ya(t){return t in Hn?(delete Hn[t],!0):!1}var wa={setImmediate:function(t){var e=Ou++;return Hn[e]=!0,Vn||(Vn=Promise.resolve()),Vn.then(function(){return ya(e)&&t()}),e},clearImmediate:function(t){ya(t)}},_u=wa.setImmediate,Lu=wa.clearImmediate,Sa={setImmediate:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return _u.apply(void 0,gt([],pt(t)))},clearImmediate:function(t){return Lu(t)},delegate:void 0},Fu=(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})(zn),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=Nn.now,t})(),jn=(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),Uu=(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})(jn),Aa=new Uu(Fu),nr=new jn(zn),Nu=nr,Bu=(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})(zn),zu=(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})(jn),Ta=new zu(Bu),Jt=new be(function(t){return t.complete()});function Ea(t){return t&&pe(t.schedule)}function Wn(t){return t[t.length-1]}function ka(t){return pe(Wn(t))?t.pop():void 0}function sr(t){return Ea(Wn(t))?t.pop():void 0}function Vu(t,e){return typeof Wn(t)=="number"?t.pop():e}var xa=(function(t){return t&&typeof t.length=="number"&&typeof t!="function"});function Da(t){return pe(t==null?void 0:t.then)}function Ia(t){return pe(t[Un])}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 Hu(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Pa=Hu();function Oa(t){return pe(t==null?void 0:t[Pa])}function _a(t){return yu(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,Ci(i.read())];case 3:return r=a.sent(),n=r.value,s=r.done,s?[4,Ci(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Ci(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(Ia(t))return ju(t);if(xa(t))return Wu(t);if(Da(t))return Gu(t);if(Ma(t))return Fa(t);if(Oa(t))return qu(t);if(La(t))return Xu(t)}throw Ra(t)}function ju(t){return new be(function(e){var i=t[Un]();if(pe(i.subscribe))return i.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Wu(t){return new be(function(e){for(var i=0;i<t.length&&!e.closed;i++)e.next(t[i]);e.complete()})}function Gu(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 qu(t){return new be(function(e){var i,r;try{for(var n=Si(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){Yu(t,e).catch(function(i){return e.error(i)})})}function Xu(t){return Fa(_a(t))}function Yu(t,e){var i,r,n,s;return mu(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=wu(t),c.label=1;case 1:return[4,i.next()];case 2:if(r=c.sent(),!!r.done)return[3,4];if(a=r.value,e.next(a),e.closed)return[2];c.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return o=c.sent(),n={error:o},[3,11];case 6:return c.trys.push([6,,9,10]),r&&!r.done&&(s=i.return)?[4,s.call(i)]:[3,8];case 7:c.sent(),c.label=8;case 8:return[3,10];case 9:if(n)throw n.error;return[7];case 10:return[7];case 11:return e.complete(),[2]}})})}function Ot(t,e,i,r,n){r===void 0&&(r=0),n===void 0&&(n=!1);var s=e.schedule(function(){i(),n?t.add(this.schedule(null,r)):this.unsubscribe()},r);if(t.add(s),!n)return s}function Vr(t,e){return e===void 0&&(e=0),le(function(i,r){i.subscribe(ae(r,function(n){return Ot(r,t,function(){return r.next(n)},e)},function(){return Ot(r,t,function(){return r.complete()},e)},function(n){return Ot(r,t,function(){return r.error(n)},e)}))})}function Ua(t,e){return e===void 0&&(e=0),le(function(i,r){r.add(t.schedule(function(){return i.subscribe(r)},e))})}function Ku(t,e){return Ee(t).pipe(Ua(e),Vr(e))}function Zu(t,e){return Ee(t).pipe(Ua(e),Vr(e))}function Qu(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 Ju(t,e){return new be(function(i){var r;return Ot(i,e,function(){r=t[Pa](),Ot(i,e,function(){var n,s,a;try{n=r.next(),s=n.value,a=n.done}catch(o){i.error(o);return}a?i.complete():i.next(s)},0,!0)}),function(){return 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){Ot(i,e,function(){var r=t[Symbol.asyncIterator]();Ot(i,e,function(){r.next().then(function(n){n.done?i.complete():i.next(n.value)})},0,!0)})})}function $u(t,e){return Na(_a(t),e)}function ed(t,e){if(t!=null){if(Ia(t))return Ku(t,e);if(xa(t))return Qu(t,e);if(Da(t))return Zu(t,e);if(Ma(t))return Na(t,e);if(Oa(t))return Ju(t,e);if(La(t))return $u(t,e)}throw Ra(t)}function Ie(t,e){return e?ed(t,e):Ee(t)}function At(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=sr(t);return Ie(t,i)}function td(t,e){var i=pe(t)?t:function(){return t},r=function(n){return n.error(i())};return new be(r)}var Hr=Fr(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 Hr)}})})}function Ge(t,e){return new Promise(function(i,r){var n=new Ti({next:function(s){i(s),n.unsubscribe()},error:r,complete:function(){r(new Hr)}});t.subscribe(n)})}function za(t){return t instanceof Date&&!isNaN(t)}var Va=Fr(function(t){return function(i){i===void 0&&(i=null),t(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=i}});function ar(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?id:s,o=i.scheduler,c=o===void 0?nr: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,f){var m,R,y=null,I=0,x=function(v){R=Ot(f,c,function(){try{m.unsubscribe(),Ee(a({meta:h,lastValue:y,seen:I})).subscribe(f)}catch(b){f.error(b)}},v)};m=p.subscribe(ae(f,function(v){R==null||R.unsubscribe(),I++,f.next(y=v),n>0&&x(n)},void 0,void 0,function(){R!=null&&R.closed||R==null||R.unsubscribe(),y=null})),!I&&x(r!=null?typeof r=="number"?r:+r-c.now():n)})}function id(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 rd=Array.isArray;function nd(t,e){return rd(e)?t.apply(void 0,gt([],pt(e))):t(e)}function sd(t){return E(function(e){return nd(t,e)})}var ad=Array.isArray,od=Object.getPrototypeOf,cd=Object.prototype,ld=Object.keys;function ud(t){if(t.length===1){var e=t[0];if(ad(e))return{args:e,keys:null};if(dd(e)){var i=ld(e);return{args:i.map(function(r){return e[r]}),keys:i}}}return{args:t,keys:null}}function dd(t){return t&&typeof t=="object"&&od(t)===cd}function hd(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=sr(t),r=ka(t),n=ud(t),s=n.args,a=n.keys;if(s.length===0)return Ie([],i);var o=new be(pd(s,i,a?function(c){return hd(a,c)}:jt));return r?o.pipe(sd(r)):o}function pd(t,e,i){return i===void 0&&(i=jt),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=Ie(t[h],e),f=!1;p.subscribe(ae(r,function(m){s[h]=m,f||(f=!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?Ot(i,t,e):e()}function gd(t,e,i,r,n,s,a,o){var c=[],u=0,h=0,p=!1,f=function(){p&&!c.length&&!u&&e.complete()},m=function(y){return u<r?R(y):c.push(y)},R=function(y){u++;var I=!1;Ee(i(y,h++)).subscribe(ae(e,function(x){e.next(x)},function(){I=!0},void 0,function(){if(I)try{u--;for(var x=function(){var v=c.shift();a||R(v)};c.length&&u<r;)x();f()}catch(v){e.error(v)}}))};return t.subscribe(ae(e,m,function(){p=!0,f()})),function(){}}function Gn(t,e,i){return i===void 0&&(i=1/0),pe(e)?Gn(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 gd(r,n,t,i)}))}function Wa(t){return t===void 0&&(t=1/0),Gn(jt,t)}function fd(){return Wa(1)}function Ga(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return fd()(Ie(t,sr(t)))}function $t(t){return new be(function(e){Ee(t()).subscribe(e)})}function ki(t,e,i){t===void 0&&(t=0),i===void 0&&(i=Nu);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 jr(t,e){return t===void 0&&(t=0),e===void 0&&(e=nr),t<0&&(t=0),ki(t,t,e)}function xi(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=sr(t),r=Vu(t,1/0),n=t;return n.length?n.length===1?Ee(n[0]):Wa(r)(Ie(n,i)):Jt}var vd=new be(rr),bd=Array.isArray;function md(t){return t.length===1&&bd(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 or(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t=md(t),t.length===1?Ee(t[0]):new be(yd(t))}function yd(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 wd(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 Sd(t,e){return e===void 0&&(e=nr),wd(function(){return ki(t,e)})}function ei(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,ei(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 Cd(t,e){return le(qa(t,e,arguments.length>=2,!1,!0))}var Ad=function(t,e){return t.push(e),t};function Td(){return le(function(t,e){Cd(Ad,[])(t).subscribe(e)})}function Xa(t,e){return e===void 0&&(e=nr),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 Ed(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 Jt}: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=jt),t=t??kd,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 kd(t,e){return t===e}function xd(t){return t===void 0&&(t=Dd),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 Dd(){return new Hr}function qn(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(jt,Me(1),i?Ed(e):xd(function(){return new Hr}))}}function Ka(t,e){return le(qa(t,e,arguments.length>=2,!0))}function Tt(t){t===void 0&&(t={});var e=t.connector,i=e===void 0?function(){return new Ei}: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,f,m=0,R=!1,y=!1,I=function(){p==null||p.unsubscribe(),p=void 0},x=function(){I(),h=f=void 0,R=y=!1},v=function(){var b=h;x(),b==null||b.unsubscribe()};return le(function(b,w){m++,!y&&!R&&I();var A=f=f??i();w.add(function(){m--,m===0&&!y&&!R&&(p=Xn(v,c))}),A.subscribe(w),!h&&m>0&&(h=new Ti({next:function(D){return A.next(D)},error:function(D){y=!0,I(),p=Xn(x,n,D),A.error(D)},complete:function(){R=!0,I(),p=Xn(x,a),A.complete()}}),Ee(b).subscribe(h))})(u)}}function Xn(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 Ti({next:function(){n.unsubscribe(),t()}});return Ee(e.apply(void 0,gt([],pt(i)))).subscribe(n)}}function et(t,e,i){var r,n=!1;return r=t,Tt({connector:function(){return new Bn(r,e,i)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function Wr(t){return B(function(e,i){return t<=i})}function Id(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 Md(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=sr(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 S(t){return le(function(e,i){Ee(t).subscribe(ae(i,function(){return i.complete()},rr)),!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)}))}):jt}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(f){a[p]=f,!c&&!o[p]&&(o[p]=!0,(c=o.every(jt))&&(o=null))},rr))},h=0;h<s;h++)u(h);r.subscribe(ae(n,function(p){if(c){var f=gt([p],pt(a));n.next(i?i.apply(void 0,gt([],pt(f))):f)}}))})}var Qa=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Gr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var qr={exports:{}},Rd=qr.exports,Ja;function Pd(){return Ja||(Ja=1,(function(t){(function(e,i){t.exports?t.exports=i():e.log=i()})(Rd,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(y,I){var x=y[I];if(typeof x.bind=="function")return x.bind(y);try{return Function.prototype.bind.call(x,y)}catch{return function(){return Function.prototype.apply.apply(x,[y,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(y){return y==="debug"&&(y="log"),typeof console===i?!1:y==="trace"&&r?c:console[y]!==void 0?o(console,y):console.log!==void 0?o(console,"log"):e}function h(){for(var y=this.getLevel(),I=0;I<n.length;I++){var x=n[I];this[x]=I<y?e:this.methodFactory(x,y,this.name)}if(this.log=this.debug,typeof console===i&&y<this.levels.SILENT)return"No console available for logging"}function p(y){return function(){typeof console!==i&&(h.call(this),this[y].apply(this,arguments))}}function f(y,I,x){return u(y)||p.apply(this,arguments)}function m(y,I){var x=this,v,b,w,A="loglevel";typeof y=="string"?A+=":"+y:typeof y=="symbol"&&(A=void 0);function D(U){var ee=(n[U]||"silent").toUpperCase();if(!(typeof window===i||!A)){try{window.localStorage[A]=ee;return}catch{}try{window.document.cookie=encodeURIComponent(A)+"="+ee+";"}catch{}}}function F(){var U;if(!(typeof window===i||!A)){try{U=window.localStorage[A]}catch{}if(typeof U===i)try{var ee=window.document.cookie,ct=encodeURIComponent(A),It=ee.indexOf(ct+"=");It!==-1&&(U=/^([^;]+)/.exec(ee.slice(It+ct.length+1))[1])}catch{}return x.levels[U]===void 0&&(U=void 0),U}}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 _(U){var ee=U;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: "+U)}x.name=y,x.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},x.methodFactory=I||f,x.getLevel=function(){return w??b??v},x.setLevel=function(U,ee){return w=_(U),ee!==!1&&D(w),h.call(x)},x.setDefaultLevel=function(U){b=_(U),F()||x.setLevel(U,!1)},x.resetLevel=function(){w=null,K(),h.call(x)},x.enableAll=function(U){x.setLevel(x.levels.TRACE,U)},x.disableAll=function(U){x.setLevel(x.levels.SILENT,U)},x.rebuild=function(){if(a!==x&&(v=_(a.getLevel())),h.call(x),a===x)for(var U in s)s[U].rebuild()},v=_(a?a.getLevel():"WARN");var te=F();te!=null&&(w=_(te)),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})})(qr)),qr.exports}var Od=Pd();const _d=Gr(Od);var Di=class extends Error{constructor(t,e){super(`Unexpected Error${t?` at ${t}`:""}`,e),this.at=t,this.name="UnexpectedError"}},ft=class extends Error{constructor(t="Not Implemented",e){super(t,e),this.reason=t,this.name="UnimplementedError"}},ti=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"}},Ld=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"}},Fd=class extends Error{constructor(t,e){super(t,e),this.name="RequestError"}},Xr=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"}},Yn=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"}},Kn=class extends Error{constructor(t="localStorage",e){super(`${t} is not available in this environment`,e),this.storageType=t,this.name="StorageNotAvailableError"}},Ud=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"}},Nd=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"}},Zn=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"}},Bd=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"}},_t=class extends Error{constructor(t,e,i,r,n){super(e,r),this.code=t,this.data=i,this.requestId=n,this.name="JSONRPCError"}},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"}},zd=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"}},Vd=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"}},Yr=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"}},Hd=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"}},Ii=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"}},Kr=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"}},jd=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"}},ii=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="TokenRefreshError"}};const Wd=()=>new Date().toISOString(),Mi=_d.getLogger("signalwire"),Gd=Mi.methodFactory;Mi.methodFactory=(t,e,i)=>{const r=Gd(t,e,i);return function(...n){const s=[Wd(),"-",...n];r.apply(void 0,s)}};const qd=Mi.levels.WARN;Mi.setLevel(qd);let co=null;const Xd=t=>{co=t};let Zr={};const Yd=t=>{if(t==null){Zr={};return}Zr={...Zr,...t}},Kd=t=>{Mi.setLevel(t)},Qn=()=>co??Mi,Zd=t=>t!=null&&typeof t=="object"&&"method"in t?t.method!=="signalwire.ping":!0,Qd=t=>{const{logWsTraffic:e}=Zr;if(!e)return;const i=Qn();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=Zd(r)?JSON.stringify(r,null,2):r;i.debug(`${t.type.toUpperCase()}:
|
|
65
|
+
`):"",this.name="UnsubscriptionError",this.errors=i}});function Kr(t,e){if(t){var i=t.indexOf(e);0<=i&&t.splice(i,1)}}var _i=(function(){function t(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return t.prototype.unsubscribe=function(){var e,i,r,n,s;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var o=Ri(a),c=o.next();!c.done;c=o.next()){var u=c.value;u.remove(this)}}catch(A){e={error:A}}finally{try{c&&!c.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}else a.remove(this);var h=this.initialTeardown;if(be(h))try{h()}catch(A){s=A instanceof Jn?A.errors:[A]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var v=Ri(p),C=v.next();!C.done;C=v.next()){var _=C.value;try{Oa(_)}catch(A){s=s??[],A instanceof Jn?s=ft(ft([],gt(s)),gt(A.errors)):s.push(A)}}}catch(A){r={error:A}}finally{try{C&&!C.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}}if(s)throw new Jn(s)}},t.prototype.add=function(e){var i;if(e&&e!==this)if(this.closed)Oa(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(i=this._finalizers)!==null&&i!==void 0?i:[]).push(e)}},t.prototype._hasParent=function(e){var i=this._parentage;return i===e||Array.isArray(i)&&i.includes(e)},t.prototype._addParent=function(e){var i=this._parentage;this._parentage=Array.isArray(i)?(i.push(e),i):i?[i,e]:e},t.prototype._removeParent=function(e){var i=this._parentage;i===e?this._parentage=null:Array.isArray(i)&&Kr(i,e)},t.prototype.remove=function(e){var i=this._finalizers;i&&Kr(i,e),e instanceof t&&e._removeParent(this)},t.EMPTY=(function(){var e=new t;return e.closed=!0,e})(),t})(),Pa=_i.EMPTY;function _a(t){return t instanceof _i||t&&"closed"in t&&be(t.remove)&&be(t.add)&&be(t.unsubscribe)}function Oa(t){be(t)?t():t.unsubscribe()}var qu={Promise:void 0},Xu={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 La(t){Xu.setTimeout(function(){throw t})}function br(){}function Zr(t){t()}var $n=(function(t){Ke(e,t);function e(i){var r=t.call(this)||this;return r.isStopped=!1,i?(r.destination=i,_a(i)&&i.add(r)):r.destination=Zu,r}return e.create=function(i,r,n){return new Oi(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})(_i),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){Qr(r)}},t.prototype.error=function(e){var i=this.partialObserver;if(i.error)try{i.error(e)}catch(r){Qr(r)}else Qr(e)},t.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(i){Qr(i)}},t})(),Oi=(function(t){Ke(e,t);function e(i,r,n){var s=t.call(this)||this,a;return be(i)||!i?a={next:i??void 0,error:r??void 0,complete:n??void 0}:a=i,s.destination=new Yu(a),s}return e})($n);function Qr(t){La(t)}function Ku(t){throw t}var Zu={closed:!0,next:br,error:Ku,complete:br},es=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function jt(t){return t}function Jr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Fa(t)}function Fa(t){return t.length===0?jt:t.length===1?t[0]:function(i){return t.reduce(function(r,n){return n(r)},i)}}var Ae=(function(){function t(e){e&&(this._subscribe=e)}return t.prototype.lift=function(e){var i=new t;return i.source=this,i.operator=e,i},t.prototype.subscribe=function(e,i,r){var n=this,s=Ju(e)?e:new Oi(e,i,r);return Zr(function(){var a=n,o=a.operator,c=a.source;s.add(o?o.call(s,c):c?n._subscribe(s):n._trySubscribe(s))}),s},t.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(i){e.error(i)}},t.prototype.forEach=function(e,i){var r=this;return i=Na(i),new i(function(n,s){var a=new Oi({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[es]=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=Na(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 Na(t){var e;return(e=t??qu.Promise)!==null&&e!==void 0?e:Promise}function Qu(t){return t&&be(t.next)&&be(t.error)&&be(t.complete)}function Ju(t){return t&&t instanceof $n||Qu(t)&&_a(t)}function $u(t){return be(t==null?void 0:t.lift)}function ge(t){return function(e){if($u(e))return e.lift(function(i){try{return t(i,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function ue(t,e,i,r,n){return new ed(t,e,i,r,n)}var ed=(function(t){Ke(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})($n),Ua={schedule:function(t){var e=requestAnimationFrame,i=cancelAnimationFrame,r=e(function(n){i=void 0,t(n)});return new _i(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},td=Yr(function(t){return function(){t(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),Li=(function(t){Ke(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 td},e.prototype.next=function(i){var r=this;Zr(function(){var n,s;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var a=Ri(r.currentObservers),o=a.next();!o.done;o=a.next()){var c=o.value;c.next(i)}}catch(u){n={error:u}}finally{try{o&&!o.done&&(s=a.return)&&s.call(a)}finally{if(n)throw n.error}}}})},e.prototype.error=function(i){var r=this;Zr(function(){if(r._throwIfClosed(),!r.isStopped){r.hasError=r.isStopped=!0,r.thrownError=i;for(var n=r.observers;n.length;)n.shift().error(i)}})},e.prototype.complete=function(){var i=this;Zr(function(){if(i._throwIfClosed(),!i.isStopped){i.isStopped=!0;for(var r=i.observers;r.length;)r.shift().complete()}})},e.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(e.prototype,"observed",{get:function(){var i;return((i=this.observers)===null||i===void 0?void 0:i.length)>0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(i){return this._throwIfClosed(),t.prototype._trySubscribe.call(this,i)},e.prototype._subscribe=function(i){return this._throwIfClosed(),this._checkFinalizedStatuses(i),this._innerSubscribe(i)},e.prototype._innerSubscribe=function(i){var r=this,n=this,s=n.hasError,a=n.isStopped,o=n.observers;return s||a?Pa:(this.currentObservers=null,o.push(i),new _i(function(){r.currentObservers=null,Kr(o,i)}))},e.prototype._checkFinalizedStatuses=function(i){var r=this,n=r.hasError,s=r.thrownError,a=r.isStopped;n?i.error(s):a&&i.complete()},e.prototype.asObservable=function(){var i=new Ae;return i.source=this,i},e.create=function(i,r){return new Ba(i,r)},e})(Ae),Ba=(function(t){Ke(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:Pa},e})(Li),id=(function(t){Ke(e,t);function e(i){var r=t.call(this)||this;return r._value=i,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(i){var r=t.prototype._subscribe.call(this,i);return!r.closed&&i.next(this._value),r},e.prototype.getValue=function(){var i=this,r=i.hasError,n=i.thrownError,s=i._value;if(r)throw n;return this._throwIfClosed(),s},e.prototype.next=function(i){t.prototype.next.call(this,this._value=i)},e})(Li),ts={now:function(){return(ts.delegate||Date).now()},delegate:void 0},is=(function(t){Ke(e,t);function e(i,r,n){i===void 0&&(i=1/0),r===void 0&&(r=1/0),n===void 0&&(n=ts);var s=t.call(this)||this;return s._bufferSize=i,s._windowTime=r,s._timestampProvider=n,s._buffer=[],s._infiniteTimeWindow=!0,s._infiniteTimeWindow=r===1/0,s._bufferSize=Math.max(1,i),s._windowTime=Math.max(1,r),s}return e.prototype.next=function(i){var r=this,n=r.isStopped,s=r._buffer,a=r._infiniteTimeWindow,o=r._timestampProvider,c=r._windowTime;n||(s.push(i),!a&&s.push(o.now()+c)),this._trimBuffer(),t.prototype.next.call(this,i)},e.prototype._subscribe=function(i){this._throwIfClosed(),this._trimBuffer();for(var r=this._innerSubscribe(i),n=this,s=n._infiniteTimeWindow,a=n._buffer,o=a.slice(),c=0;c<o.length&&!i.closed;c+=s?1:2)i.next(o[c]);return this._checkFinalizedStatuses(i),r},e.prototype._trimBuffer=function(){var i=this,r=i._bufferSize,n=i._timestampProvider,s=i._buffer,a=i._infiniteTimeWindow,o=(a?1:2)*r;if(r<1/0&&o<s.length&&s.splice(0,s.length-o),!a){for(var c=n.now(),u=0,h=1;h<s.length&&s[h]<=c;h+=2)u=h;u&&s.splice(0,u+1)}},e})(Li),rd=(function(t){Ke(e,t);function e(i,r){return t.call(this)||this}return e.prototype.schedule=function(i,r){return this},e})(_i),za={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},rs=(function(t){Ke(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),za.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&&za.clearInterval(r)},e.prototype.execute=function(i,r){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(i,r);if(n)return n;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(i,r){var n=!1,s;try{this.work(i)}catch(a){n=!0,s=a||new Error("Scheduled action threw falsy error")}if(n)return this.unsubscribe(),s},e.prototype.unsubscribe=function(){if(!this.closed){var i=this,r=i.id,n=i.scheduler,s=n.actions;this.work=this.state=this.scheduler=null,this.pending=!1,Kr(s,this),r!=null&&(this.id=this.recycleAsyncId(n,r,null)),this.delay=null,t.prototype.unsubscribe.call(this)}},e})(rd),nd=1,ns,ss={};function Va(t){return t in ss?(delete ss[t],!0):!1}var Ha={setImmediate:function(t){var e=nd++;return ss[e]=!0,ns||(ns=Promise.resolve()),ns.then(function(){return Va(e)&&t()}),e},clearImmediate:function(t){Va(t)}},sd=Ha.setImmediate,ad=Ha.clearImmediate,ja={setImmediate:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return sd.apply(void 0,ft([],gt(t)))},clearImmediate:function(t){return ad(t)},delegate:void 0},od=(function(t){Ke(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=ja.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&&(ja.clearImmediate(r),i._scheduled===r&&(i._scheduled=void 0))},e})(rs),Wa=(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=ts.now,t})(),as=(function(t){Ke(e,t);function e(i,r){r===void 0&&(r=Wa.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})(Wa),cd=(function(t){Ke(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})(as),Ga=new cd(od),mr=new as(rs),ld=mr,ud=(function(t){Ke(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=Ua.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&&(Ua.cancelAnimationFrame(r),i._scheduled=void 0)},e})(rs),dd=(function(t){Ke(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})(as),qa=new dd(ud),ci=new Ae(function(t){return t.complete()});function Xa(t){return t&&be(t.schedule)}function os(t){return t[t.length-1]}function Ya(t){return be(os(t))?t.pop():void 0}function yr(t){return Xa(os(t))?t.pop():void 0}function hd(t,e){return typeof os(t)=="number"?t.pop():e}var Ka=(function(t){return t&&typeof t.length=="number"&&typeof t!="function"});function Za(t){return be(t==null?void 0:t.then)}function Qa(t){return be(t[es])}function Ja(t){return Symbol.asyncIterator&&be(t==null?void 0:t[Symbol.asyncIterator])}function $a(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 pd(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var eo=pd();function to(t){return be(t==null?void 0:t[eo])}function io(t){return Wu(this,arguments,function(){var i,r,n,s;return Ra(this,function(a){switch(a.label){case 0:i=t.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Pi(i.read())];case 3:return r=a.sent(),n=r.value,s=r.done,s?[4,Pi(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Pi(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return i.releaseLock(),[7];case 10:return[2]}})})}function ro(t){return be(t==null?void 0:t.getReader)}function xe(t){if(t instanceof Ae)return t;if(t!=null){if(Qa(t))return gd(t);if(Ka(t))return fd(t);if(Za(t))return vd(t);if(Ja(t))return no(t);if(to(t))return bd(t);if(ro(t))return md(t)}throw $a(t)}function gd(t){return new Ae(function(e){var i=t[es]();if(be(i.subscribe))return i.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function fd(t){return new Ae(function(e){for(var i=0;i<t.length&&!e.closed;i++)e.next(t[i]);e.complete()})}function vd(t){return new Ae(function(e){t.then(function(i){e.closed||(e.next(i),e.complete())},function(i){return e.error(i)}).then(null,La)})}function bd(t){return new Ae(function(e){var i,r;try{for(var n=Ri(t),s=n.next();!s.done;s=n.next()){var a=s.value;if(e.next(a),e.closed)return}}catch(o){i={error:o}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}e.complete()})}function no(t){return new Ae(function(e){yd(t,e).catch(function(i){return e.error(i)})})}function md(t){return no(io(t))}function yd(t,e){var i,r,n,s;return ju(this,void 0,void 0,function(){var a,o;return Ra(this,function(c){switch(c.label){case 0:c.trys.push([0,5,6,11]),i=Gu(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 Lt(t,e,i,r,n){r===void 0&&(r=0),n===void 0&&(n=!1);var s=e.schedule(function(){i(),n?t.add(this.schedule(null,r)):this.unsubscribe()},r);if(t.add(s),!n)return s}function $r(t,e){return e===void 0&&(e=0),ge(function(i,r){i.subscribe(ue(r,function(n){return Lt(r,t,function(){return r.next(n)},e)},function(){return Lt(r,t,function(){return r.complete()},e)},function(n){return Lt(r,t,function(){return r.error(n)},e)}))})}function so(t,e){return e===void 0&&(e=0),ge(function(i,r){r.add(t.schedule(function(){return i.subscribe(r)},e))})}function wd(t,e){return xe(t).pipe(so(e),$r(e))}function Sd(t,e){return xe(t).pipe(so(e),$r(e))}function Cd(t,e){return new Ae(function(i){var r=0;return e.schedule(function(){r===t.length?i.complete():(i.next(t[r++]),i.closed||this.schedule())})})}function Ad(t,e){return new Ae(function(i){var r;return Lt(i,e,function(){r=t[eo](),Lt(i,e,function(){var n,s,a;try{n=r.next(),s=n.value,a=n.done}catch(o){i.error(o);return}a?i.complete():i.next(s)},0,!0)}),function(){return be(r==null?void 0:r.return)&&r.return()}})}function ao(t,e){if(!t)throw new Error("Iterable cannot be null");return new Ae(function(i){Lt(i,e,function(){var r=t[Symbol.asyncIterator]();Lt(i,e,function(){r.next().then(function(n){n.done?i.complete():i.next(n.value)})},0,!0)})})}function Td(t,e){return ao(io(t),e)}function Ed(t,e){if(t!=null){if(Qa(t))return wd(t,e);if(Ka(t))return Cd(t,e);if(Za(t))return Sd(t,e);if(Ja(t))return ao(t,e);if(to(t))return Ad(t,e);if(ro(t))return Td(t,e)}throw $a(t)}function _e(t,e){return e?Ed(t,e):xe(t)}function Ct(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t);return _e(t,i)}function kd(t,e){var i=be(t)?t:function(){return t},r=function(n){return n.error(i())};return new Ae(r)}var wr=Yr(function(t){return function(){t(this),this.name="EmptyError",this.message="no elements in sequence"}});function oo(t,e){return new Promise(function(i,r){var n=!1,s;t.subscribe({next:function(a){s=a,n=!0},error:r,complete:function(){n?i(s):r(new wr)}})})}function Ze(t,e){return new Promise(function(i,r){var n=new Oi({next:function(s){i(s),n.unsubscribe()},error:r,complete:function(){r(new wr)}});t.subscribe(n)})}function co(t){return t instanceof Date&&!isNaN(t)}var lo=Yr(function(t){return function(i){i===void 0&&(i=null),t(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=i}});function Sr(t,e){var i=co(t)?{first:t}:typeof t=="number"?{each:t}:t,r=i.first,n=i.each,s=i.with,a=s===void 0?xd:s,o=i.scheduler,c=o===void 0?mr:o,u=i.meta,h=u===void 0?null:u;if(r==null&&n==null)throw new TypeError("No timeout provided.");return ge(function(p,v){var C,_,A=null,R=0,D=function(b){_=Lt(v,c,function(){try{C.unsubscribe(),xe(a({meta:h,lastValue:A,seen:R})).subscribe(v)}catch(m){v.error(m)}},b)};C=p.subscribe(ue(v,function(b){_==null||_.unsubscribe(),R++,v.next(A=b),n>0&&D(n)},void 0,void 0,function(){_!=null&&_.closed||_==null||_.unsubscribe(),A=null})),!R&&D(r!=null?typeof r=="number"?r:+r-c.now():n)})}function xd(t){throw new lo(t)}function x(t,e){return ge(function(i,r){var n=0;i.subscribe(ue(r,function(s){r.next(t.call(e,s,n++))}))})}var Dd=Array.isArray;function Id(t,e){return Dd(e)?t.apply(void 0,ft([],gt(e))):t(e)}function Md(t){return x(function(e){return Id(t,e)})}var Rd=Array.isArray,Pd=Object.getPrototypeOf,_d=Object.prototype,Od=Object.keys;function Ld(t){if(t.length===1){var e=t[0];if(Rd(e))return{args:e,keys:null};if(Fd(e)){var i=Od(e);return{args:i.map(function(r){return e[r]}),keys:i}}}return{args:t,keys:null}}function Fd(t){return t&&typeof t=="object"&&Pd(t)===_d}function Nd(t,e){return t.reduce(function(i,r,n){return i[r]=e[n],i},{})}function uo(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t),r=Ya(t),n=Ld(t),s=n.args,a=n.keys;if(s.length===0)return _e([],i);var o=new Ae(Ud(s,i,a?function(c){return Nd(a,c)}:jt));return r?o.pipe(Md(r)):o}function Ud(t,e,i){return i===void 0&&(i=jt),function(r){ho(e,function(){for(var n=t.length,s=new Array(n),a=n,o=n,c=function(h){ho(e,function(){var p=_e(t[h],e),v=!1;p.subscribe(ue(r,function(C){s[h]=C,v||(v=!0,o--),o||r.next(i(s.slice()))},function(){--a||r.complete()}))},r)},u=0;u<n;u++)c(u)},r)}}function ho(t,e,i){t?Lt(i,t,e):e()}function Bd(t,e,i,r,n,s,a,o){var c=[],u=0,h=0,p=!1,v=function(){p&&!c.length&&!u&&e.complete()},C=function(A){return u<r?_(A):c.push(A)},_=function(A){u++;var R=!1;xe(i(A,h++)).subscribe(ue(e,function(D){e.next(D)},function(){R=!0},void 0,function(){if(R)try{u--;for(var D=function(){var b=c.shift();a||_(b)};c.length&&u<r;)D();v()}catch(b){e.error(b)}}))};return t.subscribe(ue(e,C,function(){p=!0,v()})),function(){}}function cs(t,e,i){return i===void 0&&(i=1/0),be(e)?cs(function(r,n){return x(function(s,a){return e(r,s,n,a)})(xe(t(r,n)))},i):(typeof e=="number"&&(i=e),ge(function(r,n){return Bd(r,n,t,i)}))}function po(t){return t===void 0&&(t=1/0),cs(jt,t)}function zd(){return po(1)}function go(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return zd()(_e(t,yr(t)))}function li(t){return new Ae(function(e){xe(t()).subscribe(e)})}function Fi(t,e,i){t===void 0&&(t=0),i===void 0&&(i=ld);var r=-1;return e!=null&&(Xa(e)?i=e:r=e),new Ae(function(n){var s=co(t)?+t-i.now():t;s<0&&(s=0);var a=0;return i.schedule(function(){n.closed||(n.next(a++),0<=r?this.schedule(void 0,r):n.complete())},s)})}function en(t,e){return t===void 0&&(t=0),e===void 0&&(e=mr),t<0&&(t=0),Fi(t,t,e)}function Ni(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t),r=hd(t,1/0),n=t;return n.length?n.length===1?xe(n[0]):po(r)(_e(n,i)):ci}var Vd=new Ae(br),Hd=Array.isArray;function jd(t){return t.length===1&&Hd(t[0])?t[0]:t}function B(t,e){return ge(function(i,r){var n=0;i.subscribe(ue(r,function(s){return t.call(e,s,n++)&&r.next(s)}))})}function Cr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t=jd(t),t.length===1?xe(t[0]):new Ae(Wd(t))}function Wd(t){return function(e){for(var i=[],r=function(s){i.push(xe(t[s]).subscribe(ue(e,function(a){if(i){for(var o=0;o<i.length;o++)o!==s&&i[o].unsubscribe();i=null}e.next(a)})))},n=0;i&&!e.closed&&n<t.length;n++)r(n)}}function Gd(t){return ge(function(e,i){var r=!1,n=null,s=null,a=!1,o=function(){if(s==null||s.unsubscribe(),s=null,r){r=!1;var u=n;n=null,i.next(u)}a&&i.complete()},c=function(){s=null,a&&i.complete()};e.subscribe(ue(i,function(u){r=!0,n=u,s||xe(t(u)).subscribe(s=ue(i,o,c))},function(){a=!0,(!r||!s||s.closed)&&i.complete()}))})}function qd(t,e){return e===void 0&&(e=mr),Gd(function(){return Fi(t,e)})}function ui(t){return ge(function(e,i){var r=null,n=!1,s;r=e.subscribe(ue(i,void 0,void 0,function(a){s=xe(t(a,ui(t)(e))),r?(r.unsubscribe(),r=null,s.subscribe(i)):n=!0})),n&&(r.unsubscribe(),r=null,s.subscribe(i))})}function fo(t,e,i,r,n){return function(s,a){var o=i,c=e,u=0;s.subscribe(ue(a,function(h){var p=u++;c=o?t(c,h,p):(o=!0,h),r&&a.next(c)},n&&(function(){o&&a.next(c),a.complete()})))}}function Xd(t,e){return ge(fo(t,e,arguments.length>=2,!1,!0))}var Yd=function(t,e){return t.push(e),t};function Kd(){return ge(function(t,e){Xd(Yd,[])(t).subscribe(e)})}function vo(t,e){return e===void 0&&(e=mr),ge(function(i,r){var n=null,s=null,a=null,o=function(){if(n){n.unsubscribe(),n=null;var u=s;s=null,r.next(u)}};function c(){var u=a+t,h=e.now();if(h<u){n=this.schedule(void 0,u-h),r.add(n);return}o()}i.subscribe(ue(r,function(u){s=u,a=e.now(),n||(n=e.schedule(c,t),r.add(n))},function(){o(),r.complete()},void 0,function(){s=n=null}))})}function Zd(t){return ge(function(e,i){var r=!1;e.subscribe(ue(i,function(n){r=!0,i.next(n)},function(){r||i.next(t),i.complete()}))})}function Oe(t){return t<=0?function(){return ci}:ge(function(e,i){var r=0;e.subscribe(ue(i,function(n){++r<=t&&(i.next(n),t<=r&&i.complete())}))})}function U(t,e){return e===void 0&&(e=jt),t=t??Qd,ge(function(i,r){var n,s=!0;i.subscribe(ue(r,function(a){var o=e(a);(s||!t(n,o))&&(s=!1,n=o,r.next(a))}))})}function Qd(t,e){return t===e}function Jd(t){return t===void 0&&(t=$d),ge(function(e,i){var r=!1;e.subscribe(ue(i,function(n){r=!0,i.next(n)},function(){return r?i.complete():i.error(t())}))})}function $d(){return new wr}function ls(t,e){return ge(function(i,r){var n=0,s=null,a=!1;i.subscribe(ue(r,function(o){s||(s=ue(r,void 0,function(){s=null,a&&r.complete()}),xe(t(o,n++)).subscribe(s))},function(){a=!0,!s&&r.complete()}))})}function bo(t,e){var i=arguments.length>=2;return function(r){return r.pipe(jt,Oe(1),i?Zd(e):Jd(function(){return new wr}))}}function mo(t,e){return ge(fo(t,e,arguments.length>=2,!0))}function At(t){t===void 0&&(t={});var e=t.connector,i=e===void 0?function(){return new Li}:e,r=t.resetOnError,n=r===void 0?!0:r,s=t.resetOnComplete,a=s===void 0?!0:s,o=t.resetOnRefCountZero,c=o===void 0?!0:o;return function(u){var h,p,v,C=0,_=!1,A=!1,R=function(){p==null||p.unsubscribe(),p=void 0},D=function(){R(),h=v=void 0,_=A=!1},b=function(){var m=h;D(),m==null||m.unsubscribe()};return ge(function(m,y){C++,!A&&!_&&R();var w=v=v??i();y.add(function(){C--,C===0&&!A&&!_&&(p=us(b,c))}),w.subscribe(y),!h&&C>0&&(h=new Oi({next:function(k){return w.next(k)},error:function(k){A=!0,R(),p=us(D,n,k),w.error(k)},complete:function(){_=!0,R(),p=us(D,a),w.complete()}}),xe(m).subscribe(h))})(u)}}function us(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 Oi({next:function(){n.unsubscribe(),t()}});return xe(e.apply(void 0,ft([],gt(i)))).subscribe(n)}}function st(t,e,i){var r,n=!1;return r=t,At({connector:function(){return new is(r,e,i)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function tn(t){return B(function(e,i){return t<=i})}function eh(t){return ge(function(e,i){var r=!1,n=0;e.subscribe(ue(i,function(s){return(r||(r=!t(s,n++)))&&i.next(s)}))})}function th(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=yr(t);return ge(function(r,n){(i?go(t,r,i):go(t,r)).subscribe(n)})}function Je(t,e){return ge(function(i,r){var n=null,s=0,a=!1,o=function(){return a&&!n&&r.complete()};i.subscribe(ue(r,function(c){n==null||n.unsubscribe();var u=0,h=s++;xe(t(c,h)).subscribe(n=ue(r,function(p){return r.next(e?e(c,p,h,u++):p)},function(){n=null,o()}))},function(){a=!0,o()}))})}function S(t){return ge(function(e,i){xe(t).subscribe(ue(i,function(){return i.complete()},br)),!i.closed&&e.subscribe(i)})}function Ee(t,e,i){var r=be(t)||e||i?{next:t,error:e,complete:i}:t;return r?ge(function(n,s){var a;(a=r.subscribe)===null||a===void 0||a.call(r);var o=!0;n.subscribe(ue(s,function(c){var u;(u=r.next)===null||u===void 0||u.call(r,c),s.next(c)},function(){var c;o=!1,(c=r.complete)===null||c===void 0||c.call(r),s.complete()},function(c){var u;o=!1,(u=r.error)===null||u===void 0||u.call(r,c),s.error(c)},function(){var c,u;o&&((c=r.unsubscribe)===null||c===void 0||c.call(r)),(u=r.finalize)===null||u===void 0||u.call(r)}))}):jt}function yo(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var i=Ya(t);return ge(function(r,n){for(var s=t.length,a=new Array(s),o=t.map(function(){return!1}),c=!1,u=function(p){xe(t[p]).subscribe(ue(n,function(v){a[p]=v,!c&&!o[p]&&(o[p]=!0,(c=o.every(jt))&&(o=null))},br))},h=0;h<s;h++)u(h);r.subscribe(ue(n,function(p){if(c){var v=ft([p],gt(a));n.next(i?i.apply(void 0,ft([],gt(v))):v)}}))})}var wo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function rn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var nn={exports:{}},ih=nn.exports,So;function rh(){return So||(So=1,(function(t){(function(e,i){t.exports?t.exports=i():e.log=i()})(ih,function(){var e=function(){},i="undefined",r=typeof window!==i&&typeof window.navigator!==i&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],s={},a=null;function o(A,R){var D=A[R];if(typeof D.bind=="function")return D.bind(A);try{return Function.prototype.bind.call(D,A)}catch{return function(){return Function.prototype.apply.apply(D,[A,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(A){return A==="debug"&&(A="log"),typeof console===i?!1:A==="trace"&&r?c:console[A]!==void 0?o(console,A):console.log!==void 0?o(console,"log"):e}function h(){for(var A=this.getLevel(),R=0;R<n.length;R++){var D=n[R];this[D]=R<A?e:this.methodFactory(D,A,this.name)}if(this.log=this.debug,typeof console===i&&A<this.levels.SILENT)return"No console available for logging"}function p(A){return function(){typeof console!==i&&(h.call(this),this[A].apply(this,arguments))}}function v(A,R,D){return u(A)||p.apply(this,arguments)}function C(A,R){var D=this,b,m,y,w="loglevel";typeof A=="string"?w+=":"+A:typeof A=="symbol"&&(w=void 0);function k(X){var $=(n[X]||"silent").toUpperCase();if(!(typeof window===i||!w)){try{window.localStorage[w]=$;return}catch{}try{window.document.cookie=encodeURIComponent(w)+"="+$+";"}catch{}}}function F(){var X;if(!(typeof window===i||!w)){try{X=window.localStorage[w]}catch{}if(typeof X===i)try{var $=window.document.cookie,Bt=encodeURIComponent(w),Ei=$.indexOf(Bt+"=");Ei!==-1&&(X=/^([^;]+)/.exec($.slice(Ei+Bt.length+1))[1])}catch{}return D.levels[X]===void 0&&(X=void 0),X}}function Q(){if(!(typeof window===i||!w)){try{window.localStorage.removeItem(w)}catch{}try{window.document.cookie=encodeURIComponent(w)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function N(X){var $=X;if(typeof $=="string"&&D.levels[$.toUpperCase()]!==void 0&&($=D.levels[$.toUpperCase()]),typeof $=="number"&&$>=0&&$<=D.levels.SILENT)return $;throw new TypeError("log.setLevel() called with invalid level: "+X)}D.name=A,D.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},D.methodFactory=R||v,D.getLevel=function(){return y??m??b},D.setLevel=function(X,$){return y=N(X),$!==!1&&k(y),h.call(D)},D.setDefaultLevel=function(X){m=N(X),F()||D.setLevel(X,!1)},D.resetLevel=function(){y=null,Q(),h.call(D)},D.enableAll=function(X){D.setLevel(D.levels.TRACE,X)},D.disableAll=function(X){D.setLevel(D.levels.SILENT,X)},D.rebuild=function(){if(a!==D&&(b=N(a.getLevel())),h.call(D),a===D)for(var X in s)s[X].rebuild()},b=N(a?a.getLevel():"WARN");var ie=F();ie!=null&&(y=N(ie)),h.call(D)}a=new C,a.getLogger=function(R){if(typeof R!="symbol"&&typeof R!="string"||R==="")throw new TypeError("You must supply a name when creating a logger.");var D=s[R];return D||(D=s[R]=new C(R,a.methodFactory)),D};var _=typeof window!==i?window.log:void 0;return a.noConflict=function(){return typeof window!==i&&window.log===a&&(window.log=_),a},a.getLoggers=function(){return s},a.default=a,a})})(nn)),nn.exports}var nh=rh();const sh=rn(nh),ah=1e3,Co=600,Ao=6e3,oh=300*1e3,ch=1e4,lh=100,uh=3e3,dh=1500,hh=0,To="sw:preferences",ph="sat:refresh",Eo="/api/fabric/subscriber/devices/token",ko="/api/fabric/subscriber/devices/refresh",sn=900,ds=3e4,xo=3,gh=1e3,Do=5,fh=1e3,vh=3e4,Io=5e3,bh=3e4,mh=3e4,hs=-32003,Mo=-32602,ps=-32002,yh=["NotAllowedError","SecurityError","PermissionDeniedError"],wh=1e3,Sh=10,Ch=2e3,Ah=3,Th=.05,Eh=4,kh=30,xh=3,Dh=3e3,Ih=1e4,Mh=1e4,Rh=3,Ph=5e3,_h=2e3,Oh=1e4,Lh=3e3,Fh=5e3,Nh=3,Uh=1e4,Bh=5e3,zh=100,Ro=33,Vh=.03,Hh=250,jh=!0,Wh=!0,Gh="sw:device:audioinput",qh="sw:device:audiooutput",Xh="sw:device:videoinput",Yh=!1,Kh=!0,Zh=!0,Qh=!0,Jh=150,$h=300,ep=!0,tp=!0,ip=!0,rp=!1,np=51e4;var Ui=class extends Error{constructor(t,e){super(`Unexpected Error${t?` at ${t}`:""}`,e),this.at=t,this.name="UnexpectedError"}},Tt=class extends Error{constructor(t="Not Implemented",e){super(t,e),this.reason=t,this.name="UnimplementedError"}},Wt=class extends Error{constructor(t="Invalid Credentials",e){super(t,e),this.reason=t,this.name="InvalidCredentialsError"}},Po=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketConnectionError"}},_o=class extends Error{constructor(t,e){super(t,e),this.name="TransportConnectionError"}},sp=class extends Error{constructor(t,e){super(t,e),this.name="WebSocketTimeoutError"}},Oo=class extends Error{constructor(t,e){super(t,e),this.name="RequestTimeoutError"}},ap=class extends Error{constructor(t,e){super(t,e),this.name="RequestError"}},an=class extends Error{constructor(t,e,i){super(`RPC request ${t} timed out after ${e}ms`,i),this.requestId=t,this.timeoutMs=e,this.name="RPCTimeoutError"}},gs=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"}},fs=class extends Error{constructor(t="localStorage",e){super(`${t} is not available in this environment`,e),this.storageType=t,this.name="StorageNotAvailableError"}},op=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"}},cp=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"}},vs=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"}},lp=class extends Error{constructor(t,e){super(`Failed to read from storage "${t}": ${e.message}`,{cause:e}),this.key=t,this.originalError=e,this.name="StorageReadError"}},te=class extends Error{constructor(t,e){super(`Dependency ${t} is not set or available.`,e),this.description=t,this.name="DependencyError"}},Lo=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"}},up=class extends Error{constructor(t,e){super(`Call "${t}" has no self member context yet: selfId/nodeId have not been received from the server`,e),this.callId=t,this.name="CallNotReadyError"}},dp=class extends Error{constructor(t,e){super(`Participant "${t}" has no call context yet: its member state (call_id/node_id) has not been received from the server`,e),this.memberId=t,this.name="ParticipantNotReadyError"}},Et=class extends Error{constructor(t,e,i,r,n){super(e,r),this.code=t,this.data=i,this.requestId=n,this.name="JSONRPCError"}},on=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="InvalidParams"}},Fo=class extends Error{constructor(t,e){super(t,e),this.message=t,this.name="ConversationError"}},hp=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"}},pp=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"}},cn=class extends Error{constructor(t,e){super(t,e),this.name="ValidationError"}},No=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"}},gp=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"}},Uo=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"}},kt=class extends Error{constructor(t,e,i){super(`Media track ${t} failed for ${e}`,{cause:i instanceof Error?i:void 0}),this.operation=t,this.kind=e,this.originalError=i,this.name="MediaTrackError"}};function Bo(t){return t instanceof Error&&yh.includes(t.name)}var Gt=class extends Error{constructor(t,e,i,r=!1){super(`Media access ${Bo(i)?"denied":"failed"} for ${t} (${e})`,{cause:i instanceof Error?i:void 0}),this.operation=t,this.media=e,this.originalError=i,this.fatal=r,this.name="MediaAccessError"}get denied(){return Bo(this.originalError)}},ln=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"}},fp=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"}},zo=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="DeviceTokenError"}},di=class extends Error{constructor(t,e){super(t,{cause:e instanceof Error?e:void 0}),this.originalError=e,this.name="TokenRefreshError"}};const vp=()=>new Date().toISOString(),Bi=sh.getLogger("signalwire"),bp=Bi.methodFactory;Bi.methodFactory=(t,e,i)=>{const r=bp(t,e,i);return function(...n){const s=[vp(),"-",...n];r.apply(void 0,s)}};const mp=Bi.levels.WARN;Bi.setLevel(mp);let Vo=null;const yp=t=>{Vo=t};let un={};const wp=t=>{if(t==null){un={};return}un={...un,...t}},Sp=t=>{Bi.setLevel(t)},bs=()=>Vo??Bi,Cp=t=>t!=null&&typeof t=="object"&&"method"in t?t.method!=="signalwire.ping":!0,Ap=t=>{const{logWsTraffic:e}=un;if(!e)return;const i=bs();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=Cp(r)?JSON.stringify(r,null,2):r;i.debug(`${t.type.toUpperCase()}:
|
|
66
66
|
`,n,`
|
|
67
|
-
`)},W=()=>{const t=Qn();return new Proxy(t,{get(e,i,r){if(i==="wsTraffic")return Qd;const n=Qn(),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 Jd(t,e){return zr(B(t),E(e))}function fe(t,e){return zr(Jd(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 _t(t.error.code,t.error.message,t.error.data);return lo.debug("[throwOnRPCError] RPC successful response:",t),t})}class cr extends Error{}cr.prototype.name="InvalidTokenError";function $d(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 eh(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 $d(e)}catch{return atob(e)}}function th(t,e){if(typeof t!="string")throw new cr("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 cr(`Invalid token specified: missing part #${i+1}`);let n;try{n=eh(r)}catch(s){throw new cr(`Invalid token specified: invalid base64 for part #${i+1} (${s.message})`)}try{return JSON.parse(n)}catch(s){throw new cr(`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 ih(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()}let Jn;const rh=new Uint8Array(16);function nh(){if(!Jn){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Jn=crypto.getRandomValues.bind(crypto)}return Jn(rh)}const ho={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function sh(t,e,i){var n;t=t||{};const r=t.random??((n=t.rng)==null?void 0:n.call(t))??nh();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,ih(r)}function Qr(t,e,i){return ho.randomUUID&&!t?ho.randomUUID():sh(t)}var ie=class{constructor(){this.subscriptions=[],this.subjects=[],this._destroyed$=new Ei}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(Vr(Aa)),this._observableCache.set(i,r)),r}deferEmission(t){return t.pipe(Vr(Aa))}subscribeTo(t,e){const i=t.subscribe(e);this.subscriptions.push(i)}createSubject(){const t=new Ei;return this.subjects.push(t),t}createReplaySubject(t,e){const i=new Bn(t,e);return this.subjects.push(i),i}createBehaviorSubject(t){const e=new Ru(t);return this.subjects.push(e),e}get destroyed$(){return this._destroyed$.asObservable()}};const ah=10,oh=100,ch=1,lh=({delayLimit:t=Number.MAX_SAFE_INTEGER,initialDelay:e=oh,variation:i=ch})=>{if(e<0)throw new Yr("initialDelay must be gte 0");if(t<0)throw new Yr("upperDelayLimit must be gte 0");if(i<0)throw new Yr("variation must be gte 0");if(e>t)throw new Yr("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}},uh=async({asyncCallable:t,maxRetries:e=ah,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()},Ri=W(),$n={method:"GET",headers:{Accept:"application/json"}},Jr={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};var dh=(je=class extends ie{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){Ri.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=lh({initialDelay:this.retryDelayMin,variation:i,delayLimit:this.retryDelayMax});return uh({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;Ri.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 Ri.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}):(Ri.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}`,Ri.debug("[HTTPRequestController] Using Bearer token auth, token length:",r.token.length)):Ri.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 hh=5,ph=(t,e)=>({deviceId:t.deviceId,label:t.label,groupId:t.groupId,kind:e});var gh=class{constructor(){this._stacks={audioinput:[],audiooutput:[],videoinput:[]}}push(t,e){const i=ph(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,hh)}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 fh=1e3,po=600,go=6e3,vh=300*1e3,bh=1e4,mh=100,yh=3e3,wh=1500,Sh=0,fo="sw:preferences",Ch="sat:refresh",vo="/api/fabric/subscriber/devices/token",bo="/api/fabric/subscriber/devices/refresh",lr=900,Ah=3e4,mo=3,Th=1e3,yo=5,Eh=1e3,kh=3e4,xh=5e3,wo=-32003,So=-32602,Co=-32002,Dh=1e3,Ih=10,Mh=2e3,Rh=3,Ph=.05,Oh=4,_h=30,Lh=3,Fh=3e3,Uh=1e4,Nh=1e4,Bh=3,zh=5e3,Vh=2e3,Hh=1e4,jh=3e3,Wh=5e3,Gh=3,qh=1e4,Xh=5e3,Yh=100,Ao=33,Kh=.03,Zh=250,Qh=!0,Jh=!0,$h="sw:device:audioinput",ep="sw:device:audiooutput",tp="sw:device:videoinput",ip=!1,rp=!0,np=!0,sp=!0,ap=150,op=300,cp=!0,lp=!0,up=!0,dp=!1,hp=51e4;function it(t){return t*1e3}function rt(t){return Math.round(t/100)/10}const To=W();var g=class jl{static get instance(){return this._instance??(this._instance=new jl),this._instance}constructor(){this.deviceDebounceTime=wh,this.devicePollingInterval=Sh,this.reconnectCallsTimeout=vh,this.connectionTimeout=bh,this.reconnectDelayMin=mh,this.reconnectDelayMax=yh,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=Dh,this.statsBaselineSamples=Ih,this.statsNoPacketThreshold=Mh,this.statsRttSpikeMultiplier=Rh,this.statsPacketLossThreshold=Ph,this.statsJitterSpikeMultiplier=Oh,this.statsHistorySize=_h,this.keyframeMaxBurst=Lh,this.keyframeBurstWindow=Fh,this.keyframeCooldown=Uh,this.reinviteDebounceTime=Nh,this.reinviteMaxAttempts=Bh,this.reinviteTimeout=zh,this.recoveryDebounceTime=Vh,this.recoveryCooldown=Hh,this.iceDisconnectedGracePeriod=jh,this.iceRestartTimeout=Wh,this.maxRecoveryAttempts=Gh,this.enableRelayFallback=cp,this.enableNetworkChangeDetection=lp,this.enableServerHangupInterception=up,this.persistDeviceSelection=Qh,this.syncDevicesToActiveCalls=Jh,this.autoMuteVideoOnHidden=ip,this.refreshDevicesOnVisible=rp,this.checkConnectionOnVisible=np,this.defaultAudioConstraints=void 0,this.defaultVideoConstraints=void 0,this.stereoAudio=dp,this.enableAutoDegradation=sp,this.degradationBitrateThreshold=ap,this.degradationRecoveryThreshold=op,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 pp=["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"],gp=["receiveVideo","receiveAudio","disableUdpIceServers","relayOnly","enableRelayFallback","enableNetworkChangeDetection","enableServerHangupInterception","persistDeviceSelection","syncDevicesToActiveCalls","autoMuteVideoOnHidden","refreshDevicesOnVisible","checkConnectionOnVisible","stereoAudio","enableAutoDegradation"];function fp(){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 vp(t){const e=g.instance;for(const i of pp)t[i]!==void 0&&(e[i]=t[i]);for(const i of gp)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 bp=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=fp();this._storage.setItem(fo,t,"local").catch(e=>{To.error(`[ClientPreferences] Failed to save preferences: ${String(e)}`)})}_loadFromStorage(){this._storage&&this._storage.getItem(fo,"local").then(t=>{t&&vp(t)}).catch(t=>{To.error(`[ClientPreferences] Failed to load preferences: ${String(t)}`)})}};function Et(t){return t instanceof Error?t:new Error(String(t))}const nt=W(),Eo={audioinput:$h,audiooutput:ep,videoinput:tp},mp={audioinput:[],audiooutput:[],videoinput:[]},ko={audioinput:null,audiooutput:null,videoinput:null};var yp=class extends ie{constructor(t,e){super(),this.webRTCApiProvider=t,this.deviceChangeHandler=()=>{nt.debug("[DeviceController] Device change detected"),this.enumerateDevices()},this._devicesState$=this.createBehaviorSubject(mp),this._selectedDevicesState$=this.createBehaviorSubject(ko),this._errors$=this.createReplaySubject(1),this._deviceHistory=new gh,this._deviceRecovered$=this.createSubject(),this._audioInputDisabled$=this.createBehaviorSubject(!1),this._videoInputDisabled$=this.createBehaviorSubject(!1),this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._persistedDevices={},this._storageManager=e,this.init()}setStorageManager(t){this._storageManager=t,this.loadPersistedDevices()}get selectedAudioInputDeviceConstraints(){return this._audioInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedAudioInputDevice)}get selectedVideoInputDeviceConstraints(){return this._videoInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedVideoInputDevice)}deviceInfoToConstraints(t){if(!(t!=null&&t.deviceId)||t.deviceId.trim()==="")return{};const e=t.kind==="audioinput"?this.audioInputDevices:this.videoInputDevices,i=e.find(r=>r.deviceId===t.deviceId)??e.find(r=>r.label===t.label);return i?{deviceId:{exact:i.deviceId}}:{}}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(S(this.destroyed$)))}get deviceRecovered$(){return this._deviceRecovered$.asObservable().pipe(S(this.destroyed$))}get videoInputDisabled$(){return this.cachedObservable("videoInputDisabled$",()=>this._videoInputDisabled$.asObservable().pipe(L(),S(this.destroyed$)))}get audioInputDisabled$(){return this.cachedObservable("audioInputDisabled$",()=>this._audioInputDisabled$.asObservable().pipe(L(),S(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(),S(this.destroyed$)))}get audioOutputDevices$(){return this.cachedObservable("audioOutputDevices$",()=>this._devicesState$.pipe(E(t=>t.audiooutput),L(),S(this.destroyed$)))}get videoInputDevices$(){return this.cachedObservable("videoInputDevices$",()=>this._devicesState$.pipe(E(t=>t.videoinput),L(),S(this.destroyed$)))}get selectedAudioInputDevice$(){return this.cachedObservable("selectedAudioInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(E(t=>t.audioinput),L(),S(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(),S(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(),S(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(Eo[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(Eo[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(ko),await this.enumerateDevices()}enableDeviceMonitoring(){this.disableDeviceMonitoring(),this.webRTCApiProvider.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler),g.instance.devicePollingInterval>0&&(this._devicesPoolingSubscription=jr(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(Et(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(Et(e)),e}}async isValidDevice(t){if(!t||t.kind==="audiooutput")return!1;try{return await this.getDeviceCapabilities(t)!==null}catch{return!1}}destroy(){this.disableDeviceMonitoring(),super.destroy()}},xo=class{constructor(){if(typeof localStorage>"u")throw new Kn("localStorage");if(typeof sessionStorage>"u")throw new Kn("sessionStorage");try{const t="__storage_test__";localStorage.setItem(t,"test"),localStorage.removeItem(t)}catch(t){throw W().error("LocalStorage is not accessible:",t),new Kn("localStorage")}}storage(t){return t==="local"?localStorage:sessionStorage}async setItem(t,e,i="session"){return this.storage(i).setItem(t,e),Promise.resolve()}async getItem(t,e="session"){return Promise.resolve(this.storage(e).getItem(t))}async removeItem(t,e="session"){return this.storage(e).removeItem(t),Promise.resolve()}async clear(t="session"){const e=this.storage(t),i=[];for(let r=0;r<e.length;r++){const n=e.key(r);n!=null&&n.startsWith("sw:")&&i.push(n)}for(const r of i)e.removeItem(r);return Promise.resolve()}},wp=class{constructor(t=new xo){this.storageImpl=t}serialize(t,e){if(t==null)return null;try{return JSON.stringify(t)}catch(i){throw new Ud(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 Zn(t,n)}}async getItem(t,e="session"){let i;try{i=await this.storageImpl.getItem(t,e)}catch(r){throw new Bd(t,r)}if(!i)return null;try{return JSON.parse(i)}catch(r){throw new Nd(t,r)}}async removeItem(t,e="session"){try{await this.storageImpl.removeItem(t,e)}catch(i){throw new Zn(t,i)}}async clearAll(){try{await this.storageImpl.clear("local"),await this.storageImpl.clear("session")}catch(t){throw new Zn("clearAll",t)}}},Sp=class{constructor(){this.persistSession=!1,this._webSocketConstructor=typeof WebSocket<"u"?WebSocket:void 0,this._baseURL=this.apiHost,this._credential={}}get userId(){return this.user.id}get user(){if(!this._user)throw new Q("User");return this._user}set user(t){this._user=t}get storage(){return this._storageManager||(this._storageImpl??(this._storageImpl=new xo),this._storageManager=new wp(this._storageImpl)),this._storageManager}get http(){return this._httpRequestController??(this._httpRequestController=new dh(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 yp(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 Wt=W(),Cp="sw-dpop",Ap=1,Gt="keys",es="dpop-keypair",$r=t=>{const e=new Uint8Array(t);let i="";for(const r of e)i+=String.fromCharCode(r);return btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},Do=t=>$r(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 $r(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))};async function ts(){return new Promise((t,e)=>{const i=indexedDB.open(Cp,Ap);i.onupgradeneeded=()=>{const r=i.result;r.objectStoreNames.contains(Gt)||r.createObjectStore(Gt)},i.onsuccess=()=>t(i.result),i.onerror=()=>e(i.error??new Error("Failed to open IndexedDB"))})}async function Tp(){try{const t=await ts();return await new Promise((e,i)=>{const r=t.transaction(Gt,"readonly"),n=r.objectStore(Gt).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 Wt.warn("[DPoP] Failed to load key pair from IndexedDB:",t),null}}async function Ep(t){try{const e=await ts();await new Promise((i,r)=>{const n=e.transaction(Gt,"readwrite");n.objectStore(Gt).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){Wt.warn("[DPoP] Failed to save key pair to IndexedDB:",e)}}async function Mo(){try{const t=await ts();await new Promise((e,i)=>{const r=t.transaction(Gt,"readwrite");r.objectStore(Gt).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){Wt.warn("[DPoP] Failed to delete key pair from IndexedDB:",t)}}var kp=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 Tp();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,Wt.debug("[DPoP] Key pair restored from IndexedDB, fingerprint:",this._fingerprint),this._fingerprint}catch(e){Wt.warn("[DPoP] Stored key pair unusable, generating new one:",e),await Mo()}return Wt.debug("[DPoP] Generating RSA key pair"),this._keyPair=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!1,["sign","verify"]),this._publicJwk=await crypto.subtle.exportKey("jwk",this._keyPair.publicKey),this._fingerprint=await Io(this._publicJwk),this._initialized=!0,await Ep(this._keyPair),Wt.debug("[DPoP] Key pair generated and persisted, fingerprint:",this._fingerprint),this._fingerprint}get fingerprint(){if(!this._fingerprint)throw new Kr("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=$r(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t.accessToken)))),this.signProof(e)}async createRpcProof(t){const e={jti:crypto.randomUUID(),rpc:"request",mth:t.method,iat:Math.floor(Date.now()/1e3)};return this.signProof(e)}destroy(){this._keyPair=null,this._publicJwk=null,this._fingerprint=null,this._initialized=!1,Mo(),Wt.debug("[DPoP] Controller destroyed")}get publicJwk(){if(!this._publicJwk)throw new Kr("CryptoController not initialized. Call init() first.");return this._publicJwk}get privateKey(){if(!this._keyPair)throw new Kr("CryptoController not initialized. Call init() first.");return this._keyPair.privateKey}async signProof(t){const e={typ:"dpop+jwt",alg:"RS256",jwk:this.publicJwk},i=`${Do(JSON.stringify(e))}.${Do(JSON.stringify(t))}`;return`${i}.${$r(await crypto.subtle.sign("RSASSA-PKCS1-v1_5",this.privateKey,new TextEncoder().encode(i)))}`}};const Pi=W();function Ro(){return typeof window<"u"&&typeof window.addEventListener=="function"}function Po(){if(typeof navigator>"u")return;const{connection:t}=navigator;return(t==null?void 0:t.effectiveType)??void 0}function Oo(){if(!(typeof navigator>"u"))return navigator.connection??void 0}var xp=class extends ie{constructor(){super(),this._isOnline$=this.createBehaviorSubject(typeof navigator<"u"?navigator.onLine:!0),this._networkChange$=this.createSubject(),this._onOnline=this.handleOnline.bind(this),this._onOffline=this.handleOffline.bind(this),this._onConnectionChange=this.handleConnectionChange.bind(this),this._listenersAttached=!1,this.attachListeners()}get isOnline$(){return this._isOnline$.asObservable().pipe(S(this._destroyed$))}get isOnline(){return this._isOnline$.value}get networkChange$(){return this._networkChange$.asObservable().pipe(S(this._destroyed$))}destroy(){this.removeListeners(),super.destroy()}attachListeners(){if(!Ro()){Pi.debug("NetworkMonitor: no browser environment detected, skipping event listeners");return}window.addEventListener("online",this._onOnline),window.addEventListener("offline",this._onOffline);const t=Oo();t&&t.addEventListener("change",this._onConnectionChange),this._listenersAttached=!0,Pi.debug("NetworkMonitor: event listeners attached")}removeListeners(){if(this._listenersAttached){if(Ro()){window.removeEventListener("online",this._onOnline),window.removeEventListener("offline",this._onOffline);const t=Oo();t&&t.removeEventListener("change",this._onConnectionChange)}this._listenersAttached=!1,Pi.debug("NetworkMonitor: event listeners removed")}}handleOnline(){Pi.info("NetworkMonitor: browser went online"),this._isOnline$.next(!0),this._networkChange$.next({type:"online",timestamp:Date.now(),networkType:Po()})}handleOffline(){Pi.info("NetworkMonitor: browser went offline"),this._isOnline$.next(!1),this._networkChange$.next({type:"offline",timestamp:Date.now()})}handleConnectionChange(){const t=Po();Pi.info(`NetworkMonitor: connection changed — effectiveType=${t??"unknown"}`),this._networkChange$.next({type:"connection_change",timestamp:Date.now(),networkType:t})}};function _o(t){if(typeof RTCRtpSender>"u"||typeof RTCRtpSender.getCapabilities!="function")return[];const e=RTCRtpSender.getCapabilities(t);if(!e)return[];const i=new Set,r=[];for(const n of e.codecs){const s=Dp(n.mimeType);s&&!i.has(s)&&(i.add(s),r.push(s))}return r}function Dp(t){const e=t.indexOf("/");return e>=0?t.substring(e+1):t}function Ip(){return typeof globalThis>"u"?!1:"RTCRtpScriptTransform"in globalThis||"MediaStreamTrackProcessor"in globalThis}function Mp(){return typeof HTMLMediaElement>"u"?!1:"setSinkId"in HTMLMediaElement.prototype}function Rp(){return typeof RTCRtpSender>"u"?!1:typeof RTCRtpSender.prototype.setParameters=="function"}function Lo(t){const e=(t==null?void 0:t.mediaDevices)??Fo(),i=typeof(e==null?void 0:e.getUserMedia)=="function",r=typeof(e==null?void 0:e.getDisplayMedia)=="function",n={webrtc:t?typeof t.RTCPeerConnection=="function":typeof globalThis<"u"&&"RTCPeerConnection"in globalThis,getUserMedia:i,getDisplayMedia:r,screenShare:r,screenShareAudio:Pp(),simulcast:Rp(),insertableStreams:Ip(),audioOutputSelection:Mp(),videoCodecs:_o("video"),audioCodecs:_o("audio")};return Object.freeze(n)}function Pp(){if(typeof navigator>"u")return!1;const t=Fo();return!t||typeof t.getDisplayMedia!="function"?!1:navigator.userAgent.includes("Chrome/")}function Fo(){return typeof navigator<"u"?navigator.mediaDevices:null}const en=W(),Op=10,_p=1e4,Lp=5e3,Fp=5e3;var Up=class extends ie{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??Op,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){en.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 en.error("[PreflightRunner] Preflight test failed:",i),new jd("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")),Fp))]);for(const o of s.getTracks())o.kind==="audio"&&o.readyState==="live"&&(r=!0),o.kind==="video"&&o.readyState==="live"&&(n=!0)}catch(a){en.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 f=setTimeout(p,_p);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(f),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 en.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),ar(Lp)));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 tn=W();function Np(){try{return typeof document<"u"&&typeof document.addEventListener=="function"&&typeof document.visibilityState=="string"}catch{return!1}}function Uo(){try{if(typeof document<"u"&&typeof document.visibilityState=="string")return document.visibilityState==="visible"?"visible":"hidden"}catch{}return"visible"}var Bp=class extends ie{constructor(){super(),this._visibility$=this.createBehaviorSubject(Uo()),this._visibilityChange$=this.createSubject(),this._hasVisibilityApi=Np(),this._boundHandler=this._handleVisibilityChange.bind(this),this._hasVisibilityApi?(document.addEventListener("visibilitychange",this._boundHandler),tn.debug("VisibilityController: listening for visibilitychange events")):tn.debug("VisibilityController: document visibility API not available, defaulting to visible")}get visibility$(){return this._visibility$.pipe(S(this._destroyed$))}get visibility(){return this._visibility$.value}get visibilityChange$(){return this._visibilityChange$.pipe(S(this._destroyed$))}destroy(){this._hasVisibilityApi&&(document.removeEventListener("visibilitychange",this._boundHandler),tn.debug("VisibilityController: removed visibilitychange listener")),super.destroy()}_handleVisibilityChange(){const t=Uo(),e=this._visibility$.value;if(t===e)return;this._visibility$.next(t);const i={from:e,to:t,timestamp:Date.now()};this._visibilityChange$.next(i),tn.debug("VisibilityController: visibility changed",{from:e,to:t})}},zp=class extends ie{constructor(t,e){super(),this.fromPath=t,this.http=e,this.fetched$=$t(()=>Ie(this.fetch())).pipe(et(1),S(this.destroyed$))}async fetch(){const t=await this.http.request({url:this.fromPath,method:"GET",headers:{Accept:"application/json"}});if(t.ok&&t.body){const e=JSON.parse(t.body);return this.populateInstance(e),!0}return!1}},Vp=class extends zp{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 Oi=t=>({jsonrpc:"2.0",id:t.id??Qr(),...t}),No=t=>({jsonrpc:"2.0",...t}),Hp={major:4,minor:0,revision:0},jp=t=>Oi({method:"signalwire.connect",params:{version:Hp,event_acks:!0,...t}}),Wp=t=>{const{dpop_token:e,...i}=t;return Oi({method:"signalwire.reauthenticate",params:{authentication:i,...e?{dpop_token:e}:{}}})},Gp=(t,e)=>No({id:t,result:{timestamp:Date.now()/1e3}}),is=({method:t,params:e})=>Oi({method:t,params:e}),qp={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"},Xp=new Set(["remoteSdp","localStream","remoteStream"]),Yp=t=>{if(!Object.prototype.hasOwnProperty.call(t,"dialogParams"))return t;const e=t.dialogParams,i=Object.entries(e).reduce((r,[n,s])=>{if(Xp.has(n))return r;const a=qp[n]??n;return{...r,[a]:s}},{});return{...t,dialogParams:i}},ri=t=>(e={})=>Oi({method:t,params:Yp(e)}),Bo=t=>Oi({method:"webrtc.verto",params:t}),Kp=ri("verto.invite"),Zp=ri("verto.bye"),rn=ri("verto.modify"),Qp=ri("verto.info"),Jp=ri("verto.answer"),$p=ri("verto.subscribe"),eg=ri("verto.pong"),tg={NORMAL_CLEARING:"16",USER_BUSY:"17",MEDIA_TIMEOUT:"804"},ig=t=>No({id:t,result:{}}),_i=W();var rg=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 _i.warn("[AttachManager] Failed to retrieve attached calls from storage",t),{}}}async writeAttached(t){try{await this.storage.setItem(this.attachKey,t)}catch(e){_i.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){_i.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}),_i.info(`[AttachManager] Reattached call ${e} (attempt ${a})`),s=!0;break}catch(o){_i.warn(`[AttachManager] Reattach attempt ${a}/3 failed for call ${e}:`,o),a<3&&await new Promise(c=>setTimeout(c,(a+1)*1e3))}s||(_i.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 ni={on:!1,off:!1},rs={muteAudio:ni,muteVideo:ni,deaf:ni,raisehand:ni,microphoneVolume:!1,microphoneSensitivity:!1,speakerVolume:!1,position:!1,meta:!1,remove:!1,audioFlags:!1},zo={self:rs,member:rs,end:!1,setLayout:!1,sendDigit:!1,vmutedHide:ni,lock:ni,device:!1,screenshare:!1};function Li(t){return t.length===0?ni:{on:t.some(e=>!e.endsWith(".off")),off:t.some(e=>!e.endsWith(".on"))}}function Vo(t,e,i,r){return t.filter(n=>n===e||n===`${e}.${i}`||n.startsWith(`${e}.${i}.${r}`))}function si(t,e,i,r){return t.some(n=>n===e||i!==null&&n===`${e}.${i}`||n.startsWith(`${e}.${i?`${i}.`:""}${r}`))}function Ho(t,e){return t.filter(i=>i.startsWith(e)||i===e).length===0?rs:{muteAudio:Li(Vo(t,e,"mute","audio")),muteVideo:Li(Vo(t,e,"mute","video")),deaf:Li(t.filter(i=>i===e||i.startsWith(`${e}.deaf`))),raisehand:Li(t.filter(i=>i===e||i.startsWith(`${e}.raisehand`))),microphoneVolume:si(t,e,"microphone","volume"),microphoneSensitivity:si(t,e,"microphone","sensitivity"),speakerVolume:si(t,e,"speaker","volume"),position:si(t,e,null,"position"),meta:si(t,e,null,"meta"),remove:si(t,e,null,"remove"),audioFlags:si(t,e,null,"audioflags")}}function ng(t){return t.length===0?zo:{self:Ho(t,"self"),member:Ho(t,"member"),end:t.some(e=>e==="end"),setLayout:t.some(e=>e.startsWith("layout")),sendDigit:t.some(e=>e.startsWith("digit")),vmutedHide:Li(t.filter(e=>e.startsWith("vmuted"))),lock:Li(t.filter(e=>e.startsWith("lock"))),device:t.some(e=>e==="device"),screenshare:t.some(e=>e==="screenshare")}}var sg=class extends ie{constructor(...t){super(...t),this._state$=this.createBehaviorSubject(zo)}updateFromRaw(t){const e=ng(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 ag(t){return t?"call.undeaf":"call.deaf"}function og(t){return t?"call.lowerhand":"call.raisehand"}const ai=W(),cg={};var jo=class extends ie{constructor(t,e,i){super(),this.executeMethod=e,this.deviceController=i,this._state$=this.createBehaviorSubject(cg),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=ag(this.deaf);await this.executeMethod(this.id,t,{})}async toggleHandraise(){await this.executeMethod(this.id,og(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 ft}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 ft}async updateMeta(t){throw new ft}destroy(){this.executeMethod=void 0,super.destroy()}},Wo=class extends jo{constructor(t,e,i,r){super(t,e,r),this.vertoManager=i,this._studioAudio$=this.createBehaviorSubject(!1),this.capabilities=new sg}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){ai.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){ai.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&&(ai.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){ai.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){ai.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){ai.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){ai.warn("[Participant.toggleVideoInput] Server Error while unmuting video input, proceeding with local toggle anyway",t)}finally{await this.vertoManager.unmuteMainVideoInputDevice()}}};const Go=t=>t instanceof Wo;function 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 lg(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=>qo(e)&&e.event_type===t}function as(t){return ns(t)&&t.method==="signalwire.event"&&ke(t.params)&&G(t.params,"event_type")}function qo(t){return ke(t)&&G(t,"event_type")&&typeof t.event_type=="string"&&G(t,"params")}function ug(t){return qo(t)&&(hg(t)||pg(t)||Xo(t)||Yo(t)||gg(t)||fg(t)||vg(t)||Ko(t)||Zo(t)||Qo(t)||Jo(t)||os(t)||nn(t)||$o(t)||ec(t))}const dg=Le("signalwire.authorization.state"),nn=Le("webrtc.message"),hg=Le("call.joined"),pg=Le("call.left"),Xo=Le("call.updated"),Yo=Le("call.state"),gg=Le("call.play"),fg=Le("call.connect"),vg=Le("room.updated"),Ko=Le("member.updated"),Zo=Le("member.joined"),Qo=Le("member.left"),Jo=Le("member.talking"),os=Le("layout.changed"),$o=Le("conversation.message"),ec=Le("conversation.message.updated");function tc(t){return ke(t)&&G(t,"room_session")&&G(t,"call_id")&&G(t,"member_id")&&G(t,"capabilities")}function bg(t){return ke(t)&&G(t,"room_id")&&G(t,"room_session_id")&&G(t,"layout")}const Ze=W(),mg={};var yg=class extends ie{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(mg),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=>{Go(e)&&this._self$.next(e),this._participants$.next({...this._participants$.value,[e.id]:e})})}updateLayouts(){this.selfId&&this.webRtcCallSession.executeMethod(this.selfId,"call.layout.list",{}).then(t=>{this._sessionState$.next({...this._sessionState$.value,layouts:t.result.layouts})}).catch(t=>{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}),Go(e)&&this._self$.next(e),this._participants$.next(this._participants$.value)}get callJoinedEvent$(){return this.cachedObservable("callJoinedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(B(tc),Se(t=>{Ze.debug("[CallEventsManager] Call joined event:",t)})))}get layoutChangedEvent$(){return this.cachedObservable("layoutChangedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(fe(bg,"layout"),Se(t=>{Ze.debug("[CallEventsManager] Layout changed event:",t)})))}get memberUpdates$(){return this.cachedObservable("memberUpdates$",()=>xi(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 wg=new Set(["sendrecv","sendonly","recvonly","inactive"]);function Sg(t){const e={audio:"inactive",video:"inactive"};if(!t)return e;const i=t.split(/\r?\n/);let r=null,n=null;for(const s of i)if(s.startsWith("m="))r&&(e[r]=n??"sendrecv"),s.startsWith("m=audio")?r="audio":s.startsWith("m=video")?r="video":r=null,n=null;else if(r&&s.startsWith("a=")){const a=s.substring(2).trim();wg.has(a)&&(n=a)}return r&&(e[r]=n??"sendrecv"),e}function ic(t){if(!t)return!1;const e=t.split(`\r
|
|
68
|
-
`),i=[];let r=-1;for(const n of e)if(n.startsWith("m="))r+=1,i[r]=0;else if(n.startsWith("a=candidate:")){const s=/\styp\s+(host|srflx|prflx|relay)/.exec(n);s&&s[1]!=="host"&&(i[r]+=1)}return!i.length||i.every(n=>n>0)}function
|
|
67
|
+
`)},G=()=>{const t=bs();return new Proxy(t,{get(e,i,r){if(i==="wsTraffic")return Ap;const n=bs(),s=Reflect.get(n,i);return typeof s=="function"?s.bind(n):s}})};function fe(){return B(t=>t!=null)}const at=(t,e,i)=>{const r=e.split(".");let n=t;for(const s of r)if(n&&typeof n=="object"&&s in n)n=n[s];else return i;return n===void 0?i:n};function Tp(t,e){return Jr(B(t),x(e))}function we(t,e){return Jr(Tp(t,i=>at(i,e)),B(i=>i!==void 0))}const Ho=G();function jo(){return x(t=>{if(t.error)throw Ho.error("[throwOnRPCError] RPC error response:",{code:t.error.code,message:t.error.message,data:t.error.data}),new Et(t.error.code,t.error.message,t.error.data);return Ho.debug("[throwOnRPCError] RPC successful response:",t),t})}class Ar extends Error{}Ar.prototype.name="InvalidTokenError";function Ep(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 kp(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 Ep(e)}catch{return atob(e)}}function xp(t,e){if(typeof t!="string")throw new Ar("Invalid token specified: must be a string");e||(e={});const i=e.header===!0?0:1,r=t.split(".")[i];if(typeof r!="string")throw new Ar(`Invalid token specified: missing part #${i+1}`);let n;try{n=kp(r)}catch(s){throw new Ar(`Invalid token specified: invalid base64 for part #${i+1} (${s.message})`)}try{return JSON.parse(n)}catch(s){throw new Ar(`Invalid token specified: invalid json for part #${i+1} (${s.message})`)}}const Le=[];for(let t=0;t<256;++t)Le.push((t+256).toString(16).slice(1));function Dp(t,e=0){return(Le[t[e+0]]+Le[t[e+1]]+Le[t[e+2]]+Le[t[e+3]]+"-"+Le[t[e+4]]+Le[t[e+5]]+"-"+Le[t[e+6]]+Le[t[e+7]]+"-"+Le[t[e+8]]+Le[t[e+9]]+"-"+Le[t[e+10]]+Le[t[e+11]]+Le[t[e+12]]+Le[t[e+13]]+Le[t[e+14]]+Le[t[e+15]]).toLowerCase()}const Ip=new Uint8Array(16);function Mp(){return crypto.getRandomValues(Ip)}function dn(t,e,i){return crypto.randomUUID?crypto.randomUUID():Rp(t)}function Rp(t,e,i){var n;t=t||{};const r=t.random??((n=t.rng)==null?void 0:n.call(t))??Mp();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,Dp(r)}var se=class{constructor(){this.subscriptions=[],this.subjects=[],this._destroyed$=new Li}destroy(){var t;(t=this._observableCache)==null||t.clear(),this.subscriptions.forEach(e=>e.unsubscribe()),this.subjects.forEach(e=>e.complete()),this._destroyed$.next(),this._destroyed$.complete()}cachedObservable(t,e){this._observableCache??(this._observableCache=new Map);let i=this._observableCache.get(t);return i||(i=e(),this._observableCache.set(t,i)),i}publicCachedObservable(t,e){const i=`public:${t}`;this._observableCache??(this._observableCache=new Map);let r=this._observableCache.get(i);return r||(r=e().pipe($r(Ga)),this._observableCache.set(i,r)),r}deferEmission(t){return t.pipe($r(Ga))}subscribeTo(t,e){const i=t.subscribe(e);this.subscriptions.push(i)}createSubject(){const t=new Li;return this.subjects.push(t),t}createReplaySubject(t,e){const i=new is(t,e);return this.subjects.push(i),i}createBehaviorSubject(t){const e=new id(t);return this.subjects.push(e),e}get destroyed$(){return this._destroyed$.asObservable()}};const Pp=10,_p=100,Op=1,Lp=({delayLimit:t=Number.MAX_SAFE_INTEGER,initialDelay:e=_p,variation:i=Op})=>{if(e<0)throw new cn("initialDelay must be gte 0");if(t<0)throw new cn("upperDelayLimit must be gte 0");if(i<0)throw new cn("variation must be gte 0");if(e>t)throw new cn("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}},Fp=async({asyncCallable:t,maxRetries:e=Pp,delayFn:i,validator:r,expectedErrorHandler:n})=>{let s=e-1,a=0;const o=async()=>{try{let c;return a<=0?c=await t():c=await new Promise((u,h)=>setTimeout(()=>{t().then(u).catch(h)},a)),s&&(r==null||r(c)),c}catch(c){if(s-- >0&&!(n!=null&&n(c)))return a=(i==null?void 0:i())??0,G().debug(`Retrying request: ${e-s} of ${e}`),o();throw c}};return o()},zi=G(),ms={method:"GET",headers:{Accept:"application/json"}},hn={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};var Np=(Xe=class extends se{constructor(e,i,r={}){super(),this.baseURL=e,this.getCredential=i,this._responses$=this.createSubject(),this._errors$=this.createSubject(),this._status$=this.createBehaviorSubject("idle"),this.maxRetries=r.maxRetries??Xe.defaultMaxRetries,this.retryDelayMin=r.retryDelayMin??Xe.defaultRetryDelayMinMs,this.retryDelayMax=r.retryDelayMax??Xe.defaultRetryDelayMaxMs,this.requestTimeout=r.requestTimeout??Xe.defaultRequestTimeoutMs}get status$(){return this._status$.asObservable()}get status(){return this._status$.value}get responses$(){return this._responses$.asObservable()}get errors$(){return this._errors$.asObservable()}async request(e){this._status$.next("requesting");try{const i=await this.executeWithRetry(e);return this._status$.next("success"),this._responses$.next(i),i}catch(i){zi.error("[HTTPRequestController] Request error:",i),this._status$.next("error");const r=i instanceof Error?i:new Error("HTTP request failed",{cause:i});throw this._errors$.next(r),r}}async executeWithRetry(e){const i=Math.ceil((this.retryDelayMax-this.retryDelayMin)/Math.max(this.maxRetries-1,1)),r=Lp({initialDelay:this.retryDelayMin,variation:i,delayLimit:this.retryDelayMax});return Fp({asyncCallable:async()=>this.executeRequest(e),maxRetries:this.maxRetries,delayFn:r,validator:n=>{if(n.status>=500&&n.status<600)throw new Ui(`Server error: ${n.status} ${n.statusText}`)}})}async executeRequest(e){const i=this.buildURL(e.url),r=this.buildHeaders(e.headers),n=e.timeout??this.requestTimeout;zi.debug("[HTTPRequestController] Executing request:",{method:e.method,url:i,headers:Object.keys(r).reduce((o,c)=>(o[c]=c==="Authorization"?`${r[c].substring(0,20)}...`:r[c],o),{}),body:this.sanitizeBody(e.body)});const s=new AbortController,a=setTimeout(()=>s.abort(),n);try{const o=await fetch(i,{method:e.method,headers:r,body:e.body,signal:s.signal});clearTimeout(a);const c=await this.convertResponse(o);return zi.debug("[HTTPRequestController] Response received:",{status:o.status,statusText:o.statusText,headers:[...o.headers.entries()],body:c.body?c.body.substring(0,200):"(empty)"}),c}catch(o){throw clearTimeout(a),o instanceof Error&&o.name==="AbortError"?new Oo(`Request timeout after ${n}ms`,{cause:o}):(zi.error("[HTTPRequestController] Request failed:",o),o)}}buildURL(e){const i=typeof e=="string"?e:e.toString();return i.startsWith("http://")||i.startsWith("https://")?i:`${this.baseURL.endsWith("/")?this.baseURL.slice(0,-1):this.baseURL}${i.startsWith("/")?i:`/${i}`}`}buildHeaders(e){const i={...e??{}},r=this.getCredential();return r.token?(i.Authorization=`Bearer ${r.token}`,zi.debug("[HTTPRequestController] Using Bearer token auth, token length:",r.token.length)):zi.warn("[HTTPRequestController] No credentials available for authentication"),i}sanitizeBody(e){if(!e||typeof e!="string")return e?"(non-string body)":void 0;try{const i={...JSON.parse(e)};for(const r of Object.keys(i))Xe.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}}},Xe.defaultMaxRetries=3,Xe.defaultRetryDelayMinMs=1e3,Xe.defaultRetryDelayMaxMs=3e4,Xe.defaultRequestTimeoutMs=3e4,Xe.SENSITIVE_BODY_FIELDS=new Set(["dpop_token","token","jwt_token"]),Xe);const Up=5,Bp=(t,e)=>({deviceId:t.deviceId,label:t.label,groupId:t.groupId,kind:e});var zp=class{constructor(){this._stacks={audioinput:[],audiooutput:[],videoinput:[]}}push(t,e){const i=Bp(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,Up)}pop(t){const e=this._stacks[t];if(e.length===0)return;const[i,...r]=e;return this._stacks[t]=r,i}findInHistory(t,e){const i=this._stacks[t];for(const r of i){const n=e.find(a=>a.deviceId===r.deviceId);if(n)return n;const s=e.find(a=>a.groupId===r.groupId&&a.label===r.label);if(s)return s}}getHistory(t){return this._stacks[t]}clear(){this._stacks.audioinput=[],this._stacks.audiooutput=[],this._stacks.videoinput=[]}};function ot(t){return t*1e3}function ct(t){return Math.round(t/100)/10}const Wo=G();var f=class bu{static get instance(){return this._instance??(this._instance=new bu),this._instance}constructor(){this.deviceDebounceTime=dh,this.devicePollingInterval=hh,this.reconnectCallsTimeout=oh,this.connectionTimeout=ch,this.reconnectDelayMin=lh,this.reconnectDelayMax=uh,this.disableUdpIceServers=!1,this.relayOnly=!1,this.iceCandidateTimeout=Co,this.iceGatheringTimeout=Ao,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=wh,this.statsBaselineSamples=Sh,this.statsNoPacketThreshold=Ch,this.statsRttSpikeMultiplier=Ah,this.statsPacketLossThreshold=Th,this.statsJitterSpikeMultiplier=Eh,this.statsHistorySize=kh,this.keyframeMaxBurst=xh,this.keyframeBurstWindow=Dh,this.keyframeCooldown=Ih,this.reinviteDebounceTime=Mh,this.reinviteMaxAttempts=Rh,this.reinviteTimeout=Ph,this.recoveryDebounceTime=_h,this.recoveryCooldown=Oh,this.iceDisconnectedGracePeriod=Lh,this.iceRestartTimeout=Fh,this.maxRecoveryAttempts=Nh,this.enableRelayFallback=ep,this.enableNetworkChangeDetection=tp,this.enableServerHangupInterception=ip,this.persistDeviceSelection=jh,this.syncDevicesToActiveCalls=Wh,this.autoMuteVideoOnHidden=Yh,this.refreshDevicesOnVisible=Kh,this.checkConnectionOnVisible=Zh,this.defaultAudioConstraints=void 0,this.defaultVideoConstraints=void 0,this.stereoAudio=rp,this.enableAutoDegradation=Qh,this.degradationBitrateThreshold=Jh,this.degradationRecoveryThreshold=$h,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 Vp=["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"],Hp=["receiveVideo","receiveAudio","disableUdpIceServers","relayOnly","enableRelayFallback","enableNetworkChangeDetection","enableServerHangupInterception","persistDeviceSelection","syncDevicesToActiveCalls","autoMuteVideoOnHidden","refreshDevicesOnVisible","checkConnectionOnVisible","stereoAudio","enableAutoDegradation"];function jp(){const t=f.instance;return{connectionTimeout:t.connectionTimeout,reconnectCallsTimeout:t.reconnectCallsTimeout,reconnectDelayMin:t.reconnectDelayMin,reconnectDelayMax:t.reconnectDelayMax,relayHost:t.relayHost,receiveVideo:t.receiveVideo,receiveAudio:t.receiveAudio,disableUdpIceServers:t.disableUdpIceServers,relayOnly:t.relayOnly,iceCandidateTimeout:t.iceCandidateTimeout,iceGatheringTimeout:t.iceGatheringTimeout,deviceDebounceTime:t.deviceDebounceTime,devicePollingInterval:t.devicePollingInterval,iceServers:t.iceServers,userVariables:t.userVariables,statsPollingInterval:t.statsPollingInterval,statsBaselineSamples:t.statsBaselineSamples,statsNoPacketThreshold:t.statsNoPacketThreshold,statsRttSpikeMultiplier:t.statsRttSpikeMultiplier,statsPacketLossThreshold:t.statsPacketLossThreshold,statsJitterSpikeMultiplier:t.statsJitterSpikeMultiplier,statsHistorySize:t.statsHistorySize,keyframeMaxBurst:t.keyframeMaxBurst,keyframeBurstWindow:t.keyframeBurstWindow,keyframeCooldown:t.keyframeCooldown,reinviteDebounceTime:t.reinviteDebounceTime,reinviteMaxAttempts:t.reinviteMaxAttempts,reinviteTimeout:t.reinviteTimeout,recoveryDebounceTime:t.recoveryDebounceTime,recoveryCooldown:t.recoveryCooldown,iceDisconnectedGracePeriod:t.iceDisconnectedGracePeriod,iceRestartTimeout:t.iceRestartTimeout,maxRecoveryAttempts:t.maxRecoveryAttempts,enableRelayFallback:t.enableRelayFallback,enableNetworkChangeDetection:t.enableNetworkChangeDetection,enableServerHangupInterception:t.enableServerHangupInterception,persistDeviceSelection:t.persistDeviceSelection,syncDevicesToActiveCalls:t.syncDevicesToActiveCalls,autoMuteVideoOnHidden:t.autoMuteVideoOnHidden,refreshDevicesOnVisible:t.refreshDevicesOnVisible,checkConnectionOnVisible:t.checkConnectionOnVisible,stereoAudio:t.stereoAudio,enableAutoDegradation:t.enableAutoDegradation,degradationBitrateThreshold:t.degradationBitrateThreshold,degradationRecoveryThreshold:t.degradationRecoveryThreshold,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs}}function Wp(t){const e=f.instance;for(const i of Vp)t[i]!==void 0&&(e[i]=t[i]);for(const i of Hp)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 Gp=class{constructor(){this._storage=null}enableSavePreferences(t){this._storage=t,this._loadFromStorage()}get connectionTimeout(){return ct(f.instance.connectionTimeout)}set connectionTimeout(t){f.instance.connectionTimeout=ot(t),this._saveToStorage()}get reconnectCallsTimeout(){return ct(f.instance.reconnectCallsTimeout)}set reconnectCallsTimeout(t){f.instance.reconnectCallsTimeout=ot(t),this._saveToStorage()}get reconnectDelayMin(){return ct(f.instance.reconnectDelayMin)}set reconnectDelayMin(t){f.instance.reconnectDelayMin=ot(t),this._saveToStorage()}get reconnectDelayMax(){return ct(f.instance.reconnectDelayMax)}set reconnectDelayMax(t){f.instance.reconnectDelayMax=ot(t),this._saveToStorage()}get relayHost(){return f.instance.relayHost??""}set relayHost(t){f.instance.relayHost=t,this._saveToStorage()}get receiveVideo(){return f.instance.receiveVideo}set receiveVideo(t){f.instance.receiveVideo=t,this._saveToStorage()}get receiveAudio(){return f.instance.receiveAudio}set receiveAudio(t){f.instance.receiveAudio=t,this._saveToStorage()}get preferredAudioInput(){return f.instance.preferredAudioInput}set preferredAudioInput(t){f.instance.preferredAudioInput=t}get preferredAudioOutput(){return f.instance.preferredAudioOutput}set preferredAudioOutput(t){f.instance.preferredAudioOutput=t}get preferredVideoInput(){return f.instance.preferredVideoInput}set preferredVideoInput(t){f.instance.preferredVideoInput=t}get inputAudioConstraints(){return f.instance.inputAudioDeviceConstraints}set inputAudioConstraints(t){f.instance.inputAudioDeviceConstraints=t}get inputVideoConstraints(){return f.instance.inputVideoDeviceConstraints}set inputVideoConstraints(t){f.instance.inputVideoDeviceConstraints=t}get deviceDebounceTime(){return ct(f.instance.deviceDebounceTime)}set deviceDebounceTime(t){f.instance.deviceDebounceTime=ot(t),this._saveToStorage()}get devicePollingInterval(){return ct(f.instance.devicePollingInterval)}set devicePollingInterval(t){f.instance.devicePollingInterval=ot(t),this._saveToStorage()}get disableUdpIceServers(){return f.instance.disableUdpIceServers}set disableUdpIceServers(t){f.instance.disableUdpIceServers=t,this._saveToStorage()}get relayOnly(){return f.instance.relayOnly}set relayOnly(t){f.instance.relayOnly=t,this._saveToStorage()}get iceCandidateTimeout(){return ct(f.instance.iceCandidateTimeout)}set iceCandidateTimeout(t){f.instance.iceCandidateTimeout=ot(t),this._saveToStorage()}get iceGatheringTimeout(){return ct(f.instance.iceGatheringTimeout)}set iceGatheringTimeout(t){f.instance.iceGatheringTimeout=ot(t),this._saveToStorage()}get iceServers(){return f.instance.iceServers}set iceServers(t){f.instance.iceServers=t,this._saveToStorage()}get userVariables(){return f.instance.userVariables}set userVariables(t){f.instance.userVariables=t,this._saveToStorage()}get statsPollingInterval(){return f.instance.statsPollingInterval}set statsPollingInterval(t){f.instance.statsPollingInterval=t,this._saveToStorage()}get statsBaselineSamples(){return f.instance.statsBaselineSamples}set statsBaselineSamples(t){f.instance.statsBaselineSamples=t,this._saveToStorage()}get statsNoPacketThreshold(){return f.instance.statsNoPacketThreshold}set statsNoPacketThreshold(t){f.instance.statsNoPacketThreshold=t,this._saveToStorage()}get statsRttSpikeMultiplier(){return f.instance.statsRttSpikeMultiplier}set statsRttSpikeMultiplier(t){f.instance.statsRttSpikeMultiplier=t,this._saveToStorage()}get statsPacketLossThreshold(){return f.instance.statsPacketLossThreshold}set statsPacketLossThreshold(t){f.instance.statsPacketLossThreshold=t,this._saveToStorage()}get statsJitterSpikeMultiplier(){return f.instance.statsJitterSpikeMultiplier}set statsJitterSpikeMultiplier(t){f.instance.statsJitterSpikeMultiplier=t,this._saveToStorage()}get statsHistorySize(){return f.instance.statsHistorySize}set statsHistorySize(t){f.instance.statsHistorySize=t,this._saveToStorage()}get keyframeMaxBurst(){return f.instance.keyframeMaxBurst}set keyframeMaxBurst(t){f.instance.keyframeMaxBurst=t,this._saveToStorage()}get keyframeBurstWindow(){return f.instance.keyframeBurstWindow}set keyframeBurstWindow(t){f.instance.keyframeBurstWindow=t,this._saveToStorage()}get keyframeCooldown(){return f.instance.keyframeCooldown}set keyframeCooldown(t){f.instance.keyframeCooldown=t,this._saveToStorage()}get reinviteDebounceTime(){return f.instance.reinviteDebounceTime}set reinviteDebounceTime(t){f.instance.reinviteDebounceTime=t,this._saveToStorage()}get reinviteMaxAttempts(){return f.instance.reinviteMaxAttempts}set reinviteMaxAttempts(t){f.instance.reinviteMaxAttempts=t,this._saveToStorage()}get reinviteTimeout(){return f.instance.reinviteTimeout}set reinviteTimeout(t){f.instance.reinviteTimeout=t,this._saveToStorage()}get recoveryDebounceTime(){return ct(f.instance.recoveryDebounceTime)}set recoveryDebounceTime(t){f.instance.recoveryDebounceTime=ot(t),this._saveToStorage()}get recoveryCooldown(){return ct(f.instance.recoveryCooldown)}set recoveryCooldown(t){f.instance.recoveryCooldown=ot(t),this._saveToStorage()}get iceDisconnectedGracePeriod(){return ct(f.instance.iceDisconnectedGracePeriod)}set iceDisconnectedGracePeriod(t){f.instance.iceDisconnectedGracePeriod=ot(t),this._saveToStorage()}get iceRestartTimeout(){return ct(f.instance.iceRestartTimeout)}set iceRestartTimeout(t){f.instance.iceRestartTimeout=ot(t),this._saveToStorage()}get maxRecoveryAttempts(){return f.instance.maxRecoveryAttempts}set maxRecoveryAttempts(t){f.instance.maxRecoveryAttempts=t,this._saveToStorage()}get enableRelayFallback(){return f.instance.enableRelayFallback}set enableRelayFallback(t){f.instance.enableRelayFallback=t,this._saveToStorage()}get enableNetworkChangeDetection(){return f.instance.enableNetworkChangeDetection}set enableNetworkChangeDetection(t){f.instance.enableNetworkChangeDetection=t,this._saveToStorage()}get enableServerHangupInterception(){return f.instance.enableServerHangupInterception}set enableServerHangupInterception(t){f.instance.enableServerHangupInterception=t,this._saveToStorage()}get persistDeviceSelection(){return f.instance.persistDeviceSelection}set persistDeviceSelection(t){f.instance.persistDeviceSelection=t,this._saveToStorage()}get syncDevicesToActiveCalls(){return f.instance.syncDevicesToActiveCalls}set syncDevicesToActiveCalls(t){f.instance.syncDevicesToActiveCalls=t,this._saveToStorage()}get autoMuteVideoOnHidden(){return f.instance.autoMuteVideoOnHidden}set autoMuteVideoOnHidden(t){f.instance.autoMuteVideoOnHidden=t,this._saveToStorage()}get refreshDevicesOnVisible(){return f.instance.refreshDevicesOnVisible}set refreshDevicesOnVisible(t){f.instance.refreshDevicesOnVisible=t,this._saveToStorage()}get checkConnectionOnVisible(){return f.instance.checkConnectionOnVisible}set checkConnectionOnVisible(t){f.instance.checkConnectionOnVisible=t,this._saveToStorage()}get defaultAudioConstraints(){return f.instance.defaultAudioConstraints}set defaultAudioConstraints(t){f.instance.defaultAudioConstraints=t}get defaultVideoConstraints(){return f.instance.defaultVideoConstraints}set defaultVideoConstraints(t){f.instance.defaultVideoConstraints=t}get stereoAudio(){return f.instance.stereoAudio}set stereoAudio(t){f.instance.stereoAudio=t,this._saveToStorage()}get enableAutoDegradation(){return f.instance.enableAutoDegradation}set enableAutoDegradation(t){f.instance.enableAutoDegradation=t,this._saveToStorage()}get degradationBitrateThreshold(){return f.instance.degradationBitrateThreshold}set degradationBitrateThreshold(t){f.instance.degradationBitrateThreshold=t,this._saveToStorage()}get degradationRecoveryThreshold(){return f.instance.degradationRecoveryThreshold}set degradationRecoveryThreshold(t){f.instance.degradationRecoveryThreshold=t,this._saveToStorage()}get preferredVideoCodecs(){return f.instance.preferredVideoCodecs}set preferredVideoCodecs(t){f.instance.preferredVideoCodecs=t,this._saveToStorage()}get preferredAudioCodecs(){return f.instance.preferredAudioCodecs}set preferredAudioCodecs(t){f.instance.preferredAudioCodecs=t,this._saveToStorage()}_saveToStorage(){if(!this._storage)return;const t=jp();this._storage.setItem(To,t,"local").catch(e=>{Wo.error(`[ClientPreferences] Failed to save preferences: ${String(e)}`)})}_loadFromStorage(){this._storage&&this._storage.getItem(To,"local").then(t=>{t&&Wp(t)}).catch(t=>{Wo.error(`[ClientPreferences] Failed to load preferences: ${String(t)}`)})}};function hi(t){return t instanceof Error?t:new Error(String(t))}const lt=G(),Go={audioinput:Gh,audiooutput:qh,videoinput:Xh},qp={audioinput:[],audiooutput:[],videoinput:[]},qo={audioinput:null,audiooutput:null,videoinput:null};var Xp=class extends se{constructor(t,e){super(),this.webRTCApiProvider=t,this.deviceChangeHandler=()=>{lt.debug("[DeviceController] Device change detected"),this.enumerateDevices()},this._devicesState$=this.createBehaviorSubject(qp),this._selectedDevicesState$=this.createBehaviorSubject(qo),this._errors$=this.createReplaySubject(1),this._deviceHistory=new zp,this._deviceRecovered$=this.createSubject(),this._audioInputDisabled$=this.createBehaviorSubject(!1),this._videoInputDisabled$=this.createBehaviorSubject(!1),this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._persistedDevices={},this._storageManager=e,this.init()}setStorageManager(t){this._storageManager=t,this.loadPersistedDevices()}get selectedAudioInputDeviceConstraints(){return this._audioInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedAudioInputDevice)}get selectedVideoInputDeviceConstraints(){return this._videoInputDisabled$.value?!1:this.deviceInfoToConstraints(this.selectedVideoInputDevice)}deviceInfoToConstraints(t){if(!(t!=null&&t.deviceId)||t.deviceId.trim()==="")return{};const e=t.kind==="audioinput"?this.audioInputDevices:this.videoInputDevices,i=e.find(r=>r.deviceId===t.deviceId)??e.find(r=>r.label===t.label);return i?{deviceId:{exact:i.deviceId}}:{}}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(S(this.destroyed$)))}get deviceRecovered$(){return this._deviceRecovered$.asObservable().pipe(S(this.destroyed$))}get videoInputDisabled$(){return this.cachedObservable("videoInputDisabled$",()=>this._videoInputDisabled$.asObservable().pipe(U(),S(this.destroyed$)))}get audioInputDisabled$(){return this.cachedObservable("audioInputDisabled$",()=>this._audioInputDisabled$.asObservable().pipe(U(),S(this.destroyed$)))}get videoInputDisabled(){return this._videoInputDisabled$.value}get audioInputDisabled(){return this._audioInputDisabled$.value}get audioInputDevices$(){return this.cachedObservable("audioInputDevices$",()=>this._devicesState$.pipe(x(t=>t.audioinput),U(),S(this.destroyed$)))}get audioOutputDevices$(){return this.cachedObservable("audioOutputDevices$",()=>this._devicesState$.pipe(x(t=>t.audiooutput),U(),S(this.destroyed$)))}get videoInputDevices$(){return this.cachedObservable("videoInputDevices$",()=>this._devicesState$.pipe(x(t=>t.videoinput),U(),S(this.destroyed$)))}get selectedAudioInputDevice$(){return this.cachedObservable("selectedAudioInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(x(t=>t.audioinput),U(),S(this.destroyed$),Ee(t=>lt.debug("[DeviceController] Selected audio input device changed:",t))))}get selectedAudioOutputDevice$(){return this.cachedObservable("selectedAudioOutputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(x(t=>t.audiooutput),U(),S(this.destroyed$),Ee(t=>lt.debug("[DeviceController] Selected audio output device changed:",t))))}get selectedVideoInputDevice$(){return this.cachedObservable("selectedVideoInputDevice$",()=>this._selectedDevicesState$.asObservable().pipe(x(t=>t.videoinput),U(),S(this.destroyed$),Ee(t=>lt.debug("[DeviceController] Selected video input device changed:",t))))}get selectedAudioInputDevice(){return this._audioInputDisabled$.value?null:this._selectedDevicesState$.value.audioinput}get selectedAudioOutputDevice(){return this._selectedDevicesState$.value.audiooutput}get selectedVideoInputDevice(){return this._videoInputDisabled$.value?null:this._selectedDevicesState$.value.videoinput}get audioInputDevices(){return this._devicesState$.value.audioinput}get audioOutputDevices(){return this._devicesState$.value.audiooutput}get videoInputDevices(){return this._devicesState$.value.videoinput}disableAudioInput(){this._audioInputDisabled$.value||(this._lastAudioInputBeforeDisable=this._selectedDevicesState$.value.audioinput,this._audioInputDisabled$.next(!0),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:null}))}enableAudioInput(){if(this._audioInputDisabled$.value){this._audioInputDisabled$.next(!1);const t=this._lastAudioInputBeforeDisable??this.audioInputDevices[0];this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:t}),this._lastAudioInputBeforeDisable=null}}disableVideoInput(){this._videoInputDisabled$.value||(this._lastVideoInputBeforeDisable=this._selectedDevicesState$.value.videoinput,this._videoInputDisabled$.next(!0),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:null}))}enableVideoInput(){if(this._videoInputDisabled$.value){this._videoInputDisabled$.next(!1);const t=this._lastVideoInputBeforeDisable??this.videoInputDevices[0];this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:t}),this._lastVideoInputBeforeDisable=null}}selectAudioInputDevice(t){this._audioInputDisabled$.value&&t&&this._audioInputDisabled$.next(!1);const e=this._selectedDevicesState$.value.audioinput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("audioinput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audioinput:t}),t&&this.persistDeviceSelection("audioinput",t)}selectVideoInputDevice(t){lt.debug("[DeviceController] Setting selected video input device:",t),this._videoInputDisabled$.value&&t&&this._videoInputDisabled$.next(!1);const e=this._selectedDevicesState$.value.videoinput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("videoinput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,videoinput:t}),t&&this.persistDeviceSelection("videoinput",t)}selectAudioOutputDevice(t){const e=this._selectedDevicesState$.value.audiooutput;e&&e.deviceId!==(t==null?void 0:t.deviceId)&&this._deviceHistory.push("audiooutput",e),this._selectedDevicesState$.next({...this._selectedDevicesState$.value,audiooutput:t}),t&&this.persistDeviceSelection("audiooutput",t)}init(){this.loadPersistedDevices(),this.subscribeTo(this._devicesState$.pipe(vo(f.instance.deviceDebounceTime)),t=>{const e=this._selectedDevicesState$.value,i=this._audioInputDisabled$.value?null:this.resolveDevice("audioinput",t.audioinput,e.audioinput,f.instance.preferredAudioInput),r=this.resolveDevice("audiooutput",t.audiooutput,e.audiooutput,f.instance.preferredAudioOutput),n=this._videoInputDisabled$.value?null:this.resolveDevice("videoinput",t.videoinput,e.videoinput,f.instance.preferredVideoInput);if(i!==e.audioinput||r!==e.audiooutput||n!==e.videoinput){const s=f.instance.syncDevicesToActiveCalls;this._selectedDevicesState$.next({audioinput:s||!e.audioinput?i:e.audioinput,audiooutput:s||!e.audiooutput?r:e.audiooutput,videoinput:s||!e.videoinput?n:e.videoinput})}}),this.enumerateDevices()}resolveDevice(t,e,i,r){if(e.length===0)return null;if(i){if(e.find(c=>c.deviceId===i.deviceId))return i;const s=e.filter(c=>c.label===i.label);if(s.length===1)return s[0];if(s.length>1){const c=s.find(u=>u.groupId===i.groupId);return c||(this.emitDeviceRecovered(t,i,null,"ambiguous_match"),null)}const a=this._deviceHistory.findInHistory(t,e);if(a)return lt.debug(`[DeviceController] Device disappeared, falling back to history: ${a.label}`),this.emitDeviceRecovered(t,i,a,"device_disconnected"),a;const o=(r?e.find(c=>c.deviceId===r.deviceId||c.label===r.label):void 0)??e[0];return this.emitDeviceRecovered(t,i,o,"fallback_to_default"),o}const n=this._persistedDevices[t];if(n){const s=this.resolvePersistedDevice(t,n,e);if(s)return s}if(r){const s=e.find(a=>a.deviceId===r.deviceId||a.label===r.label);if(s)return s}return e[0]}resolvePersistedDevice(t,e,i){const r=i.find(a=>a.deviceId===e.deviceId);if(r)return r;const n=i.find(a=>a.groupId===e.groupId&&a.label===e.label);if(n)return n;const s=i.filter(a=>a.label===e.label);return s.length===1?s[0]:null}emitDeviceRecovered(t,e,i,r){try{this._deviceRecovered$.next({kind:t,previousDevice:e,newDevice:i,reason:r})}catch{}}async persistDeviceSelection(t,e){if(!this._storageManager||!f.instance.persistDeviceSelection)return;const i={deviceId:e.deviceId,label:e.label,kind:e.kind,groupId:e.groupId};try{await this._storageManager.setItem(Go[t],i,"local")}catch(r){lt.error(`[DeviceController] Failed to persist device selection for ${t}:`,r)}}async loadPersistedDevices(){if(!(!this._storageManager||!f.instance.persistDeviceSelection))for(const t of["audioinput","audiooutput","videoinput"])try{const e=await this._storageManager.getItem(Go[t],"local");e&&(this._persistedDevices={...this._persistedDevices,[t]:e})}catch(e){lt.error(`[DeviceController] Failed to load persisted device for ${t}:`,e)}}async clearDeviceState(){this._deviceHistory.clear(),this._persistedDevices={},this._lastAudioInputBeforeDisable=null,this._lastVideoInputBeforeDisable=null,this._audioInputDisabled$.next(!1),this._videoInputDisabled$.next(!1),this._selectedDevicesState$.next(qo),await this.enumerateDevices()}enableDeviceMonitoring(){this.disableDeviceMonitoring(),this.webRTCApiProvider.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler),f.instance.devicePollingInterval>0&&(this._devicesPoolingSubscription=en(f.instance.devicePollingInterval).subscribe(()=>{lt.debug("[DeviceController] Polling devices due to interval"),this.enumerateDevices()})),this.enumerateDevices()}disableDeviceMonitoring(){this.webRTCApiProvider.mediaDevices.removeEventListener("devicechange",this.deviceChangeHandler),this._devicesPoolingSubscription&&(this._devicesPoolingSubscription.unsubscribe(),this._devicesPoolingSubscription=void 0)}async enumerateDevices(){try{const t=(await this.webRTCApiProvider.mediaDevices.enumerateDevices()).reduce((e,i)=>{const r=i.kind;return{...e,[r]:[...e[r],i]}},{audioinput:[],audiooutput:[],videoinput:[]});this._devicesState$.next(t),lt.debug("[DeviceController] Devices enumerated:",{audioInputs:t.audioinput.length,audioOutputs:t.audiooutput.length,videoInputs:t.videoinput.length})}catch(t){lt.error("[DeviceController] Failed to enumerate devices:",t),this._errors$.next(hi(t))}}async getDeviceCapabilities(t){if(t.kind==="audiooutput")return null;try{const e=this.deviceInfoToConstraints(t),i=await this.webRTCApiProvider.mediaDevices.getUserMedia({audio:t.kind==="audioinput"?e:!1,video:t.kind==="videoinput"?e:!1}),r=(t.kind==="audioinput"?i.getAudioTracks()[0]:i.getVideoTracks()[0]).getCapabilities();return i.getTracks().forEach(n=>n.stop()),r}catch(e){throw lt.error("[DeviceController] Failed to get device capabilities:",e),this._errors$.next(hi(e)),e}}async isValidDevice(t){if(!t||t.kind==="audiooutput")return!1;try{return await this.getDeviceCapabilities(t)!==null}catch{return!1}}destroy(){this.disableDeviceMonitoring(),super.destroy()}},Xo=class{constructor(){if(typeof localStorage>"u")throw new fs("localStorage");if(typeof sessionStorage>"u")throw new fs("sessionStorage");try{const t="__storage_test__";localStorage.setItem(t,"test"),localStorage.removeItem(t)}catch(t){throw G().error("LocalStorage is not accessible:",t),new fs("localStorage")}}storage(t){return t==="local"?localStorage:sessionStorage}async setItem(t,e,i="session"){return this.storage(i).setItem(t,e),Promise.resolve()}async getItem(t,e="session"){return Promise.resolve(this.storage(e).getItem(t))}async removeItem(t,e="session"){return this.storage(e).removeItem(t),Promise.resolve()}async clear(t="session"){const e=this.storage(t),i=[];for(let r=0;r<e.length;r++){const n=e.key(r);n!=null&&n.startsWith("sw:")&&i.push(n)}for(const r of i)e.removeItem(r);return Promise.resolve()}},Yp=class{constructor(t=new Xo){this.storageImpl=t}serialize(t,e){if(t==null)return null;try{return JSON.stringify(t)}catch(i){throw new op(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 vs(t,n)}}async getItem(t,e="session"){let i;try{i=await this.storageImpl.getItem(t,e)}catch(r){throw new lp(t,r)}if(!i)return null;try{return JSON.parse(i)}catch(r){throw new cp(t,r)}}async removeItem(t,e="session"){try{await this.storageImpl.removeItem(t,e)}catch(i){throw new vs(t,i)}}async clearAll(){try{await this.storageImpl.clear("local"),await this.storageImpl.clear("session")}catch(t){throw new vs("clearAll",t)}}},Kp=class{constructor(){this.persistSession=!1,this._webSocketConstructor=typeof WebSocket<"u"?WebSocket:void 0,this._baseURL=this.apiHost,this._credential={}}get userId(){return this.user.id}get user(){if(!this._user)throw new te("User");return this._user}set user(t){this._user=t}get storage(){return this._storageManager||(this._storageImpl??(this._storageImpl=new Xo),this._storageManager=new Yp(this._storageImpl)),this._storageManager}get http(){return this._httpRequestController??(this._httpRequestController=new Np(this._baseURL,()=>this._credential)),this._httpRequestController}get conversationManager(){if(!this._conversationManager)throw new te("ConversationsManager");return this._conversationManager}set conversationManager(t){this._conversationManager=t}get WebSocket(){if(!this._webSocketConstructor)throw new te("WebSocket constructor");return this._webSocketConstructor}set WebSocket(t){this._webSocketConstructor=t}get deviceController(){return this._deviceController??(this._deviceController=new Xp(this.webRTCApiProvider,this.storage)),this._deviceController}get webRTCApiProvider(){if(!this._webRTCApiProvider){if(typeof RTCPeerConnection>"u"||typeof navigator>"u")throw new te("WebRTCApiProvider: RTCPeerConnection or navigator.mediaDevices is not available. Please provide a custom webRTCApiProvider in SignalWireOptions.");this._webRTCApiProvider={RTCPeerConnection,mediaDevices:navigator.mediaDevices}}return this._webRTCApiProvider}set webRTCApiProvider(t){this._webRTCApiProvider=t,this._deviceController=void 0}get authorizationStateKey(){return`sw:${this.userId}:as`}get protocolKey(){return`sw:${this.userId}:pt`}get attachedCallsKey(){return`sw:${this.userId}:att`}getUserFromAddressId(){var t;return((t=this.user.addresses[0])==null?void 0:t.id)??""}set baseURL(t){this._baseURL=t,this._httpRequestController=void 0}get credential(){return this._credential}set credential(t){this._credential=t}set storageImpl(t){this._storageImpl=t,this._storageManager=void 0}set ch(t){if(!t)return;const e=t.indexOf(".");e!==-1&&(this._host=t.substring(0,e),this._domain=t.substring(e+1)),this._baseURL=this.apiHost,this._httpRequestController=void 0}get relayHost(){return`wss://${this._host??"puc"}.${this._domain??"signalwire.com"}`}get apiHost(){return`https://fabric.${this._domain??"signalwire.com"}`}};const qt=G(),Zp="sw-dpop",Qp=1,Xt="keys",ys="dpop-keypair",pn=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(/=+$/,"")},Yo=t=>pn(new TextEncoder().encode(t).buffer),Ko=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 pn(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))};async function ws(){return new Promise((t,e)=>{const i=indexedDB.open(Zp,Qp);i.onupgradeneeded=()=>{const r=i.result;r.objectStoreNames.contains(Xt)||r.createObjectStore(Xt)},i.onsuccess=()=>t(i.result),i.onerror=()=>e(i.error??new Error("Failed to open IndexedDB"))})}async function Jp(){try{const t=await ws();return await new Promise((e,i)=>{const r=t.transaction(Xt,"readonly"),n=r.objectStore(Xt).get(ys);n.onsuccess=()=>e(n.result??null),n.onerror=()=>i(n.error??new Error("Failed to load key pair from IndexedDB")),r.oncomplete=()=>t.close()})}catch(t){return qt.warn("[DPoP] Failed to load key pair from IndexedDB:",t),null}}async function $p(t){try{const e=await ws();await new Promise((i,r)=>{const n=e.transaction(Xt,"readwrite");n.objectStore(Xt).put(t,ys),n.oncomplete=()=>{e.close(),i()},n.onerror=()=>{e.close(),r(n.error??new Error("Failed to save key pair to IndexedDB"))}})}catch(e){qt.warn("[DPoP] Failed to save key pair to IndexedDB:",e)}}async function Zo(){try{const t=await ws();await new Promise((e,i)=>{const r=t.transaction(Xt,"readwrite");r.objectStore(Xt).delete(ys),r.oncomplete=()=>{t.close(),e()},r.onerror=()=>{t.close(),i(r.error??new Error("Failed to delete key pair from IndexedDB"))}})}catch(t){qt.warn("[DPoP] Failed to delete key pair from IndexedDB:",t)}}var eg=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 Jp();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 Ko(this._publicJwk),this._initialized=!0,qt.debug("[DPoP] Key pair restored from IndexedDB, fingerprint:",this._fingerprint),this._fingerprint}catch(e){qt.warn("[DPoP] Stored key pair unusable, generating new one:",e),await Zo()}return qt.debug("[DPoP] Generating RSA key pair"),this._keyPair=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!1,["sign","verify"]),this._publicJwk=await crypto.subtle.exportKey("jwk",this._keyPair.publicKey),this._fingerprint=await Ko(this._publicJwk),this._initialized=!0,await $p(this._keyPair),qt.debug("[DPoP] Key pair generated and persisted, fingerprint:",this._fingerprint),this._fingerprint}get fingerprint(){if(!this._fingerprint)throw new ln("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=pn(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,Zo(),qt.debug("[DPoP] Controller destroyed")}get publicJwk(){if(!this._publicJwk)throw new ln("CryptoController not initialized. Call init() first.");return this._publicJwk}get privateKey(){if(!this._keyPair)throw new ln("CryptoController not initialized. Call init() first.");return this._keyPair.privateKey}async signProof(t){const e={typ:"dpop+jwt",alg:"RS256",jwk:this.publicJwk},i=`${Yo(JSON.stringify(e))}.${Yo(JSON.stringify(t))}`;return`${i}.${pn(await crypto.subtle.sign("RSASSA-PKCS1-v1_5",this.privateKey,new TextEncoder().encode(i)))}`}};const Vi=G();function Qo(){return typeof window<"u"&&typeof window.addEventListener=="function"}function Jo(){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 tg=class extends se{constructor(){super(),this._isOnline$=this.createBehaviorSubject(typeof navigator<"u"?navigator.onLine:!0),this._networkChange$=this.createSubject(),this._onOnline=this.handleOnline.bind(this),this._onOffline=this.handleOffline.bind(this),this._onConnectionChange=this.handleConnectionChange.bind(this),this._listenersAttached=!1,this.attachListeners()}get isOnline$(){return this._isOnline$.asObservable().pipe(S(this._destroyed$))}get isOnline(){return this._isOnline$.value}get networkChange$(){return this._networkChange$.asObservable().pipe(S(this._destroyed$))}destroy(){this.removeListeners(),super.destroy()}attachListeners(){if(!Qo()){Vi.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,Vi.debug("NetworkMonitor: event listeners attached")}removeListeners(){if(this._listenersAttached){if(Qo()){window.removeEventListener("online",this._onOnline),window.removeEventListener("offline",this._onOffline);const t=$o();t&&t.removeEventListener("change",this._onConnectionChange)}this._listenersAttached=!1,Vi.debug("NetworkMonitor: event listeners removed")}}handleOnline(){Vi.info("NetworkMonitor: browser went online"),this._isOnline$.next(!0),this._networkChange$.next({type:"online",timestamp:Date.now(),networkType:Jo()})}handleOffline(){Vi.info("NetworkMonitor: browser went offline"),this._isOnline$.next(!1),this._networkChange$.next({type:"offline",timestamp:Date.now()})}handleConnectionChange(){const t=Jo();Vi.info(`NetworkMonitor: connection changed — effectiveType=${t??"unknown"}`),this._networkChange$.next({type:"connection_change",timestamp:Date.now(),networkType:t})}};function ec(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=ig(n.mimeType);s&&!i.has(s)&&(i.add(s),r.push(s))}return r}function ig(t){const e=t.indexOf("/");return e>=0?t.substring(e+1):t}function rg(){return typeof globalThis>"u"?!1:"RTCRtpScriptTransform"in globalThis||"MediaStreamTrackProcessor"in globalThis}function ng(){return typeof HTMLMediaElement>"u"?!1:"setSinkId"in HTMLMediaElement.prototype}function sg(){return typeof RTCRtpSender>"u"?!1:typeof RTCRtpSender.prototype.setParameters=="function"}function tc(t){const e=(t==null?void 0:t.mediaDevices)??ic(),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:ag(),simulcast:sg(),insertableStreams:rg(),audioOutputSelection:ng(),videoCodecs:ec("video"),audioCodecs:ec("audio")};return Object.freeze(n)}function ag(){if(typeof navigator>"u")return!1;const t=ic();return!t||typeof t.getDisplayMedia!="function"?!1:navigator.userAgent.includes("Chrome/")}function ic(){return typeof navigator<"u"?navigator.mediaDevices:null}const gn=G(),og=10,cg=1e4,lg=5e3,ug=5e3;var dg=class extends se{constructor(t,e,i,r,n,s={}){super(),this.deviceController=t,this.iceServers=e,this.isConnected=i,this.transportRttMs=r,this.dialFn=n,this._options={duration:s.duration??og,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){gn.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 gn.error("[PreflightRunner] Preflight test failed:",i),new fp("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")),ug))]);for(const o of s.getTracks())o.kind==="audio"&&o.readyState==="live"&&(r=!0),o.kind==="video"&&o.readyState==="live"&&(n=!0)}catch(a){gn.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,cg);e.onicecandidate=C=>{if(C.candidate){const _=C.candidate.candidate;_.includes("typ host")&&i.add("host"),_.includes("typ srflx")&&i.add("srflx"),_.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 gn.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 Ze(e.status$.pipe(B(a=>a==="connected"),Oe(1),Sr(lg)));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 fn=G();function hg(){try{return typeof document<"u"&&typeof document.addEventListener=="function"&&typeof document.visibilityState=="string"}catch{return!1}}function rc(){try{if(typeof document<"u"&&typeof document.visibilityState=="string")return document.visibilityState==="visible"?"visible":"hidden"}catch{}return"visible"}var pg=class extends se{constructor(){super(),this._visibility$=this.createBehaviorSubject(rc()),this._visibilityChange$=this.createSubject(),this._hasVisibilityApi=hg(),this._boundHandler=this._handleVisibilityChange.bind(this),this._hasVisibilityApi?(document.addEventListener("visibilitychange",this._boundHandler),fn.debug("VisibilityController: listening for visibilitychange events")):fn.debug("VisibilityController: document visibility API not available, defaulting to visible")}get visibility$(){return this._visibility$.pipe(S(this._destroyed$))}get visibility(){return this._visibility$.value}get visibilityChange$(){return this._visibilityChange$.pipe(S(this._destroyed$))}destroy(){this._hasVisibilityApi&&(document.removeEventListener("visibilitychange",this._boundHandler),fn.debug("VisibilityController: removed visibilitychange listener")),super.destroy()}_handleVisibilityChange(){const t=rc(),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),fn.debug("VisibilityController: visibility changed",{from:e,to:t})}},gg=class extends se{constructor(t,e){super(),this.fromPath=t,this.http=e,this.fetched$=li(()=>_e(this.fetch())).pipe(st(1),S(this.destroyed$))}async fetch(){const t=await this.http.request({url:this.fromPath,method:"GET",headers:{Accept:"application/json"}});if(t.ok&&t.body){const e=JSON.parse(t.body);return this.populateInstance(e),!0}return!1}},fg=class extends gg{constructor(t){super("/api/fabric/subscriber/info",t)}populateInstance(t){this.id=t.id,this.email=t.email,this.firstName=t.first_name,this.lastName=t.last_name,this.displayName=t.display_name,this.jobTitle=t.job_title,this.timeZone=t.time_zone,this.country=t.country,this.region=t.region,this.companyName=t.company_name,this.pushNotificationKey=t.push_notification_key,this.appSettings=t.app_settings?{displayName:t.app_settings.display_name,scopes:t.app_settings.scopes}:void 0,this.addresses=t.fabric_addresses,this.satClaims=t.sat_claims}};const Hi=t=>({jsonrpc:"2.0",id:t.id??dn(),...t}),nc=t=>({jsonrpc:"2.0",...t}),vg={major:4,minor:0,revision:0},bg=t=>Hi({method:"signalwire.connect",params:{version:vg,event_acks:!0,...t}}),mg=t=>{const{dpop_token:e,...i}=t;return Hi({method:"signalwire.reauthenticate",params:{authentication:i,...e?{dpop_token:e}:{}}})},yg=(t,e)=>nc({id:t,result:{timestamp:Date.now()/1e3}}),Ss=({method:t,params:e})=>Hi({method:t,params:e}),wg={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"},Sg=new Set(["remoteSdp","localStream","remoteStream"]),Cg=t=>{if(!Object.prototype.hasOwnProperty.call(t,"dialogParams"))return t;const e=t.dialogParams,i=Object.entries(e).reduce((r,[n,s])=>{if(Sg.has(n))return r;const a=wg[n]??n;return{...r,[a]:s}},{});return{...t,dialogParams:i}},pi=t=>(e={})=>Hi({method:t,params:Cg(e)}),sc=t=>Hi({method:"webrtc.verto",params:t}),Ag=pi("verto.invite"),Tg=pi("verto.bye"),vn=pi("verto.modify"),Eg=pi("verto.info"),kg=pi("verto.answer"),xg=pi("verto.subscribe"),Dg=pi("verto.pong"),Ig={NORMAL_CLEARING:"16",USER_BUSY:"17",MEDIA_TIMEOUT:"804"},Mg=t=>nc({id:t,result:{}}),ji=G();var Rg=class{constructor(t,e,i,r){this.storage=t,this.deviceController=e,this.reconnectCallsTimeout=i,this.attachKey=r,this.writeQueue=Promise.resolve()}async detachAll(){await this.mutate(t=>({}))}setSession(t){this.session=t}async readAttached(){try{return await this.storage.getItem(this.attachKey)??{}}catch(t){return ji.warn("[AttachManager] Failed to retrieve attached calls from storage",t),{}}}async writeAttached(t){try{await this.storage.setItem(this.attachKey,t)}catch(e){ji.warn("[AttachManager] Failed to write attached calls to storage",e)}}async mutate(t){const e=this.writeQueue.then(async()=>{const i=await t(await this.readAttached());await this.writeAttached(i)});return this.writeQueue=e.catch(()=>{}),e}async attach(t){if(!t.to){ji.warn("[AttachManager] Skip attach for calls with no destination");return}const e=t.to,i={nodeId:t.nodeId,destination:e,mediaDirections:t.mediaDirections,audioInputDevice:t.mediaDirections.audio!=="inactive"?this.deviceController.selectedAudioInputDevice:null,videoInputDevice:t.mediaDirections.video!=="inactive"?this.deviceController.selectedVideoInputDevice:null,attachedAt:Date.now()};await this.mutate(r=>({...r,[t.id]:i}))}async detach(t){await this.mutate(e=>{const{[t.id]:i,...r}=e;return r})}async flush(){await this.mutate(()=>({}))}async reattachCalls(){const t=await this.readAttached();await this.detachExpired();for(const[e,i]of Object.entries(t)){const{destination:r}=i,n=this.buildCallOptions(i);let s=!1;for(let a=1;a<=3;a++)try{await this.session.createOutboundCall(r,{callId:e,...n}),ji.info(`[AttachManager] Reattached call ${e} (attempt ${a})`),s=!0;break}catch(o){ji.warn(`[AttachManager] Reattach attempt ${a}/3 failed for call ${e}:`,o),a<3&&await new Promise(c=>setTimeout(c,(a+1)*1e3))}s||(ji.warn(`[AttachManager] Reattach failed after 3 attempts for call ${e}, removing reference`),await this.detach({id:e,mediaDirections:i.mediaDirections}))}}buildCallOptions(t){const{audio:e,video:i}=t.mediaDirections,{audioInputDevice:r,videoInputDevice:n,nodeId:s}=t,a=e.includes("recv"),o=i.includes("recv"),c=e.includes("send"),u=i.includes("send");return{nodeId:s,receiveAudio:a,receiveVideo:o,inputAudioDeviceConstraints:c?{audio:!0,...this.deviceController.deviceInfoToConstraints(r)}:void 0,inputVideoDeviceConstraints:u?{video:!0,...this.deviceController.deviceInfoToConstraints(n)}:void 0,reattach:!0}}async consumePendingAttachment(t){const e=await this.readAttached();if(Object.hasOwn(e,t))return this.buildCallOptions(e[t])}async detachExpired(){const t=Date.now(),e=this.reconnectCallsTimeout;await this.mutate(i=>{const r={...i};let n=!1;for(const[s,a]of Object.entries(i))t-a.attachedAt>e&&(delete r[s],n=!0);return n?r:i})}};const gi={on:!1,off:!1},Cs={muteAudio:gi,muteVideo:gi,deaf:gi,raisehand:gi,microphoneVolume:!1,microphoneSensitivity:!1,speakerVolume:!1,position:!1,meta:!1,remove:!1,audioFlags:!1,denoise:!1,lowbitrate:!1},ac={self:Cs,member:Cs,end:!1,setLayout:!1,sendDigit:!1,vmutedHide:gi,lock:gi,device:!1,screenshare:!1};function Wi(t){return t.length===0?gi:{on:t.some(e=>!e.endsWith(".off")),off:t.some(e=>!e.endsWith(".on"))}}function oc(t,e,i,r){return t.filter(n=>n===e||n===`${e}.${i}`||n.startsWith(`${e}.${i}.${r}`))}function Ft(t,e,i,r){return t.some(n=>n===e||i!==null&&n===`${e}.${i}`||n.startsWith(`${e}.${i?`${i}.`:""}${r}`))}function cc(t,e){return t.filter(i=>i.startsWith(e)||i===e).length===0?Cs:{muteAudio:Wi(oc(t,e,"mute","audio")),muteVideo:Wi(oc(t,e,"mute","video")),deaf:Wi(t.filter(i=>i===e||i.startsWith(`${e}.deaf`))),raisehand:Wi(t.filter(i=>i===e||i.startsWith(`${e}.raisehand`))),microphoneVolume:Ft(t,e,"microphone","volume"),microphoneSensitivity:Ft(t,e,"microphone","sensitivity"),speakerVolume:Ft(t,e,"speaker","volume"),position:Ft(t,e,null,"position"),meta:Ft(t,e,null,"meta"),remove:Ft(t,e,null,"remove"),audioFlags:Ft(t,e,null,"audioflags"),denoise:Ft(t,e,null,"denoise"),lowbitrate:Ft(t,e,null,"lowbitrate")}}function Pg(t){return t.length===0?ac:{self:cc(t,"self"),member:cc(t,"member"),end:t.some(e=>e==="end"),setLayout:t.some(e=>e.startsWith("layout")),sendDigit:t.some(e=>e.startsWith("digit")),vmutedHide:Wi(t.filter(e=>e.startsWith("vmuted"))),lock:Wi(t.filter(e=>e.startsWith("lock"))),device:t.some(e=>e==="device"),screenshare:t.some(e=>e==="screenshare")}}var _g=class extends se{constructor(...t){super(...t),this._state$=this.createBehaviorSubject(ac)}updateFromRaw(t){const e=Pg(t);this._state$.next(e)}get self$(){return this.cachedObservable("self$",()=>this._state$.pipe(x(t=>t.self),U()))}get self(){return this._state$.value.self}get member$(){return this.cachedObservable("member$",()=>this._state$.pipe(x(t=>t.member),U()))}get member(){return this._state$.value.member}get end$(){return this.cachedObservable("end$",()=>this._state$.pipe(x(t=>t.end),U()))}get end(){return this._state$.value.end}get setLayout$(){return this.cachedObservable("setLayout$",()=>this._state$.pipe(x(t=>t.setLayout),U()))}get setLayout(){return this._state$.value.setLayout}get sendDigit$(){return this.cachedObservable("sendDigit$",()=>this._state$.pipe(x(t=>t.sendDigit),U()))}get sendDigit(){return this._state$.value.sendDigit}get vmutedHide$(){return this.cachedObservable("vmutedHide$",()=>this._state$.pipe(x(t=>t.vmutedHide),U()))}get vmutedHide(){return this._state$.value.vmutedHide}get lock$(){return this.cachedObservable("lock$",()=>this._state$.pipe(x(t=>t.lock),U()))}get lock(){return this._state$.value.lock}get device$(){return this.cachedObservable("device$",()=>this._state$.pipe(x(t=>t.device),U()))}get device(){return this._state$.value.device}get screenshare$(){return this.cachedObservable("screenshare$",()=>this._state$.pipe(x(t=>t.screenshare),U()))}get screenshare(){return this._state$.value.screenshare}get state$(){return this._state$.asObservable()}get state(){return this._state$.value}};function Og(t){return t?"call.undeaf":"call.deaf"}function Lg(t){return t?"call.lowerhand":"call.raisehand"}const fi=G(),Fg={};var lc=class extends se{constructor(t,e,i){super(),this.callExecuteMethod=e,this.deviceController=i,this._state$=this.createBehaviorSubject(Fg),this.id=t}upnext(t){this._state$.next({...this._state$.value,...t})}get name$(){return this.cachedObservable("name$",()=>this._state$.pipe(x(t=>t.name),U()))}get type$(){return this.cachedObservable("type$",()=>this._state$.pipe(x(t=>t.type),U()))}get handraised$(){return this.cachedObservable("handraised$",()=>this._state$.pipe(x(t=>t.handraised),U()))}get visible$(){return this.cachedObservable("visible$",()=>this._state$.pipe(x(t=>t.visible),U()))}get audioMuted$(){return this.cachedObservable("audioMuted$",()=>this._state$.pipe(x(t=>t.audio_muted),U()))}get videoMuted$(){return this.cachedObservable("videoMuted$",()=>this._state$.pipe(x(t=>t.video_muted),U()))}get deaf$(){return this.cachedObservable("deaf$",()=>this._state$.pipe(x(t=>t.deaf),U()))}get inputVolume$(){return this.cachedObservable("inputVolume$",()=>this._state$.pipe(x(t=>t.input_volume),U()))}get outputVolume$(){return this.cachedObservable("outputVolume$",()=>this._state$.pipe(x(t=>t.output_volume),U()))}get inputSensitivity$(){return this.cachedObservable("inputSensitivity$",()=>this._state$.pipe(x(t=>t.input_sensitivity),U()))}get echoCancellation$(){return this.cachedObservable("echoCancellation$",()=>this._state$.pipe(x(t=>t.echo_cancellation),U()))}get autoGain$(){return this.cachedObservable("autoGain$",()=>this._state$.pipe(x(t=>t.auto_gain),U()))}get noiseSuppression$(){return this.cachedObservable("noiseSuppression$",()=>this._state$.pipe(x(t=>t.noise_suppression),U()))}get lowbitrate$(){return this.cachedObservable("lowbitrate$",()=>this._state$.pipe(x(t=>t.lowbitrate),U()))}get denoise$(){return this.cachedObservable("denoise$",()=>this._state$.pipe(x(t=>t.denoise),U()))}get meta$(){return this.cachedObservable("meta$",()=>this._state$.pipe(x(t=>t.meta),U()))}get userId$(){return this.cachedObservable("userId$",()=>this._state$.pipe(x(t=>t.subscriber_id),U()))}get addressId$(){return this.cachedObservable("addressId$",()=>this._state$.pipe(x(t=>t.address_id),U()))}get nodeId$(){return this.cachedObservable("nodeId$",()=>this._state$.pipe(x(t=>t.node_id),U()))}get isTalking$(){return this.cachedObservable("isTalking$",()=>this._state$.pipe(x(t=>t.talking),U()))}get isTalking(){return this._state$.value.talking??!1}get position$(){return this.cachedObservable("position$",()=>this._state$.pipe(x(t=>t.position),U()))}get position(){return this._state$.value.position}get isAudience(){return this._state$.value.isAudience??!1}get name(){return this._state$.value.name}get type(){return this._state$.value.type}get handraised(){return this._state$.value.handraised??!1}get visible(){return this._state$.value.visible??!1}get audioMuted(){return this._state$.value.audio_muted??!1}get videoMuted(){return this._state$.value.video_muted??!1}get deaf(){return this._state$.value.deaf??!1}get inputVolume(){return this._state$.value.input_volume}get outputVolume(){return this._state$.value.output_volume}get inputSensitivity(){return this._state$.value.input_sensitivity}get echoCancellation(){return this._state$.value.echo_cancellation??!1}get autoGain(){return this._state$.value.auto_gain??!1}get noiseSuppression(){return this._state$.value.noise_suppression??!1}get lowbitrate(){return this._state$.value.lowbitrate??!1}get denoise(){return this._state$.value.denoise??!1}get meta(){return this._state$.value.meta}get userId(){return this._state$.value.subscriber_id}get addressId(){return this._state$.value.address_id}get nodeId(){return this._state$.value.node_id}get callId(){return this._state$.value.call_id}get value(){return this._state$.value}get target(){const{call_id:t,node_id:e}=this._state$.value;if(!t||!e)throw new dp(this.id);return{member_id:this.id,call_id:t,node_id:e}}async executeMethod(t,e){return this.callExecuteMethod(this.target,t,e)}async toggleDeaf(){await this.executeMethod(Og(this.deaf),{})}async toggleHandraise(){await this.executeMethod(Lg(this.handraised),{})}async mute(){await this.executeMethod("call.mute",{channels:["audio"]})}async unmute(){await this.executeMethod("call.unmute",{channels:["audio"]})}async toggleMute(){return this.audioMuted?this.unmute():this.mute()}async muteVideo(){await this.executeMethod("call.mute",{channels:["video"]})}async unmuteVideo(){await this.executeMethod("call.unmute",{channels:["video"]})}async toggleMuteVideo(){return this.videoMuted?this.unmuteVideo():this.muteVideo()}async toggleEchoCancellation(){await this.executeMethod("call.audioflags.set",{echo_cancellation:!this.echoCancellation,auto_gain:this.autoGain,noise_suppression:this.noiseSuppression})}async toggleAudioInputAutoGain(){await this.executeMethod("call.audioflags.set",{echo_cancellation:this.echoCancellation,auto_gain:!this.autoGain,noise_suppression:this.noiseSuppression})}async toggleNoiseSuppression(){await this.executeMethod("call.audioflags.set",{echo_cancellation:this.echoCancellation,auto_gain:this.autoGain,noise_suppression:!this.noiseSuppression})}async toggleLowbitrate(){await this.executeMethod("call.lowbitrate.set",{lowbitrate:!this.lowbitrate})}async setAudioInputSensitivity(t){await this.executeMethod("call.microphone.sensitivity.set",{sensitivity:t})}async setAudioInputVolume(t){await this.executeMethod("call.microphone.volume.set",{volume:t})}async setAudioOutputVolume(t){await this.executeMethod("call.speaker.volume.set",{volume:t})}async setPosition(t){await this.executeMethod("call.member.position.set",{targets:[{target:this.target,position:t}]})}async remove(){await this.executeMethod("call.member.remove",{targets:[this.target]})}async end(){await this.executeMethod("call.end",{})}async setMeta(t){throw new Tt}async updateMeta(t){throw new Tt}destroy(){this.callExecuteMethod=void 0,super.destroy()}},uc=class extends lc{constructor(t,e,i,r){super(t,e,r),this.vertoManager=i,this._studioAudio$=this.createBehaviorSubject(!1),this.capabilities=new _g}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("call.audioflags.set",{echo_cancellation:!1,auto_gain:!1,noise_suppression:!1}))}async disableStudioAudio(){this._studioAudio$.value&&(this._studioAudio$.next(!1),await this.executeMethod("call.audioflags.set",{echo_cancellation:!0,auto_gain:!0,noise_suppression:!0}))}async startScreenShare(){try{await this.vertoManager.addScreenMedia()}catch(t){throw fi.error("[Participant.startScreenShare] Screen share error:",t),t}}get screenShareStatus$(){return this.vertoManager.screenShareStatus$}get screenShareStatus(){return this.vertoManager.screenShareStatus}async stopScreenShare(){return this.vertoManager.removeScreenMedia()}async addAdditionalDevice(t){try{await this.vertoManager.addInputDevice(t)}catch(e){throw fi.error("[Participant.addAdditionalDevice] Additional device error:",e),e}}async removeAdditionalDevice(t){return this.vertoManager.removeInputDevices(t)}async addAudioInputDevice({constraints:t,stream:e}={}){const i=t??e?void 0:!0;return this.vertoManager.addMainInputDevices({audio:i,inputAudioDeviceConstraints:t,inputAudioStream:e})}async addVideoInputDevice({constraints:t,stream:e}={}){const i=t??e?void 0:!0;return this.vertoManager.addMainInputDevices({video:i,inputVideoDeviceConstraints:t,inputVideoStream:e})}async addInputDevices(t={}){await this.vertoManager.addMainInputDevices(t)}selectAudioInputDevice(t,e={}){this.deviceController.selectAudioInputDevice(t),e.savePreference&&(f.instance.preferredAudioInput=t)}async setAudioInputDeviceConstraints(t){await this.vertoManager.updateMediaConstraints({audio:t})}async setInputDevicesConstraints(t){await this.vertoManager.updateMediaConstraints(t)}selectVideoInputDevice(t,e={}){this.deviceController.selectVideoInputDevice(t),e.savePreference&&(f.instance.preferredVideoInput=t)}async setVideoInputDeviceConstraints(t){await this.vertoManager.updateMediaConstraints({video:t})}selectAudioOutputDevice(t,e={}){this.deviceController.selectAudioOutputDevice(t),e.savePreference&&(f.instance.preferredAudioOutput=t)}exitStudioModeIfActive(){this._studioAudio$.value&&(fi.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){fi.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){fi.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){fi.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){fi.warn("[Participant.toggleVideoInput] Server Error while unmuting video input, proceeding with local toggle anyway",t)}finally{await this.vertoManager.unmuteMainVideoInputDevice()}}};const dc=t=>t instanceof uc;function ke(t){return typeof t=="object"&&t!==null}function K(t,e){return e in t}function As(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"id")&&typeof t.id=="string"&&K(t,"method")&&typeof t.method=="string"}function Ts(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"id")&&typeof t.id=="string"&&(K(t,"result")||K(t,"error"))}function Ng(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"id")&&typeof t.id=="string"&&(K(t,"error")&&ke(t.error)&&K(t.error,"code")&&K(t.error,"message")||K(t,"result")&&ke(t.result)&&K(t.result,"code")&&t.result.code!=="200"&&K(t.result,"message"))}function Be(t){return e=>hc(e)&&e.event_type===t}function Es(t){return As(t)&&t.method==="signalwire.event"&&ke(t.params)&&K(t.params,"event_type")}function hc(t){return ke(t)&&K(t,"event_type")&&typeof t.event_type=="string"&&K(t,"params")}function Ug(t){return hc(t)&&(zg(t)||Vg(t)||pc(t)||gc(t)||Hg(t)||jg(t)||Wg(t)||fc(t)||vc(t)||bc(t)||mc(t)||ks(t)||bn(t)||yc(t)||wc(t))}const Bg=Be("signalwire.authorization.state"),bn=Be("webrtc.message"),zg=Be("call.joined"),Vg=Be("call.left"),pc=Be("call.updated"),gc=Be("call.state"),Hg=Be("call.play"),jg=Be("call.connect"),Wg=Be("room.updated"),fc=Be("member.updated"),vc=Be("member.joined"),bc=Be("member.left"),mc=Be("member.talking"),ks=Be("layout.changed"),yc=Be("conversation.message"),wc=Be("conversation.message.updated");function Sc(t){return ke(t)&&K(t,"room_session")&&K(t,"call_id")&&K(t,"member_id")&&K(t,"capabilities")}function Gg(t){return ke(t)&&K(t,"room_id")&&K(t,"room_session_id")&&K(t,"layout")}const $e=G(),qg={};var Xg=class extends se{constructor(t,e={}){super(),this.webRtcCallSession=t,this.options=e,this.callIds=new Set,this.roomSessionIds=new Set,this._participants$=this.createBehaviorSubject({}),this._self$=this.createBehaviorSubject(null),this._sessionState$=this.createBehaviorSubject(qg),this.initSubscriptions()}get participants$(){return this.cachedObservable("participants$",()=>this._participants$.asObservable().pipe(x(t=>Object.values(t))))}get participants(){return Object.values(this._participants$.value)}get self$(){return this.cachedObservable("self$",()=>this._self$.asObservable().pipe(fe()))}isRoomSessionIdValid(t){return this.roomSessionIds.has(t)}addCallId(t){this.callIds.add(t)}isCallIdValid(t){return this.callIds.has(t)}get recording$(){return this.cachedObservable("recording$",()=>this._sessionState$.pipe(x(t=>t.recording),U(),fe()))}get recordings$(){return this.cachedObservable("recordings$",()=>this._sessionState$.pipe(x(t=>t.recordings),U(),fe()))}get streaming$(){return this.cachedObservable("streaming$",()=>this._sessionState$.pipe(x(t=>t.streaming),U(),fe()))}get streams$(){return this.cachedObservable("streams$",()=>this._sessionState$.pipe(x(t=>t.streams),U(),fe()))}get playbacks$(){return this.cachedObservable("playbacks$",()=>this._sessionState$.pipe(x(t=>t.playbacks),U(),fe()))}get raiseHandPriority$(){return this.cachedObservable("raiseHandPriority$",()=>this._sessionState$.pipe(x(t=>t.prioritize_handraise),U(),fe()))}get locked$(){return this.cachedObservable("locked$",()=>this._sessionState$.pipe(x(t=>t.locked),U(),fe()))}get meta$(){return this.cachedObservable("meta$",()=>this._sessionState$.pipe(x(t=>t.meta),U(),fe()))}get capabilities$(){return this.cachedObservable("capabilities$",()=>this._sessionState$.pipe(x(t=>t.capabilities),U(),fe()))}get layout$(){return this.cachedObservable("layout$",()=>this._sessionState$.pipe(x(t=>t.layout_name),U(),fe()))}get layouts$(){return this.cachedObservable("layouts$",()=>this._sessionState$.pipe(x(t=>t.layouts),U(),fe()))}get layoutLayers$(){return this.cachedObservable("layoutLayers$",()=>this._sessionState$.pipe(x(t=>t.layout_layers),U(),fe()))}get self(){return this._self$.value}get layoutLayers(){return this._sessionState$.value.layout_layers??[]}get recording(){return this._sessionState$.value.recording??!1}get streaming(){return this._sessionState$.value.streaming??!1}get raiseHandPriority(){return this._sessionState$.value.prioritize_handraise??!1}get locked(){return this._sessionState$.value.locked??!1}get meta(){return this._sessionState$.value.meta??{}}get layout(){return this._sessionState$.value.layout_name}get layouts(){return this._sessionState$.value.layouts??[]}get capabilities(){return this._sessionState$.value.capabilities??[]}isSessionEvent(t){return this.callIds.has(t)||this.roomSessionIds.has(t)}initSubscriptions(){this.subscribeTo(this.callJoinedEvent$,t=>{var r,n;$e.debug("[CallEventsManager] Handling call.joined event for call/session IDs:",{callId:t.call_id,roomSessionId:t.room_session_id});const e=t.room_session,i=t.capabilities;this.selfId=this.selfId??t.member_id,this.originCallId=this.originCallId??t.origin_call_id,this.callIds.add(t.call_id),this.roomSessionIds.add(t.room_session_id),this._sessionState$.next({...this._sessionState$.value,recording:e.recording,recordings:e.recordings,streaming:e.streaming,streams:e.streams,playbacks:e.playbacks,prioritize_handraise:e.prioritize_handraise,locked:e.locked,meta:e.meta,capabilities:i}),this.updateParticipants(e.members),(r=this._self$.value)==null||r.capabilities.updateFromRaw(i),(n=this._self$.value)!=null&&n.capabilities.setLayout&&this.updateLayouts()}),this.subscribeTo(this.memberUpdates$,t=>{$e.debug("[CallEventsManager] Handling member update event for member ID:",t),this.upsertParticipant(t)}),this.subscribeTo(this.webRtcCallSession.memberLeft$,t=>{$e.debug("[CallEventsManager] Handling member.left event for member ID:",t.member.member_id);const e={...this._participants$.value};t.member.member_id in e?(delete e[t.member.member_id],this._participants$.next(e)):$e.warn(`[CallEventsManager] Received member.left event for unknown member ID: ${t.member.member_id}`)}),this.subscribeTo(this.webRtcCallSession.callUpdated$,t=>{$e.debug("[CallEventsManager] Handling call.updated event:",t);const e=t.room_session;this._sessionState$.next({...this._sessionState$.value,recording:e.recording,recordings:e.recordings,streaming:e.streaming,streams:e.streams,playbacks:e.playbacks,prioritize_handraise:e.prioritize_handraise,locked:e.locked,meta:e.meta})}),this.subscribeTo(this.layoutChangedEvent$,t=>{$e.debug("[CallEventsManager] Handling layout.changed event:",t),this._sessionState$.next({...this._sessionState$.value,layout_name:t.id,layout_layers:t.layers}),this.updateParticipantPositions(t)})}updateParticipantPositions(t){Object.keys(this._participants$.value).length>0&&!t.layers.some(e=>!!e.member_id)&&$e.warn("[CallEventsManager] No layers with member_id found in layout.changed event. Nothing to update."),t.layers.filter(e=>!!e.member_id).filter(e=>e.member_id in this._participants$.value?!0:($e.warn(`[CallEventsManager] Skipping layout layer for unknown member_id: ${e.member_id}`),!1)).map(e=>(this._participants$.value[e.member_id].upnext({position:e}),this._participants$.value[e.member_id])).forEach(e=>{dc(e)&&this._self$.next(e),this._participants$.next({...this._participants$.value,[e.id]:e})})}updateLayouts(){this.selfId&&this.webRtcCallSession.executeMethod(this.selfId,"call.layout.list",{}).then(t=>{this._sessionState$.next({...this._sessionState$.value,layouts:t.result.layouts})}).catch(t=>{$e.error("[CallEventsManager] Error fetching layouts:",t)})}updateParticipants(t){t.forEach(e=>this.upsertParticipant(e))}upsertParticipant(t){if(!(t.member_id in this._participants$.value)){const r=this.webRtcCallSession.createParticipant(t.member_id,this.selfId);this._participants$.next({...this._participants$.value,[t.member_id]:r})}const e=this._participants$.value[t.member_id],i=e.value;$e.debug("[CallEventsManager] Updating participant:",t.member_id,{oldValue:i,newValue:t}),e.upnext({...i,...t}),dc(e)&&this._self$.next(e),this._participants$.next(this._participants$.value)}get callJoinedEvent$(){return this.cachedObservable("callJoinedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(B(Sc),Ee(t=>{$e.debug("[CallEventsManager] Call joined event:",t)})))}get layoutChangedEvent$(){return this.cachedObservable("layoutChangedEvent$",()=>this.webRtcCallSession.callEvent$.pipe(we(Gg,"layout"),Ee(t=>{$e.debug("[CallEventsManager] Layout changed event:",t)})))}get memberUpdates$(){return this.cachedObservable("memberUpdates$",()=>Ni(this.webRtcCallSession.memberJoined$,this.webRtcCallSession.memberUpdated$,this.webRtcCallSession.memberTalking$).pipe(x(t=>t.member),Ee(t=>{$e.debug("[CallEventsManager] Member update event:",t)})))}destroy(){Object.values(this._participants$.value).forEach(t=>{t.destroy()}),this._participants$.next({}),this._self$.next(null),this.callIds.clear(),this.roomSessionIds.clear(),this.selfId=void 0,this.originCallId=void 0,this.webRtcCallSession=void 0,this.callSession=void 0,super.destroy()}};const Yg=new Set(["sendrecv","sendonly","recvonly","inactive"]);function Kg(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 Cc(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 Zg(t,e=[],i=[]){if(!t||e.length===0&&i.length===0)return t;const r=$g(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(Ac(a,e)):o.startsWith("m=audio")&&i.length>0?n.push(Ac(a,i)):n.push(a)}return n.join("")}function Qg(t,e=np){if(!t)return t;const i=ef(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(tf(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 Ig=class extends ie{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??Kh,this._speakingHoldMs=t.speakingHoldMs??Zh,this._pollIntervalMs=t.pollIntervalMs??Ao;const e=t.initialGain??1;this._gain$.next(e),this.applyEffectiveGain()}get gain$(){return this._gain$.asObservable()}get gain(){return this._gain$.value}get outputTrack(){const[t]=this._destination.stream.getAudioTracks();return t}get level$(){return this.deferEmission(jr(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 Lt=W();var Mg=class extends ie{constructor(t){super(),this.options=t,this.mediaTrackEndedHandler=e=>{this._mediaTrackEnded$.next(e)},this._localStream$=this.createBehaviorSubject(null),this._localAudioTracks$=this.createBehaviorSubject([]),this._localVideoTracks$=this.createBehaviorSubject([]),this._mediaTrackEnded$=this.createSubject()}get localStream$(){return this._localStream$.asObservable().pipe(S(this.destroyed$))}get localAudioTracks$(){return this._localAudioTracks$.asObservable().pipe(S(this.destroyed$))}get localVideoTracks$(){return this._localVideoTracks$.asObservable().pipe(S(this.destroyed$))}get mediaTrackEnded$(){return this._mediaTrackEnded$.asObservable().pipe(S(this.destroyed$))}get localStream(){return this._localStream$.value}get localAudioTracks(){return this._localAudioTracks$.value}get localVideoTracks(){return this._localVideoTracks$.value}async buildLocalStream(){var e,i;Lt.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")Lt.debug("[LocalStreamController] Requesting display media for screen sharing with audio:",!!this.options.inputAudioDeviceConstraints),t=await this.options.getDisplayMedia({video:!0,audio:!!this.options.inputAudioDeviceConstraints}),Lt.debug("[LocalStreamController] Screen share media obtained:",t);else{const r={audio:this.options.inputAudioDeviceConstraints,video:this.options.inputVideoDeviceConstraints};Lt.debug("[LocalStreamController] Requesting user media with constraints:",r),t=await this.options.getUserMedia(r),Lt.debug("[LocalStreamController] User media obtained:",t)}return this._localStream$.next(t),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()),Lt.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){Lt.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())??[]),Lt.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=>{Lt.debug(`[LocalStreamController] Stopping local track: ${e.kind}`),e.removeEventListener("ended",this.mediaTrackEndedHandler),e.stop()})}destroy(){this.stopAllTracks(),super.destroy()}};const Be=W(),nc=(t,e)=>t&&e?"sendrecv":t&&!e?"sendonly":!t&&e?"recvonly":"inactive";var Rg=class extends ie{constructor(t){super(),this.peerConnection=t.peerConnection,this.options=t}get useAddTransceivers(){return typeof this.peerConnection.addTransceiver=="function"}get useAddTrack(){return typeof this.peerConnection.addTrack=="function"}get useAddStream(){return typeof this.peerConnection.addStream=="function"&&!this.useAddTransceivers&&!this.useAddTrack}get propose(){return this.options.propose}get isAdditionalDevice(){return this.propose==="additional-device"}get isScreenShare(){return this.propose==="screenshare"}get isSimulcast(){return!!this.options.simulcast}get isSFU(){return!!this.options.sfu}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.options.localStreamController.localStream}get inputAudioDeviceConstraints(){return this.options.getInputAudioDeviceConstraints()}get inputVideoDeviceConstraints(){return this.options.getInputVideoDeviceConstraints()}get audioDirection(){if(this.isAdditionalDevice)return"sendonly";const{localStream:t}=this,e=t==null?void 0:t.getAudioTracks().some(n=>n.enabled),i=!!this.inputAudioDeviceConstraints,r=!!this.receiveAudio;return nc(e||i,r)}get videoDirection(){if(this.isAdditionalDevice||this.isScreenShare)return"sendonly";if(this.isSFU)return"recvonly";const{localStream:t}=this,e=t==null?void 0:t.getVideoTracks().some(n=>n.enabled),i=!!this.inputVideoDeviceConstraints,r=!!this.receiveVideo;return nc(e||i,r)}get sendEncodings(){if(this.isSimulcast)return["0","1","2"].map(t=>({active:!0,rid:t,scaleResolutionDownBy:Number(t)*6||1}))}getConstraintsFor(t){const e=t==="audio"?this.inputAudioDeviceConstraints:this.inputVideoDeviceConstraints;return typeof e=="boolean"?{}:e}transceiverByKind(t){return this.peerConnection.getTransceivers().filter(e=>t==="both"||e.receiver.track.kind===t)}get audioTransceivers(){return this.transceiverByKind("audio")}get videoTransceivers(){return this.transceiverByKind("video")}async setupTransceiverSender(t,e,i){var a;const r=t.kind==="audio",n=r?this.audioDirection:this.videoDirection,s={direction:n,sendEncodings:r?void 0:this.sendEncodings,streams:n==="recvonly"?void 0:[e]};Be.debug(`[TransceiverController] Setting up transceiver sender for local ${t.kind} track:`,{transceiver:i,transceiverParams:s}),s.direction&&["sendonly","sendrecv"].includes(s.direction)&&(i?(await i.sender.replaceTrack(t),i.direction=s.direction,(a=s.streams)!=null&&a.some(o=>!!o)&&(Be.debug(`[TransceiverController] Setting streams for transceiver sender for local ${t.kind} track:`,s.streams),i.sender.setStreams(...s.streams))):(Be.debug(`[TransceiverController] Adding new transceiver for local ${t.kind} track:`,t.id),this.peerConnection.addTransceiver(t,s)))}stopTrackSender(t,e={updateTransceiverDirection:!1}){var i,r,n;try{const s=this.transceiverByKind(t);for(const a of s)if(((i=a.sender.track)==null?void 0:i.readyState)==="live"){const o=a.sender.track.id;a.sender.track.stop(),this.options.localStreamController.removeTrack(o),e.updateTransceiverDirection&&(a.direction="inactive")}}catch(s){Be.error("[TransceiverController] stopTrackSender error",t,s),(n=(r=this.options).onError)==null||n.call(r,new Ii("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 Ii("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 Ii("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 Ii("replaceTrackFallback",i,new Error("getUserMedia returned no track of the requested kind"));await t.replaceTrack(o),this.options.localStreamController.addTrack(o),Be.debug(`[TransceiverController] Track replacement fallback succeeded for ${i}. New track: ${o.id}`)}getMediaDirections(){return this.peerConnection.connectionState==="connected"?this.peerConnection.getTransceivers().reduce((t,e)=>({...t,[e.receiver.track.kind]:e.direction}),{audio:"inactive",video:"inactive"}):{audio:this.audioDirection,video:this.videoDirection}}updatePeerConnection(t){this.peerConnection=t}updateOptions(t){this.options={...this.options,...t}}};const z=W();var sc=class extends ie{constructor(t={},e,i){super(),this.options=t,this.firstSDPExchangeCompleted=!1,this.negotiationNeeded$=this.createSubject(),this.localDescription$=$t(()=>Ie(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),S(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(f=>f.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(Et(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??Qr(),this._type=e?"answer":"offer",this.sdpInit=e?{type:"offer",sdp:e}:void 0,this._remoteOfferMediaDirections=e?Sg(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 Mg({propose:this.propose,inputAudioStream:this.options.inputAudioStream,inputVideoStream:this.options.inputVideoStream,inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints,getUserMedia:async n=>this.getUserMedia(n),getDisplayMedia:async n=>this.getDisplayMedia(n)})}get iceGatheringController(){if(!this._iceGatheringController)throw new Q("ICEGatheringController is not initialized");return this._iceGatheringController}get shouldEmitLocalDescription(){if(!this.peerConnection)return!1;const{localDescription:t,signalingState:e}=this.peerConnection;return!t||!ic(t.sdp)?!1:t.type==="offer"&&e==="have-local-offer"||t.type==="answer"&&e==="stable"}removeConnectionTimer(){this.connectionTimer&&(clearTimeout(this.connectionTimer),this.connectionTimer=void 0)}setMemberId(t){this._memberId=t}get memberId(){return this._memberId}stopTrackSender(t,e={updateTransceiverDirection:!1}){var i;(i=this.transceiverController)==null||i.stopTrackSender(t,e)}get isNegotiating$(){return this._isNegotiating$.asObservable()}get isNegotiating(){return this._isNegotiating$.value}updateMediaDevicesOptions(t){this.options={...this.options,...t}}get iceGatheringState$(){return this.cachedObservable("iceGatheringState$",()=>this._iceGatheringState$.asObservable().pipe(S(this.destroyed$)))}get mediaTrackEnded$(){return this.cachedObservable("mediaTrackEnded$",()=>this.localStreamController.mediaTrackEnded$.pipe(S(this.destroyed$)))}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(S(this.destroyed$)))}get iceCandidates$(){return this.cachedObservable("iceCandidates$",()=>this._iceCandidates$.asObservable().pipe(S(this.destroyed$)))}get initialized$(){return this.cachedObservable("initialized$",()=>this._initialized$.asObservable().pipe(B(t=>t),S(this.destroyed$)))}get remoteDescription$(){return this.cachedObservable("remoteDescription$",()=>this._remoteDescription$.asObservable().pipe(S(this.destroyed$)))}get localStream$(){return this.cachedObservable("localStream$",()=>this.localStreamController.localStream$.pipe(S(this.destroyed$)))}get remoteStream$(){return this.cachedObservable("remoteStream$",()=>this._remoteStream$.asObservable().pipe(S(this.destroyed$)))}get localAudioTracks$(){return this.cachedObservable("localAudioTracks$",()=>this.localStreamController.localAudioTracks$.pipe(S(this.destroyed$)))}get localVideoTracks$(){return this.cachedObservable("localVideoTracks$",()=>this.localStreamController.localVideoTracks$.pipe(S(this.destroyed$)))}get iceConnectionState$(){return this.cachedObservable("iceConnectionState$",()=>this._iceConnectionState$.asObservable().pipe(S(this.destroyed$)))}get connectionState$(){return this.cachedObservable("connectionState$",()=>this._connectionState$.asObservable().pipe(S(this.destroyed$)))}get signalingState$(){return this.cachedObservable("signalingState$",()=>this._signalingState$.asObservable().pipe(S(this.destroyed$)))}get type(){return this._type}get propose(){return this.options.propose??"main"}get isAdditionalDevice(){return this.propose==="additional-device"}get isMainDevice(){return this.propose==="main"}get isScreenShare(){return this.propose==="screenshare"}get iceServers(){if(!this.options.disableUdpIceServers)return this.options.iceServers??[];const t="transport=tcp";return(this.options.iceServers??[]).map(e=>{const i=Array.isArray(e.urls)?e.urls:[e.urls];return{...e,urls:i.filter(r=>r.includes(t))}})}get rtcConfiguration(){const{iceServers:t,...e}=this.options;return{bundlePolicy:"max-compat",iceCandidatePoolSize:10,iceServers:this.iceServers,iceTransportPolicy:this.options.relayOnly?"relay":"all",sdpSemantics:"unified-plan",...e}}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.localStreamController.localStream}get remoteStream(){return this._remoteStream$.value}get inputAudioDeviceConstraints(){if(this.options.audio===!1&&!this.options.inputAudioDeviceConstraints)return!1;const t=this.deviceController.selectedAudioInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputAudioDeviceConstraints=="object"?this.options.inputAudioDeviceConstraints:{},...typeof t=="object"?t:{}}}get inputVideoDeviceConstraints(){if(!this.options.video&&!this.options.inputVideoDeviceConstraints)return!1;const t=this.deviceController.selectedVideoInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputVideoDeviceConstraints=="object"?this.options.inputVideoDeviceConstraints:{},...typeof t=="object"?t:{}}}get WebRTCPeerConnectionConstructor(){var t;return((t=this.options.webRTCApiProvider)==null?void 0:t.RTCPeerConnection)??RTCPeerConnection}get offerOptions(){const t={iceRestart:this.firstSDPExchangeCompleted?!0:void 0};switch(this.propose){case"screenshare":case"additional-device":return{...t,offerToReceiveAudio:!1,offerToReceiveVideo:!1};case"main":default:return{...t,offerToReceiveAudio:!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(Sd(0),qn(async()=>this.startNegotiation())),{next:()=>{z.debug("[RTCPeerConnectionController] Start Negotiation completed successfully")},error:t=>{z.error("[RTCPeerConnectionController] Start Negotiation error:",t),this._errors$.next(Et(t))}}),this.subscribeTo(xi(this.deviceController.selectedAudioInputDevice$.pipe(E(t=>["audio",t])),this.deviceController.selectedVideoInputDevice$.pipe(E(t=>["video",t]))).pipe(Id(()=>!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(Et(t)),this.destroy()}}setupPeerConnection(){this.peerConnection=new this.WebRTCPeerConnectionConstructor(this.rtcConfiguration),this.peerConnection.addEventListener("negotiationneeded",this.onnegotiationneededHandler),this._iceGatheringController=new Dg(this.peerConnection,this.isNegotiating$,{iceCandidateTimeout:this.options.iceCandidateTimeout,iceGatheringTimeout:this.options.iceGatheringTimeout,relayOnly:this.options.relayOnly}),this.transceiverController=new Rg({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(Et(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(Et(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=Tg(e,i,r),z.debug("[RTCPeerConnectionController] Applied codec preferences to SDP",{preferredAudioCodecs:i,preferredVideoCodecs:r})),n&&(e=Ag(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(Et(i)),this.negotiationEnded(),e&&this.restoreIceTransportPolicy(),i}e&&Ge(or(this._iceGatheringState$.pipe(B(i=>i==="complete"),Me(1)),ki(qh).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 f=(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,f[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 e;await((e=this.transceiverController)==null?void 0:e.restoreTrackSender(t)),t!=="video"&&this._localAudioPipeline&&await this.applyLocalAudioPipelineToSender()}ensureLocalAudioPipeline(){if(this._localAudioPipeline)return this._localAudioPipeline;if(!this.peerConnection)return null;try{this._localAudioPipeline=new Ig}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(Et(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(Et(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 ac(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 oc(t){return ls(t)?t.method==="verto.attach":!1}function Pg(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 Og(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 _g(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 Lg(t){return ke(t)&&G(t,"jsonrpc")&&t.jsonrpc==="2.0"&&G(t,"method")&&t.method==="verto.ping"}const V=W();function Fg(t){return t.isInvite&&!t.reattach&&!t.explicitNodeId?"":t.currentNodeId??""}var Ug=class extends ie{constructor(t){super(),this.callSession=t}destroy(){this.callSession=void 0,super.destroy()}},Ng=class extends Ug{constructor(t,e,i,r,n={}){super(t),this.webRtcCallSession=t,this.attachManager=e,this.deviceController=i,this.webRTCApiProvider=r,this._rtcPeerConnections$=this.createBehaviorSubject([]),this._selfId$=this.createBehaviorSubject(null),this._signalingStatus$=this.createReplaySubject(1),this._screenShareStatus$=this.createBehaviorSubject("none"),this._rtcPeerConnectionsMap=new Map,this._screenShareTimeoutMs=5e4,this._nodeId$=this.createBehaviorSubject(n.nodeId??null),this.onError=n.onError,this.onModifyFailed=n.onModifyFailed,this.initSubscriptions(),this.initMainPeerConnection()}async hold(){const t=rn({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=rn({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$",()=>xi(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),this._signalingStatus$.next("ringing");const{sdp:e,callID:i}=t;(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),this._signalingStatus$.next("connecting");const{sdp:e,callID:i}=t;(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=eg({...t});await this.executeVerto(i)}catch(i){V.warn("[WebRTCManager] Call might disconnect, error sending Verto pong:",i),(e=this.onError)==null||e.call(this,new so(i))}}async updateMediaConstraints(t={}){var r;const{audio:e,video:i}=t;try{e&&await this.mainPeerConnection.updateSendersConstraints("audio",e),i&&await this.mainPeerConnection.updateSendersConstraints("video",i)}catch(n){throw V.warn("[WebRTCManager] Error updating media constraints:",n),(r=this.onError)==null||r.call(this,n instanceof Error?n:new Error(String(n),{cause:n})),n}}get selfId(){return this._selfId$.value}buildAttachableCall(t){return{nodeId:this.nodeId??void 0,id:t??this.webRtcCallSession.id,to:this.webRtcCallSession.to,mediaDirections:this.webRtcCallSession.mediaDirections}}requestKeyframe(){try{const t=this.mainPeerConnection.peerConnection;if(!t){V.warn("[WebRTCManager] No peer connection for keyframe request");return}const e=t.getReceivers().find(i=>i.track.kind==="video");if(!e){V.warn("[WebRTCManager] No video receiver for keyframe request");return}typeof e.requestKeyFrame=="function"?(e.requestKeyFrame(),V.debug("[WebRTCManager] Keyframe requested via RTCRtpReceiver.requestKeyFrame()")):V.debug("[WebRTCManager] requestKeyFrame() not supported, skipping")}catch(t){V.warn("[WebRTCManager] Keyframe request failed (non-fatal):",t)}}async requestIceRestart(t){try{const e=this.mainPeerConnection;if(!e.peerConnection){V.warn("[WebRTCManager] No peer connection for ICE restart");return}await e.triggerIceRestart(t),V.info(`[WebRTCManager] ICE restart initiated${t?" (relay-only)":""}`)}catch(e){throw V.error("[WebRTCManager] ICE restart failed:",e),e}}async requestIceRestartAll(t){const e=Array.from(this._rtcPeerConnectionsMap.entries());for(const[i,r]of e)try{if(!r.peerConnection){V.debug(`[WebRTCManager] No peer connection for leg ${i}, skipping ICE restart`);continue}await r.triggerIceRestart(t),V.info(`[WebRTCManager] ICE restart initiated for leg ${i}${t?" (relay-only)":""}`)}catch(n){V.warn(`[WebRTCManager] ICE restart failed for leg ${i}:`,n)}}requestKeyframeAll(){for(const[t,e]of this._rtcPeerConnectionsMap){if(e.isScreenShare){V.debug(`[WebRTCManager] Skipping keyframe for send-only screen share leg ${t}`);continue}try{const i=e.peerConnection;if(!i)continue;const r=i.getReceivers().find(n=>n.track.kind==="video");if(!r)continue;typeof r.requestKeyFrame=="function"&&(r.requestKeyFrame(),V.debug(`[WebRTCManager] Keyframe requested for leg ${t}`))}catch(i){V.warn(`[WebRTCManager] Keyframe request failed for leg ${t} (non-fatal):`,i)}}}get callJoinedEvent$(){return this.webRtcCallSession.callEvent$.pipe(B(tc),S(this.destroyed$))}get vertoMedia$(){return this.webRtcCallSession.webrtcMessages$.pipe(fe(Og,"params"),S(this.destroyed$))}get vertoAnswer$(){return this.cachedObservable("vertoAnswer$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Pg,"params"),S(this.destroyed$)))}get vertoMediaParams$(){return this.cachedObservable("vertoMediaParams$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(_g,"params"),S(this.destroyed$)))}get vertoBye$(){return this.cachedObservable("vertoBye$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(us,"params"),S(this.destroyed$)))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(oc,"params"),S(this.destroyed$)))}get vertoPing$(){return this.cachedObservable("vertoPing$",()=>this.webRtcCallSession.webrtcMessages$.pipe(fe(Lg,"params"),S(this.destroyed$)))}async executeVerto(t,e={}){var s,a;const i=Bo({callID:e.callID??this.webRtcCallSession.id,node_id:e.node_id??this._nodeId$.value??"",message:t,subscribe:e.subscribe}),r=await this.webRtcCallSession.execute(i);if(r.error){const o=new _t(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 _t(n.error.code,n.error.message,n.error.data);return(a=this.onError)==null||a.call(this,o),r}return r}async sendLocalDescription(t,e){var n,s;const i=t.method,r=this.getSendLocalSDPOptionalParams(e,t);try{const a=await this.executeVerto(t,r);switch(i){case"verto.invite":this.processInviteResponse(a,e);break;case"verto.modify":await this.processModifyResponse(a,e);break;default:}}catch(a){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)}}}processInviteResponse(t,e){var i;if(!t.error&&tt(t,"result.result.result.message")==="CALL CREATED"){this._signalingStatus$.next("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 _t(t.error.code,t.error.message,t.error.data):new Error("Verto invite failed: unexpected response");(i=this.onError)==null||i.call(this,r)}}get RTCPeerConnectionConfig(){return{iceServers:this.webRtcCallSession.clientSession.iceServers??g.instance.iceServers,relayOnly:g.instance.relayOnly||g.instance.disableUdpIceServers,disableUdpIceServers:g.instance.disableUdpIceServers,iceCandidateTimeout:g.instance.iceCandidateTimeout,iceGatheringTimeout:g.instance.iceGatheringTimeout}}initMainPeerConnection(){const{options:t}=this.webRtcCallSession,e=new sc({propose:"main",callId:this.webRtcCallSession.id,audio:t.audio,video:t.video,inputAudioDeviceConstraints:t.inputAudioDeviceConstraints,inputVideoDeviceConstraints:t.inputVideoDeviceConstraints,inputAudioStream:t.inputAudioStream,inputVideoStream:t.inputVideoStream,receiveAudio:t.receiveAudio,receiveVideo:t.receiveVideo,webRTCApiProvider:this.webRTCApiProvider,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs,stereo:t.stereo,...this.RTCPeerConnectionConfig},t.initOffer,this.deviceController);this.setupLocalDescriptionHandler(e),this.setupVertoByeHandler(),this.setupVertoAttachHandler(),this.initObservables(e),this._rtcPeerConnectionsMap.set(e.id,e),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(e.errors$,i=>{var r;(r=this.onError)==null||r.call(this,i)}),t.initOffer&&this.handleInboundAnswer(e)}async handleInboundAnswer(t){var i,r,n;V.debug("[WebRTCManager] Waiting for inbound call to be accepted or rejected");const e=await Ge(or(this.vertoBye$,this.webRtcCallSession.answered$).pipe(S(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),Md(t.mediaDirections),S(this.destroyed$)),this.localStream$=t.localStream$.pipe(ue(),S(this.destroyed$)),this.remoteStream$=t.remoteStream$.pipe(ue(),S(this.destroyed$))}setupLocalDescriptionHandler(t){this.subscribeTo(t.localDescription$.pipe(B(e=>e!==null),S(this.destroyed$)),e=>{const{type:i,sdp:r}=e,n=this.dialogParams(t),s=!t.firstSDPExchangeCompleted;if(i==="answer"){const a=Jp({dialogParams:n,sdp:r});this.sendLocalDescriptionOnceAccepted(a,t)}else if(s){const a=Kp({dialogParams:n,sdp:r});this.sendLocalDescription(a,t)}else{const a=rn({dialogParams:n,sdp:r,action:"updateMedia"});this.sendLocalDescription(a,t)}})}setupVertoByeHandler(){this.subscribeTo(this.vertoBye$,()=>{var t;this._signalingStatus$.next("disconnected"),this.attachManager.detach(this.buildAttachableCall()),(t=this.callSession)==null||t.destroy()})}getSendLocalSDPOptionalParams(t,e){let i;return t.firstSDPExchangeCompleted||(i=[],t.isMainDevice?i.push(...g.instance.inviteSubscribeMainDevice):t.isAdditionalDevice?i.push(...g.instance.inviteSubscribeAdditionalDevice):t.isScreenShare&&i.push(...g.instance.inviteSubscribeScreenshare)),{callID:t.id,node_id:Fg({isInvite:ac(e),reattach:this.webRtcCallSession.options.reattach===!0,explicitNodeId:this.webRtcCallSession.options.nodeId,currentNodeId:this._nodeId$.value}),subscribe:i}}async sendLocalDescriptionOnceAccepted(t,e){var r,n,s;V.debug("[WebRTCManager] Waiting for call to be accepted or ended before sending answer");const i=await Ge(or(this.vertoBye$,this.webRtcCallSession.answered$).pipe(S(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._signalingStatus$.next("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:fh}}muteMainAudioInputDevice(){return this.mainPeerConnection.stopTrackSender("audio")}muteMainVideoInputDevice(){return this.mainPeerConnection.stopTrackSender("video")}async unmuteMainAudioInputDevice(){return this.mainPeerConnection.restoreTrackSender("audio")}async unmuteMainVideoInputDevice(){return this.mainPeerConnection.restoreTrackSender("video")}ensureLocalAudioPipeline(){return this.mainPeerConnection.ensureLocalAudioPipeline()}get localAudioPipeline(){return this.mainPeerConnection.localAudioPipeline}async addInputDevice(t={audio:!1,video:!0}){return this.initAdditionalPeerConnection("additional-device",t)}async addMainInputDevices(t={audio:!0}){var r;let e;const{mediaDirections:i}=this.mainPeerConnection;if((t.audio??t.inputAudioDeviceConstraints??(t.inputAudioStream&&i.audio.startsWith("send")))&&(e="audio"),(t.video??t.inputVideoDeviceConstraints??(t.inputVideoStream&&!i.video.startsWith("send")))&&(e=e==="audio"?"both":"video"),e)this.mainPeerConnection.updateMediaDevicesOptions(t),await this.mainPeerConnection.restoreTrackSender(e);else{const n=new ro("No valid device to be added");throw(r=this.onError)==null||r.call(this,n),n}}async addScreenMedia(t={audio:!1}){await this.initAdditionalPeerConnection("screenshare",t)}async initAdditionalPeerConnection(t,e){var r;let i=null;try{return this._screenShareStatus$.next("starting"),i=new sc({...e,...this.RTCPeerConnectionConfig,propose:t,webRTCApiProvider:this.webRTCApiProvider},void 0,this.deviceController),this.setupLocalDescriptionHandler(i),t==="screenshare"&&(this._screenShareId=i.id),this._rtcPeerConnectionsMap.set(i.id,i),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(i.errors$,n=>{var s;(s=this.onError)==null||s.call(this,n)}),await Ge(i.connectionState$.pipe(B(n=>n==="connected"),Me(1),ar(this._screenShareTimeoutMs),S(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:tg[e]}:{};await this.executeVerto(Zp({...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=Qp({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=rn({...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 cc=W();var Bg=class extends ie{constructor(t={}){super(),this._source=null,this._stream=null,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._pollIntervalMs=t.pollIntervalMs??Ao}get level$(){return this.deferEmission(jr(this._pollIntervalMs,Ta).pipe(E(()=>this.computeLevel())))}setStream(t){if(this._source){try{this._source.disconnect()}catch(e){cc.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=>{cc.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 ur=W(),zg=1e3,Vg=10,Hg=2e3,jg=3e3,Wg=3,Gg=5,qg=5,Xg=10,Yg=4,Kg=30;function Zg(t,e){const i=t+e;return i===0?0:t/i*100}function Qg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="inbound-rtp"}function Jg(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="candidate-pair"}var $g=class extends ie{constructor(t,e={}){super(),this.peerConnection=t,this.running=!1,this.lastAudioPacketsReceived=0,this.lastAudioPacketChangeTime=0,this.lastVideoPacketsReceived=0,this.lastVideoPacketChangeTime=0,this.lastRoundTripTime=0,this.lastAvailableOutgoingBitrate=void 0,this._sample$=this.createReplaySubject(1),this._baseline$=this.createBehaviorSubject({rtt:0,jitter:0,ready:!1}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this.pollingIntervalMs=e.pollingIntervalMs??zg,this.baselineSampleCount=e.baselineSamples??Vg,this.noAudioPacketThresholdMs=e.noAudioPacketThresholdMs??Hg,this.noVideoPacketThresholdMs=e.noVideoPacketThresholdMs??jg,this.rttSpikeWarningMultiplier=e.rttSpikeWarningMultiplier??Wg,this.rttSpikeCriticalMultiplier=e.rttSpikeCriticalMultiplier??Gg,this.packetLossWarningPercent=e.packetLossWarningPercent??qg,this.packetLossCriticalPercent=e.packetLossCriticalPercent??Xg,this.jitterSpikeMultiplier=e.jitterSpikeMultiplier??Yg,this.historyWindowSeconds=e.historyWindowSeconds??Kg}get networkIssues$(){return this._networkIssues$.asObservable()}get networkIssues(){return[...this._networkIssues$.value]}get isNetworkHealthy$(){return this.cachedObservable("isNetworkHealthy$",()=>this._networkIssues$.pipe(E(t=>t.length===0),L(),S(this.destroyed$)))}get isNetworkHealthy(){return this._networkIssues$.value.length===0}get networkMetrics$(){return this._networkMetrics$.asObservable()}get networkMetrics(){return[...this._networkMetrics$.value]}get criticalIssue$(){return this.cachedObservable("criticalIssue$",()=>this._networkIssues$.pipe(Gn(t=>Ie(t.filter(e=>e.severity==="critical"))),S(this.destroyed$)))}get sample$(){return this._sample$.asObservable()}start(){if(this.running)return;this.running=!0;const t=Date.now();this.lastAudioPacketChangeTime=t,this.lastVideoPacketChangeTime=t,ur.debug("[RTCStatsMonitor] Starting stats monitoring"),this.subscribeTo(jr(this.pollingIntervalMs).pipe(B(()=>this.running),Ke(()=>Ie(this.peerConnection.getStats()).pipe(ei(e=>(ur.warn("[RTCStatsMonitor] Failed to get stats:",e),Jt)))),B(()=>this.running),E(e=>this.extractSample(e))),e=>this._sample$.next(e)),this.subscribeTo(this._sample$.pipe(Me(this.baselineSampleCount),Td(),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=>{ur.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,ur.debug("[RTCStatsMonitor] Stopping stats monitoring"))}destroy(){ur.debug("[RTCStatsMonitor] Destroying RTCStatsMonitor"),this.stop(),super.destroy()}extractSample(t){let e=0,i=0,r=0,n=0,s=0,a=0,o;return t.forEach(c=>{Qg(c)&&(c.kind==="audio"?(e+=c.packetsReceived??0,i+=c.packetsLost??0,r=Math.max(r,(c.jitter??0)*1e3)):(n+=c.packetsReceived??0,s+=c.packetsLost??0)),Jg(c)&&c.state==="succeeded"&&c.nominated&&(a=c.currentRoundTripTime?c.currentRoundTripTime*1e3:this.lastRoundTripTime,o=c.availableOutgoingBitrate??this.lastAvailableOutgoingBitrate)}),{audioPacketsReceived:e,audioPacketsLost:i,audioJitter:r,videoPacketsReceived:n,videoPacketsLost:s,roundTripTime:a,availableOutgoingBitrate:o,timestamp:Date.now()}}updatePacketTracking(t,e){t.audioPacketsReceived!==this.lastAudioPacketsReceived&&(this.lastAudioPacketsReceived=t.audioPacketsReceived,this.lastAudioPacketChangeTime=e),t.videoPacketsReceived!==this.lastVideoPacketsReceived&&(this.lastVideoPacketsReceived=t.videoPacketsReceived,this.lastVideoPacketChangeTime=e),t.roundTripTime>0&&(this.lastRoundTripTime=t.roundTripTime),t.availableOutgoingBitrate!==void 0&&(this.lastAvailableOutgoingBitrate=t.availableOutgoingBitrate)}detectIssues(t,e,i){const r=[],n=this._baseline$.value,s=i-this.lastAudioPacketChangeTime;s>this.noAudioPacketThresholdMs&&r.push({type:"no_inbound_audio",severity:"critical",timestamp:i,value:s,threshold:this.noAudioPacketThresholdMs});const a=i-this.lastVideoPacketChangeTime;if(a>this.noVideoPacketThresholdMs&&r.push({type:"no_inbound_video",severity:"warning",timestamp:i,value:a,threshold:this.noVideoPacketThresholdMs}),n.ready){const o=t.roundTripTime,c=n.rtt;if(c>0){const p=o/c;p>this.rttSpikeCriticalMultiplier?r.push({type:"high_rtt",severity:"critical",timestamp:i,value:o,threshold:c*this.rttSpikeCriticalMultiplier}):p>this.rttSpikeWarningMultiplier&&r.push({type:"high_rtt",severity:"warning",timestamp:i,value:o,threshold:c*this.rttSpikeWarningMultiplier})}const u=t.audioJitter,h=n.jitter;h>0&&u/h>this.jitterSpikeMultiplier&&r.push({type:"high_jitter",severity:"warning",timestamp:i,value:u,threshold:h*this.jitterSpikeMultiplier})}if(e){const o=Math.max(0,t.audioPacketsReceived-e.audioPacketsReceived),c=Math.max(0,t.audioPacketsLost-e.audioPacketsLost),u=Math.max(0,t.videoPacketsReceived-e.videoPacketsReceived),h=Math.max(0,t.videoPacketsLost-e.videoPacketsLost),p=o+u,f=Zg(c+h,p);f>this.packetLossCriticalPercent?r.push({type:"high_packet_loss",severity:"critical",timestamp:i,value:f,threshold:this.packetLossCriticalPercent}):f>this.packetLossWarningPercent&&r.push({type:"high_packet_loss",severity:"warning",timestamp:i,value:f,threshold:this.packetLossWarningPercent})}return r}};const oe=W(),ef=2e3,tf=1e4,rf=3e3,nf=5e3,sf=3,af=3,of=3e3,cf=1e4,lf=150,uf=300,df=5,hf=new Set(["high_rtt","high_jitter","high_packet_loss"]);var pf=class extends ie{constructor(t,e,i={}){super(),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._hasPacketLoss$=this.createBehaviorSubject(!1),this._trigger$=this.createSubject(),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this._pipelineStop$=this.createSubject(),this._callbacks=t,this._inputs=e,this._config={debounceTimeMs:i.debounceTimeMs??ef,cooldownMs:i.cooldownMs??tf,iceGracePeriodMs:i.iceGracePeriodMs??rf,iceRestartTimeoutMs:i.iceRestartTimeoutMs??nf,maxAttempts:i.maxAttempts??sf,enableRelayFallback:i.enableRelayFallback??!0,keyframeMaxBurst:i.keyframeMaxBurst??af,keyframeBurstWindowMs:i.keyframeBurstWindowMs??of,keyframeCooldownMs:i.keyframeCooldownMs??cf,degradationBitrateThreshold:i.degradationBitrateThreshold??lf,degradationRecoveryThreshold:i.degradationRecoveryThreshold??uf,enableAutoDegradation:i.enableAutoDegradation??!0,packetLossRecoveryDelaySec:i.packetLossRecoveryDelaySec??df},this.initPipeline(),this.initDegradationRecoveryPipeline()}get recoveryState$(){return this._recoveryState$.asObservable().pipe(S(this._destroyed$))}get recoveryState(){return this._recoveryState$.value}get recoveryEvent$(){return this._recoveryEvent$.asObservable().pipe(S(this._destroyed$))}get bandwidthConstrained$(){return this._bandwidthConstrained$.asObservable().pipe(S(this._destroyed$))}get bandwidthConstrained(){return this._bandwidthConstrained$.value}pushTrigger(t){this._trigger$.next(t)}async requestIceRestart(){if(this._recoveryState$.value==="recovering"){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),qn(t=>this.executeTieredRecovery(t)),S(xi(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?ki(t):Jt),S(this._destroyed$)),()=>{this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`no packet loss for ${this._config.packetLossRecoveryDelaySec}s — restoring video`,timestamp:Date.now()}),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()),ei(e=>(oe.error("CallRecoveryManager: tiered recovery failed",e),this.startCooldown(),Jt)))}async runTiers(t){if(this.executeKeyframe(t.detail),t.issueType&&hf.has(t.issueType)){oe.debug(`CallRecoveryManager: degradation-only issue (${t.issueType}) — Tier 1 only, skipping ICE restart`);return}this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!1)||this._config.enableRelayFallback&&this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!0)||this._attemptCount>=this._config.maxAttempts&&(this.emitEvent({action:"max_attempts_reached",reason:`all ${this._config.maxAttempts} recovery attempts exhausted`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.warn("CallRecoveryManager: max recovery attempts reached"))}executeKeyframe(t){const e=Date.now();if(e<this._keyframeCooldownUntil){oe.debug("CallRecoveryManager: keyframe request skipped — cooldown active");return}if(e-this._keyframeBurstStart>this._config.keyframeBurstWindowMs&&(this._keyframeBurstCount=0,this._keyframeBurstStart=e),this._keyframeBurstCount>=this._config.keyframeMaxBurst){this._keyframeCooldownUntil=e+this._config.keyframeCooldownMs,oe.debug(`CallRecoveryManager: keyframe burst limit reached (${this._config.keyframeMaxBurst}), cooldown until ${this._keyframeCooldownUntil}`);return}this._keyframeBurstCount+=1,this._callbacks.requestKeyframe(),this.emitEvent({action:"keyframe_requested",reason:t,timestamp:e}),oe.debug(`CallRecoveryManager: keyframe requested (burst ${this._keyframeBurstCount}/${this._config.keyframeMaxBurst})`)}async executeIceRestart(t){this._attemptCount+=1;const e=t?"Tier 3 (relay-only)":"Tier 2 (standard)";oe.info(`CallRecoveryManager: ${e} ICE restart — attempt ${this._attemptCount}/${this._config.maxAttempts}`),this.emitEvent({action:"reinvite_started",reason:`${e} ICE restart`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()});try{return await this.withTimeout(this._callbacks.requestIceRestart(t),this._config.iceRestartTimeoutMs)?(this.emitEvent({action:"reinvite_succeeded",reason:`${e} ICE restart succeeded`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.info(`CallRecoveryManager: ${e} ICE restart succeeded`),this._attemptCount=0,!0):(this.emitEvent({action:"reinvite_failed",reason:`${e} ICE restart returned false`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.warn(`CallRecoveryManager: ${e} ICE restart failed`),!1)}catch{return this.emitEvent({action:"reinvite_timeout",reason:`${e} ICE restart timed out after ${this._config.iceRestartTimeoutMs}ms`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),oe.warn(`CallRecoveryManager: ${e} ICE restart timed out`),!1}}async withTimeout(t,e){return new Promise((i,r)=>{const n=setTimeout(()=>{r(new Error(`Timeout after ${e}ms`))},e);t.then(s=>{clearTimeout(n),i(s)},s=>{clearTimeout(n),r(s instanceof Error?s:new Error(String(s)))})})}transitionTo(t){const e=this._recoveryState$.value;e!==t&&(oe.debug(`CallRecoveryManager: state ${e} -> ${t}`),this._recoveryState$.next(t))}startCooldown(){this._cooldownUntil=Date.now()+this._config.cooldownMs,this.transitionTo("cooldown"),this._cooldownSubscription&&this._cooldownSubscription.unsubscribe(),this._cooldownSubscription=ki(this._config.cooldownMs).pipe(Me(1),S(this._destroyed$),B(()=>this._recoveryState$.value==="cooldown")).subscribe(()=>this.transitionTo("idle"))}emitEvent(t){this._recoveryEvent$.next(t)}},gf=class{constructor(t,e,i){this.executeMethod=t,this.vertoManager=e,this.deviceController=i}createSelfParticipant(t){return new Wo(t,this.executeMethod,this.vertoManager,this.deviceController)}createParticipant(t){return new jo(t,this.executeMethod,this.deviceController)}};const ff=93.2,vf=.024,bf=2.5,mf=0,yf=100,wf=1,Sf=5,Cf=4,Af=3.5,Tf=3,Ef=2;function kf(t,e,i){const r=ff-(t/2+e)*vf-i*bf,n=Math.min(yf,Math.max(mf,r)),s=1+.035*n+n*(n-60)*(100-n)*7e-6;return Math.min(Sf,Math.max(wf,s))}function xf(t){return t>=Cf?"excellent":t>=Af?"good":t>=Tf?"fair":t>=Ef?"poor":"critical"}const me=W(),Df=5/3,If=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 Mf=class extends ie{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??Qr(),this.to=e.to,this._userVariables$.next({...this._userVariables$.value,...If(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 gf(this.executeMethod.bind(this),this.vertoManager,s),this.subscribeTo(xi(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(L(),S(this._destroyed$)),o=>{var c;this._lastMergedStatus=o,o==="connected"&&!this._statsMonitor?this.initResilienceSubsystems():o==="disconnected"?((c=this._statsMonitor)==null||c.destroy(),this._statsMonitor=void 0):(o==="destroyed"||o==="failed")&&this.stopResilienceSubsystems()})}get errors$(){return this.deferEmission(this._errors$.asObservable())}emitError(t){this._status$.value==="destroyed"||this._status$.value==="failed"||(this._errors$.next(t),t.fatal&&(this._status$.next("failed"),this.destroy()))}notifyModifyFailed(){var t;(t=this._recoveryManager)==null||t.notifyModifyFailed()}get direction(){return this.options.initOffer?"inbound":"outbound"}get address$(){return this.deferEmission(Ie([this.address])).pipe(S(this._destroyed$))}get fromName(){return this.options.fromName}get from(){return this.options.from}get toName(){return this.options.toName}async toggleIncomingVideo(){throw new ft}async toggleIncomingAudio(){throw new ft}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 ft}async startStreaming(){throw new ft}async setMeta(t){throw new ft}async updateMeta(t){throw new ft}get layoutLayers$(){return this.deferEmission(this.callEventsManager.layoutLayers$).pipe(S(this._destroyed$))}get layoutLayers(){return this.callEventsManager.layoutLayers}async executeMethod(t,e,i){var s,a,o;const r=this.buildMethodParams(t,i),n=Oi({method:e,params:r});try{const c=await this.clientSession.execute(n);if(lg(c))throw new _t(parseInt(((s=c.result)==null?void 0:s.code)??"0"),`Error response from method ${e}: ${(a=c.result)==null?void 0:a.code} ${(o=c.result)==null?void 0:o.message}`,void 0,void 0,n.id);return c}catch(c){throw 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$",()=>xi(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(L(),Se(t=>{this._lastMergedStatus=t})))}get participants$(){return this.deferEmission(this.callEventsManager.participants$).pipe(S(this._destroyed$))}get self$(){return this.deferEmission(this.callEventsManager.self$).pipe(S(this._destroyed$))}get recording$(){return this.deferEmission(this.callEventsManager.recording$).pipe(S(this._destroyed$))}get streaming$(){return this.deferEmission(this.callEventsManager.streaming$).pipe(S(this._destroyed$))}get raiseHandPriority$(){return this.deferEmission(this.callEventsManager.raiseHandPriority$).pipe(S(this._destroyed$))}get locked$(){return this.deferEmission(this.callEventsManager.locked$).pipe(S(this._destroyed$))}get meta$(){return this.deferEmission(this.callEventsManager.meta$).pipe(S(this._destroyed$))}get capabilities$(){return this.deferEmission(this.callEventsManager.capabilities$).pipe(S(this._destroyed$))}get layout$(){return this.deferEmission(this.callEventsManager.layout$).pipe(S(this._destroyed$))}get status(){return this._lastMergedStatus}get recording(){return this.callEventsManager.recording}get streaming(){return this.callEventsManager.streaming}get raiseHandPriority(){return this.callEventsManager.raiseHandPriority}get locked(){return this.callEventsManager.locked}get meta(){return this.callEventsManager.meta}get layout(){return this.callEventsManager.layout}get layouts$(){return this.deferEmission(this.callEventsManager.layouts$).pipe(S(this._destroyed$))}get layouts(){return this.callEventsManager.layouts}get localStream$(){return this.deferEmission(this.vertoManager.localStream$).pipe(S(this._destroyed$))}get localStream(){return this.vertoManager.localStream}get remoteStream$(){return this.deferEmission(this.vertoManager.remoteStream$).pipe(S(this._destroyed$))}get remoteStream(){return this.vertoManager.remoteStream}get userVariables$(){return this.deferEmission(this._userVariables$.asObservable())}get userVariables(){return{...this._userVariables$.value}}set userVariables(t){this._userVariables$.next({...this._userVariables$.value,...t})}get networkIssues$(){return this.deferEmission(this._networkIssues$.asObservable())}get networkIssues(){return this._networkIssues$.value}get isNetworkHealthy$(){return this.deferEmission(this._isNetworkHealthy$.asObservable())}get isNetworkHealthy(){return this._isNetworkHealthy$.value}get networkMetrics$(){return this.deferEmission(this._networkMetrics$.asObservable())}get networkMetrics(){return this._networkMetrics$.value}get qualityScore$(){return this.deferEmission(this._qualityScore$.asObservable())}get qualityLevel$(){return this.deferEmission(this._qualityLevel$.asObservable())}get recoveryState$(){return this.deferEmission(this._recoveryState$.asObservable())}get recoveryEvent$(){return this.deferEmission(this._recoveryEvent$.asObservable())}get bandwidthConstrained$(){return this.deferEmission(this._bandwidthConstrained$.asObservable())}get mediaParamsUpdated$(){return this.deferEmission(this._mediaParamsUpdated$.asObservable())}emitMediaParamsUpdated(t){this._mediaParamsUpdated$.next(t)}requestKeyframe(){var t,e;(e=(t=this.vertoManager).requestKeyframe)==null||e.call(t)}async requestIceRestart(){var t,e;await((e=(t=this.vertoManager).requestIceRestart)==null?void 0:e.call(t))}initResilienceSubsystems(){const t=this.rtcPeerConnection;if(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 $g(t,{pollingIntervalMs:e.statsPollingInterval,baselineSamples:e.statsBaselineSamples,noAudioPacketThresholdMs:e.statsNoPacketThreshold,rttSpikeWarningMultiplier:e.statsRttSpikeMultiplier,rttSpikeCriticalMultiplier:e.statsRttSpikeMultiplier*Df,packetLossWarningPercent:e.statsPacketLossThreshold*100,packetLossCriticalPercent:e.statsPacketLossThreshold*200,jitterSpikeMultiplier:e.statsJitterSpikeMultiplier,historyWindowSeconds:e.statsHistorySize}),this._recoveryManager=new pf({requestKeyframe:()=>{var i,r;try{this.vertoManager.requestKeyframeAll?this.vertoManager.requestKeyframeAll():(r=(i=this.vertoManager).requestKeyframe)==null||r.call(i)}catch{}},requestIceRestart:async i=>{var r,n;try{this.vertoManager.requestIceRestartAll?await this.vertoManager.requestIceRestartAll(i):await((n=(r=this.vertoManager).requestIceRestart)==null?void 0:n.call(r,i))}catch{return!1}return this.waitForPeerConnectionConnected()},disableVideo:()=>{try{this.vertoManager.muteMainVideoInputDevice(),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=kf(n.roundTripTime,n.audio.jitter,o);this._qualityScore$.next(c),this._qualityLevel$.next(xf(c)),n.availableOutgoingBitrate!==void 0&&((r=this._recoveryManager)==null||r.reportBandwidth(n.availableOutgoingBitrate/1e3))}}),this.subscribeTo(this._statsMonitor.criticalIssue$,i=>{var r;(r=this._recoveryManager)==null||r.pushTrigger({source:"stats",detail:`${i.type}: ${i.severity}`,issueType:i.type})}),this.subscribeTo(this._recoveryManager.recoveryState$,i=>{this._recoveryState$.next(i)}),this.subscribeTo(this._recoveryManager.recoveryEvent$,i=>{this._recoveryEvent$.next(i),i.action==="max_attempts_reached"&&(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(Wr(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()+Xh;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,Yh))}}stopResilienceSubsystems(){var t,e;try{(t=this._statsMonitor)==null||t.destroy(),(e=this._recoveryManager)==null||e.destroy()}catch{}this._statsMonitor=void 0,this._recoveryManager=void 0}createParticipant(t,e){return t===(e??this.vertoManager.selfId)?this.participantFactory.createSelfParticipant(t):this.participantFactory.createParticipant(t)}get mediaDirections$(){return this.deferEmission(this.vertoManager.mediaDirections$).pipe(S(this._destroyed$))}get mediaDirections(){return this.vertoManager.mediaDirections}get participantsId$(){return this.cachedObservable("participantsId$",()=>this.participants$.pipe(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)}),S(this.destroyed$),Tt()))}get callUpdated$(){return this.publicCachedObservable("callUpdated$",()=>this.callSessionEvents$.pipe(fe(Xo,"params"),S(this.destroyed$)))}get memberJoined$(){return this.publicCachedObservable("memberJoined$",()=>this.callSessionEvents$.pipe(fe(Zo,"params"),S(this.destroyed$)))}get memberLeft$(){return this.publicCachedObservable("memberLeft$",()=>this.callSessionEvents$.pipe(fe(Qo,"params"),S(this.destroyed$)))}get memberUpdated$(){return this.publicCachedObservable("memberUpdated$",()=>this.callSessionEvents$.pipe(fe(Ko,"params"),S(this.destroyed$)))}get memberTalking$(){return this.publicCachedObservable("memberTalking$",()=>this.callSessionEvents$.pipe(fe(Jo,"params"),S(this.destroyed$)))}get callStates$(){return this.publicCachedObservable("callStates$",()=>this.callSessionEvents$.pipe(fe(Yo,"params"),S(this.destroyed$)))}get layoutUpdates$(){return this.publicCachedObservable("layoutUpdates$",()=>this.callSessionEvents$.pipe(fe(os,"params"),S(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))),S(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(nn,"params"),Se(t=>me.debug("[Call] Event is a WebRTC message event:",t)),S(this.destroyed$),Tt()))}get callEvent$(){return this.cachedObservable("callEvent$",()=>this.callSessionEvents$.pipe(fe(ug,"params"),Se(t=>me.debug("[Call] Event is a call event:",t)),S(this.destroyed$),Tt()))}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),S(this._destroyed$))):At(100).pipe(S(this._destroyed$))}get localAudioLevel$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localAudioLevel$",()=>t.level$.pipe(S(this._destroyed$),Tt())):At(0).pipe(S(this._destroyed$))}get localSpeaking$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localSpeaking$",()=>t.speaking$.pipe(S(this._destroyed$),Tt())):At(!1).pipe(S(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 Bg);const t=this._remoteAudioMeter;return this.subscribeTo(this.vertoManager.remoteStream$,e=>{t.setStream(e)}),t.level$.pipe(S(this._destroyed$),Tt())})}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=$p({sessid:this.id,eventChannel:[t]}),i={callID:this.id,node_id:this.vertoManager.nodeId??"",message:e};await this.clientSession.execute(Bo(i))}};function Rf(t){return t instanceof Xr?"timeout":t instanceof _t?"signaling":t instanceof Ii?"media":t instanceof $a||t instanceof eo?"network":"internal"}const Pf=new Set([wo,Co,So]);function Of(t){return!(t instanceof so||t instanceof Ii||t instanceof Xr||t instanceof _t&&Pf.has(t.code))}var _f=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 Mf(this.sessionManager,e,{initializeManagers:i=>({vertoManager:new Ng(i,this.attachManager,this.deviceController,this.webRTCApiProvider,{nodeId:e.nodeId,onError:r=>{const n={kind:Rf(r),fatal:Of(r),error:r,callId:i.id};i.emitError(n)},onModifyFailed:()=>{i.notifyModifyFailed()}}),callEventsManager:new yg(i)}),deviceController:this.deviceController,networkChange$:this.networkChange$},t)}};const ds=W();var lc=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)}},uc=class extends ie{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$=$t(()=>Ie(this.init())).pipe(Ke(()=>this._hasMore$),L(),et(1),S(this.destroyed$))}get loading$(){return this._loading$.asObservable()}get loading(){return this._loading$.value}get values$(){return this._values$.asObservable()}get hasMore(){return this.fetchController.hasMore??!0}get updated$(){return this.cachedObservable("updated$",()=>this._loading$.pipe(L(),Wr(1),B(t=>!t),E(()=>{}),S(this.destroyed$)))}get values(){return Array.from(this.collectionData.values())}async init(){if(this.fetchController.hasMore===!1){this._hasMore$.next(!1);return}await this.fetchMore()}async fetchMore(){var t;try{this._loading$.next(!0),(await this.fetchController.next()).forEach(this.upsertData),this._hasMore$.next(this.fetchController.hasMore??!1),this._loading$.next(!1)}catch(e){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 Bn(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()}},dc=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(zr(B(this.filter),E(this.mapper)))}async find$(t,e){const i=await this.originalCollection.find$(t,e);return i&&i.pipe(zr(B(this.filter),E(this.mapper)))}loadMore(){this.originalCollection.loadMore()}destroy(){this.originalCollection.destroy()}},hc=class extends ie{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$=$t(this.initConversationMessages).pipe(E(()=>this.textMessage),et(1),S(this.destroyed$)),this.history$=$t(this.initConversationMessages).pipe(E(()=>this.history),et(1),S(this.destroyed$)),this._state$=this.createBehaviorSubject(null)}upnext(t){const e={...this._state$.value,...t};this._state$.next(e)}get state(){return this._state$.value}get id(){return this.addressId}get name(){if(!this._state$.value)throw new 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),S(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),S(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),S(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),S(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),S(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),S(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),S(this.destroyed$)))}async sendText(t){return this.conversationManager.sendText(t,this.id)}get textMessage(){if(this._conversationMessages)return this._textMessages$=this._textMessages$??new dc(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 dc(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 ft}get activity(){throw new ft}};const oi=W(),Lf=t=>{if(oi.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 oi.debug("isRPCConnectResult check result:",i),i};var Ff=(pi=class{constructor(e,i,r){this.id=Qr(),oi.debug(`[PendingRPC(${this.id}) request:${e.id}: method:${e.method}] Creating PendingRPC`),this.request=e;const n=(r==null?void 0:r.timeoutMs)??pi.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=or(i.pipe(B(h=>h.id===e.id),Me(1)),new be(h=>{const p=setTimeout(()=>{h.error(new Xr(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)}):vd).subscribe({next:h=>{if(c=!0,h.error){const p=new _t(h.error.code,h.error.message,h.error.data,void 0,e.id);oi.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with RPC error:`,p),o(p)}else oi.debug(`[PendingRPC(${this.id}) request:${e.id}] Resolving promise with response:`,h),a(h);u.unsubscribe()},error:h=>{oi.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with error:`,h),c=!0,o(h),u.unsubscribe()},complete:()=>{oi.debug(`[PendingRPC(${this.id}) request:${e.id}] Observable completed`),c||o(new Xr(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)}},pi.defaultTimeoutMs=5e3,pi);const X=W(),Uf=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 Nf=class extends ie{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 _f(this,n,s,a,c),this.initialized$=$t(()=>Ie(this.init())).pipe(et(1),S(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 Yn(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"),qn(()=>(X.debug("[Session] Connection established, initiating authentication"),Ie(this.authenticate()).pipe(ei(t=>(this.handleAuthenticationError(t).catch(e=>{X.error("[Session] Error handling authentication failure:",e)}),Jt)))))),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 zd(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 Vd(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(dg,"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"),Tt()))}get vertoInvite$(){return this.cachedObservable("vertoInvite$",()=>this.signalingEvent$.pipe(B(nn),B(t=>ac(t.params)),E(t=>({node_id:t.node_id,...t.params.params}))))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.signalingEvent$.pipe(B(nn),B(t=>oc(t.params)),E(t=>({node_id:t.node_id,...t.params.params}))))}get contexts(){return[]}get eventing(){return[]}get topics(){return[]}get authentication(){const t=this.getCredential();if(!t.token)throw new Q("Credential token is undefined");return{jwt_token:t.token}}async connect(){await Ge(this.initialized$),await this.transport.connect(),await Ge(this.authenticated$.pipe(S(this.destroyed$),B(Boolean),Me(1),ar({first:15e3})))}async handleAuthenticationError(t){X.error("Authentication error:",t);const e=t instanceof _t&&(t.code===wo||t.code===So||t.code===Co),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 Yn(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=Wp({project:((n=this._authorization$.value)==null?void 0:n.project_id)??"",jwt_token:t,...s?{dpop_token:s}:{}});await Ba(Ie(this.transport.execute(a)).pipe(uo(),Me(1),ei(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 Yn(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=jp({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(Ie(this.transport.execute(s)).pipe(uo(),E(u=>u.result),B(Lf),Se(()=>{X.debug("[Session] Response passed filter, processing authentication result")}),Me(1),ei(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 hc?t.defaultChannel:t;let r;try{return r=await this.createCall({to:i,...e}),await Ge(or(r.selfId$.pipe(B(n=>!!n),Me(1),ar(this.callCreateTimeout)),r.errors$.pipe(Me(1),Ke(n=>td(()=>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=Uf(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()}},Bf=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 zf=t=>typeof t=="string",hs=W();var Vf=class extends lc{constructor(t,e){super(`/api/fabric/conversations/${t}/messages`,"page_size=100",e),this.groupId=t}},Hf=class extends uc{constructor(t,e,i,r){super(new Vf(t,i),e,r)}},jf=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({...Jr,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(zf(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 Hf(e,this.clientSession.signalingEvent$.pipe(fe($o,"params"),Se(i=>hs.debug("[ConversationsManager ] Conversation Event:",i)),E(i=>({...i}))),this.http,this.onError))}async sendText(t,e){const i=this.groupIds.get(e)??await this.join(e),r=this.getUserAddressId();try{if((await this.http.request({...Jr,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 Wf(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)+lr)}function pc(t){return t.expires_in?t.expires_in:t.expires_at?Math.max(t.expires_at-Math.floor(Date.now()/1e3),1):lr}var Gf=class extends ie{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=lr,this.subscribeTo(this._currentToken$.pipe(B(Boolean),Ke(n=>{const s=Wf(n),a=Math.max(s*1e3-Date.now()-Ah,1e3);return st.debug(`[DeviceToken] Scheduling Client Bound SAT refresh in ${a}ms`),ki(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(Ch))){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=pc(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 Kr(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+lr/1e3);this._currentToken$.next({token:a.token??"",expires_at:o})}}async obtainToken(){const t=await this.dpopManager.createHttpProof({method:"POST",uri:vo}),e=await this.http.request({url:vo,...Jr,body:JSON.stringify({dpop_token:t,expire_in:lr})});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:bo,accessToken:e}),n=await this.http.request({url:bo,...Jr,body:JSON.stringify({dpop_token:r,expire_in:this._effectiveExpireIn})});if(!n.ok||!n.body)throw new ii(`Failed to refresh device token: ${n.status} ${n.statusText}`);const s=JSON.parse(n.body);if(!s.token)throw new ii("Device token refresh response missing token field");!s.expires_at&&!s.expires_in&&(s.expires_in=this._effectiveExpireIn),this._effectiveExpireIn=pc(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 ii("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 ii?i:new ii("Automatic token refresh failed",i))}finally{this._refreshInProgress=!1}}async retryRefresh(t,e,i){let r;for(let n=0;n<mo;n++)try{return await this.refreshToken(t,e,i)}catch(s){if(r=s,n<mo-1){const a=Th*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 ii("All refresh retries exhausted",r)}destroy(){super.destroy()}};const ps=W(),qf=1e3;function Xf(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"unknown"}var Yf=class extends ie{constructor(t){super(),this._events=[],this._calls=[],this._deviceChanges=[],this._eventRecorded$=this.createSubject(),this._sdkVersion=t.sdkVersion,this._maxEvents=t.maxEvents??qf,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:Xf(),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 gc=t=>((t==null?void 0:t.length)??0)===0,Kf=t=>{t.pipe(Me(1)).subscribe()},Zf=W();var Qf=class extends lc{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(!gc(i.data))return i.data[0]}Zf.error("Failed to fetch addresses")}},Jf=class extends uc{constructor(t,e,i){super(new Qf(e),t,i)}},$f=class extends ie{constructor(t,e,i,r){super(),this.http=t,this.conversationManager=i,this.onError=r,this.addNewAddress=n=>{var o;const s=new hc(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(ec,"params"),E(n=>({}))),this.http,this.onError),this.initSubscriptions()}get loading(){return this._statesCollection.loading}initSubscriptions(){this.subscribeTo(this._statesCollection.updated$,()=>{const t=Array.from(this._addressesInstances.values().map(i=>i.id)),e=this._statesCollection.values.filter(i=>!t.includes(i.id));gc(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 fc=W();var ev=(mt=class extends ie{constructor(e,i,r,n={}){super(),this.WebSocketConstructor=e,this.endpoint=i,this.outgoingMessages$=r,this.messageQueue=[],this.shouldReconnect=!1,this.boundHandleOpen=()=>this.handleOpen(),this.boundHandleClose=s=>this.handleClose(s),this.boundHandleError=()=>this.handleError(),this.boundHandleMessage=s=>this.handleMessage(s),this._status$=this.createBehaviorSubject("disconnected"),this._incomingMessages$=this.createSubject(),this._errors$=this.createReplaySubject(1),this.reconnectDelayMin=n.reconnectDelayMin??mt.DEFAULT_RECONNECT_DELAY_MIN_MS,this.reconnectDelayMax=n.reconnectDelayMax??mt.DEFAULT_RECONNECT_DELAY_MAX_MS,this.connectionTimeout=n.connectionTimeout??mt.DEFAULT_CONNECTION_TIMEOUT_MS,this.currentReconnectDelay=this.reconnectDelayMin,this.subscriptions.push(this.outgoingMessages$.subscribe(s=>{this.send(s)}))}get status$(){return this._status$.asObservable()}get incomingMessages$(){return this._incomingMessages$.asObservable()}get errors$(){return this._errors$.asObservable()}connect(){this._status$.value==="connecting"||this._status$.value==="connected"||(this.shouldReconnect=!0,this._status$.next("connecting"),this.createWebSocket())}disconnect(){this.shouldReconnect=!1,this.clearReconnectTimer(),this.clearConnectionTimeout();const e=this._status$.value;e==="connected"||e==="connecting"||e==="reconnecting"?this.socket?(this._status$.next("disconnecting"),this.socket.close()):this._status$.next("disconnected"):this._status$.next("disconnected")}reconnect(){this.shouldReconnect=!0,this._status$.next("reconnecting"),this.scheduleReconnection()}send(e){var i;this._status$.value==="connected"&&((i=this.socket)==null?void 0:i.readyState)===1?(fc.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){fc.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 Ld("WebSocket connection timeout");this._errors$.next(e),this.socket&&this.socket.close()}},this.connectionTimeout)}clearConnectionTimeout(){this.connectionTimeoutTimer&&(clearTimeout(this.connectionTimeoutTimer),this.connectionTimeoutTimer=void 0)}clearReconnectTimer(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0)}flushMessageQueue(){var e;for(;this.messageQueue.length>0&&((e=this.socket)==null?void 0:e.readyState)===1;){const i=this.messageQueue.shift();i!==void 0&&this.socket.send(i)}}},mt.DEFAULT_RECONNECT_DELAY_MIN_MS=1e3,mt.DEFAULT_RECONNECT_DELAY_MAX_MS=3e4,mt.DEFAULT_CONNECTION_TIMEOUT_MS=1e4,mt);function tv(t){return ns(t)&&t.method==="signalwire.ping"}const Pe=W();var iv=class extends ie{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(ig(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(Gp(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 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$=$t(()=>Ie(this._init())).pipe(et(1),S(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 Hd(o)),null}}),B(s=>s!==null&&(ss(s)||ns(s))),ei(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})),Jt}),Tt(),S(this.destroyed$)),this._jsonRPCResponse$=this._jsonRPCMessage$.pipe(B(ss)),this._incomingEvent$=this._jsonRPCMessage$.pipe(this.ackEvent(),this.replySignalwirePing(),B(s=>!ss(s)),this.discardStaleEvents(),Tt(),S(this.destroyed$))}async setProtocol(t){this._currentProtocol=t,this.protocol$.next(t),await this._updateProtocolInStorage(t)}get incomingEvent$(){return this._incomingEvent$}get connectionStatus$(){return this._webSocketConnections.status$}async connect(){return this.isConnecting||this.isConnected?(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),ar(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 Ff(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(),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 vc=class extends ie{constructor(t,e={}){super(),this.preferences=new bp,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 Sp,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&&Xd(this._options.logger),this._options.logLevel&&Kd(this._options.logLevel),this._options.debug&&Yd(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 kp;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 ti("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 ti("No credentials available.");if(n.token)try{const a=th(n.token,{header:!0});this._deps.ch=a.ch}catch(a){throw Y.error("[SignalWire] Invalid JWT token provided in credentials:",a),new ti("Invalid JWT token provided in credentials.",{cause:a})}if(!n.token&&!n.authorizationState)throw Y.error("[SignalWire] No valid authentication credentials provided."),new ti("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 ti("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()-xh,1e3):Math.min(Eh*Math.pow(2,i)*(.5+Math.random()*.5),kh);this._refreshTimerId=setTimeout(async()=>{try{if(!t.refresh)throw new ti("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}/${yo}):`,n),this._errors$.next(n instanceof Error?n:new Error(String(n),{cause:n})),s<yo?this.scheduleCredentialRefresh(t,e,s):(Y.error("[SignalWire] Credential refresh exhausted all retries. Disconnecting."),this._errors$.next(new ii("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 Vp(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 iv(this._deps.storage,this._deps.protocolKey,this._deps.WebSocket,g.instance.relayHost??this._deps.relayHost,t),this._attachManager=new rg(this._deps.storage,this._deps.deviceController,g.instance.reconnectCallsTimeout,this._deps.attachedCallsKey),this._clientSession=new Nf(()=>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 Bf(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 Gf(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(Wr(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 jf(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(Wr(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$:At(!1))))}get errors$(){return this.deferEmission(this._errors$.asObservable())}get platformCapabilities(){return this._platformCapabilities??(this._platformCapabilities=Lo(this._options.webRTCApiProvider)),this._platformCapabilities}get deviceRecovered$(){return this.deferEmission(this._deviceController.deviceRecovered$)}exportDiagnostics(){const t={audioInput:this.audioInputDevices,audioOutput:this.audioOutputDevices,videoInput:this.videoInputDevices},e={sdkVersion:"unknown",userAgent:typeof navigator<"u"?navigator.userAgent:"unknown",capabilities:this.platformCapabilities,events:[],calls:[],deviceChanges:[],devices:t};if(!this._diagnosticsCollector)return e;const i=this._diagnosticsCollector.export();return{...e,sdkVersion:i.sdkVersion,userAgent:i.userAgent,events:i.events,calls:i.calls,deviceChanges:i.deviceChanges,devices:t}}initResilienceSubsystems(){try{this._platformCapabilities=Lo(this._options.webRTCApiProvider)}catch(t){Y.warn("[SignalWire] Failed to detect platform capabilities:",t)}try{this._networkMonitor=new xp}catch(t){Y.warn("[SignalWire] Failed to initialize NetworkMonitor:",t)}try{this._visibilityController=new Bp,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 Yf({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 ti("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,...rv(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 Up(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 nv=W();var bc=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 Fd(`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}):(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()}},mc=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 sv=Object.defineProperty,av=Object.getOwnPropertyDescriptor,dr=(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&&Lr(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&&Lr(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._cleanupResizeObserver(),this._cleanupVideoElement()}firstUpdated(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");e&&bu(e).then(()=>{this.isConnected&&this._setupResizeObserver()})}_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&&Lr(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)})}_setupResizeObserver(){var r,n;const e=(r=this.shadowRoot)==null?void 0:r.querySelector("video.mcu-video"),i=(n=this.shadowRoot)==null?void 0:n.querySelector(".padding-wrapper");!e||!i||(this._videoElement=e,this._paddingWrapper=i,this._resizeObserver=new ResizeObserver(fu(()=>this._recalculateDimensions(),50)),this._resizeObserver.observe(this),this._videoResizeHandler=()=>this._recalculateDimensions(),e.addEventListener("resize",this._videoResizeHandler),this._windowResizeHandler=()=>{requestAnimationFrame(()=>this._recalculateDimensions())},window.addEventListener("resize",this._windowResizeHandler),this._recalculateDimensions())}_recalculateDimensions(){const e=this._videoElement,i=this._paddingWrapper;if(!e||!i)return;if(!e.videoWidth||!e.videoHeight){i.style.width="100%",i.style.height="100%",i.style.paddingBottom="0",i.style.transform="none";return}const r=window.innerWidth,n=window.innerHeight,s=this.getBoundingClientRect(),a=s.width,o=s.height;if(a<=0||o<=0)return;const c=Math.min(1,(r-s.left)/a),u=Math.min(1,(n-s.top)/o),h=Math.min(c,u),p=a*h,f=o*h;if(p<=0||f<=0)return;const m=e.videoWidth/e.videoHeight,R=p/f;let y,I;m>R?(y=p,I=y/m):(I=f,y=I*m);const x=Math.max(0,s.left),v=Math.max(0,s.top),b=Math.min(r,s.right),w=Math.min(n,s.bottom),A=(x+b)/2,D=(v+w)/2,F=s.left+a/2,K=s.top+o/2,_=A-F,te=D-K;i.style.width=`${y}px`,i.style.height=`${I}px`,i.style.paddingBottom="0",i.style.transform=`translate(${_}px, ${te}px)`}_cleanupResizeObserver(){var i;this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0);const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");e&&this._videoResizeHandler&&(e.removeEventListener("resize",this._videoResizeHandler),this._videoResizeHandler=void 0),this._windowResizeHandler&&(window.removeEventListener("resize",this._windowResizeHandler),this._windowResizeHandler=void 0)}_cleanupVideoElement(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");e&&ca(e)}render(){return k`
|
|
70
|
+
`)}function Jg(t,e=[],i=[]){return Zg(t,i,e)}function $g(t){return t.split(/(?=m=)/)}function Ac(t,e){var h;const i=t.split(/\r?\n/),r=i[0].split(" ");if(r.length<4)return t;const n=r.slice(3),s=new Map;for(const p of i){const v=/^a=rtpmap:(\d+)\s+([^\s/]+)/.exec(p);v&&s.set(v[1],v[2])}const a=e.map(p=>p.toUpperCase()),o=[],c=[];for(const p of n){const v=((h=s.get(p))==null?void 0:h.toUpperCase())??"";a.indexOf(v)>=0?o.push(p):c.push(p)}o.sort((p,v)=>{var A,R;const C=((A=s.get(p))==null?void 0:A.toUpperCase())??"",_=((R=s.get(v))==null?void 0:R.toUpperCase())??"";return a.indexOf(C)-a.indexOf(_)});const u=[...o,...c];return[[...r.slice(0,3),...u].join(" "),...i.slice(1)].join(`\r
|
|
71
|
+
`)}function ef(t){const e=/a=rtpmap:(\d+)\s+opus\/48000/i.exec(t);return e?e[1]:null}function tf(t,e){let i=t;return i.includes("stereo=")||(i+=";stereo=1"),i.includes("sprop-stereo=")||(i+=";sprop-stereo=1"),i.includes("maxaveragebitrate=")||(i+=`;maxaveragebitrate=${e}`),i}const He=G();var rf=class extends se{constructor(t,e,i={}){super(),this.peerConnection=t,this.peerConnectionControllerNegotiating$=e,this.onicegatheringstatechangeHandler=()=>{const{iceGatheringState:r}=this.peerConnection;He.debug(`[ICEGatheringController] ICE gathering state changed to: ${r}`),r==="gathering"&&this._iceCandidatesState.next({state:"gathering",validSDP:!1})},this.onicecandidateHandler=r=>{He.debug("[ICEGatheringController] ICE candidate event received:",r.candidate),this.removeTimer("iceCandidateTimer"),r.candidate?this.iceCandidateTimer=setTimeout(()=>{this.peerConnection.iceGatheringState!=="complete"&&(He.warn("[ICEGatheringController] ICE candidate timeout, using current SDP"),this.handleICECandidateTimeout())},this.iceCandidateTimeout):(He.debug("[ICEGatheringController] ICE gathering completed: null candidate received"),this.removeTimer("iceGatheringTimer"),this.handleICEGatheringComplete())},this._iceCandidatesState=this.createBehaviorSubject({state:"new",validSDP:!1}),this.iceCandidateTimeout=i.iceCandidateTimeout??Co,this.iceGatheringTimeout=i.iceGatheringTimeout??Ao,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"&&(He.warn("[ICEGatheringController] ICE gathering timeout, using current SDP"),this.handleICEGatheringTimeout())},this.iceGatheringTimeout))})}setupEventListeners(){this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler),this.peerConnection.addEventListener("icecandidate",this.onicecandidateHandler),this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.addEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler)}get iceCandidatesState$(){return this._iceCandidatesState.pipe(yo(this.peerConnectionControllerNegotiating$),B(([t,e])=>e),x(([t,e])=>t.state))}get hasValidLocalDescriptionSDP(){var e;const t=(e=this.peerConnection.localDescription)==null?void 0:e.sdp;return Cc(t??"")}get isRelayOnly(){return this.relayOnly}setRelayOnly(t){this.relayOnly=t}handleICEGatheringComplete(){He.debug("[ICEGatheringController] Handling ICE gathering complete"),He.debug(`[ICEGatheringController] Checking ICE gathering state: ${this.peerConnection.iceGatheringState}`),He.debug("[ICEGatheringController] ICE gathering complete"),this._iceCandidatesState.next({state:"complete",validSDP:this.hasValidLocalDescriptionSDP}),this.stopGathering()}stopGathering(){this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler),this.clearAllTimers()}handleICEGatheringTimeout(){var e;this.removeTimer("iceGatheringTimer");const t=this.hasValidLocalDescriptionSDP;t?(He.debug("[ICEGatheringController] Local SDP is valid"),this._iceCandidatesState.next({state:"timeout",validSDP:t}),this.stopGathering()):He.debug(`### ICE gathering timeout
|
|
72
|
+
`,(e=this.peerConnection.localDescription)==null?void 0:e.sdp)}handleICECandidateTimeout(){this.iceCandidateTimer&&this.removeTimer("iceCandidateTimer"),He.warn("[ICEGatheringController] ICE candidate timeout");const t=this.hasValidLocalDescriptionSDP;!t&&!this.relayOnly?this.restartICEGatheringWithRelayOnly():(He.debug("[ICEGatheringController] Using current SDP due to ICE candidate timeout"),this._iceCandidatesState.next({state:"timeout",validSDP:t}),this.stopGathering())}restartICEGatheringWithRelayOnly(){He.debug("[ICEGatheringController] Restarting ICE gathering with relay-only candidates"),this.relayOnly=!0,this.peerConnection.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:"relay"}),this.peerConnection.restartIce()}removeTimer(t){this[t]&&(clearTimeout(this[t]),this[t]=void 0)}clearAllTimers(){He.debug("[ICEGatheringController] Clearing all timers"),this.removeTimer("iceGatheringTimer"),this.removeTimer("iceCandidateTimer")}removeEventListeners(){this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("icecandidate",this.onicecandidateHandler)}destroy(){He.debug("[ICEGatheringController] Destroying ICEGatheringController"),this.clearAllTimers(),this.removeEventListeners(),super.destroy()}};const xs=G();var nf=class extends se{constructor(t={}){super(),this._inputSource=null,this._inputStream=null,this._lastSpokeAt=0,this._gain$=this.createBehaviorSubject(1),this._pttMultiplier=1,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._gainNode=this._audioContext.createGain(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._destination=this._audioContext.createMediaStreamDestination(),this._gainNode.connect(this._analyser),this._analyser.connect(this._destination),this._speakingThreshold=t.speakingThreshold??Vh,this._speakingHoldMs=t.speakingHoldMs??Hh,this._pollIntervalMs=t.pollIntervalMs??Ro;const e=t.initialGain??1;this._gain$.next(e),this.applyEffectiveGain()}get gain$(){return this._gain$.asObservable()}get gain(){return this._gain$.value}get outputTrack(){const[t]=this._destination.stream.getAudioTracks();return t}get level$(){return this.deferEmission(en(this._pollIntervalMs,qa).pipe(x(()=>this.computeLevel())))}get speaking$(){return this.deferEmission(this.level$.pipe(x(t=>this.evaluateSpeaking(t)),U()))}setGain(t){const e=Math.max(0,Math.min(2,t));this._gain$.next(e),this.applyEffectiveGain()}setPTTActive(t){this._pttMultiplier=t?1:0,this.applyEffectiveGain()}applyEffectiveGain(){this._gainNode.gain.value=this._gain$.value*this._pttMultiplier}setInputTrack(t){if(this._inputSource){try{this._inputSource.disconnect()}catch(e){xs.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=>{xs.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=>{xs.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 Nt=G();var sf=class extends se{constructor(t){super(),this.options=t,this.mediaTrackEndedHandler=e=>{this._mediaTrackEnded$.next(e)},this._localStream$=this.createBehaviorSubject(null),this._localAudioTracks$=this.createBehaviorSubject([]),this._localVideoTracks$=this.createBehaviorSubject([]),this._mediaTrackEnded$=this.createSubject()}get localStream$(){return this._localStream$.asObservable().pipe(S(this.destroyed$))}get localAudioTracks$(){return this._localAudioTracks$.asObservable().pipe(S(this.destroyed$))}get localVideoTracks$(){return this._localVideoTracks$.asObservable().pipe(S(this.destroyed$))}get mediaTrackEnded$(){return this._mediaTrackEnded$.asObservable().pipe(S(this.destroyed$))}get localStream(){return this._localStream$.value}get localAudioTracks(){return this._localAudioTracks$.value}get localVideoTracks(){return this._localVideoTracks$.value}async buildLocalStream(){var e,i;Nt.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")Nt.debug("[LocalStreamController] Requesting display media for screen sharing with audio:",!!this.options.inputAudioDeviceConstraints),t=await this.options.getDisplayMedia({video:!0,audio:!!this.options.inputAudioDeviceConstraints}),Nt.debug("[LocalStreamController] Screen share media obtained:",t);else{const r={audio:this.options.inputAudioDeviceConstraints,video:this.options.inputVideoDeviceConstraints};Nt.debug("[LocalStreamController] Requesting user media with constraints:",r),t=await this.options.getUserMedia(r),Nt.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()),Nt.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){Nt.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())??[]),Nt.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=>{Nt.debug(`[LocalStreamController] Stopping local track: ${e.kind}`),e.removeEventListener("ended",this.mediaTrackEndedHandler),e.stop()})}destroy(){this.stopAllTracks(),super.destroy()}};const je=G(),Tc=(t,e)=>t&&e?"sendrecv":t&&!e?"sendonly":!t&&e?"recvonly":"inactive";var af=class extends se{constructor(t){super(),this.peerConnection=t.peerConnection,this.options=t}get useAddTransceivers(){return typeof this.peerConnection.addTransceiver=="function"}get useAddTrack(){return typeof this.peerConnection.addTrack=="function"}get useAddStream(){return typeof this.peerConnection.addStream=="function"&&!this.useAddTransceivers&&!this.useAddTrack}get propose(){return this.options.propose}get isAdditionalDevice(){return this.propose==="additional-device"}get isScreenShare(){return this.propose==="screenshare"}get isSimulcast(){return!!this.options.simulcast}get isSFU(){return!!this.options.sfu}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.options.localStreamController.localStream}get inputAudioDeviceConstraints(){return this.options.getInputAudioDeviceConstraints()}get inputVideoDeviceConstraints(){return this.options.getInputVideoDeviceConstraints()}get audioDirection(){if(this.isAdditionalDevice)return"sendonly";const{localStream:t}=this,e=t==null?void 0:t.getAudioTracks().some(n=>n.enabled),i=!!this.inputAudioDeviceConstraints,r=!!this.receiveAudio;return Tc(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 Tc(e||i,r)}get sendEncodings(){if(this.isSimulcast)return["0","1","2"].map(t=>({active:!0,rid:t,scaleResolutionDownBy:Number(t)*6||1}))}getConstraintsFor(t){const e=t==="audio"?this.inputAudioDeviceConstraints:this.inputVideoDeviceConstraints;return typeof e=="boolean"?{}:e}transceiverByKind(t){return this.peerConnection.getTransceivers().filter(e=>t==="both"||e.receiver.track.kind===t)}get audioTransceivers(){return this.transceiverByKind("audio")}get videoTransceivers(){return this.transceiverByKind("video")}async setupTransceiverSender(t,e,i){var a;const r=t.kind==="audio",n=r?this.audioDirection:this.videoDirection,s={direction:n,sendEncodings:r?void 0:this.sendEncodings,streams:n==="recvonly"?void 0:[e]};je.debug(`[TransceiverController] Setting up transceiver sender for local ${t.kind} track:`,{transceiver:i,transceiverParams:s}),s.direction&&["sendonly","sendrecv"].includes(s.direction)&&(i?(await i.sender.replaceTrack(t),i.direction=s.direction,(a=s.streams)!=null&&a.some(o=>!!o)&&(je.debug(`[TransceiverController] Setting streams for transceiver sender for local ${t.kind} track:`,s.streams),i.sender.setStreams(...s.streams))):(je.debug(`[TransceiverController] Adding new transceiver for local ${t.kind} track:`,t.id),this.peerConnection.addTransceiver(t,s)))}stopTrackSender(t,e={updateTransceiverDirection:!1}){var i,r,n;try{const s=this.transceiverByKind(t);for(const a of s)if(((i=a.sender.track)==null?void 0:i.readyState)==="live"){const o=a.sender.track.id;a.sender.track.stop(),this.options.localStreamController.removeTrack(o),e.updateTransceiverDirection&&(a.direction="inactive")}}catch(s){je.error("[TransceiverController] stopTrackSender error",t,s),(n=(r=this.options).onError)==null||n.call(r,new kt("stopTrackSender",t,s))}}async restoreTrackSender(t){var e,i;try{je.debug("[TransceiverController] restoreTrackSender called",t);const r={},n=this.transceiverByKind(t);for(const a of n){const{track:o}=a.sender;if(!o||o.readyState==="ended"){const c=(o==null?void 0:o.kind)??a.receiver.track.kind;(c==="audio"||c==="video")&&(r[c]=this.getConstraintsFor(c))}}if(je.debug("[TransceiverController] restoreTrackSender constraints:",r),Object.keys(r).length===0){je.warn("[TransceiverController] restoreTrackSender: no tracks need restoration",t);return}const s=(await this.options.getUserMedia(r)).getTracks();je.debug("[TransceiverController] restoreTrackSender new tracks:",s);for(const a of s){this.options.localStreamController.addTrack(a);const o=a.kind,c=this.transceiverByKind(o)[0];c.direction=o==="audio"?this.audioDirection:this.videoDirection,je.debug("[TransceiverController] restoreTrackSender setting direction for",o,c.direction),await c.sender.replaceTrack(a)}}catch(r){je.error("[TransceiverController] restoreTrackSender error",t,r),(i=(e=this.options).onError)==null||i.call(e,new kt("restoreTrackSender",t,r))}}async replaceSenderTrack(t,e){const i=t==="audio"?this.audioTransceivers:this.videoTransceivers;for(const r of i)await r.sender.replaceTrack(e)}async setupRemoteTransceivers(t){if(t!=="answer"){for(const e of["audio","video"]){const i=e==="audio"?this.audioTransceivers:this.videoTransceivers;for(const r of i){const n=e==="audio"?this.audioDirection:this.videoDirection;["inactive","recvonly"].includes(n)&&(r.direction=n,await r.sender.replaceTrack(null),r.sender.setStreams())}}if(this.videoDirection==="recvonly"&&this.isSFU&&this.useAddTransceivers){const{msStreamsNumber:e=5}=this.options;for(let i=0;i<Number(e);i++)this.peerConnection.addTransceiver("video",{direction:"recvonly"})}}}async updateSendersConstraints(t,e){var r,n;if(!e)return this.stopTrackSender(t),Promise.resolve();const i=this.peerConnection.getSenders().filter(s=>{var a;return((a=s.track)==null?void 0:a.kind)===t&&s.track.readyState==="live"});for(const s of i){const{track:a}=s;if(a){const o={...a.getConstraints(),...e};try{await a.applyConstraints(o),je.debug(`[TransceiverController] Updated ${t} sender constraints:`,o),je.debug(`[TransceiverController] Updated ${t} sender constraints:`,a.getConstraints())}catch(c){je.warn(`[TransceiverController] applyConstraints failed for ${t} track ${a.id}, attempting track replacement fallback:`,c);try{await this.replaceTrackFallback(s,a,t,o)}catch(u){je.warn(`[TransceiverController] Track replacement fallback also failed for ${t} track:`,u),(n=(r=this.options).onError)==null||n.call(r,new kt("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 kt("replaceTrackFallback",i,new Error("getUserMedia returned no track of the requested kind"));await t.replaceTrack(o),this.options.localStreamController.addTrack(o),je.debug(`[TransceiverController] Track replacement fallback succeeded for ${i}. New track: ${o.id}`)}getMediaDirections(){return this.peerConnection.connectionState==="connected"?this.peerConnection.getTransceivers().reduce((t,e)=>({...t,[e.receiver.track.kind]:e.direction}),{audio:"inactive",video:"inactive"}):{audio:this.audioDirection,video:this.videoDirection}}updatePeerConnection(t){this.peerConnection=t}updateOptions(t){this.options={...this.options,...t}}};const z=G();var Ec=class extends se{constructor(t={},e,i){super(),this.options=t,this.firstSDPExchangeCompleted=!1,this.negotiationNeeded$=this.createSubject(),this.localDescription$=li(()=>_e(this.init())).pipe(Je(()=>this.iceGatheringController.iceCandidatesState$.pipe(B(n=>!["new","gathering"].includes(n)),Ee(()=>{this.negotiationEnded()}),B(()=>this.shouldEmitLocalDescription),x(()=>{var n;return(n=this.peerConnection)==null?void 0:n.localDescription}),fe(),Ee(n=>{n.type==="answer"&&(this._type="offer")}))),st(1),S(this.destroyed$)),this.connectionTimeout=3e3,this.oniceconnectionstatechangeHandler=()=>{if(this.peerConnection){const{iceConnectionState:n}=this.peerConnection;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(new kt("updateSelectedInputDevice",n,u)),u}},this._isNegotiating$=this.createBehaviorSubject(!1),this._memberId=null,this._iceConnectionState$=this.createReplaySubject(1),this._connectionState$=this.createReplaySubject(1),this._signalingState$=this.createReplaySubject(1),this._iceGatheringState$=this.createReplaySubject(1),this._errors$=this.createReplaySubject(1),this._iceCandidates$=this.createReplaySubject(1),this._initialized$=this.createReplaySubject(1),this._remoteDescription$=this.createReplaySubject(1),this._remoteStream$=this.createBehaviorSubject(null),this._remoteOfferMediaDirections=null,this._localAudioPipeline=null,this.deviceController=i??{},this.id=t.callId??dn(),this._type=e?"answer":"offer",this.sdpInit=e?{type:"offer",sdp:e}:void 0,this._remoteOfferMediaDirections=e?Kg(e):null;const r=this._remoteOfferMediaDirections?{audio:this._remoteOfferMediaDirections.audio.includes("recv"),video:this._remoteOfferMediaDirections.video.includes("recv"),receiveAudio:this._remoteOfferMediaDirections.audio.includes("send"),receiveVideo:this._remoteOfferMediaDirections.video.includes("send")}:{};this.options={...t,audio:t.audio??r.audio,video:t.video??r.video,receiveAudio:t.receiveAudio??r.receiveAudio??f.instance.receiveAudio,receiveVideo:t.receiveVideo??r.receiveVideo??f.instance.receiveVideo},this.localStreamController=new sf({propose:this.propose,inputAudioStream:this.options.inputAudioStream,inputVideoStream:this.options.inputVideoStream,inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints,getUserMedia:async n=>this.getUserMedia(n),getDisplayMedia:async n=>this.getDisplayMedia(n)})}get iceGatheringController(){if(!this._iceGatheringController)throw new te("ICEGatheringController is not initialized");return this._iceGatheringController}get shouldEmitLocalDescription(){if(!this.peerConnection)return!1;const{localDescription:t,signalingState:e}=this.peerConnection;return!t||!Cc(t.sdp)?!1:t.type==="offer"&&e==="have-local-offer"||t.type==="answer"&&e==="stable"}removeConnectionTimer(){this.connectionTimer&&(clearTimeout(this.connectionTimer),this.connectionTimer=void 0)}setMemberId(t){this._memberId=t}get memberId(){return this._memberId}stopTrackSender(t,e={updateTransceiverDirection:!1}){var r,n,s;const i=t==="audio"||t==="both";i&&this._localAudioPipeline&&this.stopRawAudioInputForPipeline(),i?t==="both"?(n=this.transceiverController)==null||n.stopTrackSender("video",e):this._localAudioPipeline||(s=this.transceiverController)==null||s.stopTrackSender(t,e):(r=this.transceiverController)==null||r.stopTrackSender(t,e)}stopRawAudioInputForPipeline(){var e;const t=this.localStreamController.localAudioTracks;for(const i of t)i.readyState==="live"&&(i.stop(),this.localStreamController.removeTrack(i.id));(e=this._localAudioPipeline)==null||e.setInputTrack(null)}get isNegotiating$(){return this._isNegotiating$.asObservable()}get isNegotiating(){return this._isNegotiating$.value}updateMediaDevicesOptions(t){this.options={...this.options,...t}}get iceGatheringState$(){return this.cachedObservable("iceGatheringState$",()=>this._iceGatheringState$.asObservable().pipe(S(this.destroyed$)))}get mediaTrackEnded$(){return this.cachedObservable("mediaTrackEnded$",()=>this.localStreamController.mediaTrackEnded$.pipe(S(this.destroyed$)))}get errors$(){return this.cachedObservable("errors$",()=>this._errors$.asObservable().pipe(S(this.destroyed$)))}get iceCandidates$(){return this.cachedObservable("iceCandidates$",()=>this._iceCandidates$.asObservable().pipe(S(this.destroyed$)))}get initialized$(){return this.cachedObservable("initialized$",()=>this._initialized$.asObservable().pipe(B(t=>t),S(this.destroyed$)))}get remoteDescription$(){return this.cachedObservable("remoteDescription$",()=>this._remoteDescription$.asObservable().pipe(S(this.destroyed$)))}get localStream$(){return this.cachedObservable("localStream$",()=>this.localStreamController.localStream$.pipe(S(this.destroyed$)))}get remoteStream$(){return this.cachedObservable("remoteStream$",()=>this._remoteStream$.asObservable().pipe(S(this.destroyed$)))}get localAudioTracks$(){return this.cachedObservable("localAudioTracks$",()=>this.localStreamController.localAudioTracks$.pipe(S(this.destroyed$)))}get localVideoTracks$(){return this.cachedObservable("localVideoTracks$",()=>this.localStreamController.localVideoTracks$.pipe(S(this.destroyed$)))}get iceConnectionState$(){return this.cachedObservable("iceConnectionState$",()=>this._iceConnectionState$.asObservable().pipe(S(this.destroyed$)))}get connectionState$(){return this.cachedObservable("connectionState$",()=>this._connectionState$.asObservable().pipe(S(this.destroyed$)))}get signalingState$(){return this.cachedObservable("signalingState$",()=>this._signalingState$.asObservable().pipe(S(this.destroyed$)))}get type(){return this._type}get propose(){return this.options.propose??"main"}get isAdditionalDevice(){return this.propose==="additional-device"}get isMainDevice(){return this.propose==="main"}get isScreenShare(){return this.propose==="screenshare"}get iceServers(){if(!this.options.disableUdpIceServers)return this.options.iceServers??[];const t="transport=tcp";return(this.options.iceServers??[]).map(e=>{const i=Array.isArray(e.urls)?e.urls:[e.urls];return{...e,urls:i.filter(r=>r.includes(t))}})}get rtcConfiguration(){const{iceServers:t,...e}=this.options;return{bundlePolicy:"max-compat",iceCandidatePoolSize:10,iceServers:this.iceServers,iceTransportPolicy:this.options.relayOnly?"relay":"all",sdpSemantics:"unified-plan",...e}}get receiveVideo(){return!!this.options.receiveVideo}get receiveAudio(){return!!this.options.receiveAudio}get localStream(){return this.localStreamController.localStream}get remoteStream(){return this._remoteStream$.value}get inputAudioDeviceConstraints(){if(this.options.audio===!1&&!this.options.inputAudioDeviceConstraints)return!1;const t=this.deviceController.selectedAudioInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputAudioDeviceConstraints=="object"?this.options.inputAudioDeviceConstraints:{},...typeof t=="object"?t:{}}}get inputVideoDeviceConstraints(){if(!this.options.video&&!this.options.inputVideoDeviceConstraints)return!1;const t=this.deviceController.selectedVideoInputDeviceConstraints;return t===!1?!1:{...typeof this.options.inputVideoDeviceConstraints=="object"?this.options.inputVideoDeviceConstraints:{},...typeof t=="object"?t:{}}}get WebRTCPeerConnectionConstructor(){var t;return((t=this.options.webRTCApiProvider)==null?void 0:t.RTCPeerConnection)??RTCPeerConnection}get offerOptions(){const t={iceRestart:this.firstSDPExchangeCompleted?!0:void 0};switch(this.propose){case"screenshare":case"additional-device":return{...t,offerToReceiveAudio:!1,offerToReceiveVideo:!1};case"main":default:return{...t,offerToReceiveAudio:this.options.receiveAudio??!0,offerToReceiveVideo:this.options.receiveVideo??!!this.inputVideoDeviceConstraints}}}get answerOptions(){return{iceRestart:this.firstSDPExchangeCompleted?!0:void 0}}async init(){return this.initPromise??(this.initPromise=this.doInit()),this.initPromise}async doInit(){try{this.setupPeerConnection(),this.subscribeTo(this.negotiationNeeded$.pipe(qd(0),ls(async()=>this.startNegotiation())),{next:()=>{z.debug("[RTCPeerConnectionController] Start Negotiation completed successfully")},error:t=>{z.error("[RTCPeerConnectionController] Start Negotiation error:",t),this._errors$.next(hi(t))}}),this.subscribeTo(Ni(this.deviceController.selectedAudioInputDevice$.pipe(x(t=>["audio",t])),this.deviceController.selectedVideoInputDevice$.pipe(x(t=>["video",t]))).pipe(eh(()=>!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(hi(t)),this.destroy()}}setupPeerConnection(){this.peerConnection=new this.WebRTCPeerConnectionConstructor(this.rtcConfiguration),this.peerConnection.addEventListener("negotiationneeded",this.onnegotiationneededHandler),this._iceGatheringController=new rf(this.peerConnection,this.isNegotiating$,{iceCandidateTimeout:this.options.iceCandidateTimeout,iceGatheringTimeout:this.options.iceGatheringTimeout,relayOnly:this.options.relayOnly}),this.transceiverController=new af({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(hi(t))}}async createOffer(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=await this.peerConnection.createOffer(t);await this.setLocalDescription(e)}async updateAnswerStatus({status:t,sdp:e}){let i=t!=="failed";try{t==="received"&&e&&(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(hi(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,fallbackToReceiveOnly:o}=t;this.options={...this.options,...r!==void 0?{audio:r}:{},...n!==void 0?{video:n}:{},...s!==void 0?{receiveAudio:s}:{},...a!==void 0?{receiveVideo:a}:{},...o!==void 0?{fallbackToReceiveOnly:o}:{}},(i=this.transceiverController)==null||i.updateOptions({receiveAudio:this.receiveAudio,receiveVideo:this.receiveVideo}),this.localStreamController.updateOptions({inputAudioDeviceConstraints:this.inputAudioDeviceConstraints,inputVideoDeviceConstraints:this.inputVideoDeviceConstraints})}await this.setupLocalTracks();const{answerOptions:e}=this;z.debug("[RTCPeerConnectionController] Creating inbound answer with options:",e),await this.createAnswer(e)}async handleOfferReceived(){if(!this.sdpInit)throw new te("SDP initialization parameters are not set");this._isNegotiating$.next(!0),await this._setRemoteDescription(this.sdpInit);const{answerOptions:t}=this;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??f.instance.preferredAudioCodecs,r=this.options.preferredVideoCodecs??f.instance.preferredVideoCodecs,n=this.options.stereo??f.instance.stereoAudio;return(i.length>0||r.length>0)&&(e=Jg(e,i,r),z.debug("[RTCPeerConnectionController] Applied codec preferences to SDP",{preferredAudioCodecs:i,preferredVideoCodecs:r})),n&&(e=Qg(e),z.debug("[RTCPeerConnectionController] Applied stereo Opus to SDP")),Promise.resolve(e)}async createAnswer(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=await this.peerConnection.createAnswer(t);await this.setLocalDescription(e)}setupEventListeners(){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");this._iceConnectionState$.next(this.peerConnection.iceConnectionState),this._connectionState$.next(this.peerConnection.connectionState),this._signalingState$.next(this.peerConnection.signalingState),this._iceGatheringState$.next(this.peerConnection.iceGatheringState),this._remoteDescription$.next(this.peerConnection.remoteDescription),this.peerConnection.removeEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.addEventListener("icegatheringstatechange",this.onicegatheringstatechangeHandler),this.peerConnection.removeEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.addEventListener("iceconnectionstatechange",this.oniceconnectionstatechangeHandler),this.peerConnection.removeEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.addEventListener("connectionstatechange",this.onconnectionstatechangeHandler),this.peerConnection.removeEventListener("signalingstatechange",this.onsignalingstatechangeHandler),this.peerConnection.addEventListener("signalingstatechange",this.onsignalingstatechangeHandler)}negotiationEnded(){this._isNegotiating$.next(!1)}async triggerIceRestart(t){if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");const e=t&&!this.options.relayOnly;if(e)try{this.peerConnection.setConfiguration({...this.peerConnection.getConfiguration(),iceTransportPolicy:"relay"}),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(hi(i)),this.negotiationEnded(),e&&this.restoreIceTransportPolicy(),i}e&&Ze(Cr(this._iceGatheringState$.pipe(B(i=>i==="complete"),Oe(1)),Fi(Uh).pipe(x(()=>"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 te("RTCPeerConnection is not initialized");await this.setupLocalTracks(),await this.setupRemoteTracks()}async setupLocalTracks(){var e,i,r,n,s,a,o;if(z.debug("[RTCPeerConnectionController] Setting up local tracks/transceivers."),this.hasNoLocalMediaToSend()){if(!this.receiveAudio&&!this.receiveVideo)throw new on("Call requests no media: enable audio/video or receiveAudio/receiveVideo");z.debug("[RTCPeerConnectionController] No local media requested; negotiating receive-only."),this.setupReceiveOnlyTransceivers();return}let t;try{t=this.localStream??await this.localStreamController.buildLocalStream()}catch(c){this.handleLocalMediaFailure(c);return}if(((e=this.transceiverController)==null?void 0:e.useAddStream)??!1){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)}}hasNoLocalMediaToSend(){const t=!!(this.options.inputAudioStream??this.options.inputVideoStream);return this.propose==="main"&&!this.localStream&&!t&&!this.inputAudioDeviceConstraints&&!this.inputVideoDeviceConstraints}get requestedMediaKinds(){const t=!!this.inputAudioDeviceConstraints,e=!!this.inputVideoDeviceConstraints;return t&&e?"audiovideo":e?"video":"audio"}handleLocalMediaFailure(t){if(this.propose==="screenshare")throw new Gt("startScreenShare","screen",t,!1);if(this.propose==="additional-device")throw new Gt("addInputDevice",this.requestedMediaKinds,t,!1);const e=this.receiveAudio||this.receiveVideo;if(!((this.options.fallbackToReceiveOnly??!0)&&e))throw new Gt("acquireLocalMedia",this.requestedMediaKinds,t,!0);z.warn("[RTCPeerConnectionController] Local media unavailable; continuing receive-only:",t),this._errors$.next(new Gt("acquireLocalMedia",this.requestedMediaKinds,t,!1)),this.setupReceiveOnlyTransceivers()}setupReceiveOnlyTransceivers(){var t,e,i;this.type==="offer"&&((((t=this.transceiverController)==null?void 0:t.useAddTransceivers)??!1)&&((e=this.peerConnection)==null||e.addTransceiver("audio",{direction:this.receiveAudio?"recvonly":"inactive"}),(i=this.peerConnection)==null||i.addTransceiver("video",{direction:this.receiveVideo?"recvonly":"inactive"})),this.isNegotiating||this.negotiationNeeded$.next())}async getUserMedia(t){var e;return(((e=this.options.webRTCApiProvider)==null?void 0:e.mediaDevices)??navigator.mediaDevices).getUserMedia(t)}async getDisplayMedia(t){var i;const e=((i=this.options.webRTCApiProvider)==null?void 0:i.mediaDevices)??navigator.mediaDevices;if(!e.getDisplayMedia)throw new te("getDisplayMedia is not supported by the current WebRTC provider");return e.getDisplayMedia(t)}async setupRemoteTracks(){var t;if(!this.peerConnection)throw new te("RTCPeerConnection is not initialized");this.peerConnection.ontrack=e=>{var i;if(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(new kt("restoreAudioPipelineInput","audio",n));return}const i=e.getAudioTracks().at(0);i&&(this.localStreamController.addTrack(i),this._localAudioPipeline.setInputTrack(i))}ensureLocalAudioPipeline(){if(this._localAudioPipeline)return this._localAudioPipeline;if(!this.peerConnection)return null;try{this._localAudioPipeline=new nf}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 te("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(new kt("addLocalTrack",t.kind,e)),e}}removeLocalTrack(t){var i,r,n;if(!this.peerConnection){const s=new te("RTCPeerConnection is not initialized");throw this._errors$.next(s),s}const e=this.peerConnection.getSenders().find(s=>{var a;return((a=s.track)==null?void 0:a.id)===t});if(!e){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(s){throw z.error(`[RTCPeerConnectionController] Failed to remove ${(r=e.track)==null?void 0:r.kind} track:`,s),this._errors$.next(new kt("removeLocalTrack",((n=e.track)==null?void 0:n.kind)??"unknown",s)),s}}setLocalTrack(t){const e=[...t.kind==="audio"?this.localStreamController.localAudioTracks:this.localStreamController.localVideoTracks];for(const i of e)this.removeLocalTrack(i.id);this.addLocalTrack(t)}async updateSendersConstraints(t,e){var i;await((i=this.transceiverController)==null?void 0:i.updateSendersConstraints(t,e))}async replaceAudioTrackWithConstraints(t){var i;const e=(i=this.peerConnection)==null?void 0:i.getSenders().filter(r=>{var n;return((n=r.track)==null?void 0:n.kind)==="audio"&&r.track.readyState==="live"});if(!e||e.length===0){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 te("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 Ds(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"id")}function kc(t){if(!Ds(t))return!1;const e=t;return e.method==="verto.invite"&&ke(e.params)&&K(e.params,"sdp")&&K(e.params,"callID")}function of(t){return Ds(t)?t.method==="verto.bye":!1}function xc(t){return Ds(t)?t.method==="verto.attach":!1}function cf(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"method")&&t.method==="verto.answer"&&ke(t.params)&&K(t.params,"callID")}function lf(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"method")&&t.method==="verto.media"&&ke(t.params)&&K(t.params,"callID")&&K(t.params,"sdp")}function uf(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"method")&&t.method==="verto.mediaParams"&&ke(t.params)&&K(t.params,"mediaParams")}function df(t){return ke(t)&&K(t,"jsonrpc")&&t.jsonrpc==="2.0"&&K(t,"method")&&t.method==="verto.ping"}function Dc(t){return ke(t)&&K(t,"callID")&&typeof t.callID=="string"}const H=G();function hf(t){return t.isInvite&&!t.reattach&&!t.explicitNodeId?"":t.currentNodeId??""}var pf=class extends se{constructor(t){super(),this.callSession=t}destroy(){this.callSession=void 0,super.destroy()}},gf=class extends pf{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=vn({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},action:"hold"});try{await this.executeVerto(t)}catch(e){throw H.warn("[WebRTCManager] Call might already be disconnected, error sending Verto hold:",e),e}}async unhold(){const t=vn({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},action:"unhold"});try{await this.executeVerto(t)}catch(e){throw H.warn("[WebRTCManager] Call might already be disconnected, error sending Verto unhold:",e),e}}get mediaDirections(){return this.mainPeerConnection.mediaDirections}get rtcPeerConnections$(){return this._rtcPeerConnections$.asObservable()}get rtcPeerConnections(){return this._rtcPeerConnections$.value}get nodeId$(){return this._nodeId$.asObservable()}get selfId$(){return this._selfId$.asObservable()}get localStream(){var t;return((t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id))==null?void 0:t.localStream)??null}get remoteStream(){var t;return((t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id))==null?void 0:t.remoteStream)??null}get nodeId(){return this._nodeId$.value}get screenShareStatus(){return this._screenShareStatus$.value}get screenShareStatus$(){return this._screenShareStatus$.asObservable()}get mainPeerConnection(){const t=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id);if(!t)throw new te("Main peer connection not found");return t}get signalingStatus$(){return this.cachedObservable("signalingStatus$",()=>Ni(this._signalingStatus$.asObservable(),this.mainPeerConnection.connectionState$.pipe(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;H.debug("[WebRTCManager] Received Verto media event (early media SDP):",t);const{sdp:e,callID:i}=t;this.emitMainSignalingStatus(i,"ringing"),(r=this._rtcPeerConnectionsMap.get(i))==null||r.updateAnswerStatus({status:"received",sdp:e})}),this.subscribeTo(this.vertoAnswer$,t=>{var r;H.debug("[WebRTCManager] Received Verto answer event:",t);const{sdp:e,callID:i}=t;this.emitMainSignalingStatus(i,"connecting"),(r=this._rtcPeerConnectionsMap.get(i))==null||r.updateAnswerStatus({status:"received",sdp:e})}),this.subscribeTo(this.vertoMediaParams$,t=>{H.debug("[WebRTCManager] Received Verto mediaParams event:",t);const{mediaParams:e,callID:i}=t,r=this._rtcPeerConnectionsMap.get(i),{audio:n,video:s}=e;(async()=>{var a;try{n&&r&&await r.replaceAudioTrackWithConstraints(n),s&&await(r==null?void 0:r.updateSendersConstraints("video",s)),this.webRtcCallSession.emitMediaParamsUpdated({audio:n,video:s,timestamp:Date.now()})}catch(o){H.warn("[WebRTCManager] Error applying server-pushed media params:",o),(a=this.onError)==null||a.call(this,o instanceof Error?o:new Error(String(o),{cause:o}))}})()}),this.subscribeTo(this.vertoPing$,t=>{this.attachManager.attach(this.buildAttachableCall()),this.sendVertoPong(t)})}setNodeIdIfNull(t){!this._nodeId$.value&&t&&(H.debug(`[WebRTCManager] Early node_id set: ${t}`),this._nodeId$.next(t))}setSelfIdIfNull(t){!this._selfId$.value&&t&&(H.debug(`[WebRTCManager] Early selfId set: ${t}`),this._selfId$.next(t))}async sendVertoPong(t){var e;try{const i=Dg({...t});await this.executeVerto(i)}catch(i){H.warn("[WebRTCManager] Call might disconnect, error sending Verto pong:",i),(e=this.onError)==null||e.call(this,new No(i))}}async updateMediaConstraints(t={}){var r;const{audio:e,video:i}=t;try{e&&await this.mainPeerConnection.updateSendersConstraints("audio",e),i&&await this.mainPeerConnection.updateSendersConstraints("video",i)}catch(n){throw H.warn("[WebRTCManager] Error updating media constraints:",n),(r=this.onError)==null||r.call(this,n instanceof Error?n:new Error(String(n),{cause:n})),n}}get selfId(){return this._selfId$.value}buildAttachableCall(t){return{nodeId:this.nodeId??void 0,id:t??this.webRtcCallSession.id,to:this.webRtcCallSession.to,mediaDirections:this.webRtcCallSession.mediaDirections}}requestKeyframe(){try{const t=this.mainPeerConnection.peerConnection;if(!t){H.warn("[WebRTCManager] No peer connection for keyframe request");return}const e=t.getReceivers().find(i=>i.track.kind==="video");if(!e){H.warn("[WebRTCManager] No video receiver for keyframe request");return}typeof e.requestKeyFrame=="function"?(e.requestKeyFrame(),H.debug("[WebRTCManager] Keyframe requested via RTCRtpReceiver.requestKeyFrame()")):H.debug("[WebRTCManager] requestKeyFrame() not supported, skipping")}catch(t){H.warn("[WebRTCManager] Keyframe request failed (non-fatal):",t)}}async requestIceRestart(t){try{const e=this.mainPeerConnection;if(!e.peerConnection){H.warn("[WebRTCManager] No peer connection for ICE restart");return}await e.triggerIceRestart(t),H.info(`[WebRTCManager] ICE restart initiated${t?" (relay-only)":""}`)}catch(e){throw H.error("[WebRTCManager] ICE restart failed:",e),e}}async requestIceRestartAll(t){const e=Array.from(this._rtcPeerConnectionsMap.entries());for(const[i,r]of e)try{if(!r.peerConnection){H.debug(`[WebRTCManager] No peer connection for leg ${i}, skipping ICE restart`);continue}await r.triggerIceRestart(t),H.info(`[WebRTCManager] ICE restart initiated for leg ${i}${t?" (relay-only)":""}`)}catch(n){H.warn(`[WebRTCManager] ICE restart failed for leg ${i}:`,n)}}requestKeyframeAll(){for(const[t,e]of this._rtcPeerConnectionsMap){if(e.isScreenShare){H.debug(`[WebRTCManager] Skipping keyframe for send-only screen share leg ${t}`);continue}try{const i=e.peerConnection;if(!i)continue;const r=i.getReceivers().find(n=>n.track.kind==="video");if(!r)continue;typeof r.requestKeyFrame=="function"&&(r.requestKeyFrame(),H.debug(`[WebRTCManager] Keyframe requested for leg ${t}`))}catch(i){H.warn(`[WebRTCManager] Keyframe request failed for leg ${t} (non-fatal):`,i)}}}get callJoinedEvent$(){return this.webRtcCallSession.callEvent$.pipe(B(Sc),S(this.destroyed$))}get vertoMedia$(){return this.webRtcCallSession.webrtcMessages$.pipe(we(lf,"params"),S(this.destroyed$))}get vertoAnswer$(){return this.cachedObservable("vertoAnswer$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(cf,"params"),S(this.destroyed$)))}get vertoMediaParams$(){return this.cachedObservable("vertoMediaParams$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(uf,"params"),S(this.destroyed$)))}get vertoBye$(){return this.cachedObservable("vertoBye$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(of,"params"),S(this.destroyed$)))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(xc,"params"),S(this.destroyed$)))}get vertoPing$(){return this.cachedObservable("vertoPing$",()=>this.webRtcCallSession.webrtcMessages$.pipe(we(df,"params"),S(this.destroyed$)))}async executeVerto(t,e={}){var s,a;const i=sc({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 Et(r.error.code,r.error.message,r.error.data);return(s=this.onError)==null||s.call(this,o),r}const n=at(r,"result.result");if(n!=null&&n.error){const o=new Et(n.error.code,n.error.message,n.error.data);return(a=this.onError)==null||a.call(this,o),r}return r}async sendLocalDescription(t,e){var n,s;const i=t.method,r=this.getSendLocalSDPOptionalParams(e,t);try{const a=await this.executeVerto(t,r);switch(i){case"verto.invite":this.processInviteResponse(a,e);break;case"verto.modify":await this.processModifyResponse(a,e);break;default:}}catch(a){H.error(`[WebRTCManager] Error sending Verto ${i}:`,a),(n=this.onError)==null||n.call(this,a instanceof Error?a:new Error(String(a),{cause:a})),i==="verto.modify"&&((s=this.onModifyFailed)==null||s.call(this))}}async processModifyResponse(t,e){var i;if(!t.error){const r=at(t,"result.result.result.action"),n=at(t,"result.result.result.sdp");if(r==="updateMedia"&&n)try{await e.updateAnswerStatus({status:"received",sdp:n})}catch(s){H.warn("[WebRTCManager] Error processing modify response:",s);const a=s instanceof Error?s:new Error(String(s),{cause:s});(i=this.onError)==null||i.call(this,a)}}}emitMainSignalingStatus(t,e){var r;const i=this._rtcPeerConnectionsMap.get(t);if(!i){const n=new te(`Cannot emit signaling status, RTCPeerConnectionController not found for callID: ${t}`);H.error("[WebRTCManager] Failed to emit signaling status:",{callId:t,status:e,signalingError:n}),(r=this.onError)==null||r.call(this,n);return}i.isMainDevice&&this._signalingStatus$.next(e)}processInviteResponse(t,e){var i;if(!t.error&&at(t,"result.result.result.message")==="CALL CREATED"){this.emitMainSignalingStatus(e.id,"trying"),this._nodeId$.next(at(t,"result.node_id")??null);const r=at(t,"result.result.result.memberID")??null,n=at(t,"result.result.result.callID")??null;H.debug("[WebRTCManager] Verto invite response:",{callId:n,memberId:r,response:t}),this._selfId$.next(r),e.setMemberId(r),n?(this.webRtcCallSession.addCallId(n),this.attachManager.attach(this.buildAttachableCall(n))):H.warn("[WebRTCManager] Cannot attach call, missing callId:",{nodeId:this.nodeId,callId:n}),H.info("[WebRTCManager] Verto invite successful"),H.debug(`[WebRTCManager] nodeid: ${this._nodeId$.value}, selfId: ${this._selfId$.value}`)}else{H.error("[WebRTCManager] Verto invite failed:",t);const r=t.error?new Et(t.error.code,t.error.message,t.error.data):new Error("Verto invite failed: unexpected response");(i=this.onError)==null||i.call(this,r)}}get RTCPeerConnectionConfig(){return{iceServers:this.webRtcCallSession.clientSession.iceServers??f.instance.iceServers,relayOnly:f.instance.relayOnly||f.instance.disableUdpIceServers,disableUdpIceServers:f.instance.disableUdpIceServers,iceCandidateTimeout:f.instance.iceCandidateTimeout,iceGatheringTimeout:f.instance.iceGatheringTimeout}}initMainPeerConnection(){const{options:t}=this.webRtcCallSession,e=new Ec({propose:"main",callId:this.webRtcCallSession.id,audio:t.audio,video:t.video,inputAudioDeviceConstraints:t.inputAudioDeviceConstraints,inputVideoDeviceConstraints:t.inputVideoDeviceConstraints,inputAudioStream:t.inputAudioStream,inputVideoStream:t.inputVideoStream,receiveAudio:t.receiveAudio,receiveVideo:t.receiveVideo,fallbackToReceiveOnly:t.fallbackToReceiveOnly,webRTCApiProvider:this.webRTCApiProvider,preferredVideoCodecs:t.preferredVideoCodecs,preferredAudioCodecs:t.preferredAudioCodecs,stereo:t.stereo,...this.RTCPeerConnectionConfig},t.initOffer,this.deviceController);this.setupLocalDescriptionHandler(e),this.setupVertoByeHandler(),this.setupVertoAttachHandler(),this.initObservables(e),this._rtcPeerConnectionsMap.set(e.id,e),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(e.errors$,i=>{var r;(r=this.onError)==null||r.call(this,i)}),t.initOffer&&this.handleInboundAnswer(e)}async handleInboundAnswer(t){var i,r,n;H.debug("[WebRTCManager] Waiting for inbound call to be accepted or rejected");const e=await Ze(Cr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(S(this.destroyed$))).catch(()=>null);if(e===null){H.debug("[WebRTCManager] Inbound answer handler aborted (destroyed).");return}if(Dc(e))H.info("[WebRTCManager] Inbound call ended by remote before answer."),(i=this.callSession)==null||i.destroy();else if(e){H.debug("[WebRTCManager] Inbound call accepted, creating SDP answer");const s=this.webRtcCallSession.answerMediaOptions;try{await t.acceptInbound(s)}catch(a){H.error("[WebRTCManager] Error creating inbound answer:",a),(n=this.onError)==null||n.call(this,a instanceof Error?a:new Error(String(a),{cause:a}))}}else{H.info("[WebRTCManager] Inbound call rejected by user.");try{await this.bye("USER_BUSY")}finally{this._signalingStatus$.next("disconnected"),(r=this.callSession)==null||r.destroy()}}}setupVertoAttachHandler(){this.subscribeTo(this.vertoAttach$,async t=>{H.debug("[WebRTCManager] Received Verto attach event for existing call:",t);const{callID:e}=t;await this.attachManager.attach({nodeId:this.nodeId??void 0,id:e,to:t.callee_id_number,mediaDirections:{audio:"sendrecv",video:"inactive"}})})}initObservables(t){this.mediaDirections$=t.connectionState$.pipe(B(e=>e==="connected"),x(()=>t.mediaDirections),th(t.mediaDirections),S(this.destroyed$)),this.localStream$=t.localStream$.pipe(fe(),S(this.destroyed$)),this.remoteStream$=t.remoteStream$.pipe(fe(),S(this.destroyed$))}setupLocalDescriptionHandler(t){this.subscribeTo(t.localDescription$.pipe(B(e=>e!==null),S(this.destroyed$)),e=>{const{type:i,sdp:r}=e,n=this.dialogParams(t),s=!t.firstSDPExchangeCompleted;if(i==="answer"){const a=kg({dialogParams:n,sdp:r});this.sendLocalDescriptionOnceAccepted(a,t)}else if(s){const a=Ag({dialogParams:n,sdp:r});this.sendLocalDescription(a,t)}else{const a=vn({dialogParams:n,sdp:r,action:"updateMedia"});this.sendLocalDescription(a,t)}})}setupVertoByeHandler(){this.subscribeTo(this.vertoBye$,()=>{var t;this._signalingStatus$.next("disconnected"),this.attachManager.detach(this.buildAttachableCall()),(t=this.callSession)==null||t.destroy()})}getSendLocalSDPOptionalParams(t,e){let i;return t.firstSDPExchangeCompleted||(i=[],t.isMainDevice?i.push(...f.instance.inviteSubscribeMainDevice):t.isAdditionalDevice?i.push(...f.instance.inviteSubscribeAdditionalDevice):t.isScreenShare&&i.push(...f.instance.inviteSubscribeScreenshare)),{callID:t.id,node_id:hf({isInvite:kc(e),reattach:this.webRtcCallSession.options.reattach===!0,explicitNodeId:this.webRtcCallSession.options.nodeId,currentNodeId:this._nodeId$.value}),subscribe:i}}async sendLocalDescriptionOnceAccepted(t,e){var r,n,s;H.debug("[WebRTCManager] Waiting for call to be accepted or ended before sending answer");const i=await Ze(Cr(this.vertoBye$,this.webRtcCallSession.answered$).pipe(S(this.destroyed$))).catch(()=>null);if(i===null){H.debug("[WebRTCManager] Destroyed while waiting for call acceptance");return}if(Dc(i))H.info("[WebRTCManager] Call ended before answer was sent."),(r=this.callSession)==null||r.destroy();else if(i){H.debug("[WebRTCManager] Call accepted, sending answer");try{this.emitMainSignalingStatus(e.id,"connecting"),await this.sendLocalDescription(t,e),await e.updateAnswerStatus({status:"sent"}),await this.attachManager.attach(this.buildAttachableCall())}catch(a){H.error("[WebRTCManager] Error sending Verto answer:",a),(s=this.onError)==null||s.call(this,a instanceof Error?a:new Error(String(a),{cause:a})),await e.updateAnswerStatus({status:"failed"})}}else{H.info("[WebRTCManager] Call was not accepted, sending verto.bye.");try{await this.bye("USER_BUSY")}finally{this._signalingStatus$.next("disconnected"),(n=this.callSession)==null||n.destroy()}}}dialogParams(t){const e=t.memberId??this._selfId$.value??void 0,i=t.propose==="main"&&!t.firstSDPExchangeCompleted&&this.webRtcCallSession.options.reattach;return{id:t.isMainDevice?this.webRtcCallSession.id:t.id,destinationNumber:this.webRtcCallSession.to??this.webRtcCallSession.from,attach:i,reattaching:i,callerName:this.webRtcCallSession.fromName,callerNumber:this.webRtcCallSession.from,remoteCallerName:this.webRtcCallSession.toName,remoteCallerNumber:this.webRtcCallSession.to,userVariables:{memberCallId:this.webRtcCallSession.id,memberId:e,...this.webRtcCallSession.userVariables},screenShare:t.isScreenShare,additionalDevice:t.isAdditionalDevice,pingSupported:!0,version:ah}}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 on("No valid device to be added");throw(r=this.onError)==null||r.call(this,n),n}}async addScreenMedia(t={audio:!1}){await this.initAdditionalPeerConnection("screenshare",t)}async initAdditionalPeerConnection(t,e){const i=t==="screenshare";let r,n=null;try{return i&&this._screenShareStatus$.next("starting"),n=new Ec({...e,...this.RTCPeerConnectionConfig,propose:t,webRTCApiProvider:this.webRTCApiProvider},void 0,this.deviceController),this.setupLocalDescriptionHandler(n),i&&(this._screenShareId=n.id),this._rtcPeerConnectionsMap.set(n.id,n),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values())),this.subscribeTo(n.errors$,s=>{var a;r??(r=s),(a=this.onError)==null||a.call(this,s,{fatal:!1})}),await Ze(n.connectionState$.pipe(B(s=>s==="connected"),Oe(1),Sr(this._screenShareTimeoutMs),S(this.destroyed$))),i&&this._screenShareStatus$.next("started"),H.info(`[WebRTCManager] Additional peer connection connected (${t}).`),n.id}catch(s){if(H.warn("[WebRTCManager] Error initializing additional peer connection:",s),n&&n.destroy(),i&&this._screenShareStatus$.next("none"),r)throw r instanceof Gt&&r.originalError instanceof Error?r.originalError:r;if(s instanceof wr){H.debug("[WebRTCManager] Additional peer connection aborted before connecting.");return}throw s instanceof Error?s:new Error(String(s),{cause:s})}}async removeInputDevices(t){return this.removeAdditionalPeerConnection(t)}removeMainInputDevice(t={removeAudio:!1,removeVideo:!0}){let e;if(t.removeAudio&&(e="audio"),t.removeVideo&&(e=e==="audio"?"both":"video"),e)return this.mainPeerConnection.stopTrackSender(e,{updateTransceiverDirection:!0})}async removeScreenMedia(){if(["starting","started"].includes(this._screenShareStatus$.value)||H.warn("[WebRTCManager] No active screen share to stop."),!this._screenShareId){H.debug("[WebRTCManager] No screen share peer connection found.");return}this._screenShareStatus$.next("stopping"),await this.removeAdditionalPeerConnection(this._screenShareId),this._screenShareId=void 0,this._screenShareStatus$.next("none")}async removeAdditionalPeerConnection(t){const e=this._rtcPeerConnectionsMap.get(t);try{e&&await this.executeVertoBye(e)}finally{e==null||e.destroy(),this._rtcPeerConnectionsMap.delete(t),this._rtcPeerConnections$.next(Array.from(this._rtcPeerConnectionsMap.values()))}}async executeVertoBye(t,e){try{const i=e?{cause:e,causeCode:Ig[e]}:{};await this.executeVerto(Tg({...i,dialogParams:this.dialogParams(t)}))}catch(i){throw H.warn("[WebRTCManager] Call might already be disconnected, error sending Verto bye:",i),i}}async bye(t){this.attachManager.detach(this.buildAttachableCall());const e=this._rtcPeerConnectionsMap.get(this.webRtcCallSession.id);e&&await this.executeVertoBye(e,t)}async sendDigits(t){const e=Eg({sessid:this.webRtcCallSession.id,dialogParams:{callID:this.webRtcCallSession.id},dtmf:t});try{await this.executeVerto(e)}catch(i){throw H.warn("[WebRTCManager] Error sending DTMF digits:",i),i}}async transfer(t){const e=vn({...t,dialogParams:this.dialogParams(this.mainPeerConnection),action:"transfer"});try{H.debug("[WebRTCManager] Transferring call with options:",t),await this.executeVerto(e)}catch(i){throw H.error("[WebRTCManager] Error transferring call:",i),i}}destroy(){this._rtcPeerConnectionsMap.forEach(t=>{t.destroy()}),this._rtcPeerConnectionsMap.clear(),this._rtcPeerConnections$.complete(),super.destroy()}};const Ic=G();var ff=class extends se{constructor(t={}){super(),this._source=null,this._stream=null,this._audioContext=(t.audioContextFactory??(()=>new AudioContext))(),this._analyser=this._audioContext.createAnalyser(),this._analyser.fftSize=2048,this._analyser.smoothingTimeConstant=.3,this._analyserBuffer=new Uint8Array(new ArrayBuffer(this._analyser.fftSize)),this._pollIntervalMs=t.pollIntervalMs??Ro}get level$(){return this.deferEmission(en(this._pollIntervalMs,qa).pipe(x(()=>this.computeLevel())))}setStream(t){if(this._source){try{this._source.disconnect()}catch(e){Ic.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=>{Ic.debug("[RemoteAudioMeter] audio context close warning:",t)}),super.destroy()}computeLevel(){if(!this._source)return 0;this._analyser.getByteTimeDomainData(this._analyserBuffer);let t=0;for(const e of this._analyserBuffer){const i=(e-128)/128;t+=i*i}return Math.sqrt(t/this._analyserBuffer.length)}};const Tr=G(),vf=1e3,bf=10,mf=2e3,yf=3e3,wf=3,Sf=5,Cf=5,Af=10,Tf=4,Ef=30;function kf(t,e){const i=t+e;return i===0?0:t/i*100}function xf(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="inbound-rtp"}function Df(t){return typeof t=="object"&&t!==null&&"type"in t&&t.type==="candidate-pair"}var If=class extends se{constructor(t,e={}){super(),this.peerConnection=t,this.running=!1,this.lastAudioPacketsReceived=0,this.lastAudioPacketChangeTime=0,this.lastVideoPacketsReceived=0,this.lastVideoPacketChangeTime=0,this.lastRoundTripTime=0,this.lastAvailableOutgoingBitrate=void 0,this._sample$=this.createReplaySubject(1),this._baseline$=this.createBehaviorSubject({rtt:0,jitter:0,ready:!1}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this.pollingIntervalMs=e.pollingIntervalMs??vf,this.baselineSampleCount=e.baselineSamples??bf,this.noAudioPacketThresholdMs=e.noAudioPacketThresholdMs??mf,this.noVideoPacketThresholdMs=e.noVideoPacketThresholdMs??yf,this.rttSpikeWarningMultiplier=e.rttSpikeWarningMultiplier??wf,this.rttSpikeCriticalMultiplier=e.rttSpikeCriticalMultiplier??Sf,this.packetLossWarningPercent=e.packetLossWarningPercent??Cf,this.packetLossCriticalPercent=e.packetLossCriticalPercent??Af,this.jitterSpikeMultiplier=e.jitterSpikeMultiplier??Tf,this.historyWindowSeconds=e.historyWindowSeconds??Ef}get networkIssues$(){return this._networkIssues$.asObservable()}get networkIssues(){return[...this._networkIssues$.value]}get isNetworkHealthy$(){return this.cachedObservable("isNetworkHealthy$",()=>this._networkIssues$.pipe(x(t=>t.length===0),U(),S(this.destroyed$)))}get isNetworkHealthy(){return this._networkIssues$.value.length===0}get networkMetrics$(){return this._networkMetrics$.asObservable()}get networkMetrics(){return[...this._networkMetrics$.value]}get criticalIssue$(){return this.cachedObservable("criticalIssue$",()=>this._networkIssues$.pipe(cs(t=>_e(t.filter(e=>e.severity==="critical"))),S(this.destroyed$)))}get sample$(){return this._sample$.asObservable()}start(){if(this.running)return;this.running=!0;const t=Date.now();this.lastAudioPacketChangeTime=t,this.lastVideoPacketChangeTime=t,Tr.debug("[RTCStatsMonitor] Starting stats monitoring"),this.subscribeTo(en(this.pollingIntervalMs).pipe(B(()=>this.running),Je(()=>_e(this.peerConnection.getStats()).pipe(ui(e=>(Tr.warn("[RTCStatsMonitor] Failed to get stats:",e),ci)))),B(()=>this.running),x(e=>this.extractSample(e))),e=>this._sample$.next(e)),this.subscribeTo(this._sample$.pipe(Oe(this.baselineSampleCount),Kd(),x(e=>({rtt:e.reduce((i,r)=>i+r.roundTripTime,0)/e.length,jitter:e.reduce((i,r)=>i+r.audioJitter,0)/e.length,ready:!0}))),e=>{Tr.debug(`[RTCStatsMonitor] Baseline established: rtt=${e.rtt.toFixed(1)}ms, jitter=${e.jitter.toFixed(1)}ms`),this._baseline$.next(e)}),this.subscribeTo(this._sample$.pipe(mo((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(mo((e,i)=>{const r=i.timestamp-this.historyWindowSeconds*1e3,n={timestamp:i.timestamp,audio:{packetsReceived:i.audioPacketsReceived,packetsLost:i.audioPacketsLost,jitter:i.audioJitter},video:{packetsReceived:i.videoPacketsReceived,packetsLost:i.videoPacketsLost},roundTripTime:i.roundTripTime,availableOutgoingBitrate:i.availableOutgoingBitrate};return[...e.filter(s=>s.timestamp>r),n]},[])),e=>this._networkMetrics$.next(e))}stop(){this.running&&(this.running=!1,Tr.debug("[RTCStatsMonitor] Stopping stats monitoring"))}destroy(){Tr.debug("[RTCStatsMonitor] Destroying RTCStatsMonitor"),this.stop(),super.destroy()}extractSample(t){let e=0,i=0,r=0,n=0,s=0,a=0,o;return t.forEach(c=>{xf(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)),Df(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=kf(c+h,p);v>this.packetLossCriticalPercent?r.push({type:"high_packet_loss",severity:"critical",timestamp:i,value:v,threshold:this.packetLossCriticalPercent}):v>this.packetLossWarningPercent&&r.push({type:"high_packet_loss",severity:"warning",timestamp:i,value:v,threshold:this.packetLossWarningPercent})}return r}};const de=G(),Mf=2e3,Rf=1e4,Pf=3e3,_f=5e3,Of=3,Lf=3,Ff=3e3,Nf=1e4,Uf=150,Bf=300,zf=5,Vf=new Set(["high_rtt","high_jitter","high_packet_loss"]);var Hf=class extends se{constructor(t,e,i={}){super(),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._hasPacketLoss$=this.createBehaviorSubject(!1),this._trigger$=this.createSubject(),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this._pipelineStop$=this.createSubject(),this._callbacks=t,this._inputs=e,this._config={debounceTimeMs:i.debounceTimeMs??Mf,cooldownMs:i.cooldownMs??Rf,iceGracePeriodMs:i.iceGracePeriodMs??Pf,iceRestartTimeoutMs:i.iceRestartTimeoutMs??_f,maxAttempts:i.maxAttempts??Of,enableRelayFallback:i.enableRelayFallback??!0,keyframeMaxBurst:i.keyframeMaxBurst??Lf,keyframeBurstWindowMs:i.keyframeBurstWindowMs??Ff,keyframeCooldownMs:i.keyframeCooldownMs??Nf,degradationBitrateThreshold:i.degradationBitrateThreshold??Uf,degradationRecoveryThreshold:i.degradationRecoveryThreshold??Bf,enableAutoDegradation:i.enableAutoDegradation??!0,packetLossRecoveryDelaySec:i.packetLossRecoveryDelaySec??zf},this.initPipeline(),this.initDegradationRecoveryPipeline()}get recoveryState$(){return this._recoveryState$.asObservable().pipe(S(this._destroyed$))}get recoveryState(){return this._recoveryState$.value}get recoveryEvent$(){return this._recoveryEvent$.asObservable().pipe(S(this._destroyed$))}get bandwidthConstrained$(){return this._bandwidthConstrained$.asObservable().pipe(S(this._destroyed$))}get bandwidthConstrained(){return this._bandwidthConstrained$.value}pushTrigger(t){this._trigger$.next(t)}async requestIceRestart(){if(this._recoveryState$.value==="recovering"){de.info("CallRecoveryManager: manual ICE restart skipped — recovery already in progress");return}de.info("CallRecoveryManager: manual ICE restart requested"),this.transitionTo("recovering"),await this.executeIceRestart(!1),this.startCooldown()}requestKeyframe(){this.executeKeyframe("manual request")}reset(){de.info("CallRecoveryManager: resetting counters"),this._attemptCount=0,this._keyframeBurstCount=0,this._keyframeBurstStart=0,this._keyframeCooldownUntil=0,this._cooldownUntil=0,this.transitionTo("idle")}notifyModifyFailed(){(this._recoveryState$.value==="cooldown"||this._recoveryState$.value==="idle")&&(de.info("CallRecoveryManager: verto.modify failed — re-entering recovery"),this._cooldownUntil=0,this.transitionTo("idle"),this.pushTrigger({source:"network",detail:"modify_failed_during_recovery"}))}reportBandwidth(t){if(!this._config.enableAutoDegradation)return;const e=this._bandwidthConstrained$.value;!e&&t<this._config.degradationBitrateThreshold?(this._bandwidthConstrained$.next(!0),this._callbacks.disableVideo(),this.emitEvent({action:"video_disabled",reason:`bandwidth ${t}kbps below threshold ${this._config.degradationBitrateThreshold}kbps`,timestamp:Date.now()}),de.warn(`CallRecoveryManager: disabling video — bandwidth ${t}kbps < ${this._config.degradationBitrateThreshold}kbps`)):e&&t>=this._config.degradationRecoveryThreshold&&(this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`bandwidth ${t}kbps recovered above ${this._config.degradationRecoveryThreshold}kbps`,timestamp:Date.now()}),de.info(`CallRecoveryManager: restoring video — bandwidth ${t}kbps >= ${this._config.degradationRecoveryThreshold}kbps`))}reportNetworkIssues(t){const e=t.some(i=>i.type==="high_packet_loss");e!==this._hasPacketLoss$.value&&this._hasPacketLoss$.next(e)}handleWebSocketReconnect(){const t=this._callbacks.getPeerConnectionState();t==="connected"||t==="completed"?(de.info("CallRecoveryManager: signal-only reconnect — peer connection still alive"),this.emitEvent({action:"signal_reconnect",reason:"WebSocket reconnected, peer connection still connected",timestamp:Date.now()})):(de.info("CallRecoveryManager: full reconnect — peer connection also down"),this.emitEvent({action:"full_reconnect",reason:"WebSocket reconnected, peer connection not connected — ICE restart needed",timestamp:Date.now()}),this.pushTrigger({source:"network",detail:"full_reconnect_after_ws"})),this.reset()}destroy(){this._pipelineStop$.next(),this._pipelineStop$.complete(),super.destroy()}initPipeline(){this.subscribeTo(this._trigger$.pipe(Ee(()=>{this._recoveryState$.value==="idle"&&this.transitionTo("debouncing")}),vo(this._config.debounceTimeMs),yo(this._inputs.signalingReady$),B(([,t])=>this.passGateChecks(t)),x(([t])=>t),ls(t=>this.executeTieredRecovery(t)),S(Ni(this._destroyed$,this._pipelineStop$))),{next:()=>{},error:t=>{de.error("CallRecoveryManager: pipeline error",t),this.transitionTo("idle")}})}initDegradationRecoveryPipeline(){if(!this._config.enableAutoDegradation)return;const t=this._config.packetLossRecoveryDelaySec*1e3;this.subscribeTo(uo([this._bandwidthConstrained$,this._hasPacketLoss$]).pipe(Je(([e,i])=>e&&!i?Fi(t):ci),S(this._destroyed$)),()=>{this._bandwidthConstrained$.next(!1),this._callbacks.enableVideo(),this.emitEvent({action:"video_restored",reason:`no packet loss for ${this._config.packetLossRecoveryDelaySec}s — restoring video`,timestamp:Date.now()}),de.info(`CallRecoveryManager: restoring video — no packet loss for ${this._config.packetLossRecoveryDelaySec}s`)})}passGateChecks(t){return this._callbacks.isNegotiating()?(de.debug("CallRecoveryManager: gate blocked — negotiation in progress"),this.transitionTo("idle"),!1):t?this._callbacks.isCallConnected()?this.isCooldownActive()?(de.debug("CallRecoveryManager: gate blocked — cooldown active"),this.transitionTo("cooldown"),!1):!0:(de.debug("CallRecoveryManager: gate blocked — call not connected"),this.transitionTo("idle"),!1):(de.debug("CallRecoveryManager: gate blocked — signaling not ready"),this.transitionTo("idle"),!1)}isCooldownActive(){return Date.now()<this._cooldownUntil}executeTieredRecovery(t){return this.transitionTo("recovering"),de.info(`CallRecoveryManager: starting tiered recovery — source=${t.source} detail=${t.detail}`),_e(this.runTiers(t)).pipe(Ee(()=>this.startCooldown()),ui(e=>(de.error("CallRecoveryManager: tiered recovery failed",e),this.startCooldown(),ci)))}async runTiers(t){if(this.executeKeyframe(t.detail),t.issueType&&Vf.has(t.issueType)){de.debug(`CallRecoveryManager: degradation-only issue (${t.issueType}) — Tier 1 only, skipping ICE restart`);return}this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!1)||this._config.enableRelayFallback&&this._attemptCount<this._config.maxAttempts&&await this.executeIceRestart(!0)||this._attemptCount>=this._config.maxAttempts&&(this.emitEvent({action:"max_attempts_reached",reason:`all ${this._config.maxAttempts} recovery attempts exhausted`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.warn("CallRecoveryManager: max recovery attempts reached"))}executeKeyframe(t){const e=Date.now();if(e<this._keyframeCooldownUntil){de.debug("CallRecoveryManager: keyframe request skipped — cooldown active");return}if(e-this._keyframeBurstStart>this._config.keyframeBurstWindowMs&&(this._keyframeBurstCount=0,this._keyframeBurstStart=e),this._keyframeBurstCount>=this._config.keyframeMaxBurst){this._keyframeCooldownUntil=e+this._config.keyframeCooldownMs,de.debug(`CallRecoveryManager: keyframe burst limit reached (${this._config.keyframeMaxBurst}), cooldown until ${this._keyframeCooldownUntil}`);return}this._keyframeBurstCount+=1,this._callbacks.requestKeyframe(),this.emitEvent({action:"keyframe_requested",reason:t,timestamp:e}),de.debug(`CallRecoveryManager: keyframe requested (burst ${this._keyframeBurstCount}/${this._config.keyframeMaxBurst})`)}async executeIceRestart(t){this._attemptCount+=1;const e=t?"Tier 3 (relay-only)":"Tier 2 (standard)";de.info(`CallRecoveryManager: ${e} ICE restart — attempt ${this._attemptCount}/${this._config.maxAttempts}`),this.emitEvent({action:"reinvite_started",reason:`${e} ICE restart`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()});try{return await this.withTimeout(this._callbacks.requestIceRestart(t),this._config.iceRestartTimeoutMs)?(this.emitEvent({action:"reinvite_succeeded",reason:`${e} ICE restart succeeded`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.info(`CallRecoveryManager: ${e} ICE restart succeeded`),this._attemptCount=0,!0):(this.emitEvent({action:"reinvite_failed",reason:`${e} ICE restart returned false`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.warn(`CallRecoveryManager: ${e} ICE restart failed`),!1)}catch{return this.emitEvent({action:"reinvite_timeout",reason:`${e} ICE restart timed out after ${this._config.iceRestartTimeoutMs}ms`,attempt:this._attemptCount,maxAttempts:this._config.maxAttempts,timestamp:Date.now()}),de.warn(`CallRecoveryManager: ${e} ICE restart timed out`),!1}}async withTimeout(t,e){return new Promise((i,r)=>{const n=setTimeout(()=>{r(new Error(`Timeout after ${e}ms`))},e);t.then(s=>{clearTimeout(n),i(s)},s=>{clearTimeout(n),r(s instanceof Error?s:new Error(String(s)))})})}transitionTo(t){const e=this._recoveryState$.value;e!==t&&(de.debug(`CallRecoveryManager: state ${e} -> ${t}`),this._recoveryState$.next(t))}startCooldown(){this._cooldownUntil=Date.now()+this._config.cooldownMs,this.transitionTo("cooldown"),this._cooldownSubscription&&this._cooldownSubscription.unsubscribe(),this._cooldownSubscription=Fi(this._config.cooldownMs).pipe(Oe(1),S(this._destroyed$),B(()=>this._recoveryState$.value==="cooldown")).subscribe(()=>this.transitionTo("idle"))}emitEvent(t){this._recoveryEvent$.next(t)}},jf=class{constructor(t,e,i){this.executeMethod=t,this.vertoManager=e,this.deviceController=i}createSelfParticipant(t){return new uc(t,this.executeMethod,this.vertoManager,this.deviceController)}createParticipant(t){return new lc(t,this.executeMethod,this.deviceController)}};const Wf=93.2,Gf=.024,qf=2.5,Xf=0,Yf=100,Kf=1,Zf=5,Qf=4,Jf=3.5,$f=3,ev=2;function tv(t,e,i){const r=Wf-(t/2+e)*Gf-i*qf,n=Math.min(Yf,Math.max(Xf,r)),s=1+.035*n+n*(n-60)*(100-n)*7e-6;return Math.min(Zf,Math.max(Kf,s))}function iv(t){return t>=Qf?"excellent":t>=Jf?"good":t>=$f?"fair":t>=ev?"poor":"critical"}const Se=G(),rv=5/3,nv=t=>{if(!t)return{};try{const e=new URL(`destination:${t}`),i={};return e.searchParams.forEach((r,n)=>{i[n]=r}),i}catch(e){return Se.warn(`Failed to parse destination URI: ${t}`,e),{}}};var sv=class extends se{constructor(t,e,i,r){super(),this.clientSession=t,this.options=e,this.address=r,this._errors$=this.createReplaySubject(1),this._lastMergedStatus="new",this._answered$=this.createReplaySubject(),this._holdState=!1,this._userVariables$=this.createBehaviorSubject({...f.instance.userVariables}),this._networkIssues$=this.createBehaviorSubject([]),this._networkMetrics$=this.createBehaviorSubject([]),this._isNetworkHealthy$=this.createBehaviorSubject(!0),this._qualityScore$=this.createBehaviorSubject(5),this._qualityLevel$=this.createBehaviorSubject("excellent"),this._recoveryState$=this.createBehaviorSubject("idle"),this._recoveryEvent$=this.createSubject(),this._bandwidthConstrained$=this.createBehaviorSubject(!1),this._mediaParamsUpdated$=this.createSubject(),this._customSubscriptions=new Map,this._pushToTalkEnabled=!1,this._remoteAudioMeter=null,this.id=e.callId??dn(),this.to=e.to,this._userVariables$.next({...this._userVariables$.value,...nv(e.to),...e.userVariables}),this.subscribeTo(this.webrtcMessages$,o=>{const c=at(o,"params.userVariables");c&&this._userVariables$.next({...this._userVariables$.value,...c})});const n=i.initializeManagers(this);this.vertoManager=n.vertoManager,this.callEventsManager=n.callEventsManager,e.initOffer?(this._status$=this.createBehaviorSubject("ringing"),this._lastMergedStatus="ringing"):this._status$=this.createBehaviorSubject("new");const{deviceController:s,networkChange$:a}=i;this._networkChange$=a,this.participantFactory=new jf(this.executeMethod.bind(this),this.vertoManager,s),this.subscribeTo(Ni(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(U(),S(this._destroyed$)),o=>{var c;this._lastMergedStatus=o,o==="connected"&&!this._statsMonitor?this.initResilienceSubsystems():o==="disconnected"?((c=this._statsMonitor)==null||c.destroy(),this._statsMonitor=void 0):(o==="destroyed"||o==="failed")&&this.stopResilienceSubsystems()})}get errors$(){return this.deferEmission(this._errors$.asObservable())}emitError(t){this._status$.value==="destroyed"||this._status$.value==="failed"||(this._errors$.next(t),t.fatal&&(this._status$.next("failed"),this.destroy()))}notifyModifyFailed(){var t;(t=this._recoveryManager)==null||t.notifyModifyFailed()}get direction(){return this.options.initOffer?"inbound":"outbound"}get address$(){return this.deferEmission(_e([this.address])).pipe(S(this._destroyed$))}get fromName(){return this.options.fromName}get from(){return this.options.from}get toName(){return this.options.toName}async toggleIncomingVideo(){throw new Tt}async toggleIncomingAudio(){throw new Tt}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.callSelf,t,{})}async toggleHold(){this._holdState?await this.vertoManager.unhold():await this.vertoManager.hold(),this._holdState=!this._holdState}async startRecording(){throw new Tt}async startStreaming(){throw new Tt}async setMeta(t){throw new Tt}async updateMeta(t){throw new Tt}get layoutLayers$(){return this.deferEmission(this.callEventsManager.layoutLayers$).pipe(S(this._destroyed$))}get layoutLayers(){return this.callEventsManager.layoutLayers}async executeMethod(t,e,i){var a,o,c;const r=this.callSelf;if(typeof t=="string"&&t!==r.member_id)throw new on(`Target member ID ${t} does not match call's self member ID ${r.member_id}`);const n={...i,self:r,target:typeof t=="string"?r:t},s=Hi({method:e,params:n});try{const u=await this.clientSession.execute(s);if(Ng(u))throw new Et(parseInt(((a=u.result)==null?void 0:a.code)??"0"),`Error response from method ${e}: ${(o=u.result)==null?void 0:o.code} ${(c=u.result)==null?void 0:c.message}`,void 0,void 0,s.id);return u}catch(u){throw Se.error(`[Call] Error executing method ${e} with params`,n,u),u}}get callSelf(){const t=this.nodeId,e=this.vertoManager.selfId;if(!t||!e)throw new up(this.id);return{node_id:t,call_id:this.id,member_id:e}}get status$(){return this.publicCachedObservable("status$",()=>Ni(this._status$.asObservable(),this.vertoManager.signalingStatus$).pipe(U(),Ee(t=>{this._lastMergedStatus=t})))}get participants$(){return this.deferEmission(this.callEventsManager.participants$).pipe(S(this._destroyed$))}get self$(){return this.deferEmission(this.callEventsManager.self$).pipe(S(this._destroyed$))}get recording$(){return this.deferEmission(this.callEventsManager.recording$).pipe(S(this._destroyed$))}get streaming$(){return this.deferEmission(this.callEventsManager.streaming$).pipe(S(this._destroyed$))}get raiseHandPriority$(){return this.deferEmission(this.callEventsManager.raiseHandPriority$).pipe(S(this._destroyed$))}get locked$(){return this.deferEmission(this.callEventsManager.locked$).pipe(S(this._destroyed$))}get meta$(){return this.deferEmission(this.callEventsManager.meta$).pipe(S(this._destroyed$))}get capabilities$(){return this.deferEmission(this.callEventsManager.capabilities$).pipe(S(this._destroyed$))}get layout$(){return this.deferEmission(this.callEventsManager.layout$).pipe(S(this._destroyed$))}get status(){return this._lastMergedStatus}get recording(){return this.callEventsManager.recording}get streaming(){return this.callEventsManager.streaming}get raiseHandPriority(){return this.callEventsManager.raiseHandPriority}get locked(){return this.callEventsManager.locked}get meta(){return this.callEventsManager.meta}get layout(){return this.callEventsManager.layout}get layouts$(){return this.deferEmission(this.callEventsManager.layouts$).pipe(S(this._destroyed$))}get layouts(){return this.callEventsManager.layouts}get localStream$(){return this.deferEmission(this.vertoManager.localStream$).pipe(S(this._destroyed$))}get localStream(){return this.vertoManager.localStream}get remoteStream$(){return this.deferEmission(this.vertoManager.remoteStream$).pipe(S(this._destroyed$))}get remoteStream(){return this.vertoManager.remoteStream}get userVariables$(){return this.deferEmission(this._userVariables$.asObservable())}get userVariables(){return{...this._userVariables$.value}}set userVariables(t){this._userVariables$.next({...this._userVariables$.value,...t})}get networkIssues$(){return this.deferEmission(this._networkIssues$.asObservable())}get networkIssues(){return this._networkIssues$.value}get isNetworkHealthy$(){return this.deferEmission(this._isNetworkHealthy$.asObservable())}get isNetworkHealthy(){return this._isNetworkHealthy$.value}get networkMetrics$(){return this.deferEmission(this._networkMetrics$.asObservable())}get networkMetrics(){return this._networkMetrics$.value}get qualityScore$(){return this.deferEmission(this._qualityScore$.asObservable())}get qualityLevel$(){return this.deferEmission(this._qualityLevel$.asObservable())}get recoveryState$(){return this.deferEmission(this._recoveryState$.asObservable())}get recoveryEvent$(){return this.deferEmission(this._recoveryEvent$.asObservable())}get bandwidthConstrained$(){return this.deferEmission(this._bandwidthConstrained$.asObservable())}get mediaParamsUpdated$(){return this.deferEmission(this._mediaParamsUpdated$.asObservable())}emitMediaParamsUpdated(t){this._mediaParamsUpdated$.next(t)}requestKeyframe(){var t,e;(e=(t=this.vertoManager).requestKeyframe)==null||e.call(t)}async requestIceRestart(){var t,e;await((e=(t=this.vertoManager).requestIceRestart)==null?void 0:e.call(t))}initResilienceSubsystems(){const t=this.rtcPeerConnection;if(Se.debug(`[Call] initResilienceSubsystems: pc=${t?"exists":"undefined"}, connectionState=${t==null?void 0:t.connectionState}`),!t){Se.warn("[Call] No peer connection available, skipping resilience init");return}try{const e=f.instance;this._statsMonitor=new If(t,{pollingIntervalMs:e.statsPollingInterval,baselineSamples:e.statsBaselineSamples,noAudioPacketThresholdMs:e.statsNoPacketThreshold,rttSpikeWarningMultiplier:e.statsRttSpikeMultiplier,rttSpikeCriticalMultiplier:e.statsRttSpikeMultiplier*rv,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(),Se.debug("[Call] Recovery manager disabled video")}catch{Se.debug("[Call] Recovery manager failed to disable video")}},enableVideo:()=>{this.vertoManager.unmuteMainVideoInputDevice().catch(()=>{Se.debug("[Call] Recovery manager failed to enable video")})},isNegotiating:()=>this.vertoManager.mainPeerConnection.isNegotiating,isCallConnected:()=>this._lastMergedStatus==="connected",getPeerConnectionState:()=>t.connectionState},{signalingReady$:this.clientSession.authenticated$},{debounceTimeMs:e.recoveryDebounceTime,cooldownMs:e.recoveryCooldown,iceGracePeriodMs:e.iceDisconnectedGracePeriod,iceRestartTimeoutMs:e.iceRestartTimeout,maxAttempts:e.maxRecoveryAttempts,enableRelayFallback:e.enableRelayFallback,keyframeMaxBurst:e.keyframeMaxBurst,keyframeBurstWindowMs:e.keyframeBurstWindow,keyframeCooldownMs:e.keyframeCooldown}),this.subscribeTo(this._statsMonitor.networkIssues$,i=>{var r;this._networkIssues$.next(i),(r=this._recoveryManager)==null||r.reportNetworkIssues(i)}),this.subscribeTo(this._statsMonitor.isNetworkHealthy$,i=>{this._isNetworkHealthy$.next(i)}),this.subscribeTo(this._statsMonitor.networkMetrics$,i=>{var r;if(this._networkMetrics$.next(i),i.length>0){const n=i[i.length-1],s=n.audio.packetsReceived+n.video.packetsReceived,a=n.audio.packetsLost+n.video.packetsLost,o=s+a>0?a/(s+a)*100:0,c=tv(n.roundTripTime,n.audio.jitter,o);this._qualityScore$.next(c),this._qualityLevel$.next(iv(c)),n.availableOutgoingBitrate!==void 0&&((r=this._recoveryManager)==null||r.reportBandwidth(n.availableOutgoingBitrate/1e3))}}),this.subscribeTo(this._statsMonitor.criticalIssue$,i=>{var r;(r=this._recoveryManager)==null||r.pushTrigger({source:"stats",detail:`${i.type}: ${i.severity}`,issueType:i.type})}),this.subscribeTo(this._recoveryManager.recoveryState$,i=>{this._recoveryState$.next(i)}),this.subscribeTo(this._recoveryManager.recoveryEvent$,i=>{this._recoveryEvent$.next(i),i.action==="max_attempts_reached"&&(Se.warn("[Call] All recovery attempts exhausted, terminating call"),this.emitError({kind:"network",fatal:!0,error:new Error("Call recovery failed: all attempts exhausted"),callId:this.id}))}),this.subscribeTo(this._recoveryManager.bandwidthConstrained$,i=>{this._bandwidthConstrained$.next(i)}),this._networkChange$&&this.subscribeTo(this._networkChange$,i=>{var r,n;i.type==="offline"?(r=this._recoveryManager)==null||r.pushTrigger({source:"network",detail:"browser went offline"}):i.type==="online"&&((n=this._recoveryManager)==null||n.handleWebSocketReconnect())}),this.subscribeTo(this.clientSession.authenticated$.pipe(tn(1),B(Boolean)),()=>{var i;Se.debug("[Call] WebSocket reconnected — notifying recovery manager"),(i=this._recoveryManager)==null||i.handleWebSocketReconnect()}),this._statsMonitor.start(),Se.debug("[Call] Resilience subsystems initialized for call",this.id)}catch(e){Se.warn("[Call] Failed to initialize resilience subsystems:",e)}}async waitForPeerConnectionConnected(){const t=this.rtcPeerConnection;if(!t)return!1;const e=Date.now()+Bh;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,zh))}}stopResilienceSubsystems(){var t,e;try{(t=this._statsMonitor)==null||t.destroy(),(e=this._recoveryManager)==null||e.destroy()}catch{}this._statsMonitor=void 0,this._recoveryManager=void 0}createParticipant(t,e){return t===(e??this.vertoManager.selfId)?this.participantFactory.createSelfParticipant(t):this.participantFactory.createParticipant(t)}get mediaDirections$(){return this.deferEmission(this.vertoManager.mediaDirections$).pipe(S(this._destroyed$))}get mediaDirections(){return this.vertoManager.mediaDirections}get participantsId$(){return this.cachedObservable("participantsId$",()=>this.participants$.pipe(x(t=>t.map(e=>e.id))))}async execute(t,e){return this.clientSession.execute(t,e)}get selfId$(){return this.vertoManager.selfId$}get selfId(){return this.vertoManager.selfId}get nodeId$(){return this.vertoManager.nodeId$}get nodeId(){return this.vertoManager.nodeId}isCallSessionEvent(t){try{Se.debug("[Call] Checking if event is for this call session:",t);const e=at(t,"params.params.callID")??at(t,"params.call_id"),i=at(t,"params.room_session_id");return Se.debug(`[Call] Extracted session identifiers callID: ${e} and roomSessionID: ${i} from event:`),e===this.id||!!e&&this.callEventsManager.isCallIdValid(e)||!!i&&this.callEventsManager.isRoomSessionIdValid(i)}catch(e){return Se.error("[Call] Error checking if event is for this call session:",e),!1}}get callSessionEvents$(){return this.cachedObservable("callSessionEvents$",()=>this.clientSession.signalingEvent$.pipe(B(t=>this.isCallSessionEvent(t)),Ee(t=>{Se.debug("[Call] Received call session event:",t)}),S(this.destroyed$),At()))}get callUpdated$(){return this.publicCachedObservable("callUpdated$",()=>this.callSessionEvents$.pipe(we(pc,"params"),S(this.destroyed$)))}get memberJoined$(){return this.publicCachedObservable("memberJoined$",()=>this.callSessionEvents$.pipe(we(vc,"params"),S(this.destroyed$)))}get memberLeft$(){return this.publicCachedObservable("memberLeft$",()=>this.callSessionEvents$.pipe(we(bc,"params"),S(this.destroyed$)))}get memberUpdated$(){return this.publicCachedObservable("memberUpdated$",()=>this.callSessionEvents$.pipe(we(fc,"params"),S(this.destroyed$)))}get memberTalking$(){return this.publicCachedObservable("memberTalking$",()=>this.callSessionEvents$.pipe(we(mc,"params"),S(this.destroyed$)))}get callStates$(){return this.publicCachedObservable("callStates$",()=>this.callSessionEvents$.pipe(we(gc,"params"),S(this.destroyed$)))}get layoutUpdates$(){return this.publicCachedObservable("layoutUpdates$",()=>this.callSessionEvents$.pipe(we(ks,"params"),S(this.destroyed$)))}get rtcPeerConnection(){return this.vertoManager.mainPeerConnection.peerConnection}get signalingEvent$(){return this.publicCachedObservable("signalingEvent$",()=>this.callEvent$.pipe(x(t=>JSON.parse(JSON.stringify(t)))))}subscribe(t){const e=this._customSubscriptions.get(t);if(e)return e;const i=this.callSessionEvents$.pipe(B(r=>r.event_type===t),x(r=>JSON.parse(JSON.stringify(r))),S(this._destroyed$));return this._sendVertoSubscribe(t).then(()=>{this._customSubscriptions.set(t,i)},r=>{this._customSubscriptions.delete(t),Se.warn(`[Call] verto.subscribe for '${t}' failed, not caching:`,r)}),this._customSubscriptions.set(t,i),i}get webrtcMessages$(){return this.cachedObservable("webrtcMessages$",()=>this.callSessionEvents$.pipe(we(bn,"params"),Ee(t=>Se.debug("[Call] Event is a WebRTC message event:",t)),S(this.destroyed$),At()))}get callEvent$(){return this.cachedObservable("callEvent$",()=>this.callSessionEvents$.pipe(we(Ug,"params"),Ee(t=>Se.debug("[Call] Event is a call event:",t)),S(this.destroyed$),At()))}get layoutEvent$(){return this.cachedObservable("layoutEvent$",()=>this.callEvent$.pipe(we(ks,"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 on(`Layout ${t} is not available in the current call layouts: ${this.layouts.join(", ")}`);const i=[];for(const[n,s]of Object.entries(e??{})){const a=this.participants.find(o=>o.id===n);if(!a){Se.warn(`[Call] setLayout: member ${n} not found in participants; skipping position ${s}`);continue}a.target,i.push([a,s])}const r=await Ze(this.selfId$.pipe(B(n=>n!==null)));await this.executeMethod(r,"call.layout.set",{layout:t});for(const[n,s]of i)await n.setPosition(s)}async transfer(t){return this.vertoManager.transfer(t)}setLocalMicrophoneGain(t){const e=this.vertoManager.ensureLocalAudioPipeline();if(!e){Se.warn("[Call] setLocalMicrophoneGain: audio pipeline unavailable");return}const i=Math.max(0,Math.min(200,t));e.setGain(i/100)}get localMicrophoneGain$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localMicrophoneGain$",()=>t.gain$.pipe(x(e=>e*100),S(this._destroyed$))):Ct(100).pipe(S(this._destroyed$))}get localAudioLevel$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localAudioLevel$",()=>t.level$.pipe(S(this._destroyed$),At())):Ct(0).pipe(S(this._destroyed$))}get localSpeaking$(){const t=this.vertoManager.ensureLocalAudioPipeline();return t?this.publicCachedObservable("localSpeaking$",()=>t.speaking$.pipe(S(this._destroyed$),At())):Ct(!1).pipe(S(this._destroyed$))}enablePushToTalk(){const t=this.vertoManager.ensureLocalAudioPipeline();if(!t){Se.warn("[Call] enablePushToTalk: audio pipeline unavailable");return}t.setPTTActive(!1),this._pushToTalkEnabled=!0}disablePushToTalk(){var t;(t=this.vertoManager.localAudioPipeline)==null||t.setPTTActive(!0),this._pushToTalkEnabled=!1}setPushToTalkActive(t){var e;this._pushToTalkEnabled&&((e=this.vertoManager.localAudioPipeline)==null||e.setPTTActive(t))}async setEchoCancellation(t){await this.vertoManager.updateMediaConstraints({audio:{echoCancellation:t}})}async setNoiseSuppression(t){await this.vertoManager.updateMediaConstraints({audio:{noiseSuppression:t}})}async setAutoGainControl(t){await this.vertoManager.updateMediaConstraints({audio:{autoGainControl:t}})}get remoteAudioLevel$(){return this.publicCachedObservable("remoteAudioLevel$",()=>{this._remoteAudioMeter??(this._remoteAudioMeter=new ff);const t=this._remoteAudioMeter;return this.subscribeTo(this.vertoManager.remoteStream$,e=>{t.setStream(e)}),t.level$.pipe(S(this._destroyed$),At())})}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=xg({sessid:this.id,eventChannel:[t]}),i={callID:this.id,node_id:this.vertoManager.nodeId??"",message:e};await this.clientSession.execute(sc(i))}};function av(t){return t instanceof an?"timeout":t instanceof Et?"signaling":t instanceof kt||t instanceof Gt?"media":t instanceof Po||t instanceof _o?"network":"internal"}const ov=new Set([hs,ps,Mo]);function cv(t){return t instanceof No||t instanceof kt?!1:t instanceof Gt?t.fatal:!(t instanceof an||t instanceof Et&&ov.has(t.code))}var lv=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 sv(this.sessionManager,e,{initializeManagers:i=>({vertoManager:new gf(i,this.attachManager,this.deviceController,this.webRTCApiProvider,{nodeId:e.nodeId,onError:(r,n)=>{const s={kind:av(r),fatal:(n==null?void 0:n.fatal)??cv(r),error:r,callId:i.id};i.emitError(s)},onModifyFailed:()=>{i.notifyModifyFailed()}}),callEventsManager:new Xg(i)}),deviceController:this.deviceController,networkChange$:this.networkChange$},t)}};const Is=G();var Mc=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({...ms,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 Is.error("Failed to fetch entity"),[]}async id(t){const e=await this.http.request({...ms,url:`${this.endpoint}/${String(t)}`});if(e.ok&&e.body)return JSON.parse(e.body)}},Rc=class extends se{constructor(t,e,i){super(),this.fetchController=t,this.update$=e,this.onError=i,this.collectionData=new Map,this.observablesRegistry=new Map,this.upsertData=r=>{var o;if(!r.id)return;const n=this.collectionData.get(r.id)??{},s={},a=new Set([...Object.keys(n),...Object.keys(r)]);for(const c of a){const u=n[c],h=r[c];h!==void 0&&u!==void 0&&typeof u=="object"&&u!==null&&!Array.isArray(u)&&typeof h=="object"&&h!==null&&!Array.isArray(h)?s[c]={...u,...h}:h!==void 0?s[c]=h:s[c]=u}this.collectionData.set(r.id,s),(o=this.observablesRegistry.get(r.id))==null||o.next(s),this._values$.next(Array.from(this.collectionData.values()))},this._loading$=this.createBehaviorSubject(!1),this._values$=this.createReplaySubject(1),this._hasMore$=this.createBehaviorSubject(!0),this.subscribeTo(this.update$,this.upsertData),this.hasMore$=li(()=>_e(this.init())).pipe(Je(()=>this._hasMore$),U(),st(1),S(this.destroyed$))}get loading$(){return this._loading$.asObservable()}get loading(){return this._loading$.value}get values$(){return this._values$.asObservable()}get hasMore(){return this.fetchController.hasMore??!0}get updated$(){return this.cachedObservable("updated$",()=>this._loading$.pipe(U(),tn(1),B(t=>!t),x(()=>{}),S(this.destroyed$)))}get values(){return Array.from(this.collectionData.values())}async init(){if(this.fetchController.hasMore===!1){this._hasMore$.next(!1);return}await this.fetchMore()}async fetchMore(){var t;try{this._loading$.next(!0),(await this.fetchController.next()).forEach(this.upsertData),this._hasMore$.next(this.fetchController.hasMore??!1),this._loading$.next(!1)}catch(e){Is.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 Uo("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){Is.error(`Failed to fetch data for (${String(t)}:${String(e)}) :`,s),this._loading$.next(!1),(n=this.onError)==null||n.call(this,new Uo(`tryFetch(${String(t)})`,s))}}get$(t){var e,i;if(!this.observablesRegistry.has(t)){this.observablesRegistry.set(t,new is(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()}},Pc=class{constructor(t,e=r=>!!r,i=r=>r){this.originalCollection=t,this.filter=e,this.mapper=i}get loading$(){return this.originalCollection.loading$}get loading(){return this.originalCollection.loading}get hasMore$(){return this.originalCollection.hasMore$}get hasMore(){return this.originalCollection.hasMore}get values(){return this.originalCollection.values.filter(this.filter).map(this.mapper)}get values$(){return this._values$??(this._values$=this.originalCollection.values$.pipe(x(t=>t.filter(this.filter).map(this.mapper))))}get$(t){const e=this.originalCollection.get$(t);return e&&e.pipe(Jr(B(this.filter),x(this.mapper)))}async find$(t,e){const i=await this.originalCollection.find$(t,e);return i&&i.pipe(Jr(B(this.filter),x(this.mapper)))}loadMore(){this.originalCollection.loadMore()}destroy(){this.originalCollection.destroy()}},_c=class extends se{constructor(t,e,i){super(),this.addressId=t,this.conversationManager=e,this.addressProvider=i,this.initConversationMessages=async()=>(this._conversationMessages=this._conversationMessages??await this.conversationManager.getConversationMessageCollection(this.id),this._conversationMessages.hasMore&&this._conversationMessages.loadMore(),this._conversationMessages),this.textMessages$=li(this.initConversationMessages).pipe(x(()=>this.textMessage),st(1),S(this.destroyed$)),this.history$=li(this.initConversationMessages).pipe(x(()=>this.history),st(1),S(this.destroyed$)),this._state$=this.createBehaviorSubject(null)}upnext(t){const e={...this._state$.value,...t};this._state$.next(e)}get state(){return this._state$.value}get id(){return this.addressId}get name(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.name}get createdAt(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.created_at}get defaultChannel(){return this.type==="room"?this.channels.video:this.channels.audio}get displayName$(){return this.cachedObservable("displayName$",()=>this._state$.pipe(fe(),x(t=>t.display_name),S(this.destroyed$)))}get displayName(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.display_name}get previewUrl$(){return this.cachedObservable("previewUrl$",()=>this._state$.pipe(fe(),x(t=>t.preview_url),S(this.destroyed$)))}get previewUrl(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.preview_url}get coverUrl$(){return this.cachedObservable("coverUrl$",()=>this._state$.pipe(fe(),st(1),x(t=>t.cover_url),S(this.destroyed$)))}get coverUrl(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.cover_url}get resourceId$(){return this.cachedObservable("resourceId$",()=>this._state$.pipe(fe(),st(1),x(t=>t.resource_id),S(this.destroyed$)))}get resourceId(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.resource_id}get type$(){return this.cachedObservable("type$",()=>this._state$.pipe(fe(),st(1),x(t=>t.type),S(this.destroyed$)))}get type(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.type}get channels$(){return this.cachedObservable("channels$",()=>this._state$.pipe(fe(),st(1),x(t=>t.channels),S(this.destroyed$)))}get channels(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.channels}get locked(){if(!this._state$.value)throw new te("state not initialized");return this._state$.value.locked}get locked$(){return this.cachedObservable("locked$",()=>this._state$.pipe(fe(),st(1),x(t=>t.locked),S(this.destroyed$)))}async sendText(t){return this.conversationManager.sendText(t,this.id)}get textMessage(){if(this._conversationMessages)return this._textMessages$=this._textMessages$??new Pc(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 Pc(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 Tt}get activity(){throw new Tt}};const vi=G(),uv=t=>{if(vi.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 vi.debug("isRPCConnectResult check result:",i),i};var dv=(Ai=class{constructor(e,i,r){this.id=dn(),vi.debug(`[PendingRPC(${this.id}) request:${e.id}: method:${e.method}] Creating PendingRPC`),this.request=e;const n=(r==null?void 0:r.timeoutMs)??Ai.defaultTimeoutMs,s=r==null?void 0:r.signal;this.promise=new Promise((a,o)=>{if(s!=null&&s.aborted){o(new DOMException("The operation was aborted","AbortError"));return}let c=!1;const u=Cr(i.pipe(B(h=>h.id===e.id),Oe(1)),new Ae(h=>{const p=setTimeout(()=>{h.error(new an(e.id,n))},n);return()=>clearTimeout(p)}),s?new Ae(h=>{const p=()=>{h.error(new DOMException("The operation was aborted","AbortError"))};return s.addEventListener("abort",p),()=>s.removeEventListener("abort",p)}):Vd).subscribe({next:h=>{if(c=!0,h.error){const p=new Et(h.error.code,h.error.message,h.error.data,void 0,e.id);vi.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with RPC error:`,p),o(p)}else vi.debug(`[PendingRPC(${this.id}) request:${e.id}] Resolving promise with response:`,h),a(h);u.unsubscribe()},error:h=>{vi.debug(`[PendingRPC(${this.id}) request:${e.id}] Rejecting promise with error:`,h),c=!0,o(h),u.unsubscribe()},complete:()=>{vi.debug(`[PendingRPC(${this.id}) request:${e.id}] Observable completed`),c||o(new an(e.id,n)),u.unsubscribe()}})})}async then(e,i){return this.promise.then(e,i)}async catch(e){return this.promise.catch(e)}async finally(e){return this.promise.finally(e)}},Ai.defaultTimeoutMs=5e3,Ai);const Z=G();function hv(t){return t.fatal||!(t.error instanceof Gt)}const pv=t=>{var n,s;const e=(n=t.to)==null?void 0:n.split("?")[0],i=(s=t.from)!=null&&s.startsWith("subscriber://")?t.from.replace("subscriber://",""):t.from,r=e??i;if(!r)throw new Ui("Error building Address name");return r};var gv=class extends se{constructor(t,e,i,r,n,s,a,o,c){super(),this.getCredential=t,this.transport=e,this.storage=i,this.authorizationStateKey=r,this.attachManager=s,this.dpopManager=o,this.callCreateTimeout=6e3,this.agent="signalwire-js/4.0.0",this.eventAcks=!0,this.authorizationState$=this.createReplaySubject(1),this.connectVersion={major:4,minor:0,revision:0},this._authorization$=this.createBehaviorSubject(void 0),this._errors$=this.createReplaySubject(1),this._authState$=this.createBehaviorSubject({kind:"unauthenticated"}),this._wasClientBound=!1,this._userInfo$=this.createBehaviorSubject(null),this._calls$=this.createBehaviorSubject({}),this._iceServers$=this.createBehaviorSubject([]),s.setSession(this),this.callFactory=new lv(this,n,s,a,c),this.initialized$=li(()=>_e(this.init())).pipe(st(1),S(this.destroyed$))}get incomingCalls$(){return this.cachedObservable("incomingCalls$",()=>this.calls$.pipe(x(t=>t.filter(e=>e.direction==="inbound"))))}get incomingCalls(){return Object.values(this._calls$.value).filter(t=>t.direction==="inbound")}get userInfo$(){return this._userInfo$.asObservable()}get userInfo(){return this._userInfo$.value}get calls$(){return this.cachedObservable("calls$",()=>this._calls$.pipe(x(t=>Object.values(t))))}get calls(){return Object.values(this._calls$.value)}get iceServers(){return this._iceServers$.value}get authorization$(){return this._authorization$.asObservable()}get authorization(){return this._authorization$.value}get errors$(){return this._errors$.asObservable()}get authenticated$(){return this._authState$.pipe(x(t=>t.kind==="authenticated"),U())}get authenticated(){return this._authState$.value.kind==="authenticated"}get clientBound(){return this._wasClientBound}get authState(){return this._authState$.value}setDirectory(t){this._directory=t}async execute(t,e){try{return await this.transport.execute(t,e)}catch(i){throw Z.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(){Z.debug("[Session] Setting up message handlers"),this.subscribeTo(this.authStateEvent$,async t=>{Z.debug("[Session] Authorization state event received:",t);try{await this.updateAuthorizationStateInStorage(t.authorization_state)}catch(e){Z.error("[Session] Failed to handle authorization state update:",e),this._errors$.next(new gs(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"),ls(()=>(Z.debug("[Session] Connection established, initiating authentication"),_e(this.authenticate()).pipe(ui(t=>(this.handleAuthenticationError(t).catch(e=>{Z.error("[Session] Error handling authentication failure:",e)}),ci)))))),void 0),this.subscribeTo(this.vertoInvite$,async t=>{Z.debug("[Session] Verto invite received:",t);try{await this.createInboundCall(t)}catch(e){Z.error("[Session] Error handling Verto invite:",e),this._errors$.next(new hp(e))}}),this.subscribeTo(this.vertoAttach$,async t=>{Z.debug("[Session] Verto attach received:",t);try{await this.handleVertoAttach(t)}catch(e){Z.error("[Session] Error handling Verto attach:",e),this._errors$.next(new pp(e))}})}async loadAuthorizationStateFromStorage(){try{const t=await this.storage.getItem(this.authorizationStateKey);this.authorizationState$.next(t??void 0)}catch(t){Z.error("Failed to retrieve authorization state from storage:",t),this.authorizationState$.next(void 0)}}async updateAuthorizationStateInStorage(t){if(!t){Z.debug("[Session] Removing authorization state from storage");try{await this.storage.removeItem(this.authorizationStateKey),this.authorizationState$.next(void 0)}catch(e){throw Z.error("Failed to remove authorization state from storage:",e),e}return}try{Z.debug("[Session] Updating authorization state in storage"),await this.storage.setItem(this.authorizationStateKey,t),this.authorizationState$.next(t)}catch(e){throw Z.error("Failed to retrieve authorization state from storage:",e),e}}get authStateEvent$(){return this.cachedObservable("authStateEvent$",()=>this.signalingEvent$.pipe(Ee(t=>{Z.debug("[Session] Received incoming message:",t)}),we(Bg,"params"),Ee(t=>{Z.debug("[Session] Authorization state event received:",t.authorization_state)})))}get signalingEvent$(){return this.cachedObservable("signalingEvent$",()=>this.transport.incomingEvent$.pipe(we(Es,"params"),At()))}get vertoInvite$(){return this.cachedObservable("vertoInvite$",()=>this.signalingEvent$.pipe(B(bn),B(t=>kc(t.params)),x(t=>({node_id:t.node_id,...t.params.params}))))}get vertoAttach$(){return this.cachedObservable("vertoAttach$",()=>this.signalingEvent$.pipe(B(bn),B(t=>xc(t.params)),x(t=>({node_id:t.node_id,...t.params.params}))))}get contexts(){return[]}get eventing(){return[]}get topics(){return[]}get authentication(){const t=this.getCredential();if(!t.token)throw new te("Credential token is undefined");return{jwt_token:t.token}}async connect(){await Ze(this.initialized$),await this.transport.connect(),await Ze(this.authenticated$.pipe(S(this.destroyed$),B(Boolean),Oe(1),Sr({first:15e3})))}async handleAuthenticationError(t){Z.error("Authentication error:",t);const e=t instanceof Et&&(t.code===hs||t.code===Mo||t.code===ps),i=await Ze(this.authorizationState$.pipe(Oe(1)))!==void 0;if(e&&i){Z.debug("[Session] Recoverable auth error — cleaning up stored state and reconnecting fresh");try{await this.cleanupStoredConnectionParams()}catch(r){Z.error("Failed to cleanup stored connection params:",r)}finally{this.transport.reconnect()}}else this._errors$.next(t)}async cleanupStoredConnectionParams(){await this.transport.setProtocol(void 0),await this.updateAuthorizationStateInStorage(void 0),this._authorization$.next(void 0)}async teardownSessionState(){await this.cleanupStoredConnectionParams(),await this.attachManager.detachAll()}async updateAuthState(t){try{await this.storage.setItem(this.authorizationStateKey,t)}catch(e){Z.error("Failed to update authorization state in storage:",e),this._errors$.next(new gs(e))}}async reauthenticate(t,e,i){var r,n;Z.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;Z.warn("[Session] Failed to create DPoP proof for reauthenticate:",o)}const a=mg({project:((n=this._authorization$.value)==null?void 0:n.project_id)??"",jwt_token:t,...s?{dpop_token:s}:{}});await oo(_e(this.transport.execute(a)).pipe(jo(),Oe(1),ui(o=>{throw Z.error("[Session] Re-authentication RPC failed:",o),o}))),i!=null&&i.clientBound&&(this._wasClientBound=!0),Z.debug("[Session] Re-authentication successful, updating stored auth state")}catch(s){throw Z.error("[Session] Re-authentication failed:",s),this._errors$.next(new gs(s)),s}}async authenticate(){var o,c,u;Z.debug("[Session] Starting authentication process");const t=await Ze(uo({protocol:this.transport.protocol$,authorization_state:this.authorizationState$}).pipe(Oe(1)));Z.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)Z.debug("[Session] Reconnecting with stored jwt_token + authorization_state");else{const h=this.getCredential(),p=h.expiry_at!==void 0&&h.expiry_at<=Date.now()+bh;this.onBeforeReconnect&&(this.clientBound||p)&&(Z.debug("[Session] Refreshing credentials before fresh connect"),await this.onBeforeReconnect())}if((c=this.dpopManager)!=null&&c.initialized)try{n=await this.dpopManager.createRpcProof({method:"signalwire.connect"})}catch(h){if(this.clientBound)throw h;Z.warn("[Session] Failed to create DPoP proof for connect, proceeding without:",h)}const s=bg({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 oo(_e(this.transport.execute(s)).pipe(jo(),x(h=>h.result),B(uv),Ee(()=>{Z.debug("[Session] Response passed filter, processing authentication result")}),Oe(1),ui(h=>{throw Z.error("[Session] Authentication RPC failed:",h),h})));Z.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),(u=a.authorization.cnf)!=null&&u.jkt&&(this._wasClientBound=!0),this._iceServers$.next(a.ice_servers??[]),this._authState$.next({kind:"authenticated"}),Z.debug("[Session] Authentication completed successfully")}async disconnect(){this.transport.disconnect(),this._authState$.next({kind:"unauthenticated"}),await this.teardownSessionState()}async createInboundCall(t){const e=await this.createCall({nodeId:t.node_id,callId:t.callID,initOffer:t.sdp,toName:t.callee_id_name,to:t.callee_id_number,fromName:t.caller_id_name,from:t.caller_id_number,displayDirection:t.display_direction,userVariables:t.userVariables});this._calls$.next({[`${e.id}`]:e,...this._calls$.value})}async handleVertoAttach(t){const{callID:e}=t;if(e in this._calls$.value){Z.debug(`[Session] Verto attach for existing call ${e}, deferring to per-call handler`);return}const i=await this.attachManager.consumePendingAttachment(e);Z.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 _c?t.defaultChannel:t;let r;try{return r=await this.createCall({to:i,...e}),await Ze(Cr(r.selfId$.pipe(B(n=>!!n),Oe(1),Sr(this.callCreateTimeout)),r.errors$.pipe(B(hv),Oe(1),Je(n=>kd(()=>n.error))))),this._calls$.next({[`${r.id}`]:r,...this._calls$.value}),r}catch(n){Z.error("[Session] Error creating outbound call:",n),r==null||r.destroy();const s=new Lo(n instanceof lo?"Call create timeout":"Call creation failed",n,"outbound");throw this._errors$.next(s),s}}async createCall(t={}){try{const e=pv(t);let i;try{if(!this._directory)throw new te("Directory not initialized");const n=await this._directory.findAddressIdByURI(e);if(!n)throw new te(`Address name: ${e} not found`);if(i=this._directory.get(n),!i)throw new te(`Address ID: ${n} not found`)}catch{Z.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"),Oe(1)),()=>{const{[`${r.id}`]:n,...s}=this._calls$.value;this._calls$.next(s)}),r}catch(e){throw Z.error("[Session] Error creating call session:",e),new Lo("Call create error",e,t.initOffer?"inbound":"outbound")}}destroy(){for(const t of Object.values(this._calls$.value))t.hangup();super.destroy()}},fv=class{constructor(t){this.clientSessionManager=t}get authenticated$(){return this.clientSessionManager.authenticated$}get authenticated(){return this.clientSessionManager.authenticated}get clientBound(){return this.clientSessionManager.clientBound}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 vv=t=>typeof t=="string",Ms=G();var bv=class extends Mc{constructor(t,e){super(`/api/fabric/conversations/${t}/messages`,"page_size=100",e),this.groupId=t}},mv=class extends Rc{constructor(t,e,i,r){super(new bv(t,i),e,r)}},yv=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({...hn,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(vv(r.group_id))return this.groupIds.set(t,r.group_id),r.group_id}throw new Fo("Join Failed - Unexpected response")}catch(i){throw Ms.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 mv(e,this.clientSession.signalingEvent$.pipe(we(yc,"params"),Ee(i=>Ms.debug("[ConversationsManager ] Conversation Event:",i)),x(i=>({...i}))),this.http,this.onError))}async sendText(t,e){const i=this.groupIds.get(e)??await this.join(e),r=this.getUserAddressId();try{if((await this.http.request({...hn,url:"/api/fabric/messages",body:JSON.stringify({group_id:i,from_fabric_address_id:r,text:t})})).ok)return;throw new Fo("Send Text Failed - Unexpected response")}catch(n){throw Ms.error("[ConversationsManager] Failed to send text message:",n),n}}};const We=G();function mn(t){return t.expires_at?t.expires_at:t.expires_in?Math.floor(Date.now()/1e3)+t.expires_in:(We.warn("[DeviceToken] Could not determine token expiry, using default"),Math.floor(Date.now()/1e3)+sn)}function Oc(t){return t.expires_in?t.expires_in:t.expires_at?Math.max(t.expires_at-Math.floor(Date.now()/1e3),1):sn}var wv=class extends se{constructor(t,e,i,r){super(),this.dpopManager=t,this.http=e,this.errorHandler=i,this.getCredential=r,this._currentToken$=this.createBehaviorSubject(null),this._refreshInProgress=!1,this._paused=!1,this._effectiveExpireIn=sn,this.subscribeTo(this._currentToken$.pipe(B(Boolean),Je(n=>{const s=mn(n),a=Math.max(s*1e3-Date.now()-ds,1e3);return We.debug(`[DeviceToken] Scheduling Client Bound SAT refresh in ${a}ms`),Fi(a)})),()=>{this.executeRefresh()})}get effectiveExpireIn(){return this._effectiveExpireIn}async activate(t,e,i){var n;const{satClaims:r}=t;if(!((n=r==null?void 0:r.scope)!=null&&n.includes(ph)))return We.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)){We.debug("[DeviceToken] Reusing cached Client Bound SAT — skipping /devices/token");const c=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await e.reauthenticate(s.token,c,{clientBound:!0}),i({token:s.token}),{activated:!0}}const a=await this.obtainToken();!a.expires_at&&!a.expires_in&&r.expires_at&&(a.expires_at=r.expires_at),this._effectiveExpireIn=Oc(a);const o=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await e.reauthenticate(a.token,o,{clientBound:!0}),i({token:a.token}),We.info("[DeviceToken] Client Bound SAT activated successfully"),this.emitCurrentToken(a),{activated:!0}}catch(s){return We.error("[DeviceToken] Failed to activate Client Bound SAT:",s),this.errorHandler(new ln(s,"Failed to activate Client Bound SAT")),{activated:!1,reason:"endpoint-failed"}}}emitCurrentToken(t){const e=t.expires_at?t:{...t,expires_at:mn(t)};this._currentToken$.next(e)}isTokenFresh(t){return mn(t)*1e3-Date.now()>ds}async obtainToken(){const t=await this.dpopManager.createHttpProof({method:"POST",uri:Eo}),e=await this.http.request({url:Eo,...hn,body:JSON.stringify({dpop_token:t,expire_in:sn})});if(!e.ok||!e.body)throw new zo(`Failed to obtain device token: ${e.status} ${e.statusText}`);const i=JSON.parse(e.body);if(!i.token)throw new zo("Device token response missing token field");return i}async refreshToken(t,e,i){We.debug("[DeviceToken] Refreshing Client Bound SAT");const r=await this.dpopManager.createHttpProof({method:"POST",uri:ko,accessToken:e}),n=await this.http.request({url:ko,...hn,body:JSON.stringify({dpop_token:r,expire_in:this._effectiveExpireIn})});if(!n.ok||!n.body)throw new di(`Failed to refresh device token: ${n.status} ${n.statusText}`);const s=JSON.parse(n.body);if(!s.token)throw new di("Device token refresh response missing token field");!s.expires_at&&!s.expires_in&&(s.expires_in=this._effectiveExpireIn),this._effectiveExpireIn=Oc(s);const a=await this.dpopManager.createRpcProof({method:"signalwire.reauthenticate"});return await t.reauthenticate(s.token,a),i({token:s.token}),We.info("[DeviceToken] Client Bound SAT refreshed successfully"),s}async executeRefresh(){if(this._paused){We.debug("[DeviceToken] Manager paused, skipping refresh");return}if(this._refreshInProgress){We.debug("[DeviceToken] Refresh already in progress, skipping");return}const t=this._session,e=this._updateCredential;if(!t||!e){We.warn("[DeviceToken] Cannot refresh: session or updateCredential not set");return}if(!t.authenticated){We.debug("[DeviceToken] Session not authenticated, deferring refresh");return}this._refreshInProgress=!0;try{const i=this.getCredential().token;if(!i)throw new di("No current token available for refresh");const r=await this.retryRefresh(t,i,e);this.emitCurrentToken(r)}catch(i){We.error("[DeviceToken] Automatic Client Bound SAT refresh failed:",i),this.errorHandler(i instanceof di?i:new di("Automatic token refresh failed",i))}finally{this._refreshInProgress=!1}}async retryRefresh(t,e,i){let r;for(let n=0;n<xo;n++)try{return await this.refreshToken(t,e,i)}catch(s){if(r=s,n<xo-1){const a=gh*Math.pow(2,n);We.warn(`[DeviceToken] Refresh attempt ${n+1} failed, retrying in ${a}ms`),await new Promise(o=>setTimeout(o,a))}}throw r instanceof Error?r:new di("All refresh retries exhausted",r)}refreshNowIfDue(){const t=this._currentToken$.value;t&&mn(t)*1e3-Date.now()<=ds&&(We.debug("[DeviceToken] Resume: cached SAT past refresh window; refreshing now"),this.executeRefresh())}pause(){this._paused=!0}resume(){this._paused=!1}destroy(){super.destroy()}};const vt=G(),Sv=(t,e,i,r)=>new wv(t,e,i,r);var Cv=class extends se{constructor(t,e){super(),this.deps=e,this._activating=!1,this._activationGeneration=0,this._developerRefreshInProgress=!1,t!=null&&t.initialized&&(this._deviceTokenManager=(e.deviceTokenManagerFactory??Sv)(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._activeProvider=t,this._developerTimerId!==void 0&&clearTimeout(this._developerTimerId);const r=i===0?Math.max(e-Date.now()-Io,1e3):Math.min(fh*Math.pow(2,i)*(.5+Math.random()*.5),vh);this._developerTimerId=setTimeout(()=>{this._developerTimerId=void 0,this.executeDeveloperRefresh(t,e,i)},r)}async executeDeveloperRefresh(t,e,i){if(this._developerRefreshInProgress){vt.debug("[Coordinator] Developer refresh already in progress; skipping");return}this._developerRefreshInProgress=!0;try{const r=await this.refreshCredential(t);this.deps.store.write(r),this.deps.store.persist(r);try{await this.deps.notifier.onCredentialRefreshed(r)}catch(n){vt.warn("[Coordinator] onCredentialRefreshed rejected (non-fatal):",n)}vt.info("[Coordinator] Credentials refreshed successfully."),r.expiry_at&&this.scheduleDeveloperRefresh(t,r.expiry_at,0)}catch(r){const n=i+1;vt.error(`[Coordinator] Credential refresh failed (attempt ${n}/${Do}):`,r),this.deps.notifier.onError(r instanceof Error?r:new Error(String(r),{cause:r})),n<Do?this.scheduleDeveloperRefresh(t,e,n):(vt.error("[Coordinator] Credential refresh exhausted all retries. Disconnecting."),this.deps.notifier.onError(new di("Credential refresh failed after max retries")),this.deps.notifier.onRefreshExhausted())}finally{this._developerRefreshInProgress=!1}}forceRefreshIfDue(){var t;if(this._developerTimerId!==void 0&&this._activeProvider){const e=this.deps.store.read().expiry_at;e!==void 0&&Date.now()>=e-Io&&(vt.debug("[Coordinator] Resume: credential past refresh window; forcing refresh"),clearTimeout(this._developerTimerId),this._developerTimerId=void 0,this.executeDeveloperRefresh(this._activeProvider,e,0));return}(t=this._deviceTokenManager)==null||t.refreshNowIfDue()}syncExpiryFromAuthorization(t,e){var a;const i=(a=t==null?void 0:t.fabric_subscriber)==null?void 0:a.expires_at;if(!i)return;const r=i*1e3,n=this.deps.store.read();if(n.expiry_at===r)return;vt.debug(`[Coordinator] Correcting credential expiry from server authorization: ${new Date(r).toISOString()}`);const s={...n,expiry_at:r};this.deps.store.write(s),this.deps.store.persist(s),e!=null&&e.refresh&&this.scheduleDeveloperRefresh(e,r)}async refreshCredential(t){if(this._refreshInFlight)return this._refreshInFlight;if(!t.refresh)throw new Wt("Credential provider does not support refresh");const e=t.refresh();this._refreshInFlight=e;const i=()=>{this._refreshInFlight===e&&(this._refreshInFlight=void 0)};return e.then(i,i),e}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){vt.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){vt.debug("[Coordinator] activate() result discarded (preempted by newer activation)");return}if(r.activated){this.cancelDeveloperRefresh(),vt.debug("[Coordinator] Developer refresh disabled — Client Bound SAT owns refresh");return}vt.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"})},mh);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 Rs=G(),Av=1e3;function Tv(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"unknown"}var Ev=class extends se{constructor(t){super(),this._events=[],this._calls=[],this._deviceChanges=[],this._eventRecorded$=this.createSubject(),this._sdkVersion=t.sdkVersion,this._maxEvents=t.maxEvents??Av,Rs.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:Tv(),exportedAt:Date.now(),events:[...this._events],calls:[...this._calls],deviceChanges:[...this._deviceChanges]}}clear(){this._events=[],this._calls=[],this._deviceChanges=[],Rs.debug("DiagnosticsCollector buffers cleared")}destroy(){Rs.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 Lc=t=>((t==null?void 0:t.length)??0)===0,kv=t=>{t.pipe(Oe(1)).subscribe()},xv=G();var Dv=class extends Mc{constructor(t){super("/api/fabric/addresses","sort_by=name&sort_order=asc",t)}async name(t){const e=await this.http.request({...ms,url:`${this.endpoint}?name=${encodeURIComponent(t)}`});if(e.ok&&e.body){const i=JSON.parse(e.body);if(!Lc(i.data))return i.data[0]}xv.error("Failed to fetch addresses")}},Iv=class extends Rc{constructor(t,e,i){super(new Dv(e),t,i)}},Mv=class extends se{constructor(t,e,i,r){super(),this.http=t,this.conversationManager=i,this.onError=r,this.addNewAddress=n=>{var o;const s=new _c(n,this.conversationManager,this),a=(o=this._statesCollection.get$(n))==null?void 0:o.pipe(fe(),x(c=>(s.upnext(c),s)));a&&(kv(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 Iv(e.signalingEvent$.pipe(we(wc,"params"),x(n=>({}))),this.http,this.onError),this.initSubscriptions()}get loading(){return this._statesCollection.loading}initSubscriptions(){this.subscribeTo(this._statesCollection.updated$,()=>{const t=Array.from(this._addressesInstances.values().map(i=>i.id)),e=this._statesCollection.values.filter(i=>!t.includes(i.id));Lc(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 Ze(r);this.addNewAddress(n.id),e=n.id}}return e}};const Fc=G();var Rv=(yt=class extends se{constructor(e,i,r,n={}){super(),this.WebSocketConstructor=e,this.endpoint=i,this.outgoingMessages$=r,this.messageQueue=[],this.shouldReconnect=!1,this.boundHandleOpen=()=>this.handleOpen(),this.boundHandleClose=s=>this.handleClose(s),this.boundHandleError=()=>this.handleError(),this.boundHandleMessage=s=>this.handleMessage(s),this._status$=this.createBehaviorSubject("disconnected"),this._incomingMessages$=this.createSubject(),this._errors$=this.createReplaySubject(1),this.reconnectDelayMin=n.reconnectDelayMin??yt.DEFAULT_RECONNECT_DELAY_MIN_MS,this.reconnectDelayMax=n.reconnectDelayMax??yt.DEFAULT_RECONNECT_DELAY_MAX_MS,this.connectionTimeout=n.connectionTimeout??yt.DEFAULT_CONNECTION_TIMEOUT_MS,this.currentReconnectDelay=this.reconnectDelayMin,this.subscriptions.push(this.outgoingMessages$.subscribe(s=>{this.send(s)}))}get status$(){return this._status$.asObservable()}get incomingMessages$(){return this._incomingMessages$.asObservable()}get errors$(){return this._errors$.asObservable()}connect(){this._status$.value==="connecting"||this._status$.value==="connected"||(this.shouldReconnect=!0,this._status$.next("connecting"),this.createWebSocket())}disconnect(){this.shouldReconnect=!1,this.clearReconnectTimer(),this.clearConnectionTimeout();const e=this._status$.value;e==="connected"||e==="connecting"||e==="reconnecting"?this.socket?(this._status$.next("disconnecting"),this.socket.close()):this._status$.next("disconnected"):this._status$.next("disconnected")}reconnect(){this.shouldReconnect=!0,this._status$.next("reconnecting"),this.scheduleReconnection()}send(e){var i;this._status$.value==="connected"&&((i=this.socket)==null?void 0:i.readyState)===1?(Fc.wsTraffic({type:"send",raw:e}),this.socket.send(e)):this.messageQueue.push(e)}createWebSocket(){try{this.closeExistingSocket(),this.socket=new this.WebSocketConstructor(this.endpoint),this.setupWebSocketListeners(),this.startConnectionTimeout()}catch(e){const i=e instanceof Error?e:new Ui("Failed to create WebSocket");this._errors$.next(i),this.handleConnectionError()}}closeExistingSocket(){if(!this.socket)return;const e=this.socket;this.socket=void 0,this.removeWebSocketListeners(e);try{e.close()}catch{}}setupWebSocketListeners(){this.socket&&(this.socket.addEventListener("open",this.boundHandleOpen),this.socket.addEventListener("close",this.boundHandleClose),this.socket.addEventListener("error",this.boundHandleError),this.socket.addEventListener("message",this.boundHandleMessage))}removeWebSocketListeners(e){try{e.removeEventListener("open",this.boundHandleOpen),e.removeEventListener("close",this.boundHandleClose),e.removeEventListener("error",this.boundHandleError),e.removeEventListener("message",this.boundHandleMessage)}catch{}}handleOpen(){this.clearConnectionTimeout(),this._status$.next("connected"),this.currentReconnectDelay=this.reconnectDelayMin,this.flushMessageQueue()}handleClose(e){this.clearConnectionTimeout(),this.shouldReconnect?(this._status$.next("reconnecting"),this.scheduleReconnection()):this._status$.next("disconnected")}handleError(){const e=new Po("WebSocket connection error");this._errors$.next(e),this.handleConnectionError()}handleMessage(e){Fc.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 sp("WebSocket connection timeout");this._errors$.next(e),this.socket&&this.socket.close()}},this.connectionTimeout)}clearConnectionTimeout(){this.connectionTimeoutTimer&&(clearTimeout(this.connectionTimeoutTimer),this.connectionTimeoutTimer=void 0)}clearReconnectTimer(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0)}flushMessageQueue(){var e;for(;this.messageQueue.length>0&&((e=this.socket)==null?void 0:e.readyState)===1;){const i=this.messageQueue.shift();i!==void 0&&this.socket.send(i)}}},yt.DEFAULT_RECONNECT_DELAY_MIN_MS=1e3,yt.DEFAULT_RECONNECT_DELAY_MAX_MS=3e4,yt.DEFAULT_CONNECTION_TIMEOUT_MS=1e4,yt);function Pv(t){return As(t)&&t.method==="signalwire.ping"}const De=G();var _v=class extends se{constructor(t,e,i,r,n){super(),this.storage=t,this.protocolKey=e,this.onError=n,this.protocol$=this.createReplaySubject(1),this.isConnecting=!1,this.isConnected=!1,this.ackEvent=()=>Ee(s=>{if(Es(s))try{De.debug("[Transport] Sending event ack",{eventId:s.id}),this.send(Mg(s.id))}catch(a){De.error("[Transport] Failed to send event acknowledgment:",a)}}),this.replySignalwirePing=()=>B(s=>{if(Pv(s)){try{De.debug("[Transport] Received ping, sending pong",{pingId:s.id}),this.send(yg(s.id))}catch(a){De.error("[Transport] Failed to send ping response:",a)}return!1}return!0}),this.discardStaleEvents=()=>B(s=>{if(!Es(s))return!0;const a=s.params.event_channel;if(!a)return!0;if(s.params.event_type.startsWith("conversation."))return De.debug(`[Transport] Received conversation event: ${s.params.event_type} (event_channel: ${a})`),!0;const o=this._currentProtocol;if(!o)return!0;if(!a.includes(o)){const c=s.params.event_type;return De.warn(`[Transport] Discarding stale event: ${c} (event_channel does not match current protocol)`),!1}return!0}),this._outgoingMessages$=this.createSubject(),this._webSocketConnections=new Rv(i,r,this._outgoingMessages$.asObservable(),{connectionTimeout:f.instance.connectionTimeout,reconnectDelayMin:f.instance.reconnectDelayMin,reconnectDelayMax:f.instance.reconnectDelayMax}),this.subscribeTo(this._webSocketConnections.errors$,s=>{var a;(a=this.onError)==null||a.call(this,s)}),this.initialized$=li(()=>_e(this._init())).pipe(st(1),S(this.destroyed$)),this._jsonRPCMessage$=this._webSocketConnections.incomingMessages$.pipe(x(s=>{var a;try{return JSON.parse(s.data)}catch(o){return De.error("[Transport] Failed to parse incoming message:",o),(a=this.onError)==null||a.call(this,new gp(o)),null}}),B(s=>s!==null&&(Ts(s)||As(s))),ui(s=>{var a;return De.error("[Transport] Message processing error:",s),(a=this.onError)==null||a.call(this,s instanceof Error?s:new Error(String(s),{cause:s})),ci}),At(),S(this.destroyed$)),this._jsonRPCResponse$=this._jsonRPCMessage$.pipe(B(Ts)),this._incomingEvent$=this._jsonRPCMessage$.pipe(this.ackEvent(),this.replySignalwirePing(),B(s=>!Ts(s)),this.discardStaleEvents(),At(),S(this.destroyed$))}async setProtocol(t){this._currentProtocol=t,this.protocol$.next(t),await this._updateProtocolInStorage(t)}get incomingEvent$(){return this._incomingEvent$}get connectionStatus$(){return this._webSocketConnections.status$}async connect(){return this.isConnecting||this.isConnected?(De.warn("[Transport] Already connecting or connected"),Promise.resolve()):new Promise((t,e)=>{this.isConnecting=!0,this.subscribeTo(this.initialized$,()=>{this._webSocketConnections.connect();const i=this._webSocketConnections.status$.pipe(B(r=>r==="connected"||r==="disconnected"),Oe(1),Sr(1e4)).subscribe({next:r=>{var n;if(r==="connected")this.isConnecting=!1,this.isConnected=!0,De.debug("[Transport] Connection established"),t();else{this.isConnecting=!1;const s=new _o("Failed to connect");De.error("[Transport] Connection failed"),(n=this.onError)==null||n.call(this,s),e(s)}},error:r=>{var n;this.isConnecting=!1,De.error("[Transport] Connection error:",r),(n=this.onError)==null||n.call(this,r instanceof Error?r:new Error(String(r),{cause:r})),e(r)}});this.subscriptions.push(i),this.subscribeTo(this._webSocketConnections.status$.pipe(B(r=>r==="disconnected")),()=>{De.debug("[Transport] Disconnected"),this.isConnected=!1})})})}reconnect(){this._webSocketConnections.reconnect()}async execute(t,e){return this.send(t),new dv(t,this._jsonRPCResponse$,e).promise}send(t){const e=JSON.stringify(t);this._outgoingMessages$.next(e)}disconnect(){De.debug("[Transport] Disconnecting"),this.isConnected=!1,this.isConnecting=!1,this._webSocketConnections.disconnect()}destroy(){De.debug("[Transport] Destroying"),this.disconnect(),super.destroy(),this._webSocketConnections.destroy()}async _loadProtocolFromStorage(){try{const t=await this.storage.getItem(this.protocolKey);this._currentProtocol=t??void 0,this.protocol$.next(t??void 0)}catch(t){throw De.error("Failed to retrieve protocol from storage:",t),t}}async _updateProtocolInStorage(t){if(!t){try{await this.storage.removeItem(this.protocolKey)}catch(e){throw De.error("Failed to remove protocol from storage:",e),e}return}try{const e=await this.storage.getItem(this.protocolKey);(!e||e!==t)&&await this.storage.setItem(this.protocolKey,t)}catch(e){throw De.error("Failed to update protocol in storage:",e),e}}async _init(){return await this._loadProtocolFromStorage(),!0}};function Ov(t){const e=new Set;let i=t;for(;i instanceof Error&&!e.has(i);){if(e.add(i),i instanceof Et)return i;i=i.error??i.cause}}function Nc(t){const e=Ov(t);return e!==void 0&&(e.code===hs||e.code===ps)}const Y=G(),Lv=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 Uc=class extends se{constructor(t,e={}){super(),this.preferences=new Gp,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 Kp,this._credentialProvider=t,this._options={...f.instance.defaultSignalWireOptions,...e},this._options.storageImplementation&&(this._deps.storageImpl=this._options.storageImplementation),this._options.persistSession&&(this._deps.persistSession=!0),this._options.webSocketConstructor&&(this._deps.WebSocket=this._options.webSocketConstructor),this._options.savePreferences&&this.preferences.enableSavePreferences(this._deps.storage),this._options.webRTCApiProvider&&(this._deps.webRTCApiProvider=this._options.webRTCApiProvider),this._options.logger!==void 0&&yp(this._options.logger),this._options.logLevel&&Sp(this._options.logLevel),this._options.debug&&wp(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 eg;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._refreshCoordinator=new Cv(this._dpopManager,{http:this._deps.http,notifier:{onError:e=>this._errors$.next(e),onWarning:e=>this._warnings$.next(e),onRefreshExhausted:()=>void this.disconnect(),onCredentialRefreshed:async e=>this.reauthenticateLiveSession(e)},store:{read:()=>this._deps.credential,write:e=>{this._deps.credential=e},merge:e=>{this._deps.credential={...this._deps.credential,...e},this.persistCredential(this._deps.credential)},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 Y.debug(`[SignalWire] Using cached credential from ${e}Storage`),await this.validateCredentials(void 0,i)}catch{}throw new Wt("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 Wt("No credentials available.");if(n.token)try{const o=xp(n.token,{header:!0});this._deps.ch=o.ch}catch(o){throw Y.error("[SignalWire] Invalid JWT token provided in credentials:",o),new Wt("Invalid JWT token provided in credentials.",{cause:o})}if(!n.token&&!n.authorizationState)throw Y.error("[SignalWire] No valid authentication credentials provided."),new Wt("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 Wt("Provided credentials have expired.");n.expiry_at&&(t!=null&&t.refresh)?(a=this._refreshCoordinator)==null||a.scheduleDeveloperRefresh(t,n.expiry_at):n.expiry_at&&!(t!=null&&t.refresh)&&(Y.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),await this.reauthenticateLiveSession(n)}async reauthenticateLiveSession(t){if(!(!this.isConnected||!this._clientSession.authenticated||!t.token))try{await this._clientSession.reauthenticate(t.token),Y.info("[SignalWire] Session refreshed with new credentials.")}catch(e){Y.error("[SignalWire] Failed to refresh session with new credentials:",e),this._errors$.next(e instanceof Error?e:new Error(String(e),{cause:e}))}}async recoverStaleCredential(t=!0){var i,r;const e=this._deps.credential.token;if(e)try{return await this._clientSession.reauthenticate(e),!0}catch(n){Y.debug("[SignalWire] In-memory reauth failed during recovery:",n)}if(!t||this._clientSession.clientBound||!((i=this._credentialProvider)!=null&&i.refresh))return!1;try{const n=await this.remintCredential(this._credentialProvider);return n.token?(this._deps.credential=n,this.persistCredential(n),await this._clientSession.reauthenticate(n.token),n.expiry_at&&((r=this._refreshCoordinator)==null||r.scheduleDeveloperRefresh(this._credentialProvider,n.expiry_at)),!0):!1}catch(n){return Y.error("[SignalWire] Credential recovery failed:",n),!1}}async remintCredential(t){if(this._refreshCoordinator)return this._refreshCoordinator.refreshCredential(t);if(!t.refresh)throw new Wt("Credential provider does not support refresh");return t.refresh()}async refreshCredentialForReconnect(){var t,e;if(this._credentialProvider)try{let i;if(this._clientSession.clientBound){const r=(t=this._dpopManager)!=null&&t.initialized?this._dpopManager.fingerprint:void 0;Y.debug("[SignalWire] Re-minting client-bound base SAT before reconnect"),i=await this._credentialProvider.authenticate(r?{fingerprint:r}:void 0)}else if(this._credentialProvider.refresh)Y.debug("[SignalWire] Refreshing unbound credential before reconnect"),i=await this.remintCredential(this._credentialProvider);else{Y.warn("[SignalWire] [SW-NO-REFRESH-HANDLER] Token expired on reconnect but no refresh handler; reconnecting with the existing token.");return}if(!i.token){Y.warn("[SignalWire] Re-minted credential has no token; keeping the existing credential for reconnect.");return}this._deps.credential=i,this.persistCredential(i),i.expiry_at&&this._credentialProvider.refresh&&((e=this._refreshCoordinator)==null||e.scheduleDeveloperRefresh(this._credentialProvider,i.expiry_at)),Y.debug("[SignalWire] Credential refreshed successfully for reconnect")}catch(i){throw Y.error("[SignalWire] Failed to refresh credentials for reconnect:",i),this._errors$.next(i instanceof Error?i:new Error(String(i),{cause:i})),i}}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 fg(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 Ui("User not initialized before connect");if(!await Ze(a.fetched$))throw new Ui("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 Ui("Error fetching user information",{cause:a})}const t=a=>{this._errors$.next(a)};this._transport=new _v(this._deps.storage,this._deps.protocolKey,this._deps.WebSocket,f.instance.relayHost??this._deps.relayHost,t),this._attachManager=new Rg(this._deps.storage,this._deps.deviceController,f.instance.reconnectCallsTimeout,this._deps.attachedCallsKey),this._clientSession=new gv(()=>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 fv(this._clientSession),this._clientSession.onBeforeReconnect=async()=>this.refreshCredentialForReconnect(),this.subscribeTo(this._clientSession.errors$,a=>{this._errors$.next(a)}),this.subscribeTo(this._clientSession.authorization$,a=>{var o;(o=this._refreshCoordinator)==null||o.syncExpiryFromAuthorization(a,this._credentialProvider)}),await this._clientSession.connect(),await((n=this._refreshCoordinator)==null?void 0:n.activate(this._deps.user,this._clientSession)),this.subscribeTo(this._clientSession.authenticated$.pipe(tn(1),B(Boolean)),async()=>{var a;try{await((a=this._refreshCoordinator)==null?void 0:a.activate(this._deps.user,this._clientSession))}catch(o){Y.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{Y.debug("[SignalWire] Re-registering user after reconnect"),await this.register(),Y.debug("[SignalWire] User re-registered successfully after reconnect")}catch(o){Y.error("[SignalWire] Re-registration failed after reconnect:",o),this._errors$.next(o instanceof Error?o:new Error(String(o),{cause:o}))}});const e=new yv(this._clientSession,this._deps.http,()=>this._deps.getUserFromAddressId(),t),i=new Mv(this._deps.http,this._clientSession,e,t);this._directory$.next(i),this._clientSession.setDirectory(i),this._isConnected$.next(!0),(s=this._diagnosticsCollector)==null||s.record("connection","connected"),this.subscribeTo(this._clientSession.authenticated$.pipe(tn(2),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(Je(t=>t?this._clientSession.authenticated$:Ct(!1))))}get errors$(){return this.deferEmission(this._errors$.asObservable())}get warnings$(){return this.deferEmission(this._warnings$.asObservable())}get platformCapabilities(){return this._platformCapabilities??(this._platformCapabilities=tc(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=tc(this._options.webRTCApiProvider)}catch(t){Y.warn("[SignalWire] Failed to detect platform capabilities:",t)}try{this._networkMonitor=new tg}catch(t){Y.warn("[SignalWire] Failed to initialize NetworkMonitor:",t)}try{this._visibilityController=new pg,this.subscribeTo(this._visibilityController.visibilityChange$.pipe(B(t=>t.to==="visible")),()=>{var t;try{(t=this._refreshCoordinator)==null||t.forceRefreshIfDue()}catch(e){Y.warn("[SignalWire] Resume credential revalidation failed (non-fatal):",e)}}),this.subscribeTo(this._visibilityController.visibilityChange$.pipe(B(t=>t.to==="visible"&&f.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 Ev({sdkVersion:"4.0.0-rc.2"})}catch(t){Y.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){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 Ze(this.ready$.pipe(B(t=>t===!0)))}async register(){try{await this.waitAuthentication(),await this._transport.execute(Ss({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, attempting credential recovery...");let e=t;if(await this.recoverStaleCredential(Nc(t)))try{Y.debug("[SignalWire] Recovery succeeded, retrying register()"),await this._transport.execute(Ss({method:"subscriber.online",params:{}})),this._isRegistered$.next(!0);return}catch(r){Y.error("[SignalWire] Register retry after recovery failed:",r),e=r}const i=new Wt("Failed to register user, and credential recovery 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(Ss({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={...f.instance.preferredMediaOptions,...Lv(t),...e};await this.waitAuthentication(),Y.debug("[SignalWire] Dialing with options:",i);try{return await this._clientSession.createOutboundCall(t,i)}catch(r){if(!Nc(r)||(Y.debug("[SignalWire] Dial hit a recoverable auth error; recovering credential and retrying once"),!await this.recoverStaleCredential()))throw r;return await this.waitAuthentication(),this._clientSession.createOutboundCall(t,i)}}async preflight(t,e){const i=this._clientSession.iceServers??f.instance.iceServers??[],r=this._isConnected$.value;return new dg(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=f.instance;t.preferredAudioInput=null,t.preferredAudioOutput=null,t.preferredVideoInput=null,await this._deviceController.clearDeviceState()}destroy(){var e,i,r,n,s,a;(e=this._refreshCoordinator)==null||e.destroy(),this._refreshCoordinator=void 0,(i=this._dpopManager)==null||i.destroy();const t=this._clientSession;t==null||t.teardownSessionState(),(r=this._transport)==null||r.destroy(),t==null||t.destroy();try{(n=this._networkMonitor)==null||n.destroy()}catch{}try{(s=this._visibilityController)==null||s.destroy()}catch{}try{(a=this._diagnosticsCollector)==null||a.destroy()}catch{}this._networkMonitor=void 0,this._visibilityController=void 0,this._diagnosticsCollector=void 0,super.destroy()}};const Fv=G();var Bc=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 ap(`Failed to fetch SAT using embed token: ${n.status} ${n.statusText}`)}catch(n){throw clearTimeout(r),n instanceof Error&&n.name==="AbortError"?new Oo(`Request timeout after ${e}ms`,{cause:n}):(Fv.error("[EmbedCredentialProvider] Request failed:",n),n)}}async authenticate(){return{token:await this.fetchSAT(),expiry_at:Date.now()+3600*1e3}}async refresh(){return this.authenticate()}},zc=class{constructor(t){this.credentials=t}async authenticate(){return Promise.resolve(this.credentials)}};(()=>{if(typeof window<"u"){const t=new CustomEvent("signalwire:js:ready",{detail:{version:"4.0.0-rc.2"}});window.dispatchEvent(t)}})();var Nv=Object.defineProperty,Uv=Object.getOwnPropertyDescriptor,Er=(t,e,i,r)=>{for(var n=r>1?void 0:r?Uv(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&&Nv(e,i,n),n};const Bv=G();l.SwCallMedia=class extends ee{constructor(){super(...arguments),this.stream=null,this._remoteStreamValue=null,this._lastTrackSignature="",this._subscriptions=[]}connectedCallback(){super.connectedCallback(),!this.stream&&this.call&&this._setupDirectSubscriptions(),this.stream&&(this._remoteStreamValue=this.stream,this._lastTrackSignature=this._computeTrackSignature(this.stream))}updated(e){var i,r,n,s,a;if(super.updated(e),e.has("call")&&(this._cleanupDirectSubscriptions(),!this.stream&&this.call&&this._setupDirectSubscriptions()),e.has("stream")){this._cleanupDirectSubscriptions();const o=this.stream,c=this._computeTrackSignature(o);if(o!==this._remoteStreamValue||c!==this._lastTrackSignature){this._remoteStreamValue=o,this._lastTrackSignature=c;const u=(i=this.shadowRoot)==null?void 0:i.querySelector("video.mcu-video");u&&Xr(u,o)}}if(!this.stream&&!this.call&&e.has("_callState")){const o=((r=this._callState)==null?void 0:r.remoteStream)??null,c=this._computeTrackSignature(o);if(o!==this._remoteStreamValue||c!==this._lastTrackSignature){this._remoteStreamValue=o,this._lastTrackSignature=c;const u=(n=this.shadowRoot)==null?void 0:n.querySelector("video.mcu-video");u&&Xr(u,o)}}e.has("_devicesState")&&this._applySinkId(((a=(s=this._devicesState)==null?void 0:s.selectedAudioOutput)==null?void 0:a.deviceId)??"")}disconnectedCallback(){super.disconnectedCallback(),this._cleanupDirectSubscriptions(),this._cleanupVideoElement()}_setupDirectSubscriptions(){this.call&&this._subscriptions.push(this.call.remoteStream$.subscribe(e=>{var n;const i=this._computeTrackSignature(e);if(e===this._remoteStreamValue&&i===this._lastTrackSignature)return;this._remoteStreamValue=e,this._lastTrackSignature=i,this.requestUpdate();const r=(n=this.shadowRoot)==null?void 0:n.querySelector("video.mcu-video");r&&Xr(r,e)}))}_computeTrackSignature(e){return e?e.getTracks().map(i=>`${i.kind}:${i.id}`).sort().join("|"):""}_cleanupDirectSubscriptions(){this._subscriptions.forEach(e=>e.unsubscribe()),this._subscriptions=[]}_applySinkId(e){var r;const i=(r=this.shadowRoot)==null?void 0:r.querySelector("video.mcu-video");i!=null&&i.setSinkId&&i.setSinkId(e).catch(n=>{Bv.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&&Ma(e)}render(){return I`
|
|
74
74
|
<div class="mcu-content" part="container">
|
|
75
75
|
<div class="padding-wrapper">
|
|
76
76
|
<div class="mcu-wrapper">
|
|
@@ -79,6 +79,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
79
79
|
part="video"
|
|
80
80
|
autoplay
|
|
81
81
|
playsinline
|
|
82
|
+
muted
|
|
82
83
|
.srcObject=${this._remoteStreamValue}
|
|
83
84
|
></video>
|
|
84
85
|
</div>
|
|
@@ -87,7 +88,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
87
88
|
</div>
|
|
88
89
|
</div>
|
|
89
90
|
</div>
|
|
90
|
-
`}},l.SwCallMedia.styles=
|
|
91
|
+
`}},l.SwCallMedia.styles=ae`
|
|
91
92
|
:host {
|
|
92
93
|
display: block;
|
|
93
94
|
width: 100%;
|
|
@@ -107,13 +108,13 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
107
108
|
overflow: hidden;
|
|
108
109
|
}
|
|
109
110
|
|
|
111
|
+
/* Fill the parent box. The video element below uses object-fit: contain
|
|
112
|
+
so the stream letterboxes into whatever rectangle the parent gives us
|
|
113
|
+
— no JS sizing pass required. */
|
|
110
114
|
.padding-wrapper {
|
|
111
115
|
position: relative;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
transition:
|
|
115
|
-
width 0.3s ease,
|
|
116
|
-
height 0.3s ease;
|
|
116
|
+
width: 100%;
|
|
117
|
+
height: 100%;
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
/* Outer rounding is owned by sw-ui-call-layout's :host border-radius +
|
|
@@ -122,10 +123,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
122
123
|
(page / modal backdrop) as a black sliver in light mode. */
|
|
123
124
|
.mcu-wrapper {
|
|
124
125
|
position: absolute;
|
|
125
|
-
|
|
126
|
-
left: 0;
|
|
127
|
-
right: 0;
|
|
128
|
-
bottom: 0;
|
|
126
|
+
inset: 0;
|
|
129
127
|
overflow: hidden;
|
|
130
128
|
}
|
|
131
129
|
|
|
@@ -144,7 +142,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
144
142
|
height: 100%;
|
|
145
143
|
pointer-events: none;
|
|
146
144
|
}
|
|
147
|
-
`,
|
|
145
|
+
`,Er([E({type:Object})],l.SwCallMedia.prototype,"call",2),Er([E({attribute:!1})],l.SwCallMedia.prototype,"stream",2),Er([nt({context:pt,subscribe:!0}),O()],l.SwCallMedia.prototype,"_callState",2),Er([nt({context:vr,subscribe:!0}),O()],l.SwCallMedia.prototype,"_devicesState",2),l.SwCallMedia=Er([le("sw-call-media")],l.SwCallMedia);var zv=Object.defineProperty,Vv=Object.getOwnPropertyDescriptor,bi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Vv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&zv(e,i,n),n};l.SwSelfMedia=class extends ee{constructor(){super(...arguments),this.mirror=!1,this._directLocalStream=null,this._directLayoutLayers=[],this._directSelf=null,this._directSubscriptions=[]}updated(e){super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._setupDirect(this.call))}disconnectedCallback(){super.disconnectedCallback(),this._teardownDirect()}_setupDirect(e){this._directSubscriptions.push(e.localStream$.subscribe(i=>this._directLocalStream=i),e.layoutLayers$.subscribe(i=>this._directLayoutLayers=i),e.self$.subscribe(i=>this._directSelf=i))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directLocalStream=null,this._directLayoutLayers=[],this._directSelf=null}_getSelfLayer(){var r,n,s,a;const e=this.call?(r=this._directSelf)==null?void 0:r.id:(s=(n=this._callState)==null?void 0:n.self)==null?void 0:s.id;return e?(this.call?this._directLayoutLayers:((a=this._callState)==null?void 0:a.layoutLayers)??[]).find(o=>o.member_id===e):void 0}render(){var a;const e=this._getSelfLayer();if(!e)return null;const i=this.call?this._directLocalStream:((a=this._callState)==null?void 0:a.localStream)??null;if(!(((i==null?void 0:i.getVideoTracks().length)??0)>0))return null;const n=`
|
|
148
146
|
position: absolute;
|
|
149
147
|
top: ${e.y}%;
|
|
150
148
|
left: ${e.x}%;
|
|
@@ -154,7 +152,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
154
152
|
overflow: hidden;
|
|
155
153
|
transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;
|
|
156
154
|
pointer-events: none;
|
|
157
|
-
`,s=this.mirror?"transform: scale(-1, 1); -webkit-transform: scale(-1, 1);":"";return
|
|
155
|
+
`,s=this.mirror?"transform: scale(-1, 1); -webkit-transform: scale(-1, 1);":"";return I`
|
|
158
156
|
<div class="local-overlay" part="container" style="${n}">
|
|
159
157
|
<video
|
|
160
158
|
class="local-video"
|
|
@@ -167,7 +165,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
167
165
|
.srcObject=${i}
|
|
168
166
|
></video>
|
|
169
167
|
</div>
|
|
170
|
-
`}},l.SwSelfMedia.styles=
|
|
168
|
+
`}},l.SwSelfMedia.styles=ae`
|
|
171
169
|
:host {
|
|
172
170
|
display: contents;
|
|
173
171
|
}
|
|
@@ -179,15 +177,15 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
179
177
|
video {
|
|
180
178
|
display: block;
|
|
181
179
|
}
|
|
182
|
-
`,
|
|
180
|
+
`,bi([E({type:Boolean,reflect:!0})],l.SwSelfMedia.prototype,"mirror",2),bi([E({type:Object})],l.SwSelfMedia.prototype,"call",2),bi([nt({context:pt,subscribe:!0}),O()],l.SwSelfMedia.prototype,"_callState",2),bi([O()],l.SwSelfMedia.prototype,"_directLocalStream",2),bi([O()],l.SwSelfMedia.prototype,"_directLayoutLayers",2),bi([O()],l.SwSelfMedia.prototype,"_directSelf",2),l.SwSelfMedia=bi([le("sw-self-media")],l.SwSelfMedia);/**
|
|
183
181
|
* @license
|
|
184
182
|
* Copyright 2017 Google LLC
|
|
185
183
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
186
|
-
*/const
|
|
184
|
+
*/const Vc={ATTRIBUTE:1,CHILD:2},Hc=t=>(...e)=>({_$litDirective$:t,values:e});let jc=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)}};/**
|
|
187
185
|
* @license
|
|
188
186
|
* Copyright 2017 Google LLC
|
|
189
187
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
190
|
-
*/class
|
|
188
|
+
*/class Ps extends jc{constructor(e){if(super(e),this.it=W,e.type!==Vc.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===W||e==null)return this._t=void 0,this.it=e;if(e===Ht)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:[]}}}Ps.directiveName="unsafeHTML",Ps.resultType=1;const yn=Hc(Ps),Hv={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">
|
|
191
189
|
<path d="M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z"></path>
|
|
192
190
|
<line x1="18" y1="9" x2="12" y2="15"></line>
|
|
193
191
|
<line x1="12" y1="9" x2="18" y2="15"></line>
|
|
@@ -267,7 +265,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
267
265
|
<line x1="9" y1="9" x2="15" y2="9"/>
|
|
268
266
|
<line x1="9" y1="13" x2="13" y2="13"/>
|
|
269
267
|
</svg>
|
|
270
|
-
`};var
|
|
268
|
+
`};var jv=Object.defineProperty,Wv=Object.getOwnPropertyDescriptor,_s=(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=(r?a(e,i,n):a(n))||n);return r&&n&&jv(e,i,n),n};const Gv=24;l.SwUiIcon=class extends ee{constructor(){super(...arguments),this.name="close",this.size=Gv}render(){const e=Hv[this.name];if(!e)return I``;const i=e.replace("<svg",`<svg width="${this.size}" height="${this.size}"`);return I`${yn(i)}`}},l.SwUiIcon.styles=ae`
|
|
271
269
|
:host {
|
|
272
270
|
display: inline-flex;
|
|
273
271
|
align-items: center;
|
|
@@ -278,12 +276,12 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
278
276
|
svg {
|
|
279
277
|
display: block;
|
|
280
278
|
}
|
|
281
|
-
`,
|
|
279
|
+
`,_s([E({reflect:!0})],l.SwUiIcon.prototype,"name",2),_s([E({type:Number})],l.SwUiIcon.prototype,"size",2),l.SwUiIcon=_s([le("sw-ui-icon")],l.SwUiIcon);var qv=Object.defineProperty,Xv=Object.getOwnPropertyDescriptor,Ut=(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.SwLocalCamera=class extends ee{constructor(){super(...arguments),this.stream=null,this.mirror=!1,this._directLocalStream=null,this._directSubscriptions=[],this._aspectRatio="16 / 9",this._attachedStream=null}get _effectiveStream(){var e;return this.stream?this.stream:this.call?this._directLocalStream:((e=this._callState)==null?void 0:e.localStream)??null}get _effectiveMuted(){var e;return this.videoMuted??((e=this._devicesState)==null?void 0:e.videoMuted)??!1}firstUpdated(){var i;const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video");e&&e.addEventListener("pause",()=>{this._effectiveMuted||e.play().catch(()=>{})})}updated(e){var n,s;super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._setupDirect(this.call));const i=this._effectiveStream,r=e.has("stream")||e.has("call")||e.has("_directLocalStream")||e.has("_callState")&&i!==this._attachedStream;if(r){const a=(n=this.shadowRoot)==null?void 0:n.querySelector("video");a&&(this._attachedStream=i,Xr(a,i),this._detectAspectRatio())}if((e.has("videoMuted")||e.has("_devicesState")||r)&&!this._effectiveMuted){const a=(s=this.shadowRoot)==null?void 0:s.querySelector("video");a&&a.play().catch(()=>{})}}disconnectedCallback(){var i;super.disconnectedCallback();const e=(i=this.shadowRoot)==null?void 0:i.querySelector("video");e&&Ma(e),this._teardownDirect()}_setupDirect(e){this._directSubscriptions.push(e.localStream$.subscribe(i=>this._directLocalStream=i))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directLocalStream=null}_detectAspectRatio(){const e=this._effectiveStream;if(!e)return;const i=e.getVideoTracks()[0];if(!i)return;const r=i.getSettings(),n=r.width,s=r.height;n&&s&&n>0&&s>0&&(this._aspectRatio=`${n} / ${s}`,this.style.setProperty("--sw-local-camera-aspect",this._aspectRatio))}render(){return I`
|
|
282
280
|
<video part="video" autoplay playsinline muted></video>
|
|
283
|
-
${this._effectiveMuted?
|
|
281
|
+
${this._effectiveMuted?I`<div part="placeholder" class="muted-overlay">
|
|
284
282
|
<sw-ui-icon name="camera-off" size="28"></sw-ui-icon>
|
|
285
283
|
</div>`:null}
|
|
286
|
-
`}},l.SwLocalCamera.styles=
|
|
284
|
+
`}},l.SwLocalCamera.styles=ae`
|
|
287
285
|
:host {
|
|
288
286
|
display: block;
|
|
289
287
|
width: 100%;
|
|
@@ -319,13 +317,27 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
319
317
|
.muted-overlay sw-ui-icon {
|
|
320
318
|
color: var(--bg-surface-raised);
|
|
321
319
|
}
|
|
322
|
-
`,
|
|
320
|
+
`,Ut([E({attribute:!1})],l.SwLocalCamera.prototype,"stream",2),Ut([E({type:Boolean,reflect:!0,attribute:"video-muted"})],l.SwLocalCamera.prototype,"videoMuted",2),Ut([E({type:Object})],l.SwLocalCamera.prototype,"call",2),Ut([E({type:Boolean,reflect:!0})],l.SwLocalCamera.prototype,"mirror",2),Ut([nt({context:pt,subscribe:!0}),O()],l.SwLocalCamera.prototype,"_callState",2),Ut([nt({context:vr,subscribe:!0}),O()],l.SwLocalCamera.prototype,"_devicesState",2),Ut([O()],l.SwLocalCamera.prototype,"_directLocalStream",2),Ut([O()],l.SwLocalCamera.prototype,"_aspectRatio",2),l.SwLocalCamera=Ut([le("sw-local-camera")],l.SwLocalCamera);const ut=ae`
|
|
321
|
+
:host {
|
|
322
|
+
text-align: start;
|
|
323
|
+
letter-spacing: normal;
|
|
324
|
+
word-spacing: normal;
|
|
325
|
+
text-transform: none;
|
|
326
|
+
text-indent: 0;
|
|
327
|
+
line-height: normal;
|
|
328
|
+
font-style: normal;
|
|
329
|
+
font-weight: normal;
|
|
330
|
+
font-variant: normal;
|
|
331
|
+
white-space: normal;
|
|
332
|
+
text-shadow: none;
|
|
333
|
+
}
|
|
334
|
+
`;var Yv=Object.defineProperty,Kv=Object.getOwnPropertyDescriptor,mi=(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.SwParticipants=class extends ee{constructor(){super(...arguments),this._directLayoutLayers=[],this._directParticipants=[],this._directSelf=null,this._directSubscriptions=[],this._openMenuId=null,this._handleOutsideClick=e=>{const i=e.target;!i.closest(".menu-trigger")&&!i.closest(".menu-dropdown")&&(this._openMenuId=null)},this._handleEscape=e=>{e.key==="Escape"&&this._openMenuId!==null&&(this._openMenuId=null)}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._handleOutsideClick),document.addEventListener("keydown",this._handleEscape)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._handleOutsideClick),document.removeEventListener("keydown",this._handleEscape),this._teardownDirect()}updated(e){super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._directSubscriptions.push(this.call.layoutLayers$.subscribe(i=>this._directLayoutLayers=i),this.call.participants$.subscribe(i=>this._directParticipants=i),this.call.self$.subscribe(i=>this._directSelf=i)))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directLayoutLayers=[],this._directParticipants=[],this._directSelf=null}_toggleMenu(e,i){i.stopPropagation(),this._openMenuId=this._openMenuId===e?null:e}_getParticipant(e){var r;return(this.call?this._directParticipants:((r=this._callState)==null?void 0:r.participants)??[]).find(n=>n.id===e)}async _handleMuteAudio(e,i){i.stopPropagation();const r=this._getParticipant(e);if(r){try{r.audioMuted?await r.unmute():await r.mute(),this.dispatchEvent(new CustomEvent("sw-participant-mute-audio",{detail:{participant:r,memberId:e},bubbles:!0,composed:!0}))}catch{}this._openMenuId=null}}async _handleMuteVideo(e,i){i.stopPropagation();const r=this._getParticipant(e);if(r){try{r.videoMuted?await r.unmuteVideo():await r.muteVideo(),this.dispatchEvent(new CustomEvent("sw-participant-mute-video",{detail:{participant:r,memberId:e},bubbles:!0,composed:!0}))}catch{}this._openMenuId=null}}async _handleRemove(e,i){i.stopPropagation();const r=this._getParticipant(e);if(r!=null&&r.remove){try{await r.remove(),this.dispatchEvent(new CustomEvent("sw-participant-remove",{detail:{participant:r,memberId:e},bubbles:!0,composed:!0}))}catch{}this._openMenuId=null}}_renderMenuIcon(){return I`
|
|
323
335
|
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
|
324
336
|
<circle cx="12" cy="6" r="2" />
|
|
325
337
|
<circle cx="12" cy="12" r="2" />
|
|
326
338
|
<circle cx="12" cy="18" r="2" />
|
|
327
339
|
</svg>
|
|
328
|
-
`}_renderMenuDropdown(e){const i=this._getParticipant(e),r=this._openMenuId===e;return
|
|
340
|
+
`}_renderMenuDropdown(e){const i=this._getParticipant(e),r=this._openMenuId===e;return I`
|
|
329
341
|
<div
|
|
330
342
|
class="menu-dropdown ${r?"open":""}"
|
|
331
343
|
role="menu"
|
|
@@ -367,9 +379,9 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
367
379
|
transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;
|
|
368
380
|
pointer-events: auto;
|
|
369
381
|
z-index: 10;
|
|
370
|
-
`;return
|
|
382
|
+
`;return I`
|
|
371
383
|
<div class="${n}" part="overlay" style="${s}">
|
|
372
|
-
${i?null:
|
|
384
|
+
${i?null:I`
|
|
373
385
|
<button
|
|
374
386
|
class="menu-trigger"
|
|
375
387
|
part="menu-trigger"
|
|
@@ -384,10 +396,10 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
384
396
|
`}
|
|
385
397
|
<slot name="controls-${r}"></slot>
|
|
386
398
|
</div>
|
|
387
|
-
`}render(){var n,s,a,o;const e=this.call?this._directLayoutLayers:((n=this._callState)==null?void 0:n.layoutLayers)??[],i=this.call?(s=this._directSelf)==null?void 0:s.id:(o=(a=this._callState)==null?void 0:a.self)==null?void 0:o.id,r=e.filter(c=>c.member_id).map(c=>this._renderOverlay(c,c.member_id===i));return
|
|
399
|
+
`}render(){var n,s,a,o;const e=this.call?this._directLayoutLayers:((n=this._callState)==null?void 0:n.layoutLayers)??[],i=this.call?(s=this._directSelf)==null?void 0:s.id:(o=(a=this._callState)==null?void 0:a.self)==null?void 0:o.id,r=e.filter(c=>c.member_id).map(c=>this._renderOverlay(c,c.member_id===i));return I`
|
|
388
400
|
${r}
|
|
389
401
|
<slot></slot>
|
|
390
|
-
`}},l.SwParticipants.styles=
|
|
402
|
+
`}},l.SwParticipants.styles=[ut,ae`
|
|
391
403
|
:host {
|
|
392
404
|
display: contents;
|
|
393
405
|
}
|
|
@@ -500,28 +512,28 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
500
512
|
.menu-item.danger:hover {
|
|
501
513
|
background: rgba(239, 68, 68, 0.2);
|
|
502
514
|
}
|
|
503
|
-
|
|
515
|
+
`],mi([nt({context:pt,subscribe:!0}),O()],l.SwParticipants.prototype,"_callState",2),mi([E({type:Object})],l.SwParticipants.prototype,"call",2),mi([O()],l.SwParticipants.prototype,"_directLayoutLayers",2),mi([O()],l.SwParticipants.prototype,"_directParticipants",2),mi([O()],l.SwParticipants.prototype,"_directSelf",2),mi([O()],l.SwParticipants.prototype,"_openMenuId",2),l.SwParticipants=mi([le("sw-participants")],l.SwParticipants);var Zv=Object.defineProperty,Qv=Object.getOwnPropertyDescriptor,xt=(t,e,i,r)=>{for(var n=r>1?void 0:r?Qv(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Zv(e,i,n),n};const Os=G();l.SwParticipantControls=class extends ee{constructor(){super(...arguments),this.participantId="",this.showVolume=!1,this.showPin=!1,this._directParticipants=[],this._directCapabilities=[],this._directSubscriptions=[],this._volume=100,this._isPinned=!1}updated(e){super.updated(e),e.has("call")&&(this._directSubscriptions.forEach(i=>i.unsubscribe()),this._directSubscriptions=[],this._directParticipants=[],this._directCapabilities=[],this.call&&this._directSubscriptions.push(this.call.participants$.subscribe(i=>this._directParticipants=i),this.call.capabilities$.subscribe(i=>this._directCapabilities=i)))}disconnectedCallback(){super.disconnectedCallback(),this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[]}get _participant(){var i;return(this.call?this._directParticipants:((i=this._callState)==null?void 0:i.participants)??[]).find(r=>r.id===this.participantId)}get _capabilities(){var e;return this.call?this._directCapabilities:((e=this._callState)==null?void 0:e.capabilities)??[]}get _canMuteAudio(){return this._capabilities.includes("memberMuteAudio")}get _canMuteVideo(){return this._capabilities.includes("memberMuteVideo")}get _canRemove(){return this._capabilities.includes("memberRemove")}async _toggleAudioMute(){const e=this._participant;if(e)try{e.audioMuted?await e.unmute():await e.mute()}catch(i){Os.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){Os.error("[ParticipantControls] Toggle video failed:",i)}}async _remove(){const e=this._participant;if(e!=null&&e.remove)try{await e.remove()}catch(i){Os.error("[ParticipantControls] Remove failed:",i)}}_onVolumeChange(e){this._volume=parseInt(e.target.value,10),this.dispatchEvent(new CustomEvent("sw-participant-volume-change",{detail:{participantId:this.participantId,volume:this._volume},bubbles:!0,composed:!0}))}_togglePin(){this._isPinned=!this._isPinned,this.dispatchEvent(new CustomEvent("sw-participant-pin-toggle",{detail:{participantId:this.participantId,pinned:this._isPinned},bubbles:!0,composed:!0}))}render(){const e=this._participant;if(!e)return I`<div class="panel"><div class="empty">Participant not found</div></div>`;const i=this._canMuteAudio||this._canMuteVideo||this._canRemove||this.showVolume||this.showPin;return I`
|
|
504
516
|
<div class="panel" part="panel">
|
|
505
517
|
<div class="name" part="name">${e.name??"Participant"}</div>
|
|
506
518
|
|
|
507
519
|
<div class="actions">
|
|
508
|
-
${i?
|
|
520
|
+
${i?W:I`<div class="empty">No actions available</div>`}
|
|
509
521
|
|
|
510
|
-
${this._canMuteAudio?
|
|
522
|
+
${this._canMuteAudio?I`
|
|
511
523
|
<button class=${e.audioMuted?"active":""} @click=${this._toggleAudioMute}>
|
|
512
524
|
<sw-ui-icon name=${e.audioMuted?"mic-off":"mic-on"} size="14"></sw-ui-icon>
|
|
513
525
|
${e.audioMuted?"Unmute":"Mute"}
|
|
514
526
|
</button>
|
|
515
|
-
`:
|
|
527
|
+
`:W}
|
|
516
528
|
|
|
517
|
-
${this._canMuteVideo?
|
|
529
|
+
${this._canMuteVideo?I`
|
|
518
530
|
<button class=${e.videoMuted?"active":""} @click=${this._toggleVideoMute}>
|
|
519
531
|
<sw-ui-icon name=${e.videoMuted?"camera-off":"camera-on"} size="14"></sw-ui-icon>
|
|
520
532
|
${e.videoMuted?"Enable video":"Disable video"}
|
|
521
533
|
</button>
|
|
522
|
-
`:
|
|
534
|
+
`:W}
|
|
523
535
|
|
|
524
|
-
${this.showVolume?
|
|
536
|
+
${this.showVolume?I`
|
|
525
537
|
<div class="volume-control">
|
|
526
538
|
<label class="volume-label">
|
|
527
539
|
<sw-ui-icon name="speaker-on" size="14"></sw-ui-icon>
|
|
@@ -535,24 +547,24 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
535
547
|
@input=${this._onVolumeChange}
|
|
536
548
|
/>
|
|
537
549
|
</div>
|
|
538
|
-
`:
|
|
550
|
+
`:W}
|
|
539
551
|
|
|
540
|
-
${this.showPin?
|
|
552
|
+
${this.showPin?I`
|
|
541
553
|
<button class=${this._isPinned?"active":""} @click=${this._togglePin}>
|
|
542
554
|
<sw-ui-icon name="settings" size="14"></sw-ui-icon>
|
|
543
555
|
${this._isPinned?"Unpin":"Pin"}
|
|
544
556
|
</button>
|
|
545
|
-
`:
|
|
557
|
+
`:W}
|
|
546
558
|
|
|
547
|
-
${this._canRemove?
|
|
559
|
+
${this._canRemove?I`
|
|
548
560
|
<button class="danger" @click=${this._remove}>
|
|
549
561
|
<sw-ui-icon name="close" size="14"></sw-ui-icon>
|
|
550
562
|
Remove
|
|
551
563
|
</button>
|
|
552
|
-
`:
|
|
564
|
+
`:W}
|
|
553
565
|
</div>
|
|
554
566
|
</div>
|
|
555
|
-
`}},l.SwParticipantControls.styles=
|
|
567
|
+
`}},l.SwParticipantControls.styles=[ut,ae`
|
|
556
568
|
:host {
|
|
557
569
|
display: block;
|
|
558
570
|
font-family: var(--type-family-body);
|
|
@@ -673,7 +685,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
673
685
|
text-align: center;
|
|
674
686
|
padding: 6px;
|
|
675
687
|
}
|
|
676
|
-
|
|
688
|
+
`],xt([E({type:String,attribute:"participant-id"})],l.SwParticipantControls.prototype,"participantId",2),xt([E({type:Boolean,reflect:!0,attribute:"show-volume"})],l.SwParticipantControls.prototype,"showVolume",2),xt([E({type:Boolean,reflect:!0,attribute:"show-pin"})],l.SwParticipantControls.prototype,"showPin",2),xt([nt({context:pt,subscribe:!0}),O()],l.SwParticipantControls.prototype,"_callState",2),xt([E({type:Object})],l.SwParticipantControls.prototype,"call",2),xt([O()],l.SwParticipantControls.prototype,"_directParticipants",2),xt([O()],l.SwParticipantControls.prototype,"_directCapabilities",2),xt([O()],l.SwParticipantControls.prototype,"_volume",2),xt([O()],l.SwParticipantControls.prototype,"_isPinned",2),l.SwParticipantControls=xt([le("sw-participant-controls")],l.SwParticipantControls);var Jv=Object.defineProperty,$v=Object.getOwnPropertyDescriptor,Dt=(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};const wn=G();l.SwAudioLevel=class extends ee{constructor(){super(...arguments),this._directLocalStream=null,this._directSubscriptions=[],this.bars=5,this.orientation="vertical",this.autoRequest=!1,this.maxSize=32,this._levels=[],this._ownsStream=!1,this._micRequested=!1}get _effectiveStream(){var e;return this.stream?this.stream:this.call?this._directLocalStream??void 0:((e=this._callState)==null?void 0:e.localStream)??void 0}connectedCallback(){super.connectedCallback(),this._levels=new Array(this.bars).fill(0);const e=this._effectiveStream;this.autoRequest&&!e?this._requestMicStream():e&&(this._activeStream=e,this.setupAudioAnalysis())}updated(e){if(super.updated(e),e.has("call")&&(this._directSubscriptions.forEach(r=>r.unsubscribe()),this._directSubscriptions=[],this._directLocalStream=null,this.call&&this._directSubscriptions.push(this.call.localStream$.subscribe(r=>this._directLocalStream=r))),e.has("autoRequest")&&this.autoRequest&&!this._effectiveStream&&this._requestMicStream(),e.has("stream")||e.has("call")||e.has("_directLocalStream")||e.has("_callState")){const r=this._effectiveStream;r!==this._activeStream&&(this.cleanupAudioAnalysis(),this._activeStream=r,r&&this.setupAudioAnalysis())}e.has("bars")&&(this._levels=new Array(this.bars).fill(0))}disconnectedCallback(){super.disconnectedCallback(),this.cleanupAudioAnalysis(),this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[]}releaseResources(){this.cleanupAudioAnalysis(),this.stream=void 0}_requestMicStream(){this._micRequested||(this._micRequested=!0,navigator.mediaDevices.getUserMedia({audio:!0}).then(e=>{if(!this.isConnected){e.getTracks().forEach(i=>i.stop());return}this._ownsStream=!0,this.stream=e}).catch(e=>{this._micRequested=!1,wn.error("[SwAudioLevel] Failed to acquire microphone:",e)}))}setupAudioAnalysis(){const e=this._activeStream??this._effectiveStream;if(!e)return;if(e.getAudioTracks().length===0){wn.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){wn.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=>wn.error("[SwAudioLevel] Close failed:",e)),this._audioContext=void 0),this._ownsStream&&this.stream&&(this.stream.getTracks().forEach(e=>e.stop()),this._ownsStream=!1),this._activeStream=void 0,this._micRequested=!1,this._dataArray=void 0,this._levels=new Array(this.bars).fill(0)}startAnimationLoop(){const e=()=>{const i=this._analyser,r=this._dataArray;if(!i||!r)return;i.getByteFrequencyData(r);const n=[],s=r.length,a=Math.floor(s/this.bars);for(let o=0;o<this.bars;o++){const c=o*a,u=Math.min(c+a,s);let h=0;for(let v=c;v<u;v++)h+=r[v]??0;const p=h/(u-c);n.push(p/255)}this._levels=n,this.requestUpdate(),this._animationFrameId=requestAnimationFrame(e)};this._animationFrameId=requestAnimationFrame(e)}getLevelClass(e){return e>.7?"level-high":e>.4?"level-medium":e>.05?"level-low":""}isActive(e){return e>.05}render(){const e=this._levels.length===this.bars?this._levels:new Array(this.bars).fill(0),i=e.reduce((n,s)=>Math.max(n,s),0),r=Math.round(i*100);return I`
|
|
677
689
|
<div
|
|
678
690
|
class="container"
|
|
679
691
|
part="container"
|
|
@@ -683,7 +695,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
683
695
|
aria-valuemax="100"
|
|
684
696
|
aria-valuenow=${r}
|
|
685
697
|
>
|
|
686
|
-
${e.map((n,s)=>{const a=this.isActive(n),o=this.getLevelClass(n),c=Math.max(4,n*this.maxSize),u=this.orientation==="horizontal"?`width: ${c}px;`:`height: ${c}px;`;return
|
|
698
|
+
${e.map((n,s)=>{const a=this.isActive(n),o=this.getLevelClass(n),c=Math.max(4,n*this.maxSize),u=this.orientation==="horizontal"?`width: ${c}px;`:`height: ${c}px;`;return I`
|
|
687
699
|
<div
|
|
688
700
|
class="bar ${a?"active":""} ${o}"
|
|
689
701
|
part="bar ${a?"bar-active":""}"
|
|
@@ -693,7 +705,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
693
705
|
></div>
|
|
694
706
|
`})}
|
|
695
707
|
</div>
|
|
696
|
-
`}},l.SwAudioLevel.styles=
|
|
708
|
+
`}},l.SwAudioLevel.styles=ae`
|
|
697
709
|
:host {
|
|
698
710
|
--sw-audio-bar-width: 4px;
|
|
699
711
|
--sw-audio-bar-gap: 2px;
|
|
@@ -754,7 +766,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
754
766
|
.bar.level-high {
|
|
755
767
|
background-color: var(--interactive-button-destructive-bg);
|
|
756
768
|
}
|
|
757
|
-
`,
|
|
769
|
+
`,Dt([E({type:Object})],l.SwAudioLevel.prototype,"stream",2),Dt([E({type:Object})],l.SwAudioLevel.prototype,"call",2),Dt([nt({context:pt,subscribe:!0}),O()],l.SwAudioLevel.prototype,"_callState",2),Dt([O()],l.SwAudioLevel.prototype,"_directLocalStream",2),Dt([E({type:Number})],l.SwAudioLevel.prototype,"bars",2),Dt([E({type:String,reflect:!0})],l.SwAudioLevel.prototype,"orientation",2),Dt([E({type:Boolean,reflect:!0,attribute:"auto-request"})],l.SwAudioLevel.prototype,"autoRequest",2),Dt([E({type:Number})],l.SwAudioLevel.prototype,"maxSize",2),Dt([O()],l.SwAudioLevel.prototype,"_levels",2),l.SwAudioLevel=Dt([le("sw-audio-level")],l.SwAudioLevel);var eb=Object.defineProperty,tb=Object.getOwnPropertyDescriptor,dt=(t,e,i,r)=>{for(var n=r>1?void 0:r?tb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&eb(e,i,n),n};const kr=G();l.SwCallControls=class extends ee{constructor(){super(...arguments),this._directSelf=null,this._directSubscriptions=[],this._fullscreen=!1,this.showScreenShare=!0,this.showHandRaise=!0,this.showTranscript=!1,this.transcriptActive=!1,this.showSettings=!0,this.showFullscreen=!0}updated(e){super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._directSubscriptions.push(this.call.self$.subscribe(i=>this._directSelf=i)))}disconnectedCallback(){super.disconnectedCallback(),this._teardownDirect()}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directSelf=null}get _effectiveSelf(){var e;return this.call?this._directSelf:((e=this._callState)==null?void 0:e.self)??null}_toDropupOptions(e,i){const r=new Set,n=[];for(const s of e){const a=s.deviceId||`__default_${s.kind}`;r.has(a)||(r.add(a),n.push({id:a,label:s.label||(s.deviceId?s.deviceId.slice(0,12):"Default"),selected:s.deviceId===(i==null?void 0:i.deviceId)}))}return n}_onMicToggle(){var e;(e=this._devices)==null||e.toggleAudioMute()}_onCameraToggle(){var e;(e=this._devices)==null||e.toggleVideoMute()}_onSpeakerToggle(){var e;(e=this._devices)==null||e.toggleSpeakerMute()}_onFullscreenToggle(e){this._fullscreen=e.detail.fullscreen}_onScreenShareToggle(e){const i=this._effectiveSelf;i&&(e.detail.active?i.startScreenShare().catch(r=>{kr.error("[CallControls] Screen share failed:",r)}):i.stopScreenShare().catch(r=>{kr.error("[CallControls] Stop screen share failed:",r)}))}_onHandRaiseToggle(e){const i=this._effectiveSelf;i&&i.toggleHandraise().catch(r=>{kr.error("[CallControls] Hand raise failed:",r)})}_onHangUp(){var i;const e=this.call?()=>this.call.hangup():(i=this._callState)==null?void 0:i.hangup;e==null||e().catch(r=>{kr.error("[CallControls] Hangup failed:",r)}),this.dispatchEvent(new CustomEvent("sw-call-hangup",{bubbles:!0,composed:!0}))}_onDeviceChange(e){if(!this._devices)return;const{kind:i,deviceId:r}=e.detail,n=s=>s.find(a=>a.deviceId===r)??null;i==="mic"&&this._devices.selectAudioInput(n(this._devices.audioInputDevices)),i==="camera"&&this._devices.selectVideoInput(n(this._devices.videoInputDevices)),i==="speaker"&&this._devices.selectAudioOutput(n(this._devices.audioOutputDevices))}_onSettingsChange(e){if(!this._devices)return;const{settingId:i}=e.detail,n={"echo-cancellation":()=>this._devices.toggleEchoCancellation(),"auto-gain":()=>this._devices.toggleAutoGain(),"noise-suppression":()=>this._devices.toggleNoiseSuppression()}[i];n&&n().catch(s=>kr.error("[CallControls] Settings toggle failed:",s))}_buildSettingsItems(){return[{id:"echo-cancellation",label:"Echo Cancellation",selected:this._devices.echoCancellation},{id:"auto-gain",label:"Auto Gain",selected:this._devices.autoGain},{id:"noise-suppression",label:"Noise Suppression",selected:this._devices.noiseSuppression}]}render(){if(!this._devices&&!this.call)return I``;const e=this._effectiveSelf,i=(e==null?void 0:e.screenShareStatus)==="started",r=(e==null?void 0:e.handraised)??!1,n=this._devices;return I`
|
|
758
770
|
<sw-ui-control-bar
|
|
759
771
|
exportparts="bar,logo,button,chevron"
|
|
760
772
|
.micMuted=${(n==null?void 0:n.audioMuted)??!1}
|
|
@@ -783,19 +795,19 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
783
795
|
@sw-device-change=${this._onDeviceChange}
|
|
784
796
|
@sw-settings-change=${this._onSettingsChange}
|
|
785
797
|
></sw-ui-control-bar>
|
|
786
|
-
`}},l.SwCallControls.styles=
|
|
798
|
+
`}},l.SwCallControls.styles=ae`
|
|
787
799
|
:host {
|
|
788
800
|
display: block;
|
|
789
801
|
}
|
|
790
|
-
`,
|
|
802
|
+
`,dt([nt({context:vr,subscribe:!0}),O()],l.SwCallControls.prototype,"_devices",2),dt([nt({context:pt,subscribe:!0}),O()],l.SwCallControls.prototype,"_callState",2),dt([E({type:Object})],l.SwCallControls.prototype,"call",2),dt([O()],l.SwCallControls.prototype,"_directSelf",2),dt([O()],l.SwCallControls.prototype,"_fullscreen",2),dt([E({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwCallControls.prototype,"showScreenShare",2),dt([E({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwCallControls.prototype,"showHandRaise",2),dt([E({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwCallControls.prototype,"showTranscript",2),dt([E({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwCallControls.prototype,"transcriptActive",2),dt([E({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwCallControls.prototype,"showSettings",2),dt([E({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwCallControls.prototype,"showFullscreen",2),l.SwCallControls=dt([le("sw-call-controls")],l.SwCallControls);var ib=Object.defineProperty,rb=Object.getOwnPropertyDescriptor,Gi=(t,e,i,r)=>{for(var n=r>1?void 0:r?rb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&ib(e,i,n),n};l.SwCallStatus=class extends ee{constructor(){super(...arguments),this._directStatus=null,this._callStartTime=null,this._duration="0:00",this._durationInterval=null,this._prevStatus="new",this._directSubscriptions=[]}get _effectiveStatus(){var e;return this.call?this._directStatus??"new":((e=this._callState)==null?void 0:e.status)??"new"}updated(e){if(super.updated(e),e.has("call")&&(this._teardownDirect(),this.call&&this._setupDirect(this.call)),e.has("call")||e.has("_callState")||e.has("_directStatus")){const i=this._effectiveStatus;i!==this._prevStatus&&(i==="connected"&&this._prevStatus!=="connected"?this._startDurationTimer():i!=="connected"&&this._stopDurationTimer(),this._prevStatus=i)}}disconnectedCallback(){super.disconnectedCallback(),this._stopDurationTimer(),this._teardownDirect()}_setupDirect(e){this._directSubscriptions.push(e.status$.subscribe(i=>{this._directStatus=i}))}_teardownDirect(){this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[],this._directStatus=null}_startDurationTimer(){this._callStartTime=Date.now(),this._duration="0:00",this._durationInterval=window.setInterval(()=>{if(this._callStartTime){const e=Math.floor((Date.now()-this._callStartTime)/1e3),i=Math.floor(e/3600),r=Math.floor(e%3600/60),n=e%60;this._duration=i>0?`${i}:${r.toString().padStart(2,"0")}:${n.toString().padStart(2,"0")}`:`${r}:${n.toString().padStart(2,"0")}`}},1e3)}_stopDurationTimer(){this._durationInterval&&(clearInterval(this._durationInterval),this._durationInterval=null),this._callStartTime=null,this._duration="0:00"}getStatusText(){const e=this._effectiveStatus;switch(e){case"new":return"Ready";case"trying":return"Trying...";case"connecting":return"Connecting...";case"ringing":return"Ringing...";case"connected":return"Connected";case"recovering":return"Reconnecting...";case"disconnecting":return"Disconnecting...";case"disconnected":return"Disconnected";case"failed":return"Failed";case"destroyed":return"Ended";default:return String(e)}}render(){const e=this._effectiveStatus,i=this.getStatusText();return I`
|
|
791
803
|
<div class="container" part="container">
|
|
792
804
|
<span class="status-indicator ${e}" aria-hidden="true"></span>
|
|
793
805
|
<span class="status-text ${e}" part="status-text" role="status" aria-live="polite">
|
|
794
806
|
${i}
|
|
795
807
|
</span>
|
|
796
|
-
${e==="connected"?
|
|
808
|
+
${e==="connected"?I`<span class="duration" part="duration">${this._duration}</span>`:null}
|
|
797
809
|
</div>
|
|
798
|
-
`}},l.SwCallStatus.styles=
|
|
810
|
+
`}},l.SwCallStatus.styles=[ut,ae`
|
|
799
811
|
:host {
|
|
800
812
|
display: inline-flex;
|
|
801
813
|
align-items: center;
|
|
@@ -887,7 +899,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
887
899
|
opacity: 0.6;
|
|
888
900
|
font-size: 0.85em;
|
|
889
901
|
}
|
|
890
|
-
|
|
902
|
+
`],Gi([E({type:Object})],l.SwCallStatus.prototype,"call",2),Gi([nt({context:pt,subscribe:!0}),O()],l.SwCallStatus.prototype,"_callState",2),Gi([O()],l.SwCallStatus.prototype,"_directStatus",2),Gi([O()],l.SwCallStatus.prototype,"_callStartTime",2),Gi([O()],l.SwCallStatus.prototype,"_duration",2),l.SwCallStatus=Gi([le("sw-call-status")],l.SwCallStatus);const yi=()=>Promise.resolve(),Wc=()=>{},Gc=Object.freeze({id:"",direction:"outbound",to:void 0,status:"new",recording:!1,streaming:!1,locked:!1,raiseHandPriority:!1,meta:Object.freeze({}),participants:Object.freeze([]),self:null,remoteStream:null,localStream:null,mediaDirections:Object.freeze({audio:"inactive",video:"inactive"}),layout:void 0,layouts:Object.freeze([]),layoutLayers:Object.freeze([]),address:void 0,capabilities:Object.freeze([]),hangup:yi,toggleLock:yi,toggleHold:yi,setLayout:yi,startRecording:yi,startStreaming:yi,sendDigits:yi,answer:Wc,reject:Wc});class Ls{constructor(e){this._subscriptions=[],this._state={...Gc},this._batching=!1,this._provider=new Zn(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({...Gc})}_patch(e){this._state={...this._state,...e},this._batching||this._publish()}_publish(){this._provider.setValue(this._state)}}const Ie=()=>Promise.resolve(),qc=Object.freeze({audioInputDevices:Object.freeze([]),audioOutputDevices:Object.freeze([]),videoInputDevices:Object.freeze([]),selectedAudioInput:null,selectedAudioOutput:null,selectedVideoInput:null,audioMuted:!1,videoMuted:!1,speakerMuted:!1,selectAudioInput:()=>{},selectAudioOutput:()=>{},selectVideoInput:()=>{},toggleAudioMute:Ie,toggleVideoMute:Ie,toggleSpeakerMute:Ie,echoCancellation:!0,autoGain:!0,noiseSuppression:!0,toggleEchoCancellation:Ie,toggleAutoGain:Ie,toggleNoiseSuppression:Ie});class Fs{constructor(e){this._dc=null,this._deviceSubs=[],this._callSubs=[],this._state={...qc},this._provider=new Zn(e,{context:vr,initialValue:this._state}),e.addController(this)}hostConnected(){}hostDisconnected(){this.disconnect()}connectDevices(e){this._dc=e,this._deviceSubs.forEach(i=>i.unsubscribe()),this._patch({selectAudioInput:i=>e.selectAudioInputDevice(i),selectAudioOutput:i=>e.selectAudioOutputDevice(i),selectVideoInput:i=>e.selectVideoInputDevice(i)}),this._deviceSubs=[e.audioInputDevices$.subscribe(i=>this._patch({audioInputDevices:i})),e.audioOutputDevices$.subscribe(i=>this._patch({audioOutputDevices:i})),e.videoInputDevices$.subscribe(i=>this._patch({videoInputDevices:i})),e.selectedAudioInputDevice$.subscribe(i=>this._patch({selectedAudioInput:i})),e.selectedAudioOutputDevice$.subscribe(i=>this._patch({selectedAudioOutput:i})),e.selectedVideoInputDevice$.subscribe(i=>this._patch({selectedVideoInput:i}))],e.enableDeviceMonitoring()}refreshDevices(){this._dc&&this._dc.enableDeviceMonitoring()}connectCall(e){this.disconnectCall();const i=e.self$.subscribe(u=>{this._patch({toggleAudioMute:u?()=>u.toggleMute():Ie,toggleVideoMute:u?()=>u.toggleMuteVideo():Ie,toggleSpeakerMute:u?()=>u.toggleDeaf():Ie,toggleEchoCancellation:u?()=>u.toggleEchoCancellation():Ie,toggleAutoGain:u?()=>u.toggleAudioInputAutoGain():Ie,toggleNoiseSuppression:u?()=>u.toggleNoiseSuppression():Ie})}),r=e.self$.pipe(Je(u=>u?u.audioMuted$:Ct(!1))).subscribe(u=>this._patch({audioMuted:u})),n=e.self$.pipe(Je(u=>u?u.videoMuted$:Ct(!1))).subscribe(u=>this._patch({videoMuted:u})),s=e.self$.pipe(Je(u=>u?u.deaf$:Ct(!1))).subscribe(u=>this._patch({speakerMuted:u})),a=e.self$.pipe(Je(u=>u?u.echoCancellation$:Ct(!0))).subscribe(u=>this._patch({echoCancellation:u})),o=e.self$.pipe(Je(u=>u?u.autoGain$:Ct(!0))).subscribe(u=>this._patch({autoGain:u})),c=e.self$.pipe(Je(u=>u?u.noiseSuppression$:Ct(!0))).subscribe(u=>this._patch({noiseSuppression:u}));this._callSubs=[i,r,n,s,a,o,c]}disconnectCall(){this._callSubs.forEach(e=>e.unsubscribe()),this._callSubs=[],this._patch({audioMuted:!1,videoMuted:!1,speakerMuted:!1,toggleAudioMute:Ie,toggleVideoMute:Ie,toggleSpeakerMute:Ie,echoCancellation:!0,autoGain:!0,noiseSuppression:!0,toggleEchoCancellation:Ie,toggleAutoGain:Ie,toggleNoiseSuppression:Ie})}disconnect(){this._deviceSubs.forEach(e=>e.unsubscribe()),this._deviceSubs=[],this.disconnectCall(),this._patch({...qc})}_patch(e){this._state={...this._state,...e},this._provider.setValue(this._state)}}var nb=Object.defineProperty,sb=Object.getOwnPropertyDescriptor,Ns=(t,e,i,r)=>{for(var n=r>1?void 0:r?sb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&nb(e,i,n),n};l.SwCallProvider=class extends ee{constructor(){super(...arguments),this.call=void 0,this.deviceController=void 0,this._callState=new Ls(this),this._devices=new Fs(this)}updated(e){super.updated(e),e.has("call")&&(this.call?(this._callState.connect(this.call),this._devices.connectCall(this.call)):(this._callState.disconnect(),this._devices.disconnectCall())),e.has("deviceController")&&this.deviceController&&this._devices.connectDevices(this.deviceController)}disconnectedCallback(){super.disconnectedCallback(),this._callState.disconnect(),this._devices.disconnect()}render(){return I`<slot></slot>`}},l.SwCallProvider.styles=ae`:host { display: contents; }`,Ns([E({attribute:!1})],l.SwCallProvider.prototype,"call",2),Ns([E({attribute:!1})],l.SwCallProvider.prototype,"deviceController",2),l.SwCallProvider=Ns([le("sw-call-provider")],l.SwCallProvider);var ab=Object.defineProperty,ob=Object.getOwnPropertyDescriptor,qi=(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&&ab(e,i,n),n};const cb=/^[0-9*#]$/,lb=500,ub=[{digit:"1",letters:""},{digit:"2",letters:"ABC"},{digit:"3",letters:"DEF"},{digit:"4",letters:"GHI"},{digit:"5",letters:"JKL"},{digit:"6",letters:"MNO"},{digit:"7",letters:"PQRS"},{digit:"8",letters:"TUV"},{digit:"9",letters:"WXYZ"},{digit:"*",letters:""},{digit:"0",letters:"+"},{digit:"#",letters:""}];l.SwUiDialpad=class extends ee{constructor(){super(...arguments),this.showCallButton=!1,this.allowText=!1,this.placeholder="Enter number",this.digits="",this.pressedKey=null,this._longPressTimer=null,this._longPressFired=!1}_startLongPress(e){this._cancelLongPress(),this._longPressFired=!1,this._longPressTimer=setTimeout(()=>{this._longPressFired=!0,this._longPressTimer=null,e()},lb)}_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}cb.test(i)?(e.preventDefault(),this._pressDigit(i)):i==="Backspace"?(e.preventDefault(),this._backspace()):i==="Enter"&&this.showCallButton?(e.preventDefault(),this._dial()):i!=="Tab"&&!e.ctrlKey&&!e.metaKey&&e.preventDefault()}_onInput(e){if(!this.allowText)return;const i=e.target.value;this.digits=i,this.dispatchEvent(new CustomEvent("sw-dialpad-input",{detail:{digits:this.digits},bubbles:!0,composed:!0}))}render(){return I`
|
|
891
903
|
<div class="container" part="container">
|
|
892
904
|
<div class="display" part="display">
|
|
893
905
|
<input
|
|
@@ -914,7 +926,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
914
926
|
</div>
|
|
915
927
|
|
|
916
928
|
<div class="keypad" part="keypad" role="group" aria-label="Telephone keypad">
|
|
917
|
-
${
|
|
929
|
+
${ub.map(e=>I`
|
|
918
930
|
<button
|
|
919
931
|
class="key ${this.pressedKey===e.digit?"pressed":""}"
|
|
920
932
|
part="key ${this.pressedKey===e.digit?"key-pressed":""}"
|
|
@@ -931,7 +943,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
931
943
|
`)}
|
|
932
944
|
</div>
|
|
933
945
|
|
|
934
|
-
${this.showCallButton?
|
|
946
|
+
${this.showCallButton?I`
|
|
935
947
|
<button
|
|
936
948
|
class="call-button"
|
|
937
949
|
part="call-button"
|
|
@@ -943,7 +955,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
943
955
|
</button>
|
|
944
956
|
`:null}
|
|
945
957
|
</div>
|
|
946
|
-
`}},l.SwUiDialpad.styles=
|
|
958
|
+
`}},l.SwUiDialpad.styles=[ut,ae`
|
|
947
959
|
:host {
|
|
948
960
|
--sw-dialpad-display-size: 32px;
|
|
949
961
|
--sw-dialpad-key-size: 24px;
|
|
@@ -1107,7 +1119,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1107
1119
|
.call-button sw-ui-icon {
|
|
1108
1120
|
pointer-events: none;
|
|
1109
1121
|
}
|
|
1110
|
-
|
|
1122
|
+
`],qi([E({type:Boolean,reflect:!0,attribute:"show-call-button"})],l.SwUiDialpad.prototype,"showCallButton",2),qi([E({type:Boolean,reflect:!0,attribute:"allow-text"})],l.SwUiDialpad.prototype,"allowText",2),qi([E({type:String})],l.SwUiDialpad.prototype,"placeholder",2),qi([O()],l.SwUiDialpad.prototype,"digits",2),qi([O()],l.SwUiDialpad.prototype,"pressedKey",2),l.SwUiDialpad=qi([le("sw-ui-dialpad")],l.SwUiDialpad);var db=Object.defineProperty,hb=Object.getOwnPropertyDescriptor,wi=(t,e,i,r)=>{for(var n=r>1?void 0:r?hb(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&&db(e,i,n),n};const pb=G();l.SwCallDialpad=class extends ee{constructor(){super(...arguments),this._directStatus=null,this._directSubscriptions=[],this.showCallButton=!1,this.allowText=!1,this.placeholder="Enter number"}updated(e){super.updated(e),e.has("call")&&(this._directSubscriptions.forEach(i=>i.unsubscribe()),this._directSubscriptions=[],this._directStatus=null,this.call&&this._directSubscriptions.push(this.call.status$.subscribe(i=>this._directStatus=i)))}disconnectedCallback(){super.disconnectedCallback(),this._directSubscriptions.forEach(e=>e.unsubscribe()),this._directSubscriptions=[]}_onDigitPress(e){var s,a;const{digit:i}=e.detail;if((this.call?this._directStatus:(s=this._callState)==null?void 0:s.status)!=="connected")return;const n=this.call?o=>this.call.sendDigits(o):(a=this._callState)==null?void 0:a.sendDigits;n==null||n(i).catch(o=>{pb.error("Failed to send DTMF:",o)})}render(){return I`
|
|
1111
1123
|
<sw-ui-dialpad
|
|
1112
1124
|
exportparts="container,display,keypad,key,key-pressed,call-button"
|
|
1113
1125
|
?show-call-button=${this.showCallButton}
|
|
@@ -1115,7 +1127,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1115
1127
|
placeholder=${this.placeholder}
|
|
1116
1128
|
@sw-digit-press=${this._onDigitPress}
|
|
1117
1129
|
></sw-ui-dialpad>
|
|
1118
|
-
`}},
|
|
1130
|
+
`}},wi([nt({context:pt,subscribe:!0}),O()],l.SwCallDialpad.prototype,"_callState",2),wi([E({type:Object})],l.SwCallDialpad.prototype,"call",2),wi([O()],l.SwCallDialpad.prototype,"_directStatus",2),wi([E({type:Boolean,reflect:!0,attribute:"show-call-button"})],l.SwCallDialpad.prototype,"showCallButton",2),wi([E({type:Boolean,reflect:!0,attribute:"allow-text"})],l.SwCallDialpad.prototype,"allowText",2),wi([E({type:String})],l.SwCallDialpad.prototype,"placeholder",2),l.SwCallDialpad=wi([le("sw-call-dialpad")],l.SwCallDialpad);const Xc="transcript";class Yc{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 Kc=G(),gb=["ai.partial_result","ai.speech_detect","ai.response_utterance","ai.completion"];function fb(t){return t.replace(/\s*\{confidence=[\d.]+\}\s*/g,"").trim()}function Sn(t){return typeof t=="string"?t:""}class xr{constructor(e){this._chat=new Yc,this._injected=[],this._subscriptions=[],this._host=e,this._provider=new Zn(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 gb){const r=e.subscribe(i).subscribe({next:n=>{try{this._route(i,this._extractParams(n))}catch(s){Kc.warn(`[TranscriptController] handler for ${i} threw`,s)}},error:n=>{Kc.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(Sn(i.text));break;case"ai.speech_detect":{const r=fb(Sn(i.text));this._chat.onUserComplete(r);break}case"ai.response_utterance":{const r=Sn(i.utterance??i.text);this._chat.onAiChunk(xr._stripVoiceDirectives(r));break}case"ai.completion":{const r=Sn(i.text);this._chat.onAiComplete(xr._stripVoiceDirectives(r),i.type==="barged");break}}}_teardownSubscriptions(){for(const e of this._subscriptions)try{e.unsubscribe()}catch{}this._subscriptions=[]}static _stripVoiceDirectives(e){const i=/\s*~[A-Z]+\(.*?\)-;\s*/i.exec(e);if(!i)return e.trim();const r=e.slice(0,i.index).trim(),n=e.slice(i.index+i[0].length).trim();return(r||n).trim()}_toTranscriptEntry(e,i){return{id:`chat-${i}-${e.speaker}-${e.state}`,type:e.speaker==="ai"?"agent":"user",state:e.state,text:e.text}}_publish(){const i=[...this._chat.getHistory().map((r,n)=>this._toTranscriptEntry(r,n)),...this._injected];this._provider.setValue({entries:i}),this._host.requestUpdate()}}const vb=G(),bb="user_event",mb=["text","markdown","code","html"];function yb(t){return mb.includes(t)?t:"text"}class Zc{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(bb).subscribe(r=>{vb.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:yb(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 wb=Object.defineProperty,Sb=Object.getOwnPropertyDescriptor,Dr=(t,e,i,r)=>{for(var n=r>1?void 0:r?Sb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&wb(e,i,n),n};l.SwUiCallLayout=class extends ee{constructor(){super(...arguments),this.transcript=!1,this.loading=!1,this.shadow=!1,this._fullscreen=!1,this._onFullscreenChange=()=>{const e=document.fullscreenElement===this;this._fullscreen!==e&&(this._fullscreen=e,e?this.setAttribute("fullscreen",""):this.removeAttribute("fullscreen"))}}get fullscreen(){return this._fullscreen}toggleTranscript(){this.transcript=!this.transcript}toggleFullscreen(){document.fullscreenElement?document.exitFullscreen().catch(()=>{}):this.requestFullscreen().catch(()=>{})}connectedCallback(){super.connectedCallback(),document.addEventListener("fullscreenchange",this._onFullscreenChange)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("fullscreenchange",this._onFullscreenChange)}render(){return I`
|
|
1119
1131
|
<div class="root">
|
|
1120
1132
|
<div class="video">
|
|
1121
1133
|
<slot name="background"></slot>
|
|
@@ -1125,13 +1137,13 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1125
1137
|
<div class="floating-video">
|
|
1126
1138
|
<slot name="floating-video"></slot>
|
|
1127
1139
|
</div>
|
|
1128
|
-
${this.loading?
|
|
1140
|
+
${this.loading?I`<div class="loading-overlay">
|
|
1129
1141
|
<sw-ui-icon
|
|
1130
1142
|
class="spinner"
|
|
1131
1143
|
name="spinner"
|
|
1132
1144
|
.size=${48}
|
|
1133
1145
|
></sw-ui-icon>
|
|
1134
|
-
</div>`:
|
|
1146
|
+
</div>`:W}
|
|
1135
1147
|
</div>
|
|
1136
1148
|
<div class="controls">
|
|
1137
1149
|
<slot name="controls"></slot>
|
|
@@ -1142,7 +1154,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1142
1154
|
</div>
|
|
1143
1155
|
</div>
|
|
1144
1156
|
</div>
|
|
1145
|
-
`}},l.SwUiCallLayout.styles=
|
|
1157
|
+
`}},l.SwUiCallLayout.styles=ae`
|
|
1146
1158
|
/* ================================================================== *
|
|
1147
1159
|
* HOST *
|
|
1148
1160
|
* ================================================================== */
|
|
@@ -1337,7 +1349,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1337
1349
|
display: none;
|
|
1338
1350
|
}
|
|
1339
1351
|
}
|
|
1340
|
-
`,
|
|
1352
|
+
`,Dr([E({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"transcript",2),Dr([E({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"loading",2),Dr([E({type:Boolean,reflect:!0})],l.SwUiCallLayout.prototype,"shadow",2),Dr([O()],l.SwUiCallLayout.prototype,"_fullscreen",2),l.SwUiCallLayout=Dr([le("sw-ui-call-layout")],l.SwUiCallLayout);var Cb=Object.getOwnPropertyDescriptor,Ab=(t,e,i,r)=>{for(var n=r>1?void 0:r?Cb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=a(n)||n);return n};l.SwUiResponsiveContainer=class extends ee{render(){return I`<div class="container"><slot></slot></div>`}},l.SwUiResponsiveContainer.styles=ae`
|
|
1341
1353
|
.container {
|
|
1342
1354
|
margin: 0 auto;
|
|
1343
1355
|
|
|
@@ -1395,9 +1407,9 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1395
1407
|
max-height: 90vh;
|
|
1396
1408
|
}
|
|
1397
1409
|
}
|
|
1398
|
-
`,l.SwUiResponsiveContainer=
|
|
1410
|
+
`,l.SwUiResponsiveContainer=Ab([le("sw-ui-responsive-container")],l.SwUiResponsiveContainer);var Tb=Object.defineProperty,Eb=Object.getOwnPropertyDescriptor,Us=(t,e,i,r)=>{for(var n=r>1?void 0:r?Eb(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&&Tb(e,i,n),n};l.SwUiModal=class extends ee{constructor(){super(...arguments),this.open=!1,this._savedOverflow=null,this._handleCancel=e=>{e.preventDefault(),this._requestClose()},this._handleBackdropClick=e=>{e.target===this.dialog&&this._requestClose()}}updated(e){e.has("open")&&(this.open?(this._savedOverflow=document.body.style.overflow,this.dialog.showModal(),document.body.style.overflow="hidden"):this.dialog.open&&this._animateClose())}_animateClose(){this.dialog.classList.add("closing");const e=i=>{i.target===this.dialog&&(this.dialog.removeEventListener("animationend",e),this.dialog.classList.remove("closing"),this.dialog.close(),this._savedOverflow!==null&&(document.body.style.overflow=this._savedOverflow,this._savedOverflow=null))};this.dialog.addEventListener("animationend",e)}_requestClose(){const e=new CustomEvent("sw-modal-close",{bubbles:!0,composed:!0,cancelable:!0});this.dispatchEvent(e)&&(this.open=!1)}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>{this.dialog.addEventListener("cancel",this._handleCancel),this.dialog.addEventListener("click",this._handleBackdropClick)})}disconnectedCallback(){super.disconnectedCallback(),this.dialog.removeEventListener("cancel",this._handleCancel),this.dialog.removeEventListener("click",this._handleBackdropClick)}render(){return I`<dialog part="dialog backdrop">
|
|
1399
1411
|
<div part="panel"><slot></slot></div>
|
|
1400
|
-
</dialog>`}},l.SwUiModal.styles=
|
|
1412
|
+
</dialog>`}},l.SwUiModal.styles=ae`
|
|
1401
1413
|
:host {
|
|
1402
1414
|
--sw-modal-duration: 0.2s;
|
|
1403
1415
|
--sw-modal-animation: bounce-in var(--sw-modal-duration) ease-out;
|
|
@@ -1485,24 +1497,24 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1485
1497
|
dialog.closing::backdrop {
|
|
1486
1498
|
animation: var(--sw-modal-backdrop-close-animation);
|
|
1487
1499
|
}
|
|
1488
|
-
`,
|
|
1500
|
+
`,Us([E({type:Boolean,reflect:!0})],l.SwUiModal.prototype,"open",2),Us([qr("dialog")],l.SwUiModal.prototype,"dialog",2),l.SwUiModal=Us([le("sw-ui-modal")],l.SwUiModal);/**
|
|
1489
1501
|
* @license
|
|
1490
1502
|
* Copyright 2018 Google LLC
|
|
1491
1503
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
1492
|
-
*/const Ic="important",Yv=" !"+Ic,Kv=wc(class extends Sc{constructor(t){var e;if(super(t),t.type!==yc.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?Ic:""):i[r]=n}}return Ht}}),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,Ni=(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`
|
|
1493
|
-
${this._thumbnail?
|
|
1504
|
+
*/const Qc="important",kb=" !"+Qc,xb=Hc(class extends jc{constructor(t){var e;if(super(t),t.type!==Vc.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(kb);r.includes("-")||s?i.setProperty(r,s?n.slice(0,-11):n,s?Qc:""):i[r]=n}}return Ht}}),Db="data:image/webp;base64,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",Ib="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 Mb=Object.defineProperty,Rb=Object.getOwnPropertyDescriptor,Xi=(t,e,i,r)=>{for(var n=r>1?void 0:r?Rb(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&Mb(e,i,n),n};l.SwUiBackground=class extends ee{constructor(){super(...arguments),this.default=!1,this.blurAmount="20px",this._loaded=!1}get _src(){return this.default?Db:this.src}get _thumbnail(){return this.default?Ib:this.thumbnail}willUpdate(e){(e.has("src")||e.has("default"))&&(this._loaded=!1)}render(){return I`
|
|
1505
|
+
${this._thumbnail?I`<div
|
|
1494
1506
|
part="thumb"
|
|
1495
1507
|
class=${`thumb${this._loaded?" hidden":""}`}
|
|
1496
|
-
style=${
|
|
1497
|
-
></div>`:
|
|
1498
|
-
${this._src?
|
|
1508
|
+
style=${xb({"background-image":`url('${this._thumbnail}')`,filter:`blur(${this.blurAmount})`})}
|
|
1509
|
+
></div>`:W}
|
|
1510
|
+
${this._src?I`<img
|
|
1499
1511
|
part="image"
|
|
1500
1512
|
class=${this._loaded?"loaded":""}
|
|
1501
1513
|
src=${this._src}
|
|
1502
1514
|
alt=""
|
|
1503
1515
|
@load=${()=>{this._loaded=!0}}
|
|
1504
|
-
/>`:
|
|
1505
|
-
`}},l.SwUiBackground.styles=
|
|
1516
|
+
/>`:W}
|
|
1517
|
+
`}},l.SwUiBackground.styles=ae`
|
|
1506
1518
|
:host {
|
|
1507
1519
|
display: block;
|
|
1508
1520
|
position: relative; /* containing block for .thumb and img */
|
|
@@ -1540,15 +1552,15 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1540
1552
|
opacity: 1;
|
|
1541
1553
|
transform: scale(1);
|
|
1542
1554
|
}
|
|
1543
|
-
`,
|
|
1555
|
+
`,Xi([E({type:Boolean,reflect:!0})],l.SwUiBackground.prototype,"default",2),Xi([E({type:String})],l.SwUiBackground.prototype,"thumbnail",2),Xi([E({type:String})],l.SwUiBackground.prototype,"src",2),Xi([E({type:String,attribute:"blur-amount"})],l.SwUiBackground.prototype,"blurAmount",2),Xi([O()],l.SwUiBackground.prototype,"_loaded",2),l.SwUiBackground=Xi([le("sw-ui-background")],l.SwUiBackground);let Pb=null;const Jc=()=>Pb??(Pb=Promise.resolve().then(()=>Sm)),_b={javascript:()=>Promise.resolve().then(()=>Cm),typescript:()=>Promise.resolve().then(()=>Tm),python:()=>Promise.resolve().then(()=>km),bash:()=>Promise.resolve().then(()=>ml),shell:()=>Promise.resolve().then(()=>ml),json:()=>Promise.resolve().then(()=>xm),css:()=>Promise.resolve().then(()=>Dm),yaml:()=>Promise.resolve().then(()=>Im),sql:()=>Promise.resolve().then(()=>Mm),markdown:()=>Promise.resolve().then(()=>Rm)},Ob={typescript:["javascript"]},$c=new Set;async function el(t){if($c.has(t))return;await Jc();for(const i of Ob[t]??[])await el(i);const e=_b[t];e&&(await e(),$c.add(t))}async function tl(t,e){const i=(e||"plaintext").toLowerCase();await el(i);const r=await Jc(),n=r.languages[i];return n?r.highlight(t,n,i):t}var Lb=Object.defineProperty,Fb=Object.getOwnPropertyDescriptor,It=(t,e,i,r)=>{for(var n=r>1?void 0:r?Fb(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&&Lb(e,i,n),n};const il=G(),rl={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 nl=!1;function sl(t){return nl||(t.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute("rel","noopener noreferrer")}),nl=!0),t}l.SwUiContentDrawer=class extends ee{constructor(){super(...arguments),this.open=!1,this.narrow=!1,this.title="",this.content="",this.format="text",this.language="",this._renderedHtml="",this._renderFormat="text",this._copied=!1,this._renderId=0}connectedCallback(){super.connectedCallback(),this._ro=new ResizeObserver(i=>{const r=i[0];r&&(this.narrow=r.contentRect.width<=480)});const e=this.parentElement;e&&this._ro.observe(e)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._ro)==null||e.disconnect(),this._ro=void 0}updated(e){super.updated(e),(e.has("content")||e.has("format")||e.has("language"))&&this._renderContent()}async _renderContent(){const e=++this._renderId,{content:i,format:r,language:n}=this;if(r==="text"){if(e!==this._renderId)return;this._renderedHtml="",this._renderFormat="text";return}try{let s="";if(r==="markdown"){const[{marked:a},{default:o}]=await Promise.all([Promise.resolve().then(()=>Ym),Promise.resolve().then(()=>Gl)]),c=await a.parse(i,{async:!0});s=sl(o).sanitize(c,rl)}else if(r==="html"){const{default:a}=await Promise.resolve().then(()=>Gl);s=sl(a).sanitize(i,rl)}else r==="code"&&(s=await tl(i,n||"plaintext"));if(e!==this._renderId)return;this._renderedHtml=s,this._renderFormat=r}catch(s){if(il.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{il.error("[ContentDrawer] Clipboard write failed")}}_renderBody(){return this.format==="text"||this._renderFormat!==this.format?I`<div class="content-text">${this.content}</div>`:this._renderFormat==="code"?I`
|
|
1544
1556
|
<div class="content-code">
|
|
1545
|
-
<pre><code>${
|
|
1557
|
+
<pre><code>${yn(this._renderedHtml)}</code></pre>
|
|
1546
1558
|
</div>
|
|
1547
|
-
`:
|
|
1559
|
+
`:I`<div class="content-rich">${yn(this._renderedHtml)}</div>`}render(){const e=this.format==="code"&&this.language;return I`
|
|
1548
1560
|
<div class="panel" part="panel">
|
|
1549
1561
|
<div class="header" part="header">
|
|
1550
|
-
${this.title?
|
|
1551
|
-
${e?
|
|
1562
|
+
${this.title?I`<span class="title" part="title">${this.title}</span>`:W}
|
|
1563
|
+
${e?I`<span class="lang-badge">${this.language}</span>`:W}
|
|
1552
1564
|
<button
|
|
1553
1565
|
class="action-btn ${this._copied?"copy-done":""}"
|
|
1554
1566
|
title="Copy to clipboard"
|
|
@@ -1564,7 +1576,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1564
1576
|
${this._renderBody()}
|
|
1565
1577
|
</div>
|
|
1566
1578
|
</div>
|
|
1567
|
-
`}},l.SwUiContentDrawer.styles=
|
|
1579
|
+
`}},l.SwUiContentDrawer.styles=ae`
|
|
1568
1580
|
/* ── Host — default: slide in from the right ── */
|
|
1569
1581
|
:host {
|
|
1570
1582
|
display: block;
|
|
@@ -1800,12 +1812,12 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1800
1812
|
.token.important,
|
|
1801
1813
|
.token.bold { font-weight: bold; }
|
|
1802
1814
|
.token.italic { font-style: italic; }
|
|
1803
|
-
`,
|
|
1804
|
-
`)}function
|
|
1815
|
+
`,It([E({type:Boolean,reflect:!0})],l.SwUiContentDrawer.prototype,"open",2),It([E({type:Boolean,reflect:!0})],l.SwUiContentDrawer.prototype,"narrow",2),It([E({type:String})],l.SwUiContentDrawer.prototype,"title",2),It([E({type:String})],l.SwUiContentDrawer.prototype,"content",2),It([E({type:String})],l.SwUiContentDrawer.prototype,"format",2),It([E({type:String})],l.SwUiContentDrawer.prototype,"language",2),It([O()],l.SwUiContentDrawer.prototype,"_renderedHtml",2),It([O()],l.SwUiContentDrawer.prototype,"_renderFormat",2),It([O()],l.SwUiContentDrawer.prototype,"_copied",2),l.SwUiContentDrawer=It([le("sw-ui-content-drawer")],l.SwUiContentDrawer);function Nb(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(...Ub(n),"");return r.length>0&&i.push("---",""),i.join(`
|
|
1816
|
+
`)}function Ub(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(...Bb(t.meta.displayContent)),e}function Bb(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 zb=Object.defineProperty,Vb=Object.getOwnPropertyDescriptor,Ir=(t,e,i,r)=>{for(var n=r>1?void 0:r?Vb(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&&zb(e,i,n),n};l.SwUiTranscriptView=class extends ee{constructor(){super(...arguments),this.entries=[],this.header="Transcript",this.emptyText="",this._codeCache=new Map,this._lastEntryCount=0}updated(e){super.updated(e),this.entries.length!==this._lastEntryCount&&(this._lastEntryCount=this.entries.length,this._autoScroll()),e.has("entries")&&this._highlightNewEntries()}async _highlightNewEntries(){const e=this.entries.filter(i=>{var r;return((r=i.meta)==null?void 0:r.code)&&!this._codeCache.has(i.id)});e.length!==0&&(await Promise.all(e.map(async i=>{const{content:r,language:n=""}=i.meta.code,s=await tl(r,n);this._codeCache=new Map(this._codeCache).set(i.id,s)})),await this.updateComplete,this._autoScroll())}_downloadTranscript(){const e=Nb(this.entries),i=new Blob([e],{type:"text/markdown;charset=utf-8"}),r=URL.createObjectURL(i),n=document.createElement("a");n.href=r,n.download=`transcript-${new Date().toISOString().slice(0,10)}.md`,n.click(),URL.revokeObjectURL(r)}_autoScroll(){var r;const e=(r=this.shadowRoot)==null?void 0:r.querySelector(".messages");if(!e)return;e.scrollHeight-e.scrollTop-e.clientHeight<120&&e.scrollTo({top:e.scrollHeight,behavior:"smooth"})}_renderCode(e){var n;const i=(n=e.meta)==null?void 0:n.code;if(!i)return W;const r=this._codeCache.get(e.id);return I`
|
|
1805
1817
|
<div class="meta-code" part="code">
|
|
1806
|
-
<pre><code>${r?
|
|
1818
|
+
<pre><code>${r?yn(r):i.content}</code></pre>
|
|
1807
1819
|
</div>
|
|
1808
|
-
`}render(){const e=this.entries.some(i=>i.state==="complete");return
|
|
1820
|
+
`}render(){const e=this.entries.some(i=>i.state==="complete");return I`
|
|
1809
1821
|
<div class="header" part="header">
|
|
1810
1822
|
<span>${this.header}</span>
|
|
1811
1823
|
<button
|
|
@@ -1819,23 +1831,23 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
1819
1831
|
</button>
|
|
1820
1832
|
</div>
|
|
1821
1833
|
|
|
1822
|
-
${this.entries.length===0?
|
|
1834
|
+
${this.entries.length===0?I`<div class="empty" part="empty">${this.emptyText}</div>`:I`
|
|
1823
1835
|
<div class="messages" part="messages">
|
|
1824
|
-
${this.entries.map(i=>{var r,n;return
|
|
1836
|
+
${this.entries.map(i=>{var r,n;return I`
|
|
1825
1837
|
<div
|
|
1826
1838
|
class="bubble ${i.type} ${i.state==="partial"?"partial":""}"
|
|
1827
1839
|
part="bubble bubble-${i.type}"
|
|
1828
1840
|
>
|
|
1829
1841
|
${i.text}
|
|
1830
|
-
${(n=(r=i.meta)==null?void 0:r.links)!=null&&n.length?
|
|
1831
|
-
${i.meta.links.map(s=>
|
|
1832
|
-
</div>`:
|
|
1842
|
+
${(n=(r=i.meta)==null?void 0:r.links)!=null&&n.length?I`<div class="meta-links">
|
|
1843
|
+
${i.meta.links.map(s=>I`<a href=${s.url} target="_blank" rel="noopener">${s.label}</a>`)}
|
|
1844
|
+
</div>`:W}
|
|
1833
1845
|
${this._renderCode(i)}
|
|
1834
1846
|
</div>
|
|
1835
1847
|
`})}
|
|
1836
1848
|
</div>
|
|
1837
1849
|
`}
|
|
1838
|
-
`}},l.SwUiTranscriptView.styles=
|
|
1850
|
+
`}},l.SwUiTranscriptView.styles=[ut,ae`
|
|
1839
1851
|
:host {
|
|
1840
1852
|
display: flex;
|
|
1841
1853
|
flex-direction: column;
|
|
@@ -2064,20 +2076,20 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2064
2076
|
.token.italic {
|
|
2065
2077
|
font-style: italic;
|
|
2066
2078
|
}
|
|
2067
|
-
|
|
2079
|
+
`],Ir([E({attribute:!1})],l.SwUiTranscriptView.prototype,"entries",2),Ir([E({type:String})],l.SwUiTranscriptView.prototype,"header",2),Ir([E({type:String,attribute:"empty-text"})],l.SwUiTranscriptView.prototype,"emptyText",2),Ir([O()],l.SwUiTranscriptView.prototype,"_codeCache",2),l.SwUiTranscriptView=Ir([le("sw-ui-transcript-view")],l.SwUiTranscriptView);var Hb=Object.defineProperty,jb=Object.getOwnPropertyDescriptor,Mr=(t,e,i,r)=>{for(var n=r>1?void 0:r?jb(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&&Hb(e,i,n),n};l.SwUiAlert=class extends ee{constructor(){super(...arguments),this.description="",this.type="confirm",this._resolve=null}show(){return this._dialog.showModal(),new Promise(e=>{this._resolve=e})}_close(e){var i;(i=this._resolve)==null||i.call(this,e),this._resolve=null,this._dialog.close()}render(){return I`
|
|
2068
2080
|
<dialog>
|
|
2069
2081
|
<h2 class="title">${this.title}</h2>
|
|
2070
2082
|
<div class="body">
|
|
2071
2083
|
<slot>${this.description}</slot>
|
|
2072
2084
|
</div>
|
|
2073
2085
|
<div class="actions">
|
|
2074
|
-
${this.type==="confirm"?
|
|
2086
|
+
${this.type==="confirm"?I`
|
|
2075
2087
|
<button class="reject" @click=${()=>this._close(!1)}>Reject</button>
|
|
2076
2088
|
<button class="accept" @click=${()=>this._close(!0)}>Accept</button>
|
|
2077
|
-
`:
|
|
2089
|
+
`:I` <button class="accept" @click=${()=>this._close(!0)}>OK</button> `}
|
|
2078
2090
|
</div>
|
|
2079
2091
|
</dialog>
|
|
2080
|
-
`}},l.SwUiAlert.styles=
|
|
2092
|
+
`}},l.SwUiAlert.styles=[ut,ae`
|
|
2081
2093
|
:host {
|
|
2082
2094
|
font-family: var(--type-family-body);
|
|
2083
2095
|
}
|
|
@@ -2138,7 +2150,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2138
2150
|
.reject:hover {
|
|
2139
2151
|
background: #e5e7eb;
|
|
2140
2152
|
}
|
|
2141
|
-
`,vr([T()],l.SwUiAlert.prototype,"title",2),vr([T()],l.SwUiAlert.prototype,"description",2),vr([T({reflect:!0})],l.SwUiAlert.prototype,"type",2),vr([_r("dialog")],l.SwUiAlert.prototype,"_dialog",2),l.SwUiAlert=vr([se("sw-ui-alert")],l.SwUiAlert);async function br(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 cn(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 Nc=!1;function Bc(){if(typeof document>"u"||Nc)return;Nc=!0;const t=new CSSStyleSheet;t.replaceSync(hb),document.adoptedStyleSheets=[...document.adoptedStyleSheets,t]}function zc(){cn("Lexend",{weights:[300,400,500,600,700]}),cn("Instrument Sans",{weights:[400,500,600,700]}),cn("JetBrains Mono",{weights:[400,500]})}const Vc=W(),gb=["text","markdown","code","html"];function ln(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function fb(t){if(!t)return{};try{const e=JSON.parse(t);return ln(e)?e:(Vc.warn("[CallWidget] user-variables must be a JSON object; ignoring"),{})}catch(e){return Vc.warn("[CallWidget] Failed to parse user-variables JSON; ignoring",e),{}}}function vb(t,e=()=>new Date().toISOString()){const i=ln(t.capabilities)?t.capabilities:{},r=ln(t.metadata)?t.metadata:{},n=ln(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 bc(yb(e||mb),t):new mc({token:t})}const Cb=ne`
|
|
2153
|
+
`],Mr([E()],l.SwUiAlert.prototype,"title",2),Mr([E()],l.SwUiAlert.prototype,"description",2),Mr([E({reflect:!0})],l.SwUiAlert.prototype,"type",2),Mr([qr("dialog")],l.SwUiAlert.prototype,"_dialog",2),l.SwUiAlert=Mr([le("sw-ui-alert")],l.SwUiAlert);async function Rr(t){const e=document.createElement("sw-ui-alert");e.title=t.title,t.description!==void 0&&(e.description=t.description),t.type!==void 0&&(e.type=t.type),document.body.appendChild(e),await e.updateComplete;const i=await e.show();return e.remove(),i}const Wb=`: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}}`,Gb="https://fonts.googleapis.com/css2";function Cn(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=`${Gb}?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 al=!1;function ol(){if(typeof document>"u"||al)return;al=!0;const t=new CSSStyleSheet;t.replaceSync(Wb),document.adoptedStyleSheets=[...document.adoptedStyleSheets,t]}function cl(){Cn("Lexend",{weights:[300,400,500,600,700]}),Cn("Instrument Sans",{weights:[400,500,600,700]}),Cn("JetBrains Mono",{weights:[400,500]})}const ll=G(),qb=["text","markdown","code","html"];function An(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xb(t){if(!t)return{};try{const e=JSON.parse(t);return An(e)?e:(ll.warn("[CallWidget] user-variables must be a JSON object; ignoring"),{})}catch(e){return ll.warn("[CallWidget] Failed to parse user-variables JSON; ignoring",e),{}}}function Yb(t,e=()=>new Date().toISOString()){const i=An(t.capabilities)?t.capabilities:{},r=An(t.metadata)?t.metadata:{},n=An(r.widget)?r.widget:{};return{...t,capabilities:{display_content:{formats:[...qb]},...i},metadata:{...r,widget:{opened_at:e(),...n}}}}const Kb=["c2c_","c2t_"],Zb="embeds.signalwire.com";function Qb(t){try{return new URL(t.includes("://")?t:`https://${t}`).hostname}catch{return t}}function Jb(t){return Kb.some(e=>t.startsWith(e))}function $b(t,e){return Jb(t)?new Bc(Qb(e||Zb),t):new zc({token:t})}const em=ae`
|
|
2142
2154
|
:host {
|
|
2143
2155
|
display: block;
|
|
2144
2156
|
height: 100%;
|
|
@@ -2158,7 +2170,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2158
2170
|
height: 100%;
|
|
2159
2171
|
overflow: hidden;
|
|
2160
2172
|
}
|
|
2161
|
-
`;function
|
|
2173
|
+
`;function tm(t){var e,i,r,n;return I`
|
|
2162
2174
|
<div class="call-view-wrapper">
|
|
2163
2175
|
<sw-ui-call-layout
|
|
2164
2176
|
?transcript=${t.transcription}
|
|
@@ -2169,7 +2181,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2169
2181
|
|
|
2170
2182
|
<sw-call-media slot="video"></sw-call-media>
|
|
2171
2183
|
|
|
2172
|
-
${t.hasLayoutLayers?
|
|
2184
|
+
${t.hasLayoutLayers?W:I`<sw-local-camera slot="floating-video" mirror></sw-local-camera>`}
|
|
2173
2185
|
|
|
2174
2186
|
<sw-call-controls
|
|
2175
2187
|
slot="controls"
|
|
@@ -2197,20 +2209,20 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2197
2209
|
@sw-content-drawer-close=${t.onDrawerClose}
|
|
2198
2210
|
></sw-ui-content-drawer>
|
|
2199
2211
|
</div>
|
|
2200
|
-
`}function
|
|
2212
|
+
`}function im(){return I`
|
|
2201
2213
|
<div class="call-view-wrapper">
|
|
2202
2214
|
<sw-ui-call-layout loading shadow style="--sw-call-layout-radius: 10px;">
|
|
2203
2215
|
<slot name="background" slot="background"></slot>
|
|
2204
2216
|
</sw-ui-call-layout>
|
|
2205
2217
|
</div>
|
|
2206
|
-
`}var
|
|
2218
|
+
`}var rm=Object.defineProperty,nm=Object.getOwnPropertyDescriptor,Ge=(t,e,i,r)=>{for(var n=r>1?void 0:r?nm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&rm(e,i,n),n};const Tn=G();l.SwCallWidget=class extends ee{constructor(){super(...arguments),this.token="",this.host="",this.destination="",this.modal=!1,this.transcription=!1,this.allowIncomingCalls=!1,this.audioOnly=!1,this.userVariables="",this.disableAutoTheme=!1,this.disableAutoFonts=!1,this._call=null,this._connecting=!1,this._hasLayoutLayers=!1,this._drawer=null,this._callState=new Ls(this),this._devices=new Fs(this),this._transcript=new xr(this),this._userEventCtrl=new Zc(this),this._incomingCalls=new Ia(this),this._client=null,this._subs=[],this._pendingIncoming=!1,this._handleIncomingCall=async e=>{if(!(this._call||this._connecting||this._pendingIncoming)){this._pendingIncoming=!0;try{const i=e.callerName||e.callerNumber||"Unknown Caller";await Rr({title:"Incoming Call",description:`${i} is calling`,type:"confirm"})?(this._wireCall(e.call),e.call.answer()):e.call.reject()}finally{this._pendingIncoming=!1}}},this._onDisplayContent=e=>{this._drawer=e.detail,this._transcript.injectEntry({id:crypto.randomUUID(),type:"system",state:"complete",text:e.detail.title??"Agent shared content",meta:{displayContent:e.detail}})},this._onDrawerClose=()=>{this._drawer=null},this._onModalClose=e=>{if(this._call||this._connecting){this.hangup();return}this.destination||e.preventDefault()}}connectedCallback(){super.connectedCallback(),this.disableAutoTheme||ol(),this.disableAutoFonts||cl()}updated(e){super.updated(e),e.has("token")||e.has("host")?this.token?this._refreshClient():e.has("host")&&Tn.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){Tn.error("[SwCallWidget] Error destroying client:",e)}this._client=null}this._call=null,this._connecting=!1}_refreshClient(){this._destroyClient();try{this._client=new Uc($b(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";Tn.error("[SwCallWidget] Failed to initialise client:",e),Rr({title:"Client Error",description:i,type:"alert"})}}async dial(){if(!this._client||this._connecting||this._call)return;if(!this.destination){Rr({title:"Call Error",description:"No destination configured.",type:"alert"});return}this._connecting=!0,this.dispatchEvent(new CustomEvent("sw-dial",{detail:{destination:this.destination},bubbles:!0,composed:!0}));const e=!this.audioOnly;try{const i=await new Promise((r,n)=>{const s=this._client.isConnected$.pipe(B(a=>a),bo()).subscribe({next:()=>{const a=Yb(Xb(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";Tn.error("[SwCallWidget] Dial failed:",i),Rr({title:"Call Failed",description:r,type:"alert"})}finally{this._connecting=!1}}async hangup(){this._call&&await this._call.hangup()}_connectIncomingCalls(){this._client&&(this._incomingCalls.onIncomingCall=this._handleIncomingCall,this._subs.push(this._client.isConnected$.pipe(B(Boolean),bo()).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?tm({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?im():W;return this.modal?I`
|
|
2207
2219
|
<slot @slotchange=${this._onSlotChange}></slot>
|
|
2208
2220
|
<sw-ui-modal ?open=${e} @sw-modal-close=${this._onModalClose}>
|
|
2209
2221
|
<sw-ui-responsive-container>
|
|
2210
|
-
${i!==
|
|
2222
|
+
${i!==W?i:W}
|
|
2211
2223
|
</sw-ui-responsive-container>
|
|
2212
2224
|
</sw-ui-modal>
|
|
2213
|
-
`:i!==
|
|
2225
|
+
`:i!==W?i:I`<slot @slotchange=${this._onSlotChange}></slot>`}},l.SwCallWidget.styles=[ut,em],Ge([E({type:String})],l.SwCallWidget.prototype,"token",2),Ge([E({type:String})],l.SwCallWidget.prototype,"host",2),Ge([E({type:String})],l.SwCallWidget.prototype,"destination",2),Ge([E({type:Boolean,reflect:!0})],l.SwCallWidget.prototype,"modal",2),Ge([E({type:Boolean,reflect:!0})],l.SwCallWidget.prototype,"transcription",2),Ge([E({type:Boolean,reflect:!0,attribute:"allow-incoming-calls"})],l.SwCallWidget.prototype,"allowIncomingCalls",2),Ge([E({type:Boolean,reflect:!0,attribute:"audio-only"})],l.SwCallWidget.prototype,"audioOnly",2),Ge([E({type:String,attribute:"user-variables"})],l.SwCallWidget.prototype,"userVariables",2),Ge([E({type:Boolean,reflect:!0,attribute:"disable-auto-theme"})],l.SwCallWidget.prototype,"disableAutoTheme",2),Ge([E({type:Boolean,reflect:!0,attribute:"disable-auto-fonts"})],l.SwCallWidget.prototype,"disableAutoFonts",2),Ge([O()],l.SwCallWidget.prototype,"_call",2),Ge([O()],l.SwCallWidget.prototype,"_connecting",2),Ge([O()],l.SwCallWidget.prototype,"_hasLayoutLayers",2),Ge([O()],l.SwCallWidget.prototype,"_drawer",2),l.SwCallWidget=Ge([le("sw-call-widget")],l.SwCallWidget);var sm=Object.defineProperty,am=Object.getOwnPropertyDescriptor,Yi=(t,e,i,r)=>{for(var n=r>1?void 0:r?am(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&&sm(e,i,n),n};l.SwClickToCall=class extends ee{constructor(){super(...arguments),this.token="",this.host="",this.destination="",this.label="Call",this.audioOnly=!1}render(){return I`
|
|
2214
2226
|
<sw-call-widget
|
|
2215
2227
|
modal
|
|
2216
2228
|
transcription
|
|
@@ -2225,7 +2237,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2225
2237
|
${this.label}
|
|
2226
2238
|
</button>
|
|
2227
2239
|
</sw-call-widget>
|
|
2228
|
-
`}},l.SwClickToCall.styles=
|
|
2240
|
+
`}},l.SwClickToCall.styles=[ut,ae`
|
|
2229
2241
|
:host {
|
|
2230
2242
|
display: inline-block;
|
|
2231
2243
|
font-family: var(--type-family-body);
|
|
@@ -2259,7 +2271,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2259
2271
|
.call-button sw-ui-icon {
|
|
2260
2272
|
pointer-events: none;
|
|
2261
2273
|
}
|
|
2262
|
-
|
|
2274
|
+
`],Yi([E({type:String})],l.SwClickToCall.prototype,"token",2),Yi([E({type:String})],l.SwClickToCall.prototype,"host",2),Yi([E({type:String})],l.SwClickToCall.prototype,"destination",2),Yi([E({type:String})],l.SwClickToCall.prototype,"label",2),Yi([E({type:Boolean,reflect:!0,attribute:"audio-only"})],l.SwClickToCall.prototype,"audioOnly",2),l.SwClickToCall=Yi([le("sw-click-to-call")],l.SwClickToCall);var om=Object.defineProperty,cm=Object.getOwnPropertyDescriptor,Yt=(t,e,i,r)=>{for(var n=r>1?void 0:r?cm(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&&om(e,i,n),n};l.SwDirectory=class extends ee{constructor(){super(...arguments),this.directory=null,this.selectedAddress=null,this.searchQuery="",this.addresses=[],this.loading=!1,this.hasMore=!1,this.subscriptions=[],this.searchDebounceTimer=null,this.intersectionObserver=null,this.isAutoLoadingForSearch=!1}connectedCallback(){super.connectedCallback(),this.subscribeToDirectory()}disconnectedCallback(){super.disconnectedCallback(),this.cleanup()}subscribeToDirectory(){if(this.directory){if(this.directory.addresses$){const e=this.directory.addresses$.subscribe(i=>{this.addresses=i});this.subscriptions.push(e)}if(this.directory.loading$){const e=this.directory.loading$.subscribe(i=>{this.loading=i});this.subscriptions.push(e)}if(this.directory.hasMore$){const e=this.directory.hasMore$.subscribe(i=>{this.hasMore=i});this.subscriptions.push(e)}this.directory.loadMore&&this.directory.loadMore()}}cleanup(){this.subscriptions.forEach(e=>e.unsubscribe()),this.subscriptions=[],this.searchDebounceTimer&&clearTimeout(this.searchDebounceTimer),this.intersectionObserver&&(this.intersectionObserver.disconnect(),this.intersectionObserver=null)}firstUpdated(){this.setupInfiniteScroll()}setupInfiniteScroll(){var i,r;const e=(i=this.shadowRoot)==null?void 0:i.querySelector(".scroll-sentinel");e&&(this.intersectionObserver=new IntersectionObserver(n=>{const s=n[0];s!=null&&s.isIntersecting&&this.hasMore&&!this.loading&&this.handleLoadMore()},{root:(r=this.shadowRoot)==null?void 0:r.querySelector(".list"),rootMargin:"100px",threshold:0}),this.intersectionObserver.observe(e))}updated(e){super.updated(e),e.has("directory")&&(this.cleanup(),this.subscribeToDirectory()),this.intersectionObserver||this.setupInfiniteScroll(),(e.has("addresses")||e.has("searchQuery")||e.has("loading"))&&this.checkAutoLoadForSearch()}async checkAutoLoadForSearch(){this.searchQuery.trim()&&this.filteredAddresses.length===0&&this.hasMore&&!this.loading?(this.isAutoLoadingForSearch=!0,await this.handleLoadMore()):(this.filteredAddresses.length>0||!this.hasMore)&&(this.isAutoLoadingForSearch=!1)}get filteredAddresses(){if(!this.searchQuery.trim())return this.addresses;const e=this.searchQuery.toLowerCase();return this.addresses.filter(i=>i.name.toLowerCase().includes(e)||i.displayName&&i.displayName.toLowerCase().includes(e))}handleSearchInput(e){const i=e.target;this.searchDebounceTimer&&clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=window.setTimeout(()=>{this.searchQuery=i.value},200)}handleItemClick(e){this.selectedAddress=e,this.dispatchEvent(new CustomEvent("sw-address-select",{detail:{address:e},bubbles:!0,composed:!0}))}handleItemDoubleClick(e){this.handleDial(e)}handleDial(e){this.dispatchEvent(new CustomEvent("sw-dial",{detail:{address:e},bubbles:!0,composed:!0}))}async handleLoadMore(){var e;(e=this.directory)!=null&&e.loadMore&&await this.directory.loadMore()}renderAddressIcon(e){const i=e.type==="room"?"room":"person";return I`<sw-ui-icon name=${i} size="20"></sw-ui-icon>`}renderChannelIcons(e){const i=e.channels||{};return I`
|
|
2263
2275
|
<div class="item-channels">
|
|
2264
2276
|
<sw-ui-icon
|
|
2265
2277
|
name="mic-on"
|
|
@@ -2274,12 +2286,12 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2274
2286
|
title="Video"
|
|
2275
2287
|
></sw-ui-icon>
|
|
2276
2288
|
</div>
|
|
2277
|
-
`}renderLoadingIndicator(){return
|
|
2289
|
+
`}renderLoadingIndicator(){return I`
|
|
2278
2290
|
<div class="scroll-loading">
|
|
2279
2291
|
<div class="spinner"></div>
|
|
2280
2292
|
<span>${this.isAutoLoadingForSearch?"Searching...":"Loading more..."}</span>
|
|
2281
2293
|
</div>
|
|
2282
|
-
`}render(){const e=this.loading&&this.addresses.length===0,i=!this.loading&&this.filteredAddresses.length===0&&!this.hasMore,r=this.isAutoLoadingForSearch&&this.filteredAddresses.length===0;return
|
|
2294
|
+
`}render(){const e=this.loading&&this.addresses.length===0,i=!this.loading&&this.filteredAddresses.length===0&&!this.hasMore,r=this.isAutoLoadingForSearch&&this.filteredAddresses.length===0;return I`
|
|
2283
2295
|
<div class="container" part="container">
|
|
2284
2296
|
<div class="search" part="search">
|
|
2285
2297
|
<input
|
|
@@ -2292,8 +2304,8 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2292
2304
|
</div>
|
|
2293
2305
|
|
|
2294
2306
|
<div class="list" part="list" role="listbox">
|
|
2295
|
-
${e?
|
|
2296
|
-
${this.filteredAddresses.map(n=>{var s,a,o;return
|
|
2307
|
+
${e?I`<div class="loading">Loading...</div>`:r?this.renderLoadingIndicator():i?I`<div class="empty">No addresses found</div>`:I`
|
|
2308
|
+
${this.filteredAddresses.map(n=>{var s,a,o;return I`
|
|
2297
2309
|
<div
|
|
2298
2310
|
class="item ${((s=this.selectedAddress)==null?void 0:s.id)===n.id?"selected":""}"
|
|
2299
2311
|
part="item ${((a=this.selectedAddress)==null?void 0:a.id)===n.id?"item-selected":""}"
|
|
@@ -2328,7 +2340,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2328
2340
|
`}
|
|
2329
2341
|
</div>
|
|
2330
2342
|
</div>
|
|
2331
|
-
`}},l.SwDirectory.styles=
|
|
2343
|
+
`}},l.SwDirectory.styles=[ut,ae`
|
|
2332
2344
|
:host {
|
|
2333
2345
|
display: block;
|
|
2334
2346
|
font-family: var(--type-family-body);
|
|
@@ -2535,7 +2547,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2535
2547
|
.dial-button sw-ui-icon {
|
|
2536
2548
|
pointer-events: none;
|
|
2537
2549
|
}
|
|
2538
|
-
|
|
2550
|
+
`],Yt([E({type:Object})],l.SwDirectory.prototype,"directory",2),Yt([O()],l.SwDirectory.prototype,"selectedAddress",2),Yt([O()],l.SwDirectory.prototype,"searchQuery",2),Yt([O()],l.SwDirectory.prototype,"addresses",2),Yt([O()],l.SwDirectory.prototype,"loading",2),Yt([O()],l.SwDirectory.prototype,"hasMore",2),Yt([O()],l.SwDirectory.prototype,"isAutoLoadingForSearch",2),l.SwDirectory=Yt([le("sw-directory")],l.SwDirectory);const lm=ae`
|
|
2539
2551
|
:host {
|
|
2540
2552
|
display: inline-flex;
|
|
2541
2553
|
flex-direction: column;
|
|
@@ -2767,13 +2779,13 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2767
2779
|
opacity: 0.4;
|
|
2768
2780
|
cursor: not-allowed;
|
|
2769
2781
|
}
|
|
2770
|
-
`;var
|
|
2782
|
+
`;var um=Object.defineProperty,dm=Object.getOwnPropertyDescriptor,et=(t,e,i,r)=>{for(var n=r>1?void 0:r?dm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&um(e,i,n),n};const En=G();l.SwDeviceSelector=class extends ee{constructor(){super(...arguments),this.showPreview=!1,this._videoStream=null,this._audioStream=null,this._testingSpeaker=!1,this._audioIn=[],this._videoIn=[],this._audioOut=[],this._selAudioIn=null,this._selVideoIn=null,this._selAudioOut=null,this._open=!1,this._subs=[],this._onDocumentClick=e=>{e.composedPath().includes(this)||(this._open=!1)}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._onDocumentClick),this._subscribe()}updated(e){super.updated(e),e.has("deviceController")&&(this._unsubscribe(),this._subscribe())}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._onDocumentClick),this._unsubscribe(),this._stopVideoPreview(),this._stopAudioPreview(),this._stopTestTone()}willUpdate(e){if(!this.showPreview){(e.has("showPreview")||e.has("_open"))&&(this._stopVideoPreview(),this._stopAudioPreview());return}const i=e.has("_open")&&this._open,r=e.has("_open")&&!this._open,n=e.has("_selVideoIn"),s=e.has("_selAudioIn");if(r){this._stopVideoPreview(),this._stopAudioPreview(),this._stopTestTone();return}this._open&&(i||n)&&this._selVideoIn&&this._startVideoPreview(this._selVideoIn.deviceId),this._open&&(i||s)&&this._selAudioIn&&this._startAudioPreview(this._selAudioIn.deviceId)}_subscribe(){const e=this.deviceController;e&&(this._subs.push(e.audioInputDevices$.subscribe(i=>{this._audioIn=i})),this._subs.push(e.videoInputDevices$.subscribe(i=>{this._videoIn=i})),this._subs.push(e.audioOutputDevices$.subscribe(i=>{this._audioOut=i})),e.selectedAudioInputDevice$&&this._subs.push(e.selectedAudioInputDevice$.subscribe(i=>{this._selAudioIn=i})),e.selectedVideoInputDevice$&&this._subs.push(e.selectedVideoInputDevice$.subscribe(i=>{this._selVideoIn=i})),e.selectedAudioOutputDevice$&&this._subs.push(e.selectedAudioOutputDevice$.subscribe(i=>{this._selAudioOut=i})))}_unsubscribe(){this._subs.forEach(e=>e.unsubscribe()),this._subs=[]}_toggle(e){e.stopPropagation(),this._open=!this._open}_selectMic(e){var r,n;const i=this._audioIn.find(s=>s.deviceId===e)??null;this._selAudioIn=i,(n=(r=this.deviceController)==null?void 0:r.selectAudioInputDevice)==null||n.call(r,i),i&&this._emitChange("microphone",i)}_selectCamera(e){var r,n;const i=this._videoIn.find(s=>s.deviceId===e)??null;this._selVideoIn=i,(n=(r=this.deviceController)==null?void 0:r.selectVideoInputDevice)==null||n.call(r,i),i&&this._emitChange("camera",i)}_selectSpeaker(e){var r,n;const i=this._audioOut.find(s=>s.deviceId===e)??null;this._selAudioOut=i,(n=(r=this.deviceController)==null?void 0:r.selectAudioOutputDevice)==null||n.call(r,i),i&&this._emitChange("speaker",i)}async _startVideoPreview(e){this._stopVideoPreview();try{this._videoStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:e}}})}catch(i){En.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){En.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){En.error("sw-device-selector: setSinkId failed",n)}e.addEventListener("ended",()=>this._stopTestTone());try{await e.play(),this._testingSpeaker=!0}catch(n){En.error("sw-device-selector: failed to play test tone",n),this._stopTestTone()}}_stopTestTone(){this._testAudio&&(this._testAudio.pause(),this._testAudio.src="",this._testAudio=void 0),this._testingSpeaker=!1}_emitChange(e,i){this.dispatchEvent(new CustomEvent("sw-device-change",{detail:{type:e,device:i},bubbles:!0,composed:!0}))}_renderSection(e,i,r,n,s,a){return I`
|
|
2771
2783
|
<div class="section">
|
|
2772
2784
|
<div class="section-header">
|
|
2773
2785
|
<sw-ui-icon name=${e} size="13"></sw-ui-icon>
|
|
2774
2786
|
<span>${i}</span>
|
|
2775
2787
|
</div>
|
|
2776
|
-
${r.length===0?
|
|
2788
|
+
${r.length===0?I`<div class="no-devices">No devices found</div>`:r.map((o,c)=>I`
|
|
2777
2789
|
<div
|
|
2778
2790
|
class="device-item ${o.deviceId===n?"selected":""}"
|
|
2779
2791
|
role="option"
|
|
@@ -2786,22 +2798,22 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2786
2798
|
<span class="device-label">${o.label||`Device ${c+1}`}</span>
|
|
2787
2799
|
</div>
|
|
2788
2800
|
`)}
|
|
2789
|
-
${a??
|
|
2801
|
+
${a??W}
|
|
2790
2802
|
</div>
|
|
2791
|
-
`}_renderCameraPreview(){return this.showPreview?
|
|
2803
|
+
`}_renderCameraPreview(){return this.showPreview?I`
|
|
2792
2804
|
<div class="preview preview-camera" part="preview-camera">
|
|
2793
|
-
${this._videoStream?
|
|
2805
|
+
${this._videoStream?I`<sw-local-camera .stream=${this._videoStream} mirror></sw-local-camera>`:I`<div class="preview-empty">Starting camera…</div>`}
|
|
2794
2806
|
</div>
|
|
2795
|
-
`:null}_renderMicPreview(){return this.showPreview?
|
|
2807
|
+
`:null}_renderMicPreview(){return this.showPreview?I`
|
|
2796
2808
|
<div class="preview preview-mic" part="preview-mic">
|
|
2797
|
-
${this._audioStream?
|
|
2809
|
+
${this._audioStream?I`<sw-audio-level
|
|
2798
2810
|
.stream=${this._audioStream}
|
|
2799
2811
|
bars="9"
|
|
2800
2812
|
orientation="horizontal"
|
|
2801
2813
|
maxSize="22"
|
|
2802
|
-
></sw-audio-level>`:
|
|
2814
|
+
></sw-audio-level>`:I`<div class="preview-empty">Starting microphone…</div>`}
|
|
2803
2815
|
</div>
|
|
2804
|
-
`:null}_renderSpeakerPreview(){return this.showPreview?
|
|
2816
|
+
`:null}_renderSpeakerPreview(){return this.showPreview?I`
|
|
2805
2817
|
<div class="preview preview-speaker" part="preview-speaker">
|
|
2806
2818
|
<button
|
|
2807
2819
|
class="test-speaker"
|
|
@@ -2813,8 +2825,8 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2813
2825
|
<span>${this._testingSpeaker?"Stop test":"Test speaker"}</span>
|
|
2814
2826
|
</button>
|
|
2815
2827
|
</div>
|
|
2816
|
-
`:null}render(){var i,r,n;const e=this._audioIn.length>0||this._videoIn.length>0||this._audioOut.length>0;return
|
|
2817
|
-
${this._open?
|
|
2828
|
+
`:null}render(){var i,r,n;const e=this._audioIn.length>0||this._videoIn.length>0||this._audioOut.length>0;return I`
|
|
2829
|
+
${this._open?I`
|
|
2818
2830
|
<div
|
|
2819
2831
|
class="panel"
|
|
2820
2832
|
role="listbox"
|
|
@@ -2824,7 +2836,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2824
2836
|
${this._renderSection("camera-on","Camera",this._videoIn,(r=this._selVideoIn)==null?void 0:r.deviceId,s=>this._selectCamera(s),this._renderCameraPreview())}
|
|
2825
2837
|
${this._renderSection("speaker-on","Speaker",this._audioOut,(n=this._selAudioOut)==null?void 0:n.deviceId,s=>this._selectSpeaker(s),this._renderSpeakerPreview())}
|
|
2826
2838
|
</div>
|
|
2827
|
-
`:
|
|
2839
|
+
`:W}
|
|
2828
2840
|
|
|
2829
2841
|
<button
|
|
2830
2842
|
class="trigger"
|
|
@@ -2838,7 +2850,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2838
2850
|
<sw-ui-icon name="settings" size="22"></sw-ui-icon>
|
|
2839
2851
|
</button>
|
|
2840
2852
|
<span class="label">Devices</span>
|
|
2841
|
-
`}},l.SwDeviceSelector.styles=
|
|
2853
|
+
`}},l.SwDeviceSelector.styles=[ut,lm],l.SwDeviceSelector._TEST_TONE_DATA_URI="data:audio/wav;base64,UklGRrQEAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YZAEAACAh46Sl5qcm5mWko2HgXp1cGxqaWlsb3R5gIaNk5icnp2bl5OOiIJ8dnFtamhoam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamloam1xdnyChI+VmZ2enZqXkoyGgHt1cG1qaGhrbnJ4foSLkZianp6cmZWQioR+eHJuamlo",et([E({type:Object})],l.SwDeviceSelector.prototype,"deviceController",2),et([E({type:Boolean,reflect:!0,attribute:"show-preview"})],l.SwDeviceSelector.prototype,"showPreview",2),et([O()],l.SwDeviceSelector.prototype,"_videoStream",2),et([O()],l.SwDeviceSelector.prototype,"_audioStream",2),et([O()],l.SwDeviceSelector.prototype,"_testingSpeaker",2),et([O()],l.SwDeviceSelector.prototype,"_audioIn",2),et([O()],l.SwDeviceSelector.prototype,"_videoIn",2),et([O()],l.SwDeviceSelector.prototype,"_audioOut",2),et([O()],l.SwDeviceSelector.prototype,"_selAudioIn",2),et([O()],l.SwDeviceSelector.prototype,"_selVideoIn",2),et([O()],l.SwDeviceSelector.prototype,"_selAudioOut",2),et([O()],l.SwDeviceSelector.prototype,"_open",2),l.SwDeviceSelector=et([le("sw-device-selector")],l.SwDeviceSelector);var hm=Object.defineProperty,pm=Object.getOwnPropertyDescriptor,Pr=(t,e,i,r)=>{for(var n=r>1?void 0:r?pm(e,i):e,s=t.length-1,a;s>=0;s--)(a=t[s])&&(n=(r?a(e,i,n):a(n))||n);return r&&n&&hm(e,i,n),n};l.SwUiDropup=class extends ee{constructor(){super(...arguments),this.items=[],this.open=!1,this._outsideClickHandler=e=>{const i=e.composedPath();!i.includes(this)&&(!this.anchor||!i.includes(this.anchor))&&this.dispatchEvent(new CustomEvent("sw-dropup-close",{bubbles:!0,composed:!0}))}}updated(e){e.has("open")&&(this.open?(document.addEventListener("mousedown",this._outsideClickHandler),this.anchor&&this._positionToAnchor()):document.removeEventListener("mousedown",this._outsideClickHandler))}_positionToAnchor(){const e=this.anchor.getBoundingClientRect(),i=4;this._menu.style.position="fixed",this._menu.style.top=`${e.top-i}px`,this._menu.style.bottom="auto",this._menu.style.left=`${e.left+e.width/2}px`,this._menu.style.right="auto",this._menu.style.transform="translateX(-50%) translateY(-100%)"}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("mousedown",this._outsideClickHandler)}normalizeItem(e){return typeof e=="string"?{label:e,id:e,selected:!1}:e}onSelect(e){const i={...e,selected:!0};this.items=(this.items??[]).map(r=>{const n=this.normalizeItem(r);return{...n,selected:n.id===e.id}}),this.dispatchEvent(new CustomEvent("sw-dropup-select",{detail:i,bubbles:!0,composed:!0}))}render(){const e=(this.items??[]).map(i=>{const r=this.normalizeItem(i);return I`
|
|
2842
2854
|
<button
|
|
2843
2855
|
part="item"
|
|
2844
2856
|
@click=${()=>this.onSelect(r)}
|
|
@@ -2846,9 +2858,9 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2846
2858
|
>
|
|
2847
2859
|
${r.label}
|
|
2848
2860
|
</button>
|
|
2849
|
-
`});return
|
|
2850
|
-
<div part="menu" class="menu ${this.open?"open":""}">${e.length?e:
|
|
2851
|
-
`}},l.SwUiDropup.styles=
|
|
2861
|
+
`});return I`
|
|
2862
|
+
<div part="menu" class="menu ${this.open?"open":""}">${e.length?e:W}</div>
|
|
2863
|
+
`}},l.SwUiDropup.styles=[ut,ae`
|
|
2852
2864
|
:host {
|
|
2853
2865
|
display: inline-block;
|
|
2854
2866
|
position: relative;
|
|
@@ -2891,11 +2903,11 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2891
2903
|
button:hover {
|
|
2892
2904
|
background: var(--bg-surface);
|
|
2893
2905
|
}
|
|
2894
|
-
|
|
2906
|
+
`],Pr([E({reflect:!0,converter:{fromAttribute(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}},toAttribute(t){return JSON.stringify(t)}}})],l.SwUiDropup.prototype,"items",2),Pr([E({type:Boolean,reflect:!0})],l.SwUiDropup.prototype,"open",2),Pr([E({attribute:!1})],l.SwUiDropup.prototype,"anchor",2),Pr([qr(".menu")],l.SwUiDropup.prototype,"_menu",2),l.SwUiDropup=Pr([le("sw-ui-dropup")],l.SwUiDropup);var gm=Object.defineProperty,fm=Object.getOwnPropertyDescriptor,Ki=(t,e,i,r)=>{for(var n=r>1?void 0:r?fm(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&&gm(e,i,n),n};l.SwUiSplitButton=class extends ee{constructor(){super(...arguments),this.items=[],this.active=!1,this._dropupOpen=!1,this._hasNamedSlots=!1}_onDropupSelect(e){this.items=this.items.map(i=>{const r=typeof i=="string"?i:i.id;return typeof i=="string"?{label:i,id:i,selected:i===e.detail.id}:{...i,selected:r===e.detail.id}})}_updateNamedSlots(){var r,n;const e=(r=this.shadowRoot)==null?void 0:r.querySelector('slot[name="active"]'),i=(n=this.shadowRoot)==null?void 0:n.querySelector('slot[name="inactive"]');this._hasNamedSlots=((e==null?void 0:e.assignedElements().length)??0)>0||((i==null?void 0:i.assignedElements().length)??0)>0}_onMainClick(){if(!this._hasNamedSlots){this.dispatchEvent(new CustomEvent("sw-split-button-click",{bubbles:!0,composed:!0}));return}this.active=!this.active,this.dispatchEvent(new CustomEvent("sw-split-button-toggle",{detail:this.active,bubbles:!0,composed:!0}))}render(){const e=this.items.length>0,i=I`
|
|
2895
2907
|
<slot name="active" @slotchange=${this._updateNamedSlots}></slot>
|
|
2896
2908
|
<slot name="inactive" @slotchange=${this._updateNamedSlots}></slot>
|
|
2897
|
-
${this._hasNamedSlots?
|
|
2898
|
-
`;return e?
|
|
2909
|
+
${this._hasNamedSlots?W:I`<slot></slot>`}
|
|
2910
|
+
`;return e?I`
|
|
2899
2911
|
<div class="pill" part="button">
|
|
2900
2912
|
<button class="main" @click=${this._onMainClick}>
|
|
2901
2913
|
${i}
|
|
@@ -2912,11 +2924,11 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2912
2924
|
@sw-dropup-close=${()=>this._dropupOpen=!1}
|
|
2913
2925
|
@sw-dropup-select=${this._onDropupSelect}
|
|
2914
2926
|
/>
|
|
2915
|
-
`:
|
|
2927
|
+
`:I`
|
|
2916
2928
|
<button class="solo" part="button" @click=${this._onMainClick}>
|
|
2917
2929
|
${i}
|
|
2918
2930
|
</button>
|
|
2919
|
-
`}},l.SwUiSplitButton.styles=
|
|
2931
|
+
`}},l.SwUiSplitButton.styles=[ut,ae`
|
|
2920
2932
|
:host {
|
|
2921
2933
|
display: inline-flex;
|
|
2922
2934
|
align-items: center;
|
|
@@ -2988,7 +3000,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
2988
3000
|
.solo:hover {
|
|
2989
3001
|
background: var(--sw-split-button-bg-hover, var(--bg-surface-raised));
|
|
2990
3002
|
}
|
|
2991
|
-
|
|
3003
|
+
`],Ki([E({converter:{fromAttribute(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}},toAttribute(t){return JSON.stringify(t)}}})],l.SwUiSplitButton.prototype,"items",2),Ki([E({reflect:!0})],l.SwUiSplitButton.prototype,"active",2),Ki([O()],l.SwUiSplitButton.prototype,"_dropupOpen",2),Ki([O()],l.SwUiSplitButton.prototype,"_hasNamedSlots",2),Ki([qr("#chevron-zone")],l.SwUiSplitButton.prototype,"_chevronBtn",2),l.SwUiSplitButton=Ki([le("sw-ui-split-button")],l.SwUiSplitButton);var vm=Object.defineProperty,bm=Object.getOwnPropertyDescriptor,Fe=(t,e,i,r)=>{for(var n=r>1?void 0:r?bm(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&&vm(e,i,n),n};l.SwUiControlBar=class extends ee{constructor(){super(...arguments),this.micMuted=!1,this.cameraMuted=!1,this.speakerMuted=!1,this.fullscreen=!1,this.screenSharing=!1,this.handRaised=!1,this.transcriptActive=!1,this.showScreenShare=!1,this.showHandRaise=!1,this.showTranscript=!1,this.showSettings=!1,this.showFullscreen=!0,this.micDevices=[],this.cameraDevices=[],this.speakerDevices=[],this.settingsItems=[]}_dispatch(e,i){this.dispatchEvent(new CustomEvent(e,{detail:i,bubbles:!0,composed:!0}))}_onMicToggle(){this.micMuted=!this.micMuted,this._dispatch("sw-mic-toggle",{muted:this.micMuted})}_onCameraToggle(){this.cameraMuted=!this.cameraMuted,this._dispatch("sw-camera-toggle",{muted:this.cameraMuted})}_onSpeakerToggle(){this.speakerMuted=!this.speakerMuted,this._dispatch("sw-speaker-toggle",{muted:this.speakerMuted})}_onDeviceSelect(e,i){this._dispatch("sw-device-change",{kind:e,deviceId:i.id,label:i.label})}_onFullscreenToggle(){this.fullscreen=!this.fullscreen,this._dispatch("sw-fullscreen-toggle",{fullscreen:this.fullscreen})}_onScreenShareToggle(){this.screenSharing=!this.screenSharing,this._dispatch("sw-screen-share-toggle",{active:this.screenSharing})}_onHandRaiseToggle(){this.handRaised=!this.handRaised,this._dispatch("sw-hand-raise-toggle",{raised:this.handRaised})}_onTranscriptToggle(){this.transcriptActive=!this.transcriptActive,this._dispatch("sw-transcript-toggle",void 0)}_onSettingsSelect(e){this._dispatch("sw-settings-change",{settingId:e.detail.id})}_onHangUp(){this._dispatch("sw-call-hangup",void 0)}_overflowItems(){const e=[];return this.showScreenShare&&e.push({id:"__overflow:screen-share",label:this.screenSharing?"Stop sharing":"Share screen",selected:this.screenSharing}),this.showHandRaise&&e.push({id:"__overflow:hand-raise",label:this.handRaised?"Lower hand":"Raise hand",selected:this.handRaised}),this.showTranscript&&e.push({id:"__overflow:transcript",label:"Transcript",selected:this.transcriptActive}),this.showSettings&&e.push(...this.settingsItems),this.showFullscreen&&e.push({id:"__overflow:fullscreen",label:this.fullscreen?"Exit fullscreen":"Fullscreen",selected:this.fullscreen}),e}_onOverflowSelect(e){switch(e.detail.id){case"__overflow:screen-share":this._onScreenShareToggle();return;case"__overflow:hand-raise":this._onHandRaiseToggle();return;case"__overflow:transcript":this._onTranscriptToggle();return;case"__overflow:fullscreen":this._onFullscreenToggle();return;default:this._dispatch("sw-settings-change",{settingId:e.detail.id})}}render(){return I`
|
|
2992
3004
|
<div class="bar" part="bar">
|
|
2993
3005
|
<!-- SignalWire logo -->
|
|
2994
3006
|
<span class="sw-logo" part="logo" aria-hidden="true">
|
|
@@ -3029,37 +3041,37 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
3029
3041
|
</sw-ui-split-button>
|
|
3030
3042
|
|
|
3031
3043
|
<!-- Screen share (optional) -->
|
|
3032
|
-
${this.showScreenShare?
|
|
3044
|
+
${this.showScreenShare?I`
|
|
3033
3045
|
<sw-ui-split-button
|
|
3034
3046
|
class="optional ${this.screenSharing?"active-toggle":""}"
|
|
3035
3047
|
@sw-split-button-click=${this._onScreenShareToggle}
|
|
3036
3048
|
>
|
|
3037
3049
|
<sw-ui-icon name=${this.screenSharing?"screen-share-off":"screen-share"}></sw-ui-icon>
|
|
3038
3050
|
</sw-ui-split-button>
|
|
3039
|
-
`:
|
|
3051
|
+
`:W}
|
|
3040
3052
|
|
|
3041
3053
|
<!-- Hand raise (optional) -->
|
|
3042
|
-
${this.showHandRaise?
|
|
3054
|
+
${this.showHandRaise?I`
|
|
3043
3055
|
<sw-ui-split-button
|
|
3044
3056
|
class="optional ${this.handRaised?"active-toggle":""}"
|
|
3045
3057
|
@sw-split-button-click=${this._onHandRaiseToggle}
|
|
3046
3058
|
>
|
|
3047
3059
|
<sw-ui-icon name="hand-raise"></sw-ui-icon>
|
|
3048
3060
|
</sw-ui-split-button>
|
|
3049
|
-
`:
|
|
3061
|
+
`:W}
|
|
3050
3062
|
|
|
3051
3063
|
<!-- Transcript (optional) -->
|
|
3052
|
-
${this.showTranscript?
|
|
3064
|
+
${this.showTranscript?I`
|
|
3053
3065
|
<sw-ui-split-button
|
|
3054
3066
|
class="optional ${this.transcriptActive?"active-toggle":""}"
|
|
3055
3067
|
@sw-split-button-click=${this._onTranscriptToggle}
|
|
3056
3068
|
>
|
|
3057
3069
|
<sw-ui-icon name="transcript"></sw-ui-icon>
|
|
3058
3070
|
</sw-ui-split-button>
|
|
3059
|
-
`:
|
|
3071
|
+
`:W}
|
|
3060
3072
|
|
|
3061
3073
|
<!-- Settings (optional) -->
|
|
3062
|
-
${this.showSettings?
|
|
3074
|
+
${this.showSettings?I`
|
|
3063
3075
|
<sw-ui-split-button
|
|
3064
3076
|
class="optional"
|
|
3065
3077
|
.items=${this.settingsItems}
|
|
@@ -3067,14 +3079,14 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
3067
3079
|
>
|
|
3068
3080
|
<sw-ui-icon name="settings"></sw-ui-icon>
|
|
3069
3081
|
</sw-ui-split-button>
|
|
3070
|
-
`:
|
|
3082
|
+
`:W}
|
|
3071
3083
|
|
|
3072
3084
|
<!-- Fullscreen (optional) -->
|
|
3073
|
-
${this.showFullscreen?
|
|
3085
|
+
${this.showFullscreen?I`
|
|
3074
3086
|
<sw-ui-split-button class="optional" @sw-split-button-click=${this._onFullscreenToggle}>
|
|
3075
3087
|
<sw-ui-icon name=${this.fullscreen?"fullscreen-exit":"fullscreen"}></sw-ui-icon>
|
|
3076
3088
|
</sw-ui-split-button>
|
|
3077
|
-
`:
|
|
3089
|
+
`:W}
|
|
3078
3090
|
|
|
3079
3091
|
<!-- Overflow menu (shown on narrow containers) -->
|
|
3080
3092
|
<sw-ui-split-button
|
|
@@ -3093,7 +3105,7 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
3093
3105
|
<!-- Spacer to balance the logo and keep buttons centered -->
|
|
3094
3106
|
<span class="bar-spacer" aria-hidden="true"></span>
|
|
3095
3107
|
</div>
|
|
3096
|
-
`}},l.SwUiControlBar.styles=
|
|
3108
|
+
`}},l.SwUiControlBar.styles=ae`
|
|
3097
3109
|
:host {
|
|
3098
3110
|
display: block;
|
|
3099
3111
|
background: var(--sw-control-bar-bg, transparent);
|
|
@@ -3168,29 +3180,29 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
3168
3180
|
padding: 2px 4px;
|
|
3169
3181
|
}
|
|
3170
3182
|
}
|
|
3171
|
-
`,
|
|
3183
|
+
`,Fe([E({type:Boolean,reflect:!0,attribute:"mic-muted"})],l.SwUiControlBar.prototype,"micMuted",2),Fe([E({type:Boolean,reflect:!0,attribute:"camera-muted"})],l.SwUiControlBar.prototype,"cameraMuted",2),Fe([E({type:Boolean,reflect:!0,attribute:"speaker-muted"})],l.SwUiControlBar.prototype,"speakerMuted",2),Fe([E({type:Boolean,reflect:!0})],l.SwUiControlBar.prototype,"fullscreen",2),Fe([E({type:Boolean,reflect:!0,attribute:"screen-sharing"})],l.SwUiControlBar.prototype,"screenSharing",2),Fe([E({type:Boolean,reflect:!0,attribute:"hand-raised"})],l.SwUiControlBar.prototype,"handRaised",2),Fe([E({type:Boolean,reflect:!0,attribute:"transcript-active"})],l.SwUiControlBar.prototype,"transcriptActive",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-screen-share"})],l.SwUiControlBar.prototype,"showScreenShare",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-hand-raise"})],l.SwUiControlBar.prototype,"showHandRaise",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-transcript"})],l.SwUiControlBar.prototype,"showTranscript",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-settings"})],l.SwUiControlBar.prototype,"showSettings",2),Fe([E({type:Boolean,reflect:!0,attribute:"show-fullscreen"})],l.SwUiControlBar.prototype,"showFullscreen",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"micDevices",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"cameraDevices",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"speakerDevices",2),Fe([E({attribute:!1})],l.SwUiControlBar.prototype,"settingsItems",2),l.SwUiControlBar=Fe([le("sw-ui-control-bar")],l.SwUiControlBar);const mm="4.0.0-rc.2",ym=!0;(()=>{if(typeof window<"u"){const t=new CustomEvent("signalwire:web-components:ready",{detail:{version:"4.0.0-rc.2"}});window.dispatchEvent(t)}})();var Bs={exports:{}},ul;function wm(){return ul||(ul=1,(function(t){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
|
|
3172
3184
|
* Prism: Lightweight, robust, elegant syntax highlighting
|
|
3173
3185
|
*
|
|
3174
3186
|
* @license MIT <https://opensource.org/licenses/MIT>
|
|
3175
3187
|
* @author Lea Verou <https://lea.verou.me>
|
|
3176
3188
|
* @namespace
|
|
3177
3189
|
* @public
|
|
3178
|
-
*/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 v(b){return b instanceof c?new c(b.type,v(b.content),b.alias):Array.isArray(b)?b.map(v):b.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(v){return Object.prototype.toString.call(v).slice(8,-1)},objId:function(v){return v.__id||Object.defineProperty(v,"__id",{value:++s}),v.__id},clone:function v(b,w){w=w||{};var A,D;switch(o.util.type(b)){case"Object":if(D=o.util.objId(b),w[D])return w[D];A={},w[D]=A;for(var F in b)b.hasOwnProperty(F)&&(A[F]=v(b[F],w));return A;case"Array":return D=o.util.objId(b),w[D]?w[D]:(A=[],w[D]=A,b.forEach(function(K,_){A[_]=v(K,w)}),A);default:return b}},getLanguage:function(v){for(;v;){var b=n.exec(v.className);if(b)return b[1].toLowerCase();v=v.parentElement}return"none"},setLanguage:function(v,b){v.className=v.className.replace(RegExp(n,"gi"),""),v.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 v=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(A.stack)||[])[1];if(v){var b=document.getElementsByTagName("script");for(var w in b)if(b[w].src==v)return b[w]}return null}},isActive:function(v,b,w){for(var A="no-"+b;v;){var D=v.classList;if(D.contains(b))return!0;if(D.contains(A))return!1;v=v.parentElement}return!!w}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(v,b){var w=o.util.clone(o.languages[v]);for(var A in b)w[A]=b[A];return w},insertBefore:function(v,b,w,A){A=A||o.languages;var D=A[v],F={};for(var K in D)if(D.hasOwnProperty(K)){if(K==b)for(var _ in w)w.hasOwnProperty(_)&&(F[_]=w[_]);w.hasOwnProperty(K)||(F[K]=D[K])}var te=A[v];return A[v]=F,o.languages.DFS(o.languages,function(U,ee){ee===te&&U!=v&&(this[U]=F)}),F},DFS:function v(b,w,A,D){D=D||{};var F=o.util.objId;for(var K in b)if(b.hasOwnProperty(K)){w.call(b,K,b[K],A||K);var _=b[K],te=o.util.type(_);te==="Object"&&!D[F(_)]?(D[F(_)]=!0,v(_,w,null,D)):te==="Array"&&!D[F(_)]&&(D[F(_)]=!0,v(_,w,K,D))}}},plugins:{},highlightAll:function(v,b){o.highlightAllUnder(document,v,b)},highlightAllUnder:function(v,b,w){var A={callback:w,container:v,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,F;F=A.elements[D++];)o.highlightElement(F,b===!0,A.callback)},highlightElement:function(v,b,w){var A=o.util.getLanguage(v),D=o.languages[A];o.util.setLanguage(v,A);var F=v.parentElement;F&&F.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(F,A);var K=v.textContent,_={element:v,language:A,grammar:D,code:K};function te(ee){_.highlightedCode=ee,o.hooks.run("before-insert",_),_.element.innerHTML=_.highlightedCode,o.hooks.run("after-highlight",_),o.hooks.run("complete",_),w&&w.call(_.element)}if(o.hooks.run("before-sanity-check",_),F=_.element.parentElement,F&&F.nodeName.toLowerCase()==="pre"&&!F.hasAttribute("tabindex")&&F.setAttribute("tabindex","0"),!_.code){o.hooks.run("complete",_),w&&w.call(_.element);return}if(o.hooks.run("before-highlight",_),!_.grammar){te(o.util.encode(_.code));return}if(b&&r.Worker){var U=new Worker(o.filename);U.onmessage=function(ee){te(ee.data)},U.postMessage(JSON.stringify({language:_.language,code:_.code,immediateClose:!0}))}else te(o.highlight(_.code,_.grammar,_.language))},highlight:function(v,b,w){var A={code:v,grammar:b,language:w};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(v,b){var w=b.rest;if(w){for(var A in w)b[A]=w[A];delete b.rest}var D=new p;return f(D,D.head,v),h(v,D,b,D.head,0),R(D)},hooks:{all:{},add:function(v,b){var w=o.hooks.all;w[v]=w[v]||[],w[v].push(b)},run:function(v,b){var w=o.hooks.all[v];if(!(!w||!w.length))for(var A=0,D;D=w[A++];)D(b)}},Token:c};r.Prism=o;function c(v,b,w,A){this.type=v,this.content=b,this.alias=w,this.length=(A||"").length|0}c.stringify=function v(b,w){if(typeof b=="string")return b;if(Array.isArray(b)){var A="";return b.forEach(function(te){A+=v(te,w)}),A}var D={type:b.type,content:v(b.content,w),tag:"span",classes:["token",b.type],attributes:{},language:w},F=b.alias;F&&(Array.isArray(F)?Array.prototype.push.apply(D.classes,F):D.classes.push(F)),o.hooks.run("wrap",D);var K="";for(var _ in D.attributes)K+=" "+_+'="'+(D.attributes[_]||"").replace(/"/g,""")+'"';return"<"+D.tag+' class="'+D.classes.join(" ")+'"'+K+">"+D.content+"</"+D.tag+">"};function u(v,b,w,A){v.lastIndex=b;var D=v.exec(w);if(D&&A&&D[1]){var F=D[1].length;D.index+=F,D[0]=D[0].slice(F)}return D}function h(v,b,w,A,D,F){for(var K in w)if(!(!w.hasOwnProperty(K)||!w[K])){var _=w[K];_=Array.isArray(_)?_:[_];for(var te=0;te<_.length;++te){if(F&&F.cause==K+","+te)return;var U=_[te],ee=U.inside,ct=!!U.lookbehind,It=!!U.greedy,kr=U.alias;if(It&&!U.pattern.global){var Is=U.pattern.toString().match(/[imsuy]*$/)[0];U.pattern=RegExp(U.pattern.source,Is+"g")}for(var mn=U.pattern||U,Ce=A.next,lt=D;Ce!==b.tail&&!(F&<>=F.reach);lt+=Ce.value.length,Ce=Ce.next){var Ut=Ce.value;if(b.length>v.length)return;if(!(Ut instanceof c)){var he=1,Xe;if(It){if(Xe=u(mn,lt,v,ct),!Xe||Xe.index>=v.length)break;var Mt=Xe.index,Ae=Xe.index+Xe[0].length,yt=lt;for(yt+=Ce.value.length;Mt>=yt;)Ce=Ce.next,yt+=Ce.value.length;if(yt-=Ce.value.length,lt=yt,Ce.value instanceof c)continue;for(var re=Ce;re!==b.tail&&(yt<Ae||typeof re.value=="string");re=re.next)he++,yt+=re.value.length;he--,Ut=v.slice(lt,yt),Xe.index-=lt}else if(Xe=u(mn,0,Ut,ct),!Xe)continue;var Mt=Xe.index,Nt=Xe[0],ut=Ut.slice(0,Mt),xr=Ut.slice(Mt+Nt.length),fi=lt+Ut.length;F&&fi>F.reach&&(F.reach=fi);var vi=Ce.prev;ut&&(vi=f(b,vi,ut),lt+=ut.length),m(b,vi,he);var yn=new c(K,ee?o.tokenize(Nt,ee):Nt,kr,Nt);if(Ce=f(b,vi,yn),xr&&f(b,Ce,xr),he>1){var wt={cause:K+","+te,reach:fi};h(v,b,w,Ce.prev,lt,wt),F&&wt.reach>F.reach&&(F.reach=wt.reach)}}}}}}function p(){var v={value:null,prev:null,next:null},b={value:null,prev:v,next:null};v.next=b,this.head=v,this.tail=b,this.length=0}function f(v,b,w){var A=b.next,D={value:w,prev:b,next:A};return b.next=D,A.prev=D,v.length++,D}function m(v,b,w){for(var A=b.next,D=0;D<w&&A!==v.tail;D++)A=A.next;b.next=A,A.prev=b,v.length-=D}function R(v){for(var b=[],w=v.head.next;w!==v.tail;)b.push(w.value),w=w.next;return b}if(!r.document)return r.addEventListener&&(o.disableWorkerMessageHandler||r.addEventListener("message",function(v){var b=JSON.parse(v.data),w=b.language,A=b.code,D=b.immediateClose;r.postMessage(o.highlight(A,o.languages[w],w)),D&&r.close()},!1)),o;var y=o.util.currentScript();y&&(o.filename=y.src,y.hasAttribute("data-manual")&&(o.manual=!0));function I(){o.manual||o.highlightAll()}if(!o.manual){var x=document.readyState;x==="loading"||x==="interactive"&&y&&y.defer?document.addEventListener("DOMContentLoaded",I):window.requestAnimationFrame?window.requestAnimationFrame(I):window.setTimeout(I,16)}return o})(e);t.exports&&(t.exports=i),typeof Qa<"u"&&(Qa.Prism=i),i.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(n,s){var a={};a["language-"+s]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:i.languages[s]},a.cdata=/^<!\[CDATA\[|\]\]>$/i;var o={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:a}};o["language-"+s]={pattern:/[\s\S]+/,inside:i.languages[s]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:o},i.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(i.languages.markup.tag,"addAttribute",{value:function(r,n){i.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:i.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.languages.xml,(function(r){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var s=r.languages.markup;s&&(s.tag.addInlined("style","css"),s.tag.addAttribute("style","css"))})(i),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),i.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),i.languages.markup&&(i.languages.markup.tag.addInlined("script","javascript"),i.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),i.languages.js=i.languages.javascript,(function(){if(typeof i>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",n=function(y,I){return"✖ Error "+y+" 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 f(y,I,x){var v=new XMLHttpRequest;v.open("GET",y,!0),v.onreadystatechange=function(){v.readyState==4&&(v.status<400&&v.responseText?I(v.responseText):v.status>=400?x(n(v.status,v.statusText)):x(s))},v.send(null)}function m(y){var I=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(y||"");if(I){var x=Number(I[1]),v=I[2],b=I[3];return v?b?[x,Number(b)]:[x,void 0]:[x,x]}}i.hooks.add("before-highlightall",function(y){y.selector+=", "+p}),i.hooks.add("before-sanity-check",function(y){var I=y.element;if(I.matches(p)){y.code="",I.setAttribute(o,c);var x=I.appendChild(document.createElement("CODE"));x.textContent=r;var v=I.getAttribute("data-src"),b=y.language;if(b==="none"){var w=(/\.(\w+)$/.exec(v)||[,"none"])[1];b=a[w]||w}i.util.setLanguage(x,b),i.util.setLanguage(I,b);var A=i.plugins.autoloader;A&&A.loadLanguages(b),f(v,function(D){I.setAttribute(o,u);var F=m(I.getAttribute("data-range"));if(F){var K=D.split(/\r\n?|\n/g),_=F[0],te=F[1]==null?K.length:F[1];_<0&&(_+=K.length),_=Math.max(0,Math.min(_-1,K.length)),te<0&&(te+=K.length),te=Math.max(0,Math.min(te,K.length)),D=K.slice(_,te).join(`
|
|
3179
|
-
`),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),v=0,b;b=x[v++];)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 jc=Hb();const jb=ve({__proto__:null,default:Gr(jc)},[jc]);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 Wc={},Gc;function Gb(){return Gc||(Gc=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)),Wc}var qc=Gb();const qb=ve({__proto__:null,default:Gr(qc)},[qc]);var Xc={},Yc;function Xb(){return Yc||(Yc=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),Xc}var Kc=Xb();const Yb=ve({__proto__:null,default:Gr(Kc)},[Kc]);(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 Zc=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(f){if(!(!f||typeof f=="string"))for(var m=0,R=f.length;m<R;m++){var y=f[m];if(y.type!=="code"){p(y.content);continue}var I=y.content[1],x=y.content[3];if(I&&x&&I.type==="code-language"&&x.type==="code-block"&&typeof I.content=="string"){var v=I.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp");v=(/[a-z][\w-]*/i.exec(v)||[""])[0].toLowerCase();var b="language-"+v;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="",f=0,m=h.classes.length;f<m;f++){var R=h.classes[f],y=/language-(.+)/.exec(R);if(y){p=y[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 v=document.getElementById(x);v&&(v.innerHTML=t.highlight(v.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(f,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 y=o[m];return y||f}}),p}t.languages.md=t.languages.markdown})(Prism);const $b=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function hn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let Xt=hn();function Qc(t){Xt=t}const Jc=/[&<>"']/,em=new RegExp(Jc.source,"g"),$c=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,tm=new RegExp($c.source,"g"),im={"&":"&","<":"<",">":">",'"':""","'":"'"},el=t=>im[t];function Je(t,e){if(e){if(Jc.test(t))return t.replace(em,el)}else if($c.test(t))return t.replace(tm,el);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 tl(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}const pn={exec:()=>null};function il(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 gn(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 rl(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 om(t,e){const i=t.match(/^(\s+)(?:```)/);if(i===null)return e;const r=i[1];return e.split(`
|
|
3190
|
+
*/var i=(function(r){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,s=0,a={},o={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function b(m){return m instanceof c?new c(m.type,b(m.content),m.alias):Array.isArray(m)?m.map(b):m.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(b){return Object.prototype.toString.call(b).slice(8,-1)},objId:function(b){return b.__id||Object.defineProperty(b,"__id",{value:++s}),b.__id},clone:function b(m,y){y=y||{};var w,k;switch(o.util.type(m)){case"Object":if(k=o.util.objId(m),y[k])return y[k];w={},y[k]=w;for(var F in m)m.hasOwnProperty(F)&&(w[F]=b(m[F],y));return w;case"Array":return k=o.util.objId(m),y[k]?y[k]:(w=[],y[k]=w,m.forEach(function(Q,N){w[N]=b(Q,y)}),w);default:return m}},getLanguage:function(b){for(;b;){var m=n.exec(b.className);if(m)return m[1].toLowerCase();b=b.parentElement}return"none"},setLanguage:function(b,m){b.className=b.className.replace(RegExp(n,"gi"),""),b.classList.add("language-"+m)},currentScript:function(){if(typeof document>"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(w){var b=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(w.stack)||[])[1];if(b){var m=document.getElementsByTagName("script");for(var y in m)if(m[y].src==b)return m[y]}return null}},isActive:function(b,m,y){for(var w="no-"+m;b;){var k=b.classList;if(k.contains(m))return!0;if(k.contains(w))return!1;b=b.parentElement}return!!y}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(b,m){var y=o.util.clone(o.languages[b]);for(var w in m)y[w]=m[w];return y},insertBefore:function(b,m,y,w){w=w||o.languages;var k=w[b],F={};for(var Q in k)if(k.hasOwnProperty(Q)){if(Q==m)for(var N in y)y.hasOwnProperty(N)&&(F[N]=y[N]);y.hasOwnProperty(Q)||(F[Q]=k[Q])}var ie=w[b];return w[b]=F,o.languages.DFS(o.languages,function(X,$){$===ie&&X!=b&&(this[X]=F)}),F},DFS:function b(m,y,w,k){k=k||{};var F=o.util.objId;for(var Q in m)if(m.hasOwnProperty(Q)){y.call(m,Q,m[Q],w||Q);var N=m[Q],ie=o.util.type(N);ie==="Object"&&!k[F(N)]?(k[F(N)]=!0,b(N,y,null,k)):ie==="Array"&&!k[F(N)]&&(k[F(N)]=!0,b(N,y,Q,k))}}},plugins:{},highlightAll:function(b,m){o.highlightAllUnder(document,b,m)},highlightAllUnder:function(b,m,y){var w={callback:y,container:b,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",w),w.elements=Array.prototype.slice.apply(w.container.querySelectorAll(w.selector)),o.hooks.run("before-all-elements-highlight",w);for(var k=0,F;F=w.elements[k++];)o.highlightElement(F,m===!0,w.callback)},highlightElement:function(b,m,y){var w=o.util.getLanguage(b),k=o.languages[w];o.util.setLanguage(b,w);var F=b.parentElement;F&&F.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(F,w);var Q=b.textContent,N={element:b,language:w,grammar:k,code:Q};function ie($){N.highlightedCode=$,o.hooks.run("before-insert",N),N.element.innerHTML=N.highlightedCode,o.hooks.run("after-highlight",N),o.hooks.run("complete",N),y&&y.call(N.element)}if(o.hooks.run("before-sanity-check",N),F=N.element.parentElement,F&&F.nodeName.toLowerCase()==="pre"&&!F.hasAttribute("tabindex")&&F.setAttribute("tabindex","0"),!N.code){o.hooks.run("complete",N),y&&y.call(N.element);return}if(o.hooks.run("before-highlight",N),!N.grammar){ie(o.util.encode(N.code));return}if(m&&r.Worker){var X=new Worker(o.filename);X.onmessage=function($){ie($.data)},X.postMessage(JSON.stringify({language:N.language,code:N.code,immediateClose:!0}))}else ie(o.highlight(N.code,N.grammar,N.language))},highlight:function(b,m,y){var w={code:b,grammar:m,language:y};if(o.hooks.run("before-tokenize",w),!w.grammar)throw new Error('The language "'+w.language+'" has no grammar.');return w.tokens=o.tokenize(w.code,w.grammar),o.hooks.run("after-tokenize",w),c.stringify(o.util.encode(w.tokens),w.language)},tokenize:function(b,m){var y=m.rest;if(y){for(var w in y)m[w]=y[w];delete m.rest}var k=new p;return v(k,k.head,b),h(b,k,m,k.head,0),_(k)},hooks:{all:{},add:function(b,m){var y=o.hooks.all;y[b]=y[b]||[],y[b].push(m)},run:function(b,m){var y=o.hooks.all[b];if(!(!y||!y.length))for(var w=0,k;k=y[w++];)k(m)}},Token:c};r.Prism=o;function c(b,m,y,w){this.type=b,this.content=m,this.alias=y,this.length=(w||"").length|0}c.stringify=function b(m,y){if(typeof m=="string")return m;if(Array.isArray(m)){var w="";return m.forEach(function(ie){w+=b(ie,y)}),w}var k={type:m.type,content:b(m.content,y),tag:"span",classes:["token",m.type],attributes:{},language:y},F=m.alias;F&&(Array.isArray(F)?Array.prototype.push.apply(k.classes,F):k.classes.push(F)),o.hooks.run("wrap",k);var Q="";for(var N in k.attributes)Q+=" "+N+'="'+(k.attributes[N]||"").replace(/"/g,""")+'"';return"<"+k.tag+' class="'+k.classes.join(" ")+'"'+Q+">"+k.content+"</"+k.tag+">"};function u(b,m,y,w){b.lastIndex=m;var k=b.exec(y);if(k&&w&&k[1]){var F=k[1].length;k.index+=F,k[0]=k[0].slice(F)}return k}function h(b,m,y,w,k,F){for(var Q in y)if(!(!y.hasOwnProperty(Q)||!y[Q])){var N=y[Q];N=Array.isArray(N)?N:[N];for(var ie=0;ie<N.length;++ie){if(F&&F.cause==Q+","+ie)return;var X=N[ie],$=X.inside,Bt=!!X.lookbehind,Ei=!!X.greedy,Jt=X.alias;if(Ei&&!X.pattern.global){var Ur=X.pattern.toString().match(/[imsuy]*$/)[0];X.pattern=RegExp(X.pattern.source,Ur+"g")}for(var Br=X.pattern||X,Pe=w.next,ht=k;Pe!==m.tail&&!(F&&ht>=F.reach);ht+=Pe.value.length,Pe=Pe.next){var $t=Pe.value;if(m.length>b.length)return;if(!($t instanceof c)){var oe=1,rt;if(Ei){if(rt=u(Br,ht,b,Bt),!rt||rt.index>=b.length)break;var er=rt.index,Xs=rt.index+rt[0].length,Rt=ht;for(Rt+=Pe.value.length;er>=Rt;)Pe=Pe.next,Rt+=Pe.value.length;if(Rt-=Pe.value.length,ht=Rt,Pe.value instanceof c)continue;for(var ki=Pe;ki!==m.tail&&(Rt<Xs||typeof ki.value=="string");ki=ki.next)oe++,Rt+=ki.value.length;oe--,$t=b.slice(ht,Rt),rt.index-=ht}else if(rt=u(Br,0,$t,Bt),!rt)continue;var er=rt.index,tr=rt[0],ir=$t.slice(0,er),Rn=$t.slice(er+tr.length),rr=ht+$t.length;F&&rr>F.reach&&(F.reach=rr);var ce=Pe.prev;ir&&(ce=v(m,ce,ir),ht+=ir.length),C(m,ce,oe);var Pn=new c(Q,$?o.tokenize(tr,$):tr,Jt,tr);if(Pe=v(m,ce,Pn),Rn&&v(m,Pe,Rn),oe>1){var he={cause:Q+","+ie,reach:rr};h(b,m,y,Pe.prev,ht,he),F&&he.reach>F.reach&&(F.reach=he.reach)}}}}}}function p(){var b={value:null,prev:null,next:null},m={value:null,prev:b,next:null};b.next=m,this.head=b,this.tail=m,this.length=0}function v(b,m,y){var w=m.next,k={value:y,prev:m,next:w};return m.next=k,w.prev=k,b.length++,k}function C(b,m,y){for(var w=m.next,k=0;k<y&&w!==b.tail;k++)w=w.next;m.next=w,w.prev=m,b.length-=k}function _(b){for(var m=[],y=b.head.next;y!==b.tail;)m.push(y.value),y=y.next;return m}if(!r.document)return r.addEventListener&&(o.disableWorkerMessageHandler||r.addEventListener("message",function(b){var m=JSON.parse(b.data),y=m.language,w=m.code,k=m.immediateClose;r.postMessage(o.highlight(w,o.languages[y],y)),k&&r.close()},!1)),o;var A=o.util.currentScript();A&&(o.filename=A.src,A.hasAttribute("data-manual")&&(o.manual=!0));function R(){o.manual||o.highlightAll()}if(!o.manual){var D=document.readyState;D==="loading"||D==="interactive"&&A&&A.defer?document.addEventListener("DOMContentLoaded",R):window.requestAnimationFrame?window.requestAnimationFrame(R):window.setTimeout(R,16)}return o})(e);t.exports&&(t.exports=i),typeof wo<"u"&&(wo.Prism=i),i.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(n,s){var a={};a["language-"+s]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:i.languages[s]},a.cdata=/^<!\[CDATA\[|\]\]>$/i;var o={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:a}};o["language-"+s]={pattern:/[\s\S]+/,inside:i.languages[s]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:o},i.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(i.languages.markup.tag,"addAttribute",{value:function(r,n){i.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:i.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.languages.xml,(function(r){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var s=r.languages.markup;s&&(s.tag.addInlined("style","css"),s.tag.addAttribute("style","css"))})(i),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),i.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),i.languages.markup&&(i.languages.markup.tag.addInlined("script","javascript"),i.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),i.languages.js=i.languages.javascript,(function(){if(typeof i>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",n=function(A,R){return"✖ Error "+A+" while fetching file: "+R},s="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",c="loading",u="loaded",h="failed",p="pre[data-src]:not(["+o+'="'+u+'"]):not(['+o+'="'+c+'"])';function v(A,R,D){var b=new XMLHttpRequest;b.open("GET",A,!0),b.onreadystatechange=function(){b.readyState==4&&(b.status<400&&b.responseText?R(b.responseText):b.status>=400?D(n(b.status,b.statusText)):D(s))},b.send(null)}function C(A){var R=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(A||"");if(R){var D=Number(R[1]),b=R[2],m=R[3];return b?m?[D,Number(m)]:[D,void 0]:[D,D]}}i.hooks.add("before-highlightall",function(A){A.selector+=", "+p}),i.hooks.add("before-sanity-check",function(A){var R=A.element;if(R.matches(p)){A.code="",R.setAttribute(o,c);var D=R.appendChild(document.createElement("CODE"));D.textContent=r;var b=R.getAttribute("data-src"),m=A.language;if(m==="none"){var y=(/\.(\w+)$/.exec(b)||[,"none"])[1];m=a[y]||y}i.util.setLanguage(D,m),i.util.setLanguage(R,m);var w=i.plugins.autoloader;w&&w.loadLanguages(m),v(b,function(k){R.setAttribute(o,u);var F=C(R.getAttribute("data-range"));if(F){var Q=k.split(/\r\n?|\n/g),N=F[0],ie=F[1]==null?Q.length:F[1];N<0&&(N+=Q.length),N=Math.max(0,Math.min(N-1,Q.length)),ie<0&&(ie+=Q.length),ie=Math.max(0,Math.min(ie,Q.length)),k=Q.slice(N,ie).join(`
|
|
3191
|
+
`),R.hasAttribute("data-start")||R.setAttribute("data-start",String(N+1))}D.textContent=k,i.highlightElement(D)},function(k){R.setAttribute(o,h),D.textContent=k})}}),i.plugins.fileHighlight={highlight:function(R){for(var D=(R||document).querySelectorAll(p),b=0,m;m=D[b++];)i.highlightElement(m)}};var _=!1;i.fileHighlight=function(){_||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),_=!0),i.plugins.fileHighlight.highlight.apply(this,arguments)}})()})(Bs)),Bs.exports}var dl=wm();const Sm=Ce({__proto__:null,default:rn(dl)},[dl]);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 Cm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var hl={},pl;function Am(){return pl||(pl=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)),hl}var gl=Am();const Tm=Ce({__proto__:null,default:rn(gl)},[gl]);var fl={},vl;function Em(){return vl||(vl=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),fl}var bl=Em();const km=Ce({__proto__:null,default:rn(bl)},[bl]);(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 ml=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 xm=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 Dm=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 Im=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 Mm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));(function(t){var e=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function i(h){return h=h.replace(/<inner>/g,function(){return e}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+h+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,n=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;t.languages.markdown=t.languages.extend("markup",{}),t.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:t.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+n+s+"(?:"+n+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+n+s+")(?:"+n+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:t.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+n+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+n+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:t.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:i(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:i(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:i(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:i(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(h){["url","bold","italic","strike","code-snippet"].forEach(function(p){h!==p&&(t.languages.markdown[h].inside.content.inside[p]=t.languages.markdown[p])})}),t.hooks.add("after-tokenize",function(h){if(h.language!=="markdown"&&h.language!=="md")return;function p(v){if(!(!v||typeof v=="string"))for(var C=0,_=v.length;C<_;C++){var A=v[C];if(A.type!=="code"){p(A.content);continue}var R=A.content[1],D=A.content[3];if(R&&D&&R.type==="code-language"&&D.type==="code-block"&&typeof R.content=="string"){var b=R.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp");b=(/[a-z][\w-]*/i.exec(b)||[""])[0].toLowerCase();var m="language-"+b;D.alias?typeof D.alias=="string"?D.alias=[D.alias,m]:D.alias.push(m):D.alias=[m]}}}p(h.tokens)}),t.hooks.add("wrap",function(h){if(h.type==="code-block"){for(var p="",v=0,C=h.classes.length;v<C;v++){var _=h.classes[v],A=/language-(.+)/.exec(_);if(A){p=A[1];break}}var R=t.languages[p];if(R)h.content=t.highlight(u(h.content),R,p);else if(p&&p!=="none"&&t.plugins.autoloader){var D="md-"+new Date().valueOf()+"-"+Math.floor(Math.random()*1e16);h.attributes.id=D,t.plugins.autoloader.loadLanguages(p,function(){var b=document.getElementById(D);b&&(b.innerHTML=t.highlight(b.textContent,t.languages[p],p))})}}});var a=RegExp(t.languages.markup.tag.pattern.source,"gi"),o={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;function u(h){var p=h.replace(a,"");return p=p.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(v,C){if(C=C.toLowerCase(),C[0]==="#"){var _;return C[1]==="x"?_=parseInt(C.slice(2),16):_=Number(C.slice(1)),c(_)}else{var A=o[C];return A||v}}),p}t.languages.md=t.languages.markdown})(Prism);const Rm=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function kn(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let Kt=kn();function yl(t){Kt=t}const wl=/[&<>"']/,Pm=new RegExp(wl.source,"g"),Sl=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,_m=new RegExp(Sl.source,"g"),Om={"&":"&","<":"<",">":">",'"':""","'":"'"},Cl=t=>Om[t];function tt(t,e){if(e){if(wl.test(t))return t.replace(Pm,Cl)}else if(Sl.test(t))return t.replace(_m,Cl);return t}const Lm=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function Fm(t){return t.replace(Lm,(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 Nm=/(^|[^\[])\^/g;function re(t,e){t=typeof t=="string"?t:t.source,e=e||"";const i={replace:(r,n)=>(n=typeof n=="object"&&"source"in n?n.source:n,n=n.replace(Nm,"$1"),t=t.replace(r,n),i),getRegex:()=>new RegExp(t,e)};return i}function Al(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}const xn={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 Dn(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 Um(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 El(t,e,i,r){const n=e.href,s=e.title?tt(e.title):null,a=t[1].replace(/\\([\[\]])/g,"$1");if(t[0].charAt(0)!=="!"){r.state.inLink=!0;const o={type:"link",raw:i,href:n,title:s,text:a,tokens:r.inlineTokens(a)};return r.state.inLink=!1,o}return{type:"image",raw:i,href:n,title:s,text:tt(a)}}function Bm(t,e){const i=t.match(/^(\s+)(?:```)/);if(i===null)return e;const r=i[1];return e.split(`
|
|
3180
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(`
|
|
3181
|
-
`)}class
|
|
3182
|
-
`)}}}fences(e){const i=this.rules.block.fences.exec(e);if(i){const r=i[0],n=
|
|
3193
|
+
`)}class _r{constructor(e){pe(this,"options");pe(this,"rules");pe(this,"lexer");this.options=e||Kt}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:Dn(r,`
|
|
3194
|
+
`)}}}fences(e){const i=this.rules.block.fences.exec(e);if(i){const r=i[0],n=Bm(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=Dn(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=Dn(i[0].replace(/^ *>[ \t]?/gm,""),`
|
|
3183
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(`
|
|
3184
|
-
`,1)[0].replace(/^\t+/,
|
|
3185
|
-
`,1)[0],
|
|
3186
|
-
`,e=e.substring(
|
|
3187
|
-
`,1)[0];if(
|
|
3188
|
-
`+
|
|
3189
|
-
`+
|
|
3190
|
-
`,e=e.substring(
|
|
3191
|
-
`):[]};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]=
|
|
3192
|
-
`?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:
|
|
3193
|
-
]`).replace("lheading",
|
|
3196
|
+
`,1)[0].replace(/^\t+/,D=>" ".repeat(3*D.length)),v=e.split(`
|
|
3197
|
+
`,1)[0],C=0;this.options.pedantic?(C=2,c=p.trimStart()):(C=i[2].search(/[^ ]/),C=C>4?1:C,c=p.slice(C),C+=i[1].length);let _=!1;if(!p&&/^ *$/.test(v)&&(o+=v+`
|
|
3198
|
+
`,e=e.substring(v.length+1),h=!0),!h){const D=new RegExp(`^ {0,${Math.min(3,C-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,C-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),m=new RegExp(`^ {0,${Math.min(3,C-1)}}(?:\`\`\`|~~~)`),y=new RegExp(`^ {0,${Math.min(3,C-1)}}#`);for(;e;){const w=e.split(`
|
|
3199
|
+
`,1)[0];if(v=w,this.options.pedantic&&(v=v.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),m.test(v)||y.test(v)||D.test(v)||b.test(e))break;if(v.search(/[^ ]/)>=C||!v.trim())c+=`
|
|
3200
|
+
`+v.slice(C);else{if(_||p.search(/[^ ]/)>=4||m.test(p)||y.test(p)||b.test(p))break;c+=`
|
|
3201
|
+
`+v}!_&&!v.trim()&&(_=!0),o+=w+`
|
|
3202
|
+
`,e=e.substring(w.length+1),p=v.slice(C)}}s.loose||(u?s.loose=!0:/\n *\n *$/.test(o)&&(u=!0));let A=null,R;this.options.gfm&&(A=/^\[[ xX]\] /.exec(c),A&&(R=A[0]!=="[ ] ",c=c.replace(/^\[[ xX]\] +/,""))),s.items.push({type:"list_item",raw:o,task:!!A,checked:R,loose:!1,text:c,tokens:[]}),s.raw+=o}s.items[s.items.length-1].raw=o.trimEnd(),s.items[s.items.length-1].text=c.trimEnd(),s.raw=s.raw.trimEnd();for(let h=0;h<s.items.length;h++)if(this.lexer.state.top=!1,s.items[h].tokens=this.lexer.blockTokens(s.items[h].text,[]),!s.loose){const p=s.items[h].tokens.filter(C=>C.type==="space"),v=p.length>0&&p.some(C=>/\n.*\n/.test(C.raw));s.loose=v}if(s.loose)for(let h=0;h<s.items.length;h++)s.items[h].loose=!0;return s}}html(e){const i=this.rules.block.html.exec(e);if(i)return{type:"html",block:!0,raw:i[0],pre:i[1]==="pre"||i[1]==="script"||i[1]==="style",text:i[0]}}def(e){const i=this.rules.block.def.exec(e);if(i){const r=i[1].toLowerCase().replace(/\s+/g," "),n=i[2]?i[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline._escapes,"$1"):"",s=i[3]?i[3].substring(1,i[3].length-1).replace(this.rules.inline._escapes,"$1"):i[3];return{type:"def",tag:r,raw:i[0],href:n,title:s}}}table(e){const i=this.rules.block.table.exec(e);if(i){if(!/[:|]/.test(i[2]))return;const r={type:"table",raw:i[0],header:Tl(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]=Tl(r.rows[s],r.header.length).map(u=>({text:u,tokens:[]}));for(n=r.header.length,a=0;a<n;a++)r.header[a].tokens=this.lexer.inline(r.header[a].text);for(n=r.rows.length,a=0;a<n;a++)for(c=r.rows[a],o=0;o<c.length;o++)c[o].tokens=this.lexer.inline(c[o].text);return r}}}lheading(e){const i=this.rules.block.lheading.exec(e);if(i)return{type:"heading",raw:i[0],depth:i[2].charAt(0)==="="?1:2,text:i[1],tokens:this.lexer.inline(i[1])}}paragraph(e){const i=this.rules.block.paragraph.exec(e);if(i){const r=i[1].charAt(i[1].length-1)===`
|
|
3204
|
+
`?i[1].slice(0,-1):i[1];return{type:"paragraph",raw:i[0],text:r,tokens:this.lexer.inline(r)}}}text(e){const i=this.rules.block.text.exec(e);if(i)return{type:"text",raw:i[0],text:i[0],tokens:this.lexer.inline(i[0])}}escape(e){const i=this.rules.inline.escape.exec(e);if(i)return{type:"escape",raw:i[0],text:tt(i[1])}}tag(e){const i=this.rules.inline.tag.exec(e);if(i)return!this.lexer.state.inLink&&/^<a /i.test(i[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(i[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:i[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:i[0]}}link(e){const i=this.rules.inline.link.exec(e);if(i){const r=i[2].trim();if(!this.options.pedantic&&/^</.test(r)){if(!/>$/.test(r))return;const a=Dn(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{const a=Um(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)),El(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 El(r,n,r[0],this.lexer)}}emStrong(e,i,r=""){let n=this.rules.inline.emStrong.lDelim.exec(e);if(!n||n[3]&&r.match(/[\p{L}\p{N}]/u))return;if(!(n[1]||n[2]||"")||!r||this.rules.inline.punctuation.exec(r)){const a=[...n[0]].length-1;let o,c,u=a,h=0;const p=n[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(p.lastIndex=0,i=i.slice(-1*e.length+a);(n=p.exec(i))!=null;){if(o=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!o)continue;if(c=[...o].length,n[3]||n[4]){u+=c;continue}else if((n[5]||n[6])&&a%3&&!((a+c)%3)){h+=c;continue}if(u-=c,u>0)continue;c=Math.min(c,c+u+h);const v=[...n[0]][0].length,C=e.slice(0,a+n.index+v+c);if(Math.min(a,c)%2){const A=C.slice(1,-1);return{type:"em",raw:C,text:A,tokens:this.lexer.inlineTokens(A)}}const _=C.slice(2,-2);return{type:"strong",raw:C,text:_,tokens:this.lexer.inlineTokens(_)}}}}codespan(e){const i=this.rules.inline.code.exec(e);if(i){let r=i[2].replace(/\n/g," ");const n=/[^ ]/.test(r),s=/^ /.test(r)&&/ $/.test(r);return n&&s&&(r=r.substring(1,r.length-1)),r=tt(r,!0),{type:"codespan",raw:i[0],text:r}}}br(e){const i=this.rules.inline.br.exec(e);if(i)return{type:"br",raw:i[0]}}del(e){const i=this.rules.inline.del.exec(e);if(i)return{type:"del",raw:i[0],text:i[2],tokens:this.lexer.inlineTokens(i[2])}}autolink(e){const i=this.rules.inline.autolink.exec(e);if(i){let r,n;return i[2]==="@"?(r=tt(i[1]),n="mailto:"+r):(r=tt(i[1]),n=r),{type:"link",raw:i[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}url(e){let i;if(i=this.rules.inline.url.exec(e)){let r,n;if(i[2]==="@")r=tt(i[0]),n="mailto:"+r;else{let s;do s=i[0],i[0]=this.rules.inline._backpedal.exec(i[0])[0];while(s!==i[0]);r=tt(i[0]),i[1]==="www."?n="http://"+i[0]:n=i[0]}return{type:"link",raw:i[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e){const i=this.rules.inline.text.exec(e);if(i){let r;return this.lexer.state.inRawBlock?r=i[0]:r=tt(i[0]),{type:"text",raw:i[0],text:r}}}}const V={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:xn,lheading:/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/};V._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/,V._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,V.def=re(V.def).replace("label",V._label).replace("title",V._title).getRegex(),V.bullet=/(?:[*+-]|\d{1,9}[.)])/,V.listItemStart=re(/^( *)(bull) */).replace("bull",V.bullet).getRegex(),V.list=re(V.list).replace(/bull/g,V.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+V.def.source+")").getRegex(),V._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",V._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,V.html=re(V.html,"i").replace("comment",V._comment).replace("tag",V._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),V.lheading=re(V.lheading).replace(/bull/g,V.bullet).getRegex(),V.paragraph=re(V._paragraph).replace("hr",V.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",V._tag).getRegex(),V.blockquote=re(V.blockquote).replace("paragraph",V.paragraph).getRegex(),V.normal={...V},V.gfm={...V.normal,table:"^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},V.gfm.table=re(V.gfm.table).replace("hr",V.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",V._tag).getRegex(),V.gfm.paragraph=re(V._paragraph).replace("hr",V.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",V.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",V._tag).getRegex(),V.pedantic={...V.normal,html:re(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",V._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:xn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:re(V.normal._paragraph).replace("hr",V.hr).replace("heading",` *#{1,6} *[^
|
|
3205
|
+
]`).replace("lheading",V.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const P={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:xn,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:xn,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^((?![*_])[\spunctuation])/};P._punctuation="\\p{P}$+<=>`^|~",P.punctuation=re(P.punctuation,"u").replace(/punctuation/g,P._punctuation).getRegex(),P.blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,P.anyPunctuation=/\\[punct]/g,P._escapes=/\\([punct])/g,P._comment=re(V._comment).replace("(?:-->|$)","-->").getRegex(),P.emStrong.lDelim=re(P.emStrong.lDelim,"u").replace(/punct/g,P._punctuation).getRegex(),P.emStrong.rDelimAst=re(P.emStrong.rDelimAst,"gu").replace(/punct/g,P._punctuation).getRegex(),P.emStrong.rDelimUnd=re(P.emStrong.rDelimUnd,"gu").replace(/punct/g,P._punctuation).getRegex(),P.anyPunctuation=re(P.anyPunctuation,"gu").replace(/punct/g,P._punctuation).getRegex(),P._escapes=re(P._escapes,"gu").replace(/punct/g,P._punctuation).getRegex(),P._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,P._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,P.autolink=re(P.autolink).replace("scheme",P._scheme).replace("email",P._email).getRegex(),P._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,P.tag=re(P.tag).replace("comment",P._comment).replace("attribute",P._attribute).getRegex(),P._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,P._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,P._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,P.link=re(P.link).replace("label",P._label).replace("href",P._href).replace("title",P._title).getRegex(),P.reflink=re(P.reflink).replace("label",P._label).replace("ref",V._label).getRegex(),P.nolink=re(P.nolink).replace("ref",V._label).getRegex(),P.reflinkSearch=re(P.reflinkSearch,"g").replace("reflink",P.reflink).replace("nolink",P.nolink).getRegex(),P.normal={...P},P.pedantic={...P.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:re(/^!?\[(label)\]\((.*?)\)/).replace("label",P._label).getRegex(),reflink:re(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",P._label).getRegex()},P.gfm={...P.normal,escape:re(P.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},P.gfm.url=re(P.gfm.url,"i").replace("email",P.gfm._extended_email).getRegex(),P.breaks={...P.gfm,br:re(P.br).replace("{2,}","*").getRegex(),text:re(P.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};class bt{constructor(e){pe(this,"tokens");pe(this,"options");pe(this,"state");pe(this,"tokenizer");pe(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Kt,this.options.tokenizer=this.options.tokenizer||new _r,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const i={block:V.normal,inline:P.normal};this.options.pedantic?(i.block=V.pedantic,i.inline=P.pedantic):this.options.gfm&&(i.block=V.gfm,this.options.breaks?i.inline=P.breaks:i.inline=P.gfm),this.tokenizer.rules=i}static get rules(){return{block:V,inline:P}}static lex(e,i){return new bt(i).lex(e)}static lexInline(e,i){return new bt(i).inlineTokens(e)}lex(e){e=e.replace(/\r\n|\r/g,`
|
|
3194
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+=`
|
|
3195
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+=`
|
|
3196
3208
|
`+r.raw,n.text+=`
|
|
@@ -3200,9 +3212,9 @@ var SignalWireUI=(function(l){"use strict";var Km=Object.defineProperty;var Vl=l
|
|
|
3200
3212
|
`+r.raw,n.text+=`
|
|
3201
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+=`
|
|
3202
3214
|
`+r.raw,n.text+=`
|
|
3203
|
-
`+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
|
|
3204
|
-
`,n?'<pre><code class="language-'+
|
|
3205
|
-
`:"<pre><code>"+(r?e:
|
|
3215
|
+
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):i.push(r);continue}if(e){const o="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(o);break}else throw new Error(o)}}return this.state.top=!0,i}inline(e,i=[]){return this.inlineQueue.push({src:e,tokens:i}),i}inlineTokens(e,i=[]){let r,n,s,a=e,o,c,u;if(this.tokens.links){const h=Object.keys(this.tokens.links);if(h.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)h.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(c||(u=""),c=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(h=>(r=h.call({lexer:this},e,i))?(e=e.substring(r.raw.length),i.push(r),!0):!1))){if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),n=i[i.length-1],n&&r.type==="text"&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length),n=i[i.length-1],n&&r.type==="text"&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(r=this.tokenizer.emStrong(e,a,u)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.del(e)){e=e.substring(r.raw.length),i.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),i.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),i.push(r);continue}if(s=e,this.options.extensions&&this.options.extensions.startInline){let h=1/0;const p=e.slice(1);let v;this.options.extensions.startInline.forEach(C=>{v=C.call({lexer:this},p),typeof v=="number"&&v>=0&&(h=Math.min(h,v))}),h<1/0&&h>=0&&(s=e.substring(0,h+1))}if(r=this.tokenizer.inlineText(s)){e=e.substring(r.raw.length),r.raw.slice(-1)!=="_"&&(u=r.raw.slice(-1)),c=!0,n=i[i.length-1],n&&n.type==="text"?(n.raw+=r.raw,n.text+=r.text):i.push(r);continue}if(e){const h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return i}}class Or{constructor(e){pe(this,"options");this.options=e||Kt}code(e,i,r){var s;const n=(s=(i||"").match(/^\S*/))==null?void 0:s[0];return e=e.replace(/\n$/,"")+`
|
|
3216
|
+
`,n?'<pre><code class="language-'+tt(n)+'">'+(r?e:tt(e,!0))+`</code></pre>
|
|
3217
|
+
`:"<pre><code>"+(r?e:tt(e,!0))+`</code></pre>
|
|
3206
3218
|
`}blockquote(e){return`<blockquote>
|
|
3207
3219
|
${e}</blockquote>
|
|
3208
3220
|
`}html(e,i){return e}heading(e,i,r){return`<h${i}>${e}</h${i}>
|
|
@@ -3218,8 +3230,9 @@ ${e}</blockquote>
|
|
|
3218
3230
|
`}tablerow(e){return`<tr>
|
|
3219
3231
|
${e}</tr>
|
|
3220
3232
|
`}tablecell(e,i){const r=i.header?"th":"td";return(i.align?`<${r} align="${i.align}">`:`<${r}>`)+e+`</${r}>
|
|
3221
|
-
`}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=
|
|
3222
|
-
`+(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
|
|
3223
|
-
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 hi=new nl;function $(t,e){return hi.parse(t,e)}$.options=$.setOptions=function(t){return hi.setOptions(t),$.defaults=hi.defaults,Qc($.defaults),$},$.getDefaults=hn,$.defaults=Xt,$.use=function(...t){return hi.use(...t),$.defaults=hi.defaults,Qc($.defaults),$},$.walkTokens=function(t,e){return hi.walkTokens(t,e)},$.parseInline=hi.parseInline,$.Parser=bt,$.parser=bt.parse,$.Renderer=wr,$.TextRenderer=fn,$.Lexer=vt,$.lexer=vt.lex,$.Tokenizer=yr,$.Hooks=Vi,$.parse=$;const cm=$.options,lm=$.setOptions,um=$.use,dm=$.walkTokens,hm=$.parseInline,pm=$,gm=bt.parse,fm=vt.lex,vm=Object.freeze(Object.defineProperty({__proto__:null,Hooks:Vi,Lexer:vt,Marked:nl,Parser:bt,Renderer:wr,TextRenderer:fn,Tokenizer:yr,get defaults(){return Xt},getDefaults:hn,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:sl,setPrototypeOf:al,isFrozen:bm,getPrototypeOf:mm,getOwnPropertyDescriptor:ym}=Object;let{freeze:Ve,seal:ot,create:Hi}=Object,{apply:Cs,construct:As}=typeof Reflect<"u"&&Reflect;Ve||(Ve=function(e){return e}),ot||(ot=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 Sr=ye(Array.prototype.forEach),wm=ye(Array.prototype.lastIndexOf),ol=ye(Array.prototype.pop),Cr=ye(Array.prototype.push),Sm=ye(Array.prototype.splice),He=Array.isArray,Ar=ye(String.prototype.toLowerCase),Ts=ye(String.prototype.toString),cl=ye(String.prototype.match),ji=ye(String.prototype.replace),ll=ye(String.prototype.indexOf),Cm=ye(String.prototype.trim),Am=ye(Number.prototype.toString),Tm=ye(Boolean.prototype.toString),ul=typeof BigInt>"u"?null:ye(BigInt.prototype.toString),dl=typeof Symbol>"u"?null:ye(Symbol.prototype.toString),ge=ye(Object.prototype.hasOwnProperty),Tr=ye(Object.prototype.toString),_e=ye(RegExp.prototype.test),vn=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 Cs(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 As(t,i)}}function q(t,e){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ar;if(al&&al(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 qe(t){const e=Hi(null);for(const[i,r]of sl(t))ge(t,i)&&(He(r)?e[i]=km(r):r&&typeof r=="object"&&r.constructor===Object?e[i]=qe(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 ul?ul(t):"0";case"symbol":return dl?dl(t):"Symbol()";case"undefined":return Tr(t);case"function":case"object":{if(t===null)return Tr(t);const e=t,i=Wi(e,"toString");if(typeof i=="function"){const r=i(e);return typeof r=="string"?r:Tr(r)}return Tr(t)}default:return Tr(t)}}function Wi(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 hl=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"]),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"]),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"]),Mm=Ve(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),pl=Ve(["#text"]),gl=Ve(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Ds=Ve(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),fl=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"]),bn=Ve(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Rm=ot(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Pm=ot(/<%[\w\W]*|[\w\W]*%>/gm),Om=ot(/\$\{[\w\W]*/gm),_m=ot(/^data-[\-\w.\u00B7-\uFFFF]+$/),Lm=ot(/^aria-[\-\w]+$/),vl=ot(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Fm=ot(/^(?:\w+script|data):/i),Um=ot(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),bl=ot(/^html$/i),Nm=ot(/^[a-z][.\w]*(-[.\w]+)+$/i);var ml=Object.freeze({__proto__:null,ARIA_ATTR:Lm,ATTR_WHITESPACE:Um,CUSTOM_ELEMENT:Nm,DATA_ATTR:_m,DOCTYPE_NAME:bl,ERB_EXPR:Pm,IS_ALLOWED_URI:vl,IS_SCRIPT_OR_DATA:Fm,MUSTACHE_EXPR:Rm,TMPLIT_EXPR:Om});const Er={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}},yl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function wl(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Bm();const e=H=>wl(H);if(e.version="3.4.1",e.removed=[],!t||!t.document||t.document.nodeType!==Er.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:f,trustedTypes:m}=t,R=c.prototype,y=Wi(R,"cloneNode"),I=Wi(R,"remove"),x=Wi(R,"nextSibling"),v=Wi(R,"childNodes"),b=Wi(R,"parentNode");if(typeof a=="function"){const H=i.createElement("template");H.content&&H.content.ownerDocument&&(i=H.content.ownerDocument)}let w,A="";const{implementation:D,createNodeIterator:F,createDocumentFragment:K,getElementsByTagName:_}=i,{importNode:te}=r;let U=yl();e.isSupported=typeof sl=="function"&&typeof b=="function"&&D&&D.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:ee,ERB_EXPR:ct,TMPLIT_EXPR:It,DATA_ATTR:kr,ARIA_ATTR:Is,IS_SCRIPT_OR_DATA:mn,ATTR_WHITESPACE:Ce,CUSTOM_ELEMENT:lt}=ml;let{IS_ALLOWED_URI:Ut}=ml,he=null;const Xe=q({},[...hl,...Es,...ks,...xs,...pl]);let Ae=null;const yt=q({},[...gl,...Ds,...fl,...bn]);let re=Object.seal(Hi(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}})),Mt=null,Nt=null;const ut=Object.seal(Hi(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let xr=!0,fi=!0,vi=!1,yn=!0,wt=!1,Dr=!0,bi=!1,Ms=!1,Rs=!1,Gi=!1,wn=!1,Sn=!1,Al=!0,Tl=!1;const El="user-content-";let Ps=!0,Ir=!1,qi={},Rt=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 kl=null;const xl=q({},["audio","video","img","source","image","track"]);let _s=null;const Dl=q({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Cn="http://www.w3.org/1998/Math/MathML",An="http://www.w3.org/2000/svg",Pt="http://www.w3.org/1999/xhtml";let Xi=Pt,Ls=!1,Fs=null;const Hm=q({},[Cn,An,Pt],Ts);let Us=q({},["mi","mo","mn","ms","mtext"]),Ns=q({},["annotation-xml"]);const jm=q({},["title","style","font","a","script"]);let Mr=null;const Wm=["application/xhtml+xml","text/html"],Gm="text/html";let Te=null,Yi=null;const qm=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(Yi&&Yi===d)return;(!d||typeof d!="object")&&(d={}),d=qe(d),Mr=Wm.indexOf(d.PARSER_MEDIA_TYPE)===-1?Gm:d.PARSER_MEDIA_TYPE,Te=Mr==="application/xhtml+xml"?Ts:Ar,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):yt,Fs=ge(d,"ALLOWED_NAMESPACES")&&He(d.ALLOWED_NAMESPACES)?q({},d.ALLOWED_NAMESPACES,Ts):Hm,_s=ge(d,"ADD_URI_SAFE_ATTR")&&He(d.ADD_URI_SAFE_ATTR)?q(qe(Dl),d.ADD_URI_SAFE_ATTR,Te):Dl,kl=ge(d,"ADD_DATA_URI_TAGS")&&He(d.ADD_DATA_URI_TAGS)?q(qe(xl),d.ADD_DATA_URI_TAGS,Te):xl,Rt=ge(d,"FORBID_CONTENTS")&&He(d.FORBID_CONTENTS)?q({},d.FORBID_CONTENTS,Te):Os,Mt=ge(d,"FORBID_TAGS")&&He(d.FORBID_TAGS)?q({},d.FORBID_TAGS,Te):qe({}),Nt=ge(d,"FORBID_ATTR")&&He(d.FORBID_ATTR)?q({},d.FORBID_ATTR,Te):qe({}),qi=ge(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?qe(d.USE_PROFILES):d.USE_PROFILES:!1,xr=d.ALLOW_ARIA_ATTR!==!1,fi=d.ALLOW_DATA_ATTR!==!1,vi=d.ALLOW_UNKNOWN_PROTOCOLS||!1,yn=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,wt=d.SAFE_FOR_TEMPLATES||!1,Dr=d.SAFE_FOR_XML!==!1,bi=d.WHOLE_DOCUMENT||!1,Gi=d.RETURN_DOM||!1,wn=d.RETURN_DOM_FRAGMENT||!1,Sn=d.RETURN_TRUSTED_TYPE||!1,Rs=d.FORCE_BODY||!1,Al=d.SANITIZE_DOM!==!1,Tl=d.SANITIZE_NAMED_PROPS||!1,Ps=d.KEEP_CONTENT!==!1,Ir=d.IN_PLACE||!1,Ut=Dm(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:vl,Xi=typeof d.NAMESPACE=="string"?d.NAMESPACE:Pt,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 C=ge(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?qe(d.CUSTOM_ELEMENT_HANDLING):Hi(null);if(re=Hi(null),ge(C,"tagNameCheck")&&Il(C.tagNameCheck)&&(re.tagNameCheck=C.tagNameCheck),ge(C,"attributeNameCheck")&&Il(C.attributeNameCheck)&&(re.attributeNameCheck=C.attributeNameCheck),ge(C,"allowCustomizedBuiltInElements")&&typeof C.allowCustomizedBuiltInElements=="boolean"&&(re.allowCustomizedBuiltInElements=C.allowCustomizedBuiltInElements),wt&&(fi=!1),wn&&(Gi=!0),qi&&(he=q({},pl),Ae=Hi(null),qi.html===!0&&(q(he,hl),q(Ae,gl)),qi.svg===!0&&(q(he,Es),q(Ae,Ds),q(Ae,bn)),qi.svgFilters===!0&&(q(he,ks),q(Ae,Ds),q(Ae,bn)),qi.mathMl===!0&&(q(he,xs),q(Ae,fl),q(Ae,bn))),ut.tagCheck=null,ut.attributeCheck=null,ge(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?ut.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"?ut.attributeCheck=d.ADD_ATTR:He(d.ADD_ATTR)&&(Ae===yt&&(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)&&(Rt===Os&&(Rt=qe(Rt)),q(Rt,d.FORBID_CONTENTS,Te)),ge(d,"ADD_FORBID_CONTENTS")&&He(d.ADD_FORBID_CONTENTS)&&(Rt===Os&&(Rt=qe(Rt)),q(Rt,d.ADD_FORBID_CONTENTS,Te)),Ps&&(he["#text"]=!0),bi&&q(he,["html","head","body"]),he.table&&(q(he,["tbody"]),delete Mt.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw vn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw vn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');w=d.TRUSTED_TYPES_POLICY,A=w.createHTML("")}else w===void 0&&(w=zm(m,n)),w!==null&&typeof A=="string"&&(A=w.createHTML(""));Ve&&Ve(d),Yi=d},Ml=q({},[...Es,...ks,...Im]),Rl=q({},[...xs,...Mm]),Xm=function(d){let C=b(d);(!C||!C.tagName)&&(C={namespaceURI:Xi,tagName:"template"});const O=Ar(d.tagName),de=Ar(C.tagName);return Fs[d.namespaceURI]?d.namespaceURI===An?C.namespaceURI===Pt?O==="svg":C.namespaceURI===Cn?O==="svg"&&(de==="annotation-xml"||Us[de]):!!Ml[O]:d.namespaceURI===Cn?C.namespaceURI===Pt?O==="math":C.namespaceURI===An?O==="math"&&Ns[de]:!!Rl[O]:d.namespaceURI===Pt?C.namespaceURI===An&&!Ns[de]||C.namespaceURI===Cn&&!Us[de]?!1:!Rl[O]&&(jm[O]||!Ml[O]):!!(Mr==="application/xhtml+xml"&&Fs[d.namespaceURI]):!1},St=function(d){Cr(e.removed,{element:d});try{b(d).removeChild(d)}catch{I(d)}},mi=function(d,C){try{Cr(e.removed,{attribute:C.getAttributeNode(d),from:C})}catch{Cr(e.removed,{attribute:null,from:C})}if(C.removeAttribute(d),d==="is")if(Gi||wn)try{St(C)}catch{}else try{C.setAttribute(d,"")}catch{}},Pl=function(d){let C=null,O=null;if(Rs)d="<remove></remove>"+d;else{const we=cl(d,/^[\r\n\t ]+/);O=we&&we[0]}Mr==="application/xhtml+xml"&&Xi===Pt&&(d='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+d+"</body></html>");const de=w?w.createHTML(d):d;if(Xi===Pt)try{C=new f().parseFromString(de,Mr)}catch{}if(!C||!C.documentElement){C=D.createDocument(Xi,"template",null);try{C.documentElement.innerHTML=Ls?A:de}catch{}}const Fe=C.body||C.documentElement;return d&&O&&Fe.insertBefore(i.createTextNode(O),Fe.childNodes[0]||null),Xi===Pt?_.call(C,bi?"html":"body")[0]:bi?C.documentElement:Fe},Ol=function(d){return F.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 Bt(H,d,C){Sr(H,O=>{O.call(e,d,C,Yi)})}const _l=function(d){let C=null;if(Bt(U.beforeSanitizeElements,d,null),zs(d))return St(d),!0;const O=Te(d.nodeName);if(Bt(U.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===Pt&&O==="style"&&Vs(d.firstElementChild)||d.nodeType===Er.progressingInstruction||Dr&&d.nodeType===Er.comment&&_e(/<[/\w]/g,d.data))return St(d),!0;if(Mt[O]||!(ut.tagCheck instanceof Function&&ut.tagCheck(O))&&!he[O]){if(!Mt[O]&&Fl(O)&&(re.tagNameCheck instanceof RegExp&&_e(re.tagNameCheck,O)||re.tagNameCheck instanceof Function&&re.tagNameCheck(O)))return!1;if(Ps&&!Rt[O]){const de=b(d)||d.parentNode,Fe=v(d)||d.childNodes;if(Fe&&de){const we=Fe.length;for(let Ye=we-1;Ye>=0;--Ye){const dt=y(Fe[Ye],!0);de.insertBefore(dt,x(d))}}}return St(d),!0}return d instanceof c&&!Xm(d)||(O==="noscript"||O==="noembed"||O==="noframes")&&_e(/<\/no(script|embed|frames)/i,d.innerHTML)?(St(d),!0):(wt&&d.nodeType===Er.text&&(C=d.textContent,Sr([ee,ct,It],de=>{C=ji(C,de," ")}),d.textContent!==C&&(Cr(e.removed,{element:d.cloneNode()}),d.textContent=C)),Bt(U.afterSanitizeElements,d,null),!1)},Ll=function(d,C,O){if(Nt[C]||Al&&(C==="id"||C==="name")&&(O in i||O in qm))return!1;if(!(fi&&!Nt[C]&&_e(kr,C))){if(!(xr&&_e(Is,C))){if(!(ut.attributeCheck instanceof Function&&ut.attributeCheck(C,d))){if(!Ae[C]||Nt[C]){if(!(Fl(d)&&(re.tagNameCheck instanceof RegExp&&_e(re.tagNameCheck,d)||re.tagNameCheck instanceof Function&&re.tagNameCheck(d))&&(re.attributeNameCheck instanceof RegExp&&_e(re.attributeNameCheck,C)||re.attributeNameCheck instanceof Function&&re.attributeNameCheck(C,d))||C==="is"&&re.allowCustomizedBuiltInElements&&(re.tagNameCheck instanceof RegExp&&_e(re.tagNameCheck,O)||re.tagNameCheck instanceof Function&&re.tagNameCheck(O))))return!1}else if(!_s[C]){if(!_e(Ut,ji(O,Ce,""))){if(!((C==="src"||C==="xlink:href"||C==="href")&&d!=="script"&&ll(O,"data:")===0&&kl[d])){if(!(vi&&!_e(mn,ji(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"]),Fl=function(d){return!Ym[Ar(d)]&&_e(lt,d)},Ul=function(d){Bt(U.beforeSanitizeAttributes,d,null);const{attributes:C}=d;if(!C||zs(d))return;const O={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ae,forceKeepAttr:void 0};let de=C.length;for(;de--;){const Fe=C[de],{name:we,namespaceURI:Ye,value:dt}=Fe,Ct=Te(we),Hs=dt;let De=we==="value"?Hs:Cm(Hs);if(O.attrName=Ct,O.attrValue=De,O.keepAttr=!0,O.forceKeepAttr=void 0,Bt(U.uponSanitizeAttribute,d,O),De=O.attrValue,Tl&&(Ct==="id"||Ct==="name")&&ll(De,El)!==0&&(mi(we,d),De=El+De),Dr&&_e(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,De)){mi(we,d);continue}if(Ct==="attributename"&&cl(De,"href")){mi(we,d);continue}if(O.forceKeepAttr)continue;if(!O.keepAttr){mi(we,d);continue}if(!yn&&_e(/\/>/i,De)){mi(we,d);continue}wt&&Sr([ee,ct,It],zl=>{De=ji(De,zl," ")});const Bl=Te(d.nodeName);if(!Ll(Bl,Ct,De)){mi(we,d);continue}if(w&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ye)switch(m.getAttributeType(Bl,Ct)){case"TrustedHTML":{De=w.createHTML(De);break}case"TrustedScriptURL":{De=w.createScriptURL(De);break}}if(De!==Hs)try{Ye?d.setAttributeNS(Ye,we,De):d.setAttribute(we,De),zs(d)?St(d):ol(e.removed)}catch{mi(we,d)}}Bt(U.afterSanitizeAttributes,d,null)},Nl=function(d){let C=null;const O=Ol(d);for(Bt(U.beforeSanitizeShadowDOM,d,null);C=O.nextNode();)Bt(U.uponSanitizeShadowNode,C,null),_l(C),Ul(C),C.content instanceof s&&Nl(C.content);Bt(U.afterSanitizeShadowDOM,d,null)};return e.sanitize=function(H){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},C=null,O=null,de=null,Fe=null;if(Ls=!H,Ls&&(H="<!-->"),typeof H!="string"&&!Vs(H)&&(H=xm(H),typeof H!="string"))throw vn("dirty is not a string, aborting");if(!e.isSupported)return H;if(Ms||Bs(d),e.removed=[],typeof H=="string"&&(Ir=!1),Ir){const dt=H.nodeName;if(typeof dt=="string"){const Ct=Te(dt);if(!he[Ct]||Mt[Ct])throw vn("root node is forbidden and cannot be sanitized in-place")}}else if(H instanceof o)C=Pl("<!---->"),O=C.ownerDocument.importNode(H,!0),O.nodeType===Er.element&&O.nodeName==="BODY"||O.nodeName==="HTML"?C=O:C.appendChild(O);else{if(!Gi&&!wt&&!bi&&H.indexOf("<")===-1)return w&&Sn?w.createHTML(H):H;if(C=Pl(H),!C)return Gi?null:Sn?A:""}C&&Rs&&St(C.firstChild);const we=Ol(Ir?H:C);for(;de=we.nextNode();)_l(de),Ul(de),de.content instanceof s&&Nl(de.content);if(Ir)return H;if(Gi){if(wt){C.normalize();let dt=C.innerHTML;Sr([ee,ct,It],Ct=>{dt=ji(dt,Ct," ")}),C.innerHTML=dt}if(wn)for(Fe=K.call(C.ownerDocument);C.firstChild;)Fe.appendChild(C.firstChild);else Fe=C;return(Ae.shadowroot||Ae.shadowrootmode)&&(Fe=te.call(r,Fe,!0)),Fe}let Ye=bi?C.outerHTML:C.innerHTML;return bi&&he["!doctype"]&&C.ownerDocument&&C.ownerDocument.doctype&&C.ownerDocument.doctype.name&&_e(bl,C.ownerDocument.doctype.name)&&(Ye="<!DOCTYPE "+C.ownerDocument.doctype.name+`>
|
|
3224
|
-
`+Ye),wt&&Sr([ee,ct,It],dt=>{Ye=ji(Ye,dt," ")}),w&&Sn?w.createHTML(Ye):Ye},e.setConfig=function(){let H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Bs(H),Ms=!0},e.clearConfig=function(){Yi=null,Ms=!1},e.isValidAttribute=function(H,d,C){Yi||Bs({});const O=Te(H),de=Te(d);return Ll(O,de,C)},e.addHook=function(H,d){typeof d=="function"&&Cr(U[H],d)},e.removeHook=function(H,d){if(d!==void 0){const C=wm(U[H],d);return C===-1?void 0:Sm(U[H],C,1)[0]}return ol(U[H])},e.removeHooks=function(H){U[H]=[]},e.removeAllHooks=function(){U=yl()},e}var Vm=wl();const Sl=Object.freeze(Object.defineProperty({__proto__:null,default:Vm},Symbol.toStringTag,{value:"Module"}));return l.CallStateContextController=bs,l.ChatState=kc,l.DevicesContextController=ms,l.EmbedTokenCredentialProvider=bc,l.IncomingCallController=oa,l.LitElement=Z,l.SignalWire=vc,l.StaticCredentialProvider=mc,l.TranscriptController=pr,l.UserEventController=Dc,l.callStateContext=ht,l.css=ne,l.devicesContext=ir,l.ensureSignalWireFonts=zc,l.ensureSignalWireTheme=Bc,l.html=k,l.ready=Vb,l.showPrompt=br,l.transcriptContext=Ec,l.useGoogleFont=cn,l.version=zb,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l})({});
|
|
3233
|
+
`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return"<br>"}del(e){return`<del>${e}</del>`}link(e,i,r){const n=Al(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=Al(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 In{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 mt{constructor(e){pe(this,"options");pe(this,"renderer");pe(this,"textRenderer");this.options=e||Kt,this.options.renderer=this.options.renderer||new Or,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new In}static parse(e,i){return new mt(i).parse(e)}static parseInline(e,i){return new mt(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,Fm(this.parseInline(a.tokens,this.textRenderer)));continue}case"code":{const a=s;r+=this.renderer.code(a.text,a.lang,!!a.escaped);continue}case"table":{const a=s;let o="",c="";for(let h=0;h<a.header.length;h++)c+=this.renderer.tablecell(this.parseInline(a.header[h].tokens),{header:!0,align:a.align[h]});o+=this.renderer.tablerow(c);let u="";for(let h=0;h<a.rows.length;h++){const p=a.rows[h];c="";for(let v=0;v<p.length;v++)c+=this.renderer.tablecell(this.parseInline(p[v].tokens),{header:!1,align:a.align[v]});u+=this.renderer.tablerow(c)}r+=this.renderer.table(o,u);continue}case"blockquote":{const a=s,o=this.parse(a.tokens);r+=this.renderer.blockquote(o);continue}case"list":{const a=s,o=a.ordered,c=a.start,u=a.loose;let h="";for(let p=0;p<a.items.length;p++){const v=a.items[p],C=v.checked,_=v.task;let A="";if(v.task){const R=this.renderer.checkbox(!!C);u?v.tokens.length>0&&v.tokens[0].type==="paragraph"?(v.tokens[0].text=R+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&v.tokens[0].tokens[0].type==="text"&&(v.tokens[0].tokens[0].text=R+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:R+" "}):A+=R+" "}A+=this.parse(v.tokens,u),h+=this.renderer.listitem(A,_,!!C)}r+=this.renderer.list(h,o,c);continue}case"html":{const a=s;r+=this.renderer.html(a.text,a.block);continue}case"paragraph":{const a=s;r+=this.renderer.paragraph(this.parseInline(a.tokens));continue}case"text":{let a=s,o=a.tokens?this.parseInline(a.tokens):a.text;for(;n+1<e.length&&e[n+1].type==="text";)a=e[++n],o+=`
|
|
3234
|
+
`+(a.tokens?this.parseInline(a.tokens):a.text);r+=i?this.renderer.paragraph(o):o;continue}default:{const a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}parseInline(e,i){i=i||this.renderer;let r="";for(let n=0;n<e.length;n++){const s=e[n];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type]){const a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){r+=a||"";continue}}switch(s.type){case"escape":{const a=s;r+=i.text(a.text);break}case"html":{const a=s;r+=i.html(a.text);break}case"link":{const a=s;r+=i.link(a.href,a.title,this.parseInline(a.tokens,i));break}case"image":{const a=s;r+=i.image(a.href,a.title,a.text);break}case"strong":{const a=s;r+=i.strong(this.parseInline(a.tokens,i));break}case"em":{const a=s;r+=i.em(this.parseInline(a.tokens,i));break}case"codespan":{const a=s;r+=i.codespan(a.text);break}case"br":{r+=i.br();break}case"del":{const a=s;r+=i.del(this.parseInline(a.tokens,i));break}case"text":{const a=s;r+=i.text(a.text);break}default:{const a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}}class Zi{constructor(e){pe(this,"options");this.options=e||Kt}preprocess(e){return e}postprocess(e){return e}}pe(Zi,"passThroughHooks",new Set(["preprocess","postprocess"]));class kl{constructor(...e){vu(this,Ti);pe(this,"defaults",kn());pe(this,"options",this.setOptions);pe(this,"parse",Vn(this,Ti,da).call(this,bt.lex,mt.parse));pe(this,"parseInline",Vn(this,Ti,da).call(this,bt.lexInline,mt.parseInline));pe(this,"Parser",mt);pe(this,"Renderer",Or);pe(this,"TextRenderer",In);pe(this,"Lexer",bt);pe(this,"Tokenizer",_r);pe(this,"Hooks",Zi);this.use(...e)}walkTokens(e,i){var n,s;let r=[];for(const a of e)switch(r=r.concat(i.call(this,a)),a.type){case"table":{const o=a;for(const c of o.header)r=r.concat(this.walkTokens(c.tokens,i));for(const c of o.rows)for(const u of c)r=r.concat(this.walkTokens(u.tokens,i));break}case"list":{const o=a;r=r.concat(this.walkTokens(o.items,i));break}default:{const o=a;(s=(n=this.defaults.extensions)==null?void 0:n.childTokens)!=null&&s[o.type]?this.defaults.extensions.childTokens[o.type].forEach(c=>{r=r.concat(this.walkTokens(o[c],i))}):o.tokens&&(r=r.concat(this.walkTokens(o.tokens,i)))}}return r}use(...e){const i=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(r=>{const n={...r};if(n.async=this.defaults.async||n.async||!1,r.extensions&&(r.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){const a=i.renderers[s.name];a?i.renderers[s.name]=function(...o){let c=s.renderer.apply(this,o);return c===!1&&(c=a.apply(this,o)),c}:i.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const a=i[s.level];a?a.unshift(s.tokenizer):i[s.level]=[s.tokenizer],s.start&&(s.level==="block"?i.startBlock?i.startBlock.push(s.start):i.startBlock=[s.start]:s.level==="inline"&&(i.startInline?i.startInline.push(s.start):i.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(i.childTokens[s.name]=s.childTokens)}),n.extensions=i),r.renderer){const s=this.defaults.renderer||new Or(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 _r(this.defaults);for(const a in r.tokenizer){const o=r.tokenizer[a],c=a,u=s[c];s[c]=(...h)=>{let p=o.apply(s,h);return p===!1&&(p=u.apply(s,h)),p}}n.tokenizer=s}if(r.hooks){const s=this.defaults.hooks||new Zi;for(const a in r.hooks){const o=r.hooks[a],c=a,u=s[c];Zi.passThroughHooks.has(a)?s[c]=h=>{if(this.defaults.async)return Promise.resolve(o.call(s,h)).then(v=>u.call(s,v));const p=o.call(s,h);return u.call(s,p)}:s[c]=(...h)=>{let p=o.apply(s,h);return p===!1&&(p=u.apply(s,h)),p}}n.hooks=s}if(r.walkTokens){const s=this.defaults.walkTokens,a=r.walkTokens;n.walkTokens=function(o){let c=[];return c.push(a.call(this,o)),s&&(c=c.concat(s.call(this,o))),c}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,i){return bt.lex(e,i??this.defaults)}parser(e,i){return mt.parse(e,i??this.defaults)}}Ti=new WeakSet,da=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=Vn(this,Ti,mu).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)}}},mu=function(e,i){return r=>{if(r.message+=`
|
|
3235
|
+
Please report this to https://github.com/markedjs/marked.`,e){const n="<p>An error occurred:</p><pre>"+tt(r.message+"",!0)+"</pre>";return i?Promise.resolve(n):n}if(i)return Promise.reject(r);throw r}};const Si=new kl;function ne(t,e){return Si.parse(t,e)}ne.options=ne.setOptions=function(t){return Si.setOptions(t),ne.defaults=Si.defaults,yl(ne.defaults),ne},ne.getDefaults=kn,ne.defaults=Kt,ne.use=function(...t){return Si.use(...t),ne.defaults=Si.defaults,yl(ne.defaults),ne},ne.walkTokens=function(t,e){return Si.walkTokens(t,e)},ne.parseInline=Si.parseInline,ne.Parser=mt,ne.parser=mt.parse,ne.Renderer=Or,ne.TextRenderer=In,ne.Lexer=bt,ne.lexer=bt.lex,ne.Tokenizer=_r,ne.Hooks=Zi,ne.parse=ne;const zm=ne.options,Vm=ne.setOptions,Hm=ne.use,jm=ne.walkTokens,Wm=ne.parseInline,Gm=ne,qm=mt.parse,Xm=bt.lex,Ym=Object.freeze(Object.defineProperty({__proto__:null,Hooks:Zi,Lexer:bt,Marked:kl,Parser:mt,Renderer:Or,TextRenderer:In,Tokenizer:_r,get defaults(){return Kt},getDefaults:kn,lexer:Xm,marked:ne,options:zm,parse:Gm,parseInline:Wm,parser:qm,setOptions:Vm,use:Hm,walkTokens:jm},Symbol.toStringTag,{value:"Module"}));/*! @license DOMPurify 3.4.12 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.12/LICENSE */function xl(t,e){(e==null||e>t.length)&&(e=t.length);for(var i=0,r=Array(e);i<e;i++)r[i]=t[i];return r}function Km(t){if(Array.isArray(t))return t}function Zm(t,e){var i=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(i!=null){var r,n,s,a,o=[],c=!0,u=!1;try{if(s=(i=i.call(t)).next,e!==0)for(;!(c=(r=s.call(i)).done)&&(o.push(r.value),o.length!==e);c=!0);}catch(h){u=!0,n=h}finally{try{if(!c&&i.return!=null&&(a=i.return(),Object(a)!==a))return}finally{if(u)throw n}}return o}}function Qm(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
3236
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Jm(t,e){return Km(t)||Zm(t,e)||$m(t,e)||Qm()}function $m(t,e){if(t){if(typeof t=="string")return xl(t,e);var i={}.toString.call(t).slice(8,-1);return i==="Object"&&t.constructor&&(i=t.constructor.name),i==="Map"||i==="Set"?Array.from(t):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?xl(t,e):void 0}}const Dl=Object.entries,Il=Object.setPrototypeOf,ey=Object.isFrozen,ty=Object.getPrototypeOf,iy=Object.getOwnPropertyDescriptor;let Ne=Object.freeze,Ue=Object.seal,Qi=Object.create,Ml=typeof Reflect<"u"&&Reflect,zs=Ml.apply,Vs=Ml.construct;Ne||(Ne=function(e){return e}),Ue||(Ue=function(e){return e}),zs||(zs=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)}),Vs||(Vs=function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return new e(...r)});const Ji=Te(Array.prototype.forEach),ry=Te(Array.prototype.lastIndexOf),Rl=Te(Array.prototype.pop),$i=Te(Array.prototype.push),ny=Te(Array.prototype.splice),Zt=Array.isArray,Lr=Te(String.prototype.toLowerCase),Hs=Te(String.prototype.toString),Pl=Te(String.prototype.match),Fr=Te(String.prototype.replace),_l=Te(String.prototype.indexOf),sy=Te(String.prototype.trim),ay=Te(Number.prototype.toString),oy=Te(Boolean.prototype.toString),Ol=typeof BigInt>"u"?null:Te(BigInt.prototype.toString),Ll=typeof Symbol>"u"?null:Te(Symbol.prototype.toString),Me=Te(Object.prototype.hasOwnProperty),Nr=Te(Object.prototype.toString),Re=Te(RegExp.prototype.test),Ci=cy(TypeError);function Te(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return zs(t,e,r)}}function cy(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return Vs(t,i)}}function J(t,e){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Lr;if(Il&&Il(t,null),!Zt(e))return t;let r=e.length;for(;r--;){let n=e[r];if(typeof n=="string"){const s=i(n);s!==n&&(ey(e)||(e[r]=s),n=s)}t[n]=!0}return t}function ly(t){for(let e=0;e<t.length;e++)Me(t,e)||(t[e]=null);return t}function qe(t){const e=Qi(null);for(const r of Dl(t)){var i=Jm(r,2);const n=i[0],s=i[1];Me(t,n)&&(Zt(s)?e[n]=ly(s):s&&typeof s=="object"&&s.constructor===Object?e[n]=qe(s):e[n]=s)}return e}function uy(t){switch(typeof t){case"string":return t;case"number":return ay(t);case"boolean":return oy(t);case"bigint":return Ol?Ol(t):"0";case"symbol":return Ll?Ll(t):"Symbol()";case"undefined":return Nr(t);case"function":case"object":{if(t===null)return Nr(t);const e=t,i=Mt(e,"toString");if(typeof i=="function"){const r=i(e);return typeof r=="string"?r:Nr(r)}return Nr(t)}default:return Nr(t)}}function Mt(t,e){for(;t!==null;){const r=iy(t,e);if(r){if(r.get)return Te(r.get);if(typeof r.value=="function")return Te(r.value)}t=ty(t)}function i(){return null}return i}function dy(t){try{return Re(t,""),!0}catch{return!1}}const Fl=Ne(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),js=Ne(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Ws=Ne(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),hy=Ne(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Gs=Ne(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),py=Ne(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Nl=Ne(["#text"]),Ul=Ne(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),qs=Ne(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dominant-baseline","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-orientation","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Bl=Ne(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Mn=Ne(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),gy=Ue(/{{[\w\W]*|^[\w\W]*}}/g),fy=Ue(/<%[\w\W]*|^[\w\W]*%>/g),vy=Ue(/\${[\w\W]*/g),by=Ue(/^data-[\-\w.\u00B7-\uFFFF]+$/),my=Ue(/^aria-[\-\w]+$/),zl=Ue(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),yy=Ue(/^(?:\w+script|data):/i),wy=Ue(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Sy=Ue(/^html$/i),Cy=Ue(/^[a-z][.\w]*(-[.\w]+)+$/i),Vl=Ue(/<[/\w!]/g),Hl=Ue(/<[/\w]/g),Ay=Ue(/<\/no(script|embed|frames)/i),Ty=Ue(/\/>/i),it={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Ey=function(){return typeof window>"u"?null:window},ky=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}},jl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Qt=function(e,i,r,n){return Me(e,i)&&Zt(e[i])?J(n.base?qe(n.base):{},e[i],n.transform):r};function Wl(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ey();const e=M=>Wl(M);if(e.version="3.4.12",e.removed=[],!t||!t.document||t.document.nodeType!==it.document||!t.Element)return e.isSupported=!1,e;let i=t.document;const r=i,n=r.currentScript;t.DocumentFragment;const s=t.HTMLTemplateElement,a=t.Node,o=t.Element,c=t.NodeFilter,u=t.NamedNodeMap;u===void 0&&(t.NamedNodeMap||t.MozNamedAttrMap),t.HTMLFormElement;const h=t.DOMParser,p=t.trustedTypes,v=o.prototype,C=Mt(v,"cloneNode"),_=Mt(v,"remove"),A=Mt(v,"nextSibling"),R=Mt(v,"childNodes"),D=Mt(v,"parentNode"),b=Mt(v,"shadowRoot"),m=Mt(v,"attributes"),y=a&&a.prototype?Mt(a.prototype,"nodeType"):null,w=a&&a.prototype?Mt(a.prototype,"nodeName"):null;if(typeof s=="function"){const M=i.createElement("template");M.content&&M.content.ownerDocument&&(i=M.content.ownerDocument)}let k,F="",Q,N=!1,ie=0;const X=function(){if(ie>0)throw Ci('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},$=function(d){X(),ie++;try{return k.createHTML(d)}finally{ie--}},Bt=function(d){X(),ie++;try{return k.createScriptURL(d)}finally{ie--}},Ei=function(){return N||(Q=ky(p,n),N=!0),Q},Jt=i,Ur=Jt.implementation,Br=Jt.createNodeIterator,Pe=Jt.createDocumentFragment,ht=Jt.getElementsByTagName,$t=r.importNode;let oe=jl();e.isSupported=typeof Dl=="function"&&typeof D=="function"&&Ur&&Ur.createHTMLDocument!==void 0;const rt=gy,Xs=fy,Rt=vy,ki=by,er=my,tr=yy,ir=wy,Rn=Cy;let rr=zl,ce=null;const Pn=J({},[...Fl,...js,...Ws,...Gs,...Nl]);let he=null;const Xl=J({},[...Ul,...qs,...Bl,...Mn]);let me=Object.seal(Qi(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),zr=null,Yl=null;const ei=Object.seal(Qi(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Kl=!0,Ys=!0,Zl=!1,Ql=!0,ti=!1,ii=!0,xi=!1,Ks=!1,Zs=null,Qs=null,Js=!1,nr=!1,_n=!1,On=!1,Jl=!0,$l=!1;const eu="user-content-";let $s=!0,ea=!1,sr={},Pt=null;const ta=J({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let tu=null;const iu=J({},["audio","video","img","source","image","track"]);let ia=null;const ru=J({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ln="http://www.w3.org/1998/Math/MathML",Fn="http://www.w3.org/2000/svg",_t="http://www.w3.org/1999/xhtml";let ar=_t,ra=!1,na=null;const Dy=J({},[Ln,Fn,_t],Hs),nu=Ne(["mi","mo","mn","ms","mtext"]);let sa=J({},nu);const su=Ne(["annotation-xml"]);let aa=J({},su);const Iy=J({},["title","style","font","a","script"]);let Vr=null;const My=["application/xhtml+xml","text/html"],Ry="text/html";let ve=null,or=null;const Py=i.createElement("form"),au=function(d){return d instanceof RegExp||d instanceof Function},oa=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(or&&or===d)return;(!d||typeof d!="object")&&(d={}),d=qe(d),Vr=My.indexOf(d.PARSER_MEDIA_TYPE)===-1?Ry:d.PARSER_MEDIA_TYPE,ve=Vr==="application/xhtml+xml"?Hs:Lr,ce=Qt(d,"ALLOWED_TAGS",Pn,{transform:ve}),he=Qt(d,"ALLOWED_ATTR",Xl,{transform:ve}),na=Qt(d,"ALLOWED_NAMESPACES",Dy,{transform:Hs}),ia=Qt(d,"ADD_URI_SAFE_ATTR",ru,{transform:ve,base:ru}),tu=Qt(d,"ADD_DATA_URI_TAGS",iu,{transform:ve,base:iu}),Pt=Qt(d,"FORBID_CONTENTS",ta,{transform:ve}),zr=Qt(d,"FORBID_TAGS",qe({}),{transform:ve}),Yl=Qt(d,"FORBID_ATTR",qe({}),{transform:ve}),sr=Me(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?qe(d.USE_PROFILES):d.USE_PROFILES:!1,Kl=d.ALLOW_ARIA_ATTR!==!1,Ys=d.ALLOW_DATA_ATTR!==!1,Zl=d.ALLOW_UNKNOWN_PROTOCOLS||!1,Ql=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ti=d.SAFE_FOR_TEMPLATES||!1,ii=d.SAFE_FOR_XML!==!1,xi=d.WHOLE_DOCUMENT||!1,nr=d.RETURN_DOM||!1,_n=d.RETURN_DOM_FRAGMENT||!1,On=d.RETURN_TRUSTED_TYPE||!1,Js=d.FORCE_BODY||!1,Jl=d.SANITIZE_DOM!==!1,$l=d.SANITIZE_NAMED_PROPS||!1,$s=d.KEEP_CONTENT!==!1,ea=d.IN_PLACE||!1,rr=dy(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:zl,ar=typeof d.NAMESPACE=="string"?d.NAMESPACE:_t,sa=Me(d,"MATHML_TEXT_INTEGRATION_POINTS")&&d.MATHML_TEXT_INTEGRATION_POINTS&&typeof d.MATHML_TEXT_INTEGRATION_POINTS=="object"?qe(d.MATHML_TEXT_INTEGRATION_POINTS):J({},nu),aa=Me(d,"HTML_INTEGRATION_POINTS")&&d.HTML_INTEGRATION_POINTS&&typeof d.HTML_INTEGRATION_POINTS=="object"?qe(d.HTML_INTEGRATION_POINTS):J({},su);const g=Me(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?qe(d.CUSTOM_ELEMENT_HANDLING):Qi(null);if(me=Qi(null),Me(g,"tagNameCheck")&&au(g.tagNameCheck)&&(me.tagNameCheck=g.tagNameCheck),Me(g,"attributeNameCheck")&&au(g.attributeNameCheck)&&(me.attributeNameCheck=g.attributeNameCheck),Me(g,"allowCustomizedBuiltInElements")&&typeof g.allowCustomizedBuiltInElements=="boolean"&&(me.allowCustomizedBuiltInElements=g.allowCustomizedBuiltInElements),Ue(me),ti&&(Ys=!1),_n&&(nr=!0),sr&&(ce=J({},Nl),he=Qi(null),sr.html===!0&&(J(ce,Fl),J(he,Ul)),sr.svg===!0&&(J(ce,js),J(he,qs),J(he,Mn)),sr.svgFilters===!0&&(J(ce,Ws),J(he,qs),J(he,Mn)),sr.mathMl===!0&&(J(ce,Gs),J(he,Bl),J(he,Mn))),ei.tagCheck=null,ei.attributeCheck=null,Me(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?ei.tagCheck=d.ADD_TAGS:Zt(d.ADD_TAGS)&&(ce===Pn&&(ce=qe(ce)),J(ce,d.ADD_TAGS,ve))),Me(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?ei.attributeCheck=d.ADD_ATTR:Zt(d.ADD_ATTR)&&(he===Xl&&(he=qe(he)),J(he,d.ADD_ATTR,ve))),Me(d,"ADD_URI_SAFE_ATTR")&&Zt(d.ADD_URI_SAFE_ATTR)&&J(ia,d.ADD_URI_SAFE_ATTR,ve),Me(d,"FORBID_CONTENTS")&&Zt(d.FORBID_CONTENTS)&&(Pt===ta&&(Pt=qe(Pt)),J(Pt,d.FORBID_CONTENTS,ve)),Me(d,"ADD_FORBID_CONTENTS")&&Zt(d.ADD_FORBID_CONTENTS)&&(Pt===ta&&(Pt=qe(Pt)),J(Pt,d.ADD_FORBID_CONTENTS,ve)),$s&&(ce["#text"]=!0),xi&&J(ce,["html","head","body"]),ce.table&&(J(ce,["tbody"]),delete zr.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ci('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ci('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const T=k;k=d.TRUSTED_TYPES_POLICY;try{F=$("")}catch(L){throw k=T,L}}else d.TRUSTED_TYPES_POLICY===null?(k=void 0,F=""):(k===void 0&&(k=Ei()),k&&typeof F=="string"&&(F=$("")));Ne&&Ne(d),or=d},ou=J({},[...js,...Ws,...hy]),cu=J({},[...Gs,...py]),_y=function(d,g,T){return g.namespaceURI===_t?d==="svg":g.namespaceURI===Ln?d==="svg"&&(T==="annotation-xml"||sa[T]):!!ou[d]},Oy=function(d,g,T){return g.namespaceURI===_t?d==="math":g.namespaceURI===Fn?d==="math"&&aa[T]:!!cu[d]},Ly=function(d,g,T){return g.namespaceURI===Fn&&!aa[T]||g.namespaceURI===Ln&&!sa[T]?!1:!cu[d]&&(Iy[d]||!ou[d])},Fy=function(d){let g=D(d);(!g||!g.tagName)&&(g={namespaceURI:ar,tagName:"template"});const T=Lr(d.tagName),L=Lr(g.tagName);return na[d.namespaceURI]?d.namespaceURI===Fn?_y(T,g,L):d.namespaceURI===Ln?Oy(T,g,L):d.namespaceURI===_t?Ly(T,g,L):!!(Vr==="application/xhtml+xml"&&na[d.namespaceURI]):!1},ri=function(d){$i(e.removed,{element:d});try{D(d).removeChild(d)}catch{if(_(d),!D(d))throw Ci("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},Nn=function(d){ca(d);const g=R(d);if(g){const L=[];Ji(g,j=>{$i(L,j)}),Ji(L,j=>{try{_(j)}catch{}})}const T=m(d);if(T)for(let L=T.length-1;L>=0;--L){const j=T[L],q=j&&j.name;if(typeof q=="string")try{d.removeAttribute(q)}catch{}}},Di=function(d,g){try{$i(e.removed,{attribute:g.getAttributeNode(d),from:g})}catch{$i(e.removed,{attribute:null,from:g})}if(g.removeAttribute(d),d==="is")if(nr||_n)try{ri(g)}catch{}else try{g.setAttribute(d,"")}catch{}},Ny=function(d){const g=m(d);if(g)for(let T=g.length-1;T>=0;--T){const L=g[T],j=L&&L.name;if(!(typeof j!="string"||he[ve(j)]))try{d.removeAttribute(j)}catch{}}},ca=function(d){const g=[d];for(;g.length>0;){const T=g.pop();(y?y(T):T.nodeType)===it.element&&Ny(T);const j=R(T);if(j)for(let q=j.length-1;q>=0;--q)g.push(j[q])}},Uy=function(d){if(!ii)return;const g=[d];for(;g.length>0;){const T=g.pop(),L=y?y(T):T.nodeType;if(L===it.processingInstruction||L===it.comment&&Re(Hl,T.data)){try{_(T)}catch{}continue}if(L===it.element){const q=T,ye=ve(w?w(T):T.nodeName);try{q.hasAttribute&&q.hasAttribute("patchsrc")&&q.removeAttribute("patchsrc"),q.hasAttribute&&q.hasAttribute("for")&&ye!=="label"&&ye!=="output"&&q.removeAttribute("for")}catch{}}const j=R(T);if(j)for(let q=j.length-1;q>=0;--q)g.push(j[q])}},lu=function(d){let g=null,T=null;if(Js)d="<remove></remove>"+d;else{const q=Pl(d,/^[\r\n\t ]+/);T=q&&q[0]}Vr==="application/xhtml+xml"&&ar===_t&&(d='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+d+"</body></html>");const L=k?$(d):d;if(ar===_t)try{g=new h().parseFromString(L,Vr)}catch{}if(!g||!g.documentElement){g=Ur.createDocument(ar,"template",null);try{g.documentElement.innerHTML=ra?F:L}catch{}}const j=g.body||g.documentElement;return d&&T&&j.insertBefore(i.createTextNode(T),j.childNodes[0]||null),ar===_t?ht.call(g,xi?"html":"body")[0]:xi?g.documentElement:j},uu=function(d){return Br.call(d.ownerDocument||d,d,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Un=function(d){return d=Fr(d,rt," "),d=Fr(d,Xs," "),d=Fr(d,Rt," "),d},la=function(d){var g;d.normalize();const T=Br.call(d.ownerDocument||d,d,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null);let L=T.nextNode();for(;L;)L.data=Un(L.data),L=T.nextNode();const j=(g=d.querySelectorAll)===null||g===void 0?void 0:g.call(d,"template");j&&Ji(j,q=>{cr(q.content)&&la(q.content)})},Bn=function(d){const g=w?w(d):null;return typeof g!="string"||ve(g)!=="form"?!1:typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||d.attributes!==m(d)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function"||d.nodeType!==y(d)||d.childNodes!==R(d)},cr=function(d){if(!y||typeof d!="object"||d===null)return!1;try{return y(d)===it.documentFragment}catch{return!1}},Hr=function(d){if(!y||typeof d!="object"||d===null)return!1;try{return typeof y(d)=="number"}catch{return!1}};function Ot(M,d,g){M.length!==0&&Ji(M,T=>{T.call(e,d,g,or)})}const By=function(d,g){return!!(ii&&d.hasChildNodes()&&!Hr(d.firstElementChild)&&Re(Vl,d.textContent)&&Re(Vl,d.innerHTML)||ii&&d.namespaceURI===_t&&g==="style"&&Hr(d.firstElementChild)||d.nodeType===it.processingInstruction||ii&&d.nodeType===it.comment&&Re(Hl,d.data))},zy=function(d,g){if(!zr[g]&&pu(g)&&(me.tagNameCheck instanceof RegExp&&Re(me.tagNameCheck,g)||me.tagNameCheck instanceof Function&&me.tagNameCheck(g)))return!1;if($s&&!Pt[g]){const T=D(d),L=R(d);if(L&&T){const j=L.length;for(let q=j-1;q>=0;--q){const ye=ea?L[q]:C(L[q],!0);T.insertBefore(ye,A(d))}}}return ri(d),!0},du=function(d,g){if(Ot(oe.beforeSanitizeElements,d,null),d!==g&&D(d)===null)return!0;if(Bn(d))return ri(d),!0;const T=ve(w?w(d):d.nodeName);if(Ot(oe.uponSanitizeElement,d,{tagName:T,allowedTags:ce}),d!==g&&D(d)===null)return!0;if(By(d,T))return ri(d),!0;if(zr[T]||!(ei.tagCheck instanceof Function&&ei.tagCheck(T))&&!ce[T]){const j=zy(d,T);return j===!1&&Ot(oe.afterSanitizeElements,d,null),j}if((y?y(d):d.nodeType)===it.element&&!Fy(d)||(T==="noscript"||T==="noembed"||T==="noframes")&&Re(Ay,d.innerHTML))return ri(d),!0;if(ti&&d.nodeType===it.text){const j=Un(d.textContent);d.textContent!==j&&($i(e.removed,{element:d.cloneNode()}),d.textContent=j)}return Ot(oe.afterSanitizeElements,d,null),!1},hu=function(d,g,T){if(Yl[g]||ii&&g==="patchsrc"||ii&&g==="for"&&d!=="label"&&d!=="output"||Jl&&(g==="id"||g==="name")&&(T in i||T in Py))return!1;const L=he[g]||ei.attributeCheck instanceof Function&&ei.attributeCheck(g,d);if(!(Ys&&Re(ki,g))){if(!(Kl&&Re(er,g))){if(L){if(!ia[g]){if(!Re(rr,Fr(T,ir,""))){if(!((g==="src"||g==="xlink:href"||g==="href")&&d!=="script"&&_l(T,"data:")===0&&tu[d])){if(!(Zl&&!Re(tr,Fr(T,ir,"")))){if(T)return!1}}}}}else if(!(pu(d)&&(me.tagNameCheck instanceof RegExp&&Re(me.tagNameCheck,d)||me.tagNameCheck instanceof Function&&me.tagNameCheck(d))&&(me.attributeNameCheck instanceof RegExp&&Re(me.attributeNameCheck,g)||me.attributeNameCheck instanceof Function&&me.attributeNameCheck(g,d))||g==="is"&&me.allowCustomizedBuiltInElements&&(me.tagNameCheck instanceof RegExp&&Re(me.tagNameCheck,T)||me.tagNameCheck instanceof Function&&me.tagNameCheck(T))))return!1}}return!0},Vy=J({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),pu=function(d){return!Vy[Lr(d)]&&Re(Rn,d)},Hy=function(d,g,T,L){if(k&&typeof p=="object"&&typeof p.getAttributeType=="function"&&!T)switch(p.getAttributeType(d,g)){case"TrustedHTML":return $(L);case"TrustedScriptURL":return Bt(L)}return L},jy=function(d,g,T,L){try{T?d.setAttributeNS(T,g,L):d.setAttribute(g,L),Bn(d)?ri(d):Rl(e.removed)}catch{Di(g,d)}},gu=function(d){Ot(oe.beforeSanitizeAttributes,d,null);const g=d.attributes;if(!g||Bn(d))return;const T={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:he,forceKeepAttr:void 0};let L=g.length;const j=ve(d.nodeName);for(;L--;){const q=g[L],ye=q.name,ze=q.namespaceURI,wt=q.value,Qe=ve(ye),St=wt;let Ye=ye==="value"?St:sy(St);if(T.attrName=Qe,T.attrValue=Ye,T.keepAttr=!0,T.forceKeepAttr=void 0,Ot(oe.uponSanitizeAttribute,d,T),Ye=T.attrValue,$l&&(Qe==="id"||Qe==="name")&&_l(Ye,eu)!==0&&(Di(ye,d),Ye=eu+Ye),ii&&Re(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ye)){Di(ye,d);continue}if(Qe==="attributename"&&Pl(Ye,"href")){Di(ye,d);continue}if(!T.forceKeepAttr){if(!T.keepAttr){Di(ye,d);continue}if(!Ql&&Re(Ty,Ye)){Di(ye,d);continue}if(ti&&(Ye=Un(Ye)),!hu(j,Qe,Ye)){Di(ye,d);continue}Ye=Hy(j,Qe,ze,Ye),Ye!==St&&jy(d,ye,ze,Ye)}}Ot(oe.afterSanitizeAttributes,d,null)},zn=function(d){let g=null;const T=uu(d);for(Ot(oe.beforeSanitizeShadowDOM,d,null);g=T.nextNode();)if(Ot(oe.uponSanitizeShadowNode,g,null),du(g,d),gu(g),cr(g.content)&&zn(g.content),(y?y(g):g.nodeType)===it.element){const j=b(g);cr(j)&&(ua(j),zn(j))}Ot(oe.afterSanitizeShadowDOM,d,null)},ua=function(d){const g=[{node:d,shadow:null}];for(;g.length>0;){const T=g.pop();if(T.shadow){zn(T.shadow);continue}const L=T.node,q=(y?y(L):L.nodeType)===it.element,ye=R(L);if(ye)for(let ze=ye.length-1;ze>=0;--ze)g.push({node:ye[ze],shadow:null});if(q){const ze=w?w(L):null;if(typeof ze=="string"&&ve(ze)==="template"){const wt=L.content;cr(wt)&&g.push({node:wt,shadow:null})}}if(q){const ze=b(L);cr(ze)&&g.push({node:null,shadow:ze},{node:ze,shadow:null})}}};return e.sanitize=function(M){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=null,T=null,L=null,j=null;if(ra=!M,ra&&(M="<!-->"),typeof M!="string"&&!Hr(M)&&(M=uy(M),typeof M!="string"))throw Ci("dirty is not a string, aborting");if(!e.isSupported)return M;Ks?(ce=Zs,he=Qs):oa(d),(oe.uponSanitizeElement.length>0||oe.uponSanitizeAttribute.length>0)&&(ce=qe(ce)),oe.uponSanitizeAttribute.length>0&&(he=qe(he)),e.removed=[];const q=ea&&typeof M!="string"&&Hr(M);if(q){Uy(M);const Qe=w?w(M):M.nodeName;if(typeof Qe=="string"){const St=ve(Qe);if(!ce[St]||zr[St])throw Nn(M),Ci("root node is forbidden and cannot be sanitized in-place")}if(Bn(M))throw Nn(M),Ci("root node is clobbered and cannot be sanitized in-place");try{ua(M)}catch(St){throw Nn(M),St}}else if(Hr(M))g=lu("<!---->"),T=g.ownerDocument.importNode(M,!0),T.nodeType===it.element&&T.nodeName==="BODY"||T.nodeName==="HTML"?g=T:g.appendChild(T),ua(T);else{if(!nr&&!ti&&!xi&&M.indexOf("<")===-1)return k&&On?$(M):M;if(g=lu(M),!g)return nr?null:On?F:""}g&&Js&&ri(g.firstChild);const ye=q?M:g,ze=uu(ye);try{for(;L=ze.nextNode();)du(L,ye),gu(L),cr(L.content)&&zn(L.content)}catch(Qe){throw q&&(Nn(M),Ji(e.removed,St=>{St.element&&ca(St.element)})),Qe}if(q)return Ji(e.removed,Qe=>{Qe.element&&ca(Qe.element)}),ti&&la(M),M;if(nr){if(ti&&la(g),_n)for(j=Pe.call(g.ownerDocument);g.firstChild;)j.appendChild(g.firstChild);else j=g;return(he.shadowroot||he.shadowrootmode)&&(j=$t.call(r,j,!0)),j}let wt=xi?g.outerHTML:g.innerHTML;return xi&&ce["!doctype"]&&g.ownerDocument&&g.ownerDocument.doctype&&g.ownerDocument.doctype.name&&Re(Sy,g.ownerDocument.doctype.name)&&(wt="<!DOCTYPE "+g.ownerDocument.doctype.name+`>
|
|
3237
|
+
`+wt),ti&&(wt=Un(wt)),k&&On?$(wt):wt},e.setConfig=function(){let M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};oa(M),Ks=!0,Zs=ce,Qs=he},e.clearConfig=function(){or=null,Ks=!1,Zs=null,Qs=null,k=Q,F=""},e.isValidAttribute=function(M,d,g){or||oa({});const T=ve(M),L=ve(d);return hu(T,L,g)},e.addHook=function(M,d){typeof d=="function"&&Me(oe,M)&&$i(oe[M],d)},e.removeHook=function(M,d){if(Me(oe,M)){if(d!==void 0){const g=ry(oe[M],d);return g===-1?void 0:ny(oe[M],g,1)[0]}return Rl(oe[M])}},e.removeHooks=function(M){Me(oe,M)&&(oe[M]=[])},e.removeAllHooks=function(){oe=jl()},e}var xy=Wl();const Gl=Object.freeze(Object.defineProperty({__proto__:null,default:xy},Symbol.toStringTag,{value:"Module"}));return l.CallStateContextController=Ls,l.ChatState=Yc,l.DevicesContextController=Fs,l.EmbedTokenCredentialProvider=Bc,l.IncomingCallController=Ia,l.LitElement=ee,l.SignalWire=Uc,l.StaticCredentialProvider=zc,l.TranscriptController=xr,l.UserEventController=Zc,l.callStateContext=pt,l.css=ae,l.devicesContext=vr,l.ensureSignalWireFonts=cl,l.ensureSignalWireTheme=ol,l.html=I,l.ready=ym,l.showPrompt=Rr,l.transcriptContext=Xc,l.useGoogleFont=Cn,l.version=mm,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),l})({});
|
|
3225
3238
|
//# sourceMappingURL=signalwire-web-components-embed.iife.js.map
|