@kosdev-code/kos-ui-sdk 0.1.0-dev.5688 → 0.1.0-dev.5690
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/core/core/decorators/index.d.ts +1 -0
- package/core/core/decorators/index.d.ts.map +1 -1
- package/core/core/extension/extension-manager.d.ts +1 -0
- package/core/core/extension/extension-manager.d.ts.map +1 -1
- package/core/index.d.ts +1 -1
- package/core/index.d.ts.map +1 -1
- package/index.cjs +75 -75
- package/index.cjs.map +1 -1
- package/index.js +4307 -4865
- package/index.js.map +1 -1
- package/kos-models.json +1 -1
- package/models/decorators/future-service.d.ts.map +1 -1
- package/models/utils/index.d.ts +1 -0
- package/models/utils/index.d.ts.map +1 -1
- package/models/utils/service-accessor.d.ts +82 -0
- package/models/utils/service-accessor.d.ts.map +1 -0
- package/package.json +2 -2
- package/core/core/declarative/declarative-actions-wiring.d.ts +0 -14
- package/core/core/declarative/declarative-actions-wiring.d.ts.map +0 -1
- package/core/core/declarative/declarative-future-registry.d.ts +0 -26
- package/core/core/declarative/declarative-future-registry.d.ts.map +0 -1
- package/core/core/declarative/declarative-model-bindings.d.ts +0 -191
- package/core/core/declarative/declarative-model-bindings.d.ts.map +0 -1
- package/core/core/declarative/declarative-model-discovery.d.ts +0 -74
- package/core/core/declarative/declarative-model-discovery.d.ts.map +0 -1
- package/core/core/declarative/declarative-model-factory.d.ts +0 -58
- package/core/core/declarative/declarative-model-factory.d.ts.map +0 -1
- package/core/core/declarative/declarative-model-types.d.ts +0 -100
- package/core/core/declarative/declarative-model-types.d.ts.map +0 -1
- package/core/core/declarative/index.d.ts +0 -8
- package/core/core/declarative/index.d.ts.map +0 -1
- package/core/core/declarative/types.d.ts +0 -320
- package/core/core/declarative/types.d.ts.map +0 -1
package/index.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
"use strict";var yf=Object.defineProperty;var bf=(t,e,s)=>e in t?yf(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var l=(t,e,s)=>(bf(t,typeof e!="symbol"?e+"":e,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("loglevel"),M=require("mobx"),b=require("robot3"),Ze=require("date-fns"),T=require("@emotion/react/jsx-runtime"),mn=require("@emotion/styled"),Ga=require("react-dom"),ut=require("@emotion/react"),y=require("react"),yn=require("mobx-react-lite"),vf=require("@use-gesture/react"),Xr="method",Ya="topic",Zt="url",qs="request-id",Jr="response-id",bn="status",Ge="dst-addr",Wa="src-addr",ke="type",vn="ordered",wn="tracker",Qa="Content-Type",Za="Cache-Control",Xa="requestId",Ja=process.env.KOS_LOGIN_URL||"http://localhost",ec=process.env.KOS_APP_PORT||"8080",wf=`${Ja}:${ec}`,Tr="{MODEL_ID}";var zs=(t=>(t.SEND="/ws/log/msg/send",t.RECEIVED="/ws/log/msg/receive",t))(zs||{}),tc=(t=>(t.MSG_RECEIVE="/mock/msg/receive",t))(tc||{});const En="/kos/model/ready/";A.info("Initializing event bus");globalThis.kos=globalThis.kos||{};globalThis.kos.subscriptions=globalThis.kos.subscriptions||{};const V=globalThis.kos.subscriptions,Ef=()=>Symbol("eventKey");function Mn(t){return V[t]&&Object.getOwnPropertySymbols(V[t]).length>0}function C(t,e){const s=Ef();return V[t]||(A.debug(`Initializing subscription for ${t}`),V[t]={}),A.debug(`Subscribing to ${t} with id ${s.toString()}`),V[t][s]=e,{count:V[t]?Object.getOwnPropertySymbols(V[t]).length:0,unsubscribe:()=>(A.debug(`Unsubscribing from ${t} with id ${s.toString()}`),V[t]&&V[t][s]&&delete V[t][s],V[t]&&Object.getOwnPropertySymbols(V[t]).length===0&&delete V[t],{count:V[t]?Object.getOwnPropertySymbols(V[t]).length:0})}}function K(t,e,s={}){if(!V[t]||Object.getOwnPropertySymbols(V[t]).length===0)return A.debug(`No subscriptions for ${t}. Not publishing.`),{eventType:t,subscribers:0};const r=Object.getOwnPropertySymbols(V[t]).length;return Object.getOwnPropertySymbols(V[t]).forEach(o=>{if(s.sync){const n=s.sync;A.debug(`Performing sync publish for ${t} with sync id ${n}`),V[t][o]({body:e,headers:s}).then(i=>{A.debug(`Response recieved for ${n}, publishing back to source.`),K(n,i)})}else A.debug(`Performing async publish for ${t}`),V[t][o]({body:e,headers:s})}),{eventType:t,subscribers:r}}function Mf(){A.warn("Resetting event bus"),Object.keys(V).forEach(t=>delete V[t])}function sc(t,e){const s=C(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function Tn(t,e){return new Promise((s,r)=>{let o=null;const n=sc(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}const Tf=Object.freeze(Object.defineProperty({__proto__:null,hasEventSubscriptions:Mn,once:sc,publish:K,reset:Mf,subscribe:C,waitFor:Tn},Symbol.toStringTag,{value:"Module"}));function eo(t,e){const s=C(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function to(t,e){return new Promise((s,r)=>{let o=null;const n=eo(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}function rc(t,e){const s=t.map(r=>to(r,e));return Promise.all(s)}function oc(t,e){return new Promise((s,r)=>{const o=[];let n=null,i=!1;const a=()=>{o.forEach(c=>c()),n&&clearTimeout(n)};t.forEach(c=>{const u=eo(c,d=>{i||(i=!0,a(),s({eventType:c,data:d}))});o.push(u)}),e&&(n=setTimeout(()=>{i||(i=!0,a(),r(new Error(`Timeout waiting for any event: ${t.join(", ")}`)))},e))})}function nc(t,e,s){return C(t,o=>{o&&e(o)&&s(o)}).unsubscribe}function ic(t,e,s){return C(t,o=>{if(o){const n=e(o);s(n)}}).unsubscribe}function ac(t,e,s){let r=null;const o=C(t,n=>{r&&clearTimeout(r),r=setTimeout(()=>{s(n)},e)});return()=>{r&&clearTimeout(r),o.unsubscribe()}}function cc(t,e,s){let r=0,o=null;const n=C(t,i=>{const a=Date.now(),c=a-r;c>=e?(r=a,s(i)):o||(o=setTimeout(()=>{r=Date.now(),s(i),o=null},e-c))});return()=>{o&&clearTimeout(o),n.unsubscribe()}}function lc(t,e,s){let r=[],o=null;const n=()=>{r.length>0&&(s([...r]),r=[])},i=C(t,a=>{a&&(r.push(a),o||(o=setTimeout(()=>{n(),o=null},e)))});return()=>{o&&(clearTimeout(o),n()),i.unsubscribe()}}function _n(t,e=1){const s=[];return C(t,r=>{r&&(s.push(r),s.length>e&&s.shift())}),{subscribe:r=>(s.forEach(o=>r(o)),C(t,r))}}function uc(t,e){const s=t.map(r=>C(r,o=>{o&&e(r,o)}));return()=>{s.forEach(r=>r.unsubscribe())}}function dc(t,e){let s=t;const r=[],o=new Set;return Object.values(e).forEach(n=>{Object.keys(n).forEach(i=>{o.add(i)})}),o.forEach(n=>{const{unsubscribe:i}=C(n,a=>{const c=e[s];c&&c[n]&&(s=c[n](a))});r.push(i)}),{get state(){return s},unsubscribe:()=>{r.forEach(n=>n())}}}function hc(t,e,s,r){const o=to(e,r);return K(t,s),o}async function*fc(t){const e=[],s=[],r=C(t,o=>{o&&(s.length>0?s.shift()(o):e.push(o))});try{for(;;)e.length>0?yield e.shift():yield await new Promise(o=>{s.push(o)})}finally{r.unsubscribe()}}const _f={once:eo,waitFor:to,waitForAll:rc,race:oc,filter:nc,map:ic,debounce:ac,throttle:cc,buffer:lc,replay:_n,merge:uc,stateMachine:dc,request:hc,eventIterator:fc},Sf=Object.freeze(Object.defineProperty({__proto__:null,EventBusFunctional:_f,buffer:lc,debounce:ac,eventIterator:fc,filter:nc,map:ic,merge:uc,once:eo,race:oc,replay:_n,request:hc,stateMachine:dc,throttle:cc,waitFor:to,waitForAll:rc},Symbol.toStringTag,{value:"Module"}));async function so(t,e){const{getCurrentState:s,transformState:r,shouldUseFetchedState:o,timeout:n}=e,i=Tn(t,n),a=await s(),c=r?r(a):a;return o&&o(c)?(i.catch(()=>{}),c):await Promise.race([i,new Promise(d=>{setTimeout(()=>d(c),100)})])}function pc(t,e,s){const{getCurrentState:r,transformState:o}=s;let n=!1;const i=C(t,a=>{a&&(n=!0,e(a))});return Promise.resolve(r()).then(a=>{const c=o?o(a):a;n||e(c)}).catch(a=>{console.error("Failed to fetch initial state:",a)}),i.unsubscribe}function gc(t,e){let s;const r=new Set,o=async()=>{try{typeof e=="string"?s=await(await fetch(e)).json():s=await e(),r.forEach(a=>a(s))}catch(a){throw console.error("Failed to fetch initial state:",a),a}};C(t,a=>{a!=null&&a.body&&(s=a.body,r.forEach(c=>c(s)))});let n=!1;const i=()=>{n||(n=!0,o())};return{get state(){return s},async getState(){return i(),s===void 0&&await new Promise(a=>{const c=()=>{s!==void 0?a():setTimeout(c,10)};c()}),s},subscribe(a){return i(),r.add(a),s!==void 0&&a(s),()=>{r.delete(a)}},async refresh(){return await o(),s}}}async function Sn(t,e){if(typeof t=="string")return so(t,e);const s=t,{getCurrentState:r,shouldUseFetchedState:o,timeout:n}=e,i=await r(),a=e.transformState?e.transformState(i):i;if(o&&o(a))return a;const c=s.map(d=>Tn(d,n)),u=await Promise.all(c);return u[u.length-1]}function mc(t,e,s){const{fetchMissedEvents:r,checkInterval:o=3e4,deduplicateById:n}=s,i=new Set,a=C(t,async u=>{if(u){if(n){const d=n(u);if(i.has(d))return;i.add(d),i.size>1e3&&Array.from(i).slice(0,500).forEach(f=>i.delete(f))}await e(u)}}),c=setInterval(async()=>{try{const u=await r(),d=Array.isArray(u)?u:[u];for(const h of d)if(n){const f=n(h);i.has(f)||(i.add(f),await e(h))}else await e(h)}catch(u){console.error("Failed to fetch missed events:",u)}},o);return()=>{a.unsubscribe(),clearInterval(c)}}function yc(t){const{connectEvent:e,disconnectEvent:s,errorEvent:r,dataEvent:o,fetchInitialState:n,reconnectDelay:i=5e3}=t,a={state:"disconnected",data:void 0,async waitForConnection(d){if(a.state==="connected"&&a.data)return a.data;const h=await so(e,{getCurrentState:n,shouldUseFetchedState:f=>!!f,timeout:d});return a.state="connected",a.data=h,u(),h},subscribe(d){return c.add(d),d(a),()=>{c.delete(d)}},async reconnect(){a.state="connecting",u();try{const d=await n();a.state="connected",a.data=d,u()}catch{a.state="error",u(),setTimeout(()=>{a.state==="error"&&a.reconnect()},i)}}},c=new Set,u=()=>{c.forEach(d=>d(a))};return C(e,d=>{a.state="connected",d!=null&&d.body&&(a.data=d.body),u()}),C(s,()=>{a.state="disconnected",u(),setTimeout(()=>{a.state==="disconnected"&&a.reconnect()},i)}),r&&C(r,()=>{a.state="error",u()}),o&&C(o,d=>{d!=null&&d.body&&a.state==="connected"&&(a.data=d.body,u())}),a.reconnect(),a}const Of={waitForOrGetState:so,subscribeWithInitialState:pc,createStatefulEventStream:gc,waitForAllWithState:Sn,createResilientEventHandler:mc,createConnectionStateManager:yc},If=Object.freeze(Object.defineProperty({__proto__:null,EventBusState:Of,createConnectionStateManager:yc,createResilientEventHandler:mc,createStatefulEventStream:gc,subscribeWithInitialState:pc,waitForAllWithState:Sn,waitForOrGetState:so},Symbol.toStringTag,{value:"Module"})),$f=(t,e=0)=>{if(!+t)return{value:0,scale:"bytes",toString:()=>"0 bytes"};const s=1024,r=e<0?0:e,o=["bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(s)),i=parseFloat((t/Math.pow(s,n)).toFixed(r)),a=o[n];return{value:i,scale:a,toString:()=>`${i} ${a}`}};function On(t){let e="pending",s;const r=t.then(n=>{e="success",s=n},n=>{e="error",s=n});return{read:()=>{switch(e){case"pending":throw r;case"error":throw s;default:return s}}}}const ve=(t=null)=>(t||window.location.search.replace("?","")).split("&").map(e=>{const[s,r]=e.split("=");return[s,decodeURIComponent(r||"")]}).reduce((e,[s,r])=>(e[s]=r,e),{}),Cf="studio.enable.releases",bc="studio.tools.preview",Df="studio.relax.store.validation",vc="studio.log.debug",wc="studio.log.info",Af={profiles:[bc]};var Va;const xf=((Va=globalThis.getKosConfig)==null?void 0:Va.call(globalThis))||JSON.stringify(Af),Ec=JSON.parse(xf);globalThis.kosConfig=Ec;const In=Ec,Mc=()=>In.profiles||[],Go=t=>Mc().includes(t),Rf=()=>In.logging||!1,Pf=()=>{const t=Go(vc),e=Go(wc);return t?"DEBUG":e?"INFO":void 0},Tc=()=>{const t=ve(),e=Pf(),r=t.kosLogLevel??e??window.kosLogLevel??process.env.KOS_LOG_LEVEL;return r||"WARN"},_c=()=>window.kosMessageLogging||process.env.KOS_MESSAGE_LOGGING==="true",Sc=()=>window.kosMessageStudioLogging||process.env.KOS_MESSAGE_STUDIO_LOGGING==="true",Oc="ws-log",kf=A.methodFactory,Ic=_c(),Lf=Sc();A.methodFactory=function(t,e,s){const r=kf(t,e,s);return function(...o){var c;const n=s?String(s):"",i=n?`[${String(n).substring(n.lastIndexOf(":")+1)}] | `:"[root] | ",a=o.map(u=>typeof u=="object"?JSON.stringify(u):String(u)).join(" ");r(`${i}${a}`),(c=globalThis==null?void 0:globalThis.kosConfig)!=null&&c.logging&&globalThis.kosLog&&(s!==Oc||Ic&&Lf)&&globalThis.kosLog(`UI: ${i}${a}`)}};let $c=Tc();A.setLevel($c);window.setKosLogLevel=t=>{$c=t,A.setLevel(t)};const _r=A.getLogger(Oc);window.enableKosMessageLog=()=>{_r.setLevel(A.levels.INFO)};window.disableKosMessageLog=()=>{_r.setLevel(A.levels.ERROR)};Ic?window.enableKosMessageLog():window.disableKosMessageLog();const Ff=["color: black","display: block","background-color: lightgreen","padding: 4px","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),Nf=["color: black","display: block","padding: 4px","background-color: yellow","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),tr=t=>e=>{A.getLevel()<=t&&e()},m={...A,ifDebug:tr(A.levels.DEBUG),ifInfo:tr(A.levels.INFO),ifWarn:tr(A.levels.WARN),ifError:tr(A.levels.ERROR),getLogger:t=>A.getLogger(`kos::${t}`),getLoggers:()=>A.getLoggers(),createLogger:({name:t,group:e})=>{var n,i,a,c;const s=`${e?`${e}:`:"kos"}::${t}`,r=A.getLogger(s);let o=(i=(n=globalThis.kos.logOverrides)==null?void 0:n.find(u=>u.name===s))==null?void 0:i.level;return o?r.setLevel(o):(o=(c=(a=globalThis.kos.logOverrides)==null?void 0:a.find(u=>s.startsWith(u.name)))==null?void 0:c.level,o&&r.setLevel(o)),r},wsSend:(...t)=>{const e=String(t).replace(/\n/g,"\\n");_r.info(`%c⬆ ${e}`,Ff)},wsReceive:(...t)=>{const e=String(t).replace(/\n/g,"\\n");_r.info(`%c⬇ ${e}`,Nf)}},J=Symbol("SubscriptionHandlers"),x=Symbol("DependencyModels"),xt=Symbol("FutureService"),_e=Symbol("ChildModels"),_s=Symbol("ParentModel"),Rt=Symbol("LogConfig"),pr=Symbol("ReferenceConfig"),$n=Symbol("KosModelSymbol"),xe=Symbol("ModelEffects"),Je=Symbol("CompanionParentModel"),ro=Symbol("FutureContainerSetup"),oo=Symbol("MultipleFutureContainerSetup"),Pt=Symbol("FutureAliases"),Cn=Symbol("TroubleAwareSetup"),no=Symbol("LoggerSetup"),io=Symbol("ContainerAwareSetup"),Xt=Symbol("StateMachineSetup"),kt=Symbol("StateEntryHandlers"),Ss=Symbol("StateExitHandlers"),Uf=Symbol("StateActionHandlers"),Vs=Symbol("OptionsRequired"),Cc=Symbol("KosViewModelSymbol"),Dn=Symbol("ViewModelConfig"),Dc=Symbol("ReloadAwareSetup"),An=m.createLogger({group:"decorators",name:"fsm-injection"});function xn(t){const e=t[Xt];if(!e)return;const{config:s,options:r}=e;Kf(t,s,r),qf(t,r);const o=Hf(t);jf(t,s,r,o),Bf(t,s,r)}function jf(t,e,s,r){t.transition=Gf(t,e,s,r.entry,r.exit),t.canTransition=sp(t,e,s),t.isInState=rp(t,s)}function Bf(t,e,s){zf(t),Vf(t,e,s)}function Hf(t){const e=t.constructor.prototype[kt]||new Map,s=t.constructor.prototype[Ss]||new Map;return{entry:e,exit:s}}function Kf(t,e,s){t._fsmConfig=e,t._fsmOptions=s}function qf(t,e){const{stateProperty:s,trackHistory:r,computeInitialState:o}=e,n=t._fsmConfig,i=o?o(t):n.initial;o&&!n.states[i]?(An.warn(`computeInitialState returned "${i}" which is not a valid state. Falling back to "${n.initial}".`),t[s]=n.initial):t[s]=i,t._fsmInitialized=!0,t.isTransitioning=!1,r&&(t.stateHistory=[{state:t[s],timestamp:new Date}])}function zf(t){Object.defineProperty(t,"isFsmInitialized",{get(){return this._fsmInitialized},enumerable:!0,configurable:!0})}function Vf(t,e,s){const{stateProperty:r}=s;Object.defineProperty(t,"allowedTransitions",{get(){if(!this._fsmInitialized)return[];const o=this[r],n=this._fsmConfig.states[o];return n!=null&&n.on?Object.keys(n.on):[]},enumerable:!0,configurable:!0})}function Gf(t,e,s,r,o){const{stateProperty:n,throwOnInvalid:i}=s;return function(a){if(!this._fsmInitialized){Yf(e.initializeAt,i);return}const c=this[n],u=Wf(c,a,this._fsmConfig,i);u&&Zf(this,c,u,a,n,r,o,s)}}function Yf(t,e){const s=`Cannot transition: FSM not initialized. Waiting for ${t} lifecycle phase.`;if(e)throw new Error(s);console.warn(s)}function Wf(t,e,s,r){var i;const o=s.states[t],n=(i=o==null?void 0:o.on)==null?void 0:i[e];if(!n){Qf(t,e,r);return}return n}function Qf(t,e,s){const r=`Invalid transition: Event "${e}" not allowed from state "${t}"`;if(s)throw new Error(r);console.warn(r)}function Zf(t,e,s,r,o,n,i,a){t.isTransitioning=!0;try{Xf(t,e,i),t[o]=s,tp(t,s,r,a);const c=Jf(t,s,n);ep(t,s,o,c)}finally{t.isTransitioning=!1}}function Xf(t,e,s){const r=s.get(e);r&&typeof t[r]=="function"&&t[r]()}function Jf(t,e,s){const r=s.get(e);if(r&&typeof t[r]=="function")return t[r]()}function ep(t,e,s,r){var n,i;if(!r||typeof r.then!="function")return;const o=(i=(n=t._fsmConfig)==null?void 0:n.states)==null?void 0:i[e];!(o!=null&&o.onDone)&&!(o!=null&&o.onError)||r.then(()=>{o.onDone&&t[s]===e&&t.transition(o.onDone)},a=>{o.onError&&t[s]===e?t.transition(o.onError):An.error(`Async entry handler for state "${e}" failed:`,a)})}function tp(t,e,s,r){r.trackHistory&&t.stateHistory&&t.stateHistory.push({state:e,timestamp:new Date,event:s})}function sp(t,e,s){const{stateProperty:r}=s;return function(o){var a;if(!this._fsmInitialized)return!1;const n=this[r],i=this._fsmConfig.states[n];return((a=i==null?void 0:i.on)==null?void 0:a[o])!==void 0}}function rp(t,e){const{stateProperty:s}=e;return function(r){return this._fsmInitialized?this[s]===r:!1}}function Ac(t,e){const s=t[Xt];if(!s)return;const{config:r,options:o}=s,{stateProperty:n}=o;r.initializeAt===e&&(t._fsmInitialized||(op(t,n,r.initial),t._fsmInitialized=!0,np(t,r.initial,o),ip(t,r.initial),An.debug(`FSM initialized for model ${t.id} at lifecycle ${e} with initial state "${r.initial}"`)))}function op(t,e,s){t[e]=s}function np(t,e,s){s.trackHistory&&t.stateHistory&&t.stateHistory.push({state:e,timestamp:new Date})}function ip(t,e){const r=(t.constructor.prototype[kt]||new Map).get(e);r&&typeof t[r]=="function"&&t[r]()}const Le=(t,e)=>{t[_e]=t[_e]||{},t[_e][e]=!0},yt=t=>`{PROP_${String(t)}}`,ap=t=>`{PROP_${String(t)}}`,cp=yt("kosParentId"),ao=t=>e=>{e[_s]=e[_s]||{};const s=(t==null?void 0:t.parentId)||cp;e[_s]={parentId:s},e.prototype[Vs]=!0};function lp(t){return e=>{const s=(t==null?void 0:t.mode)||"decorator",r=(t==null?void 0:t.parentProperty)||"companionParent",o=(t==null?void 0:t.excludeProperties)||[],n=t==null?void 0:t.lifecycle;return ao()(e),e.prototype[Je]={mode:s,parentProperty:r,excludeProperties:o,lifecycle:n},e}}function xc(t){return e=>{const s=t!=null&&t.legacy?"_models":(t==null?void 0:t.containerProperty)||"container",r=(t==null?void 0:t.includeMethods)!==!1,o=(t==null?void 0:t.includeGetters)!==!1,n=(t==null?void 0:t.modelsProperty)||"models",i=(t==null?void 0:t.containerOptions)||{};return e.prototype[io]={containerProperty:s,includeMethods:r,includeGetters:o,modelsProperty:n,containerOptions:i,legacy:(t==null?void 0:t.legacy)||!1},e}}function up(t,e,s){const r=s.value;s.value=function(...o){const n=Q.getContext(this.id);return o.push(n),r.apply(this,o)}}const Gs=Symbol("KosExecutionContext");function Rn(t){return t&&typeof t=="object"&&Gs in t}function dp(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[ro]={mode:s,handlerProperty:r},e}}function hp(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[oo]={mode:s,handlerProperty:r},e}}var D=(t=>(t.INIT="init",t.LOAD="load",t.READY="ready",t.ACTIVATE="activate",t.ONLINE="online",t))(D||{}),Xe=(t=>(t.CREATE="create",t.CONTINUE="continue",t.FAIL="fail",t))(Xe||{});const fp=Object.freeze(Object.defineProperty({__proto__:null,DependencyLifecycle:D,DependencyResolutionPolicy:Xe},Symbol.toStringTag,{value:"Module"})),Be=Symbol("HttpRouteHandlers"),Wi="__httpBrowserRouter";function co(t){return function(s){return function(r,o,n){r[Be]=r[Be]||[];const i={method:t,path:s,handler:o};return r[Be].push(i),r[x]=r[x]||{},r[x][Wi]||(r[x][Wi]={modelType:"browser-router-model",lifecycle:D.INIT}),n}}}const Rc=co("GET"),Ys=co("POST"),pp=co("PUT"),Pc=co("DELETE"),gp=Pc;function Sr(t){return!!(t!=null&&t[Be])&&t[Be].length>0}function kc(t){return(t==null?void 0:t[Be])||[]}const mp=({group:t}={group:""})=>e=>{e[Rt]=e[Rt]||{},e[Rt]={group:t}};class Pn{static create({modelId:e,modelTypeName:s,component:r}){const o=[r??"kos",s,e].filter(Boolean).join(".");return m.createLogger({name:o})}}function Lc(t){return e=>{const s=(t==null?void 0:t.loggerProperty)||"logger",r=t==null?void 0:t.loggerContext;e.prototype[no]={loggerProperty:s,loggerContext:r};const o=()=>{var i;return(i=e.prototype[$n])==null?void 0:i.type};let n;return Object.defineProperty(e.prototype,s,{get(){if(!n){const i=o();n=Pn.create({modelTypeName:r||i,component:"kos-model"})}return n},enumerable:!1,configurable:!1}),e}}function Fc(t){return(e,s,r)=>{e[xe]=e[xe]||{},e[xe][s]={dependencies:t==null?void 0:t.dependencies,value:r.value},r.value=function(){throw new Error(`Method ${s} cannot be called directly.`)}}}const yp=t=>(e,s)=>{e[pr]=e[pr]||{},e[pr][s]=t},Io=m.createLogger({name:"resolve-parameters"}),pe=({value:t,modelId:e,modelData:s})=>{let r=t;if(Array.isArray(r))return[...t];if(typeof r!="string"&&typeof r!="object")return r;if(typeof r=="object")r=Object.keys(r).reduce((o,n)=>(o[n]=pe({value:r[n],modelId:e,modelData:s}),o),{});else if(typeof r=="string"){const o=new RegExp("{PROP_(.+?)}","g");let n=r!=null&&r.includes(Tr)?r.replace(Tr,e):r;if(s){let i=!1;const a=/^{PROP_.+?}$/.test(n);if(n=n.replace(o,(c,u)=>{if(Object.getOwnPropertyNames(s).includes(u)||Object.getOwnPropertyNames(Object.getPrototypeOf(s)).includes(u)){const h=s[u];return h!=null?(Io.debug(`Resolved ${c} to ${h}`),h):(Io[a?"debug":"warn"](`Property ${u} is null or undefined${a?"":" in composite string"}, marking for undefined return`),i=!0,c)}return Io[a?"debug":"warn"](`Property ${u} not found in modelData${a?"":" for composite string"}`),c}),i)return}return n}else return r;return r};function Nc(t,e,s,r){const o=pe({value:t.path,modelId:e.id,modelData:e}),n=pe({modelId:e.id,modelData:e,value:{...typeof t.pathParams=="function"?t.pathParams(e):t.pathParams||{},...(r==null?void 0:r.pathParams)||{}}}),i=pe({modelId:e.id,modelData:e,value:{...typeof t.queryParams=="function"?t.queryParams(e):t.queryParams||{},...(r==null?void 0:r.queryParams)||{}}}),a=(r==null?void 0:r.body)||(typeof t.body=="function"?t.body(e):t.body),u={...(typeof t.requestOptions=="function"?t.requestOptions(e,...s):t.requestOptions)||{},...(r==null?void 0:r.requestOptions)||{}},d={};return n&&Object.keys(n).length>0&&(d.path=n),i&&Object.keys(i).length>0&&(d.query=i),{resolvedPath:o,apiParams:d,finalBody:a,finalRequestOptions:u}}async function Uc(t,e,s,r,o,n){const i=(e||"get").toLowerCase(),a=t;switch(i){case"get":return await a.get(s,r,n);case"post":return await a.post(s,r,o,n);case"put":return await a.put(s,r,o,n);case"delete":return await a.delete(s,r,o,n);default:return await a.get(s,r,n)}}function jc(t,e,s,r){if(!s)return[t,null];switch(s.strategy){case"log":return console.error(`Service request status ${e==null?void 0:e.status} error: ${t}`),s.onError&&s.onError(new Error(t),r),[null,s.defaultValue];case"ignore":return[null,s.defaultValue];case"default":return[null,s.defaultValue];case"throw":default:return[t,null]}}const He=Symbol("ServiceRequestHandlers"),Qi=new WeakMap;function bt(t){return(e,s,r)=>{var a;e[He]=e[He]||{};const o=r.value,n={...t,handlerMethod:s,originalHandler:o},i=`${((a=t.method)==null?void 0:a.toUpperCase())||"GET"}:${String(t.path)}`;if(e[He][i]=n,!t.lifecycle){const c=function(...u){const d=u[u.length-1],h=async f=>{const p=Qi.get(c);if(!p)throw new Error("Service request metadata not found for method");try{const{default:g}=await Promise.resolve().then(()=>Bn),{resolvedPath:v,apiParams:E,finalBody:_,finalRequestOptions:R}=Nc(p,this,u,f),[S,O]=await Uc(g,p.method,v,E,_,R);if(S)return jc(S,O,p.errorHandler,this);let L=O;return p.transform&&(L=p.transform(O)),[null,L]}catch(g){return[g.message||"Unknown error",null]}};if(Rn(d))return d.$request=h,o.apply(this,u);{const f={[Gs]:!0,$request:h};return o.apply(this,[...u,f])}};Qi.set(c,n),r.value=c}return r}}var Bc=(t=>(t.GET="GET",t.PUT="PUT",t.POST="POST",t.DELETE="DELETE",t))(Bc||{}),X=(t=>(t.IMMEDIATE="immediate",t.SINGLE="single",t.TTL="ttl",t.PERMANENT="permanent",t.MANUAL="manual",t))(X||{}),pt=(t=>(t.ALL="all",t.AFTER_REQUEST="after-request",t.AFTER_RESPONSE="after-response",t.NONE="none",t))(pt||{});const bp=m.createLogger({name:"kos-state-machine"});function vp(t,e){return s=>(s.prototype[Xt]={config:{...t,initializeAt:t.initializeAt||D.READY},options:{stateProperty:(e==null?void 0:e.stateProperty)||"currentState",trackHistory:(e==null?void 0:e.trackHistory)||!1,throwOnInvalid:(e==null?void 0:e.throwOnInvalid)!==!1,computeInitialState:e==null?void 0:e.computeInitialState}},s)}function wp(t){return(e,s)=>{e[kt]||(e[kt]=new Map),e[kt].set(t,s)}}function Ep(t){return(e,s)=>{e[Ss]||(e[Ss]=new Map),e[Ss].set(t,s)}}function Mp(t){return(e,s,r)=>{const o=r.value;return r.value=function(...n){var u,d;if(!this.isFsmInitialized)return o.apply(this,n);const a=this.currentState;if(!t.allowedStates.includes(a)){const h=`Method ${String(s)} cannot be called from state "${a}". Allowed states: ${t.allowedStates.join(", ")}`;if(t.throwOnInvalid!==void 0?t.throwOnInvalid:((d=(u=this[Xt])==null?void 0:u.options)==null?void 0:d.throwOnInvalid)!==!1)throw new Error(h);bp.warn(h);return}return o.apply(this,n)},r}}function Tp(t){return e=>{const s=(t==null?void 0:t.pathProperty)||"path";return e.prototype[Cn]={pathProperty:s},e.prototype[x]=e.prototype[x]||{},e.prototype[x].troubleContainer={modelType:"trouble-container-model",id:"trouble-container-model",options:{},lazy:!1},e}}const Jt=({modelType:t,id:e,options:s,lifecycle:r,resolutionPolicy:o})=>(n,i)=>{n[x]=n[x]||{},n[x][i]={modelType:t,id:e,options:s,lifecycle:r||D.INIT,resolutionPolicy:o}};class Hc{constructor(e,s){l(this,"futures");l(this,"defaultContext");l(this,"context");l(this,"disposers",new Map);l(this,"container");this.futures=Qn.map(new Map),this.context="",this.defaultContext=s||"",this.container=e,M.makeAutoObservable(this)}get allFutures(){return Array.from(this.futures.values())}get future(){return this.futures.get(this.defaultContext)}addFuture(e,s){this.futures.set(s||e.id,e),this.context=s||e.id;const r=s,o=Z(()=>{var n,i;(e.endState||e.progress)&&((i=(n=this.container)==null?void 0:n.onFutureUpdate)==null||i.call(n,e,r))});this.disposers.set(s||e.id,o)}removeFuture(e){var s;this.futures.delete(e||this.context),(s=this.disposers.get(e||this.context))==null||s(),this.disposers.delete(e||this.context)}getFuture(e){return this.futures.get(e||this.context)}get futureMap(){return this.futures}}class lo{constructor(e){l(this,"disposer");l(this,"_future");l(this,"container");l(this,"onFutureUpdate");this._future=void 0,this.container=e,M.makeAutoObservable(this)}removeFuture(){var e;this._future=void 0,(e=this.disposer)==null||e.call(this),this.disposer=void 0}get future(){return this._future}getFuture(){return this._future}addFuture(e){this._future=e;const s=Z(()=>{var r,o;(e.endState||e.progress)&&((o=(r=this.container)==null?void 0:r.onFutureUpdate)==null||o.call(r,e))});this.disposer=s}get allFutures(){return this._future?[this._future]:[]}get timeRemaining(){var e;return((e=this._future)==null?void 0:e.timeRemaining)||""}get status(){var e;return((e=this._future)==null?void 0:e.status)||"NOT_RESOLVED"}get progress(){var e;return((e=this._future)==null?void 0:e.progress)||-1}async cancel(){if(this._future)try{await this._future.cancelFuture()}catch(e){throw m.error(e),e}}}const Kc=(t,e)=>{const s=e.type;return t[s]||(t[s]=[]),t[s].push(e),t},qc=Symbol("KosObservableData"),Qe=Symbol("revision");var z_;class zc{constructor(){l(this,"map");l(this,z_,1);l(this,"atomMap",new Map);l(this,"proxyHandler",{get:(e,s)=>{var r;return s===Qe||e[s]!==void 0?e[s]:this.atomMap.has(s)&&(r=this.atomMap.get(s))!=null&&r.reportObserved()?this.getValue(s):this.getValue(s)},set:(e,s,r)=>{var o;return this.map.has(s),this.setValue(s,r),this.atomMap.has(s)||this.atomMap.set(s,M.createAtom(s.toString())),(o=this.atomMap.get(s))==null||o.reportChanged(),!0},ownKeys:e=>[...Array.from(this.map.keys()),Qe],getOwnPropertyDescriptor:(e,s)=>{if(this.map.has(s))return{enumerable:!0,configurable:!0,writable:!0,value:this.getValue(s)};if(s===Qe)return{enumerable:!1,configurable:!0,writable:!0,value:e[Qe]}}});this.map=M.observable.map(new Map),M.makeObservable(this,{[Qe]:M.observable})}setValue(e,s){const r=this.map.has(e);this.map.set(e,s),r||M.action(()=>{this[Qe]++})()}getValue(e){return this.map.get(e)}has(e){return this.map.has(e)}get entries(){return Array.from(this.map.entries())}get keys(){return this[Qe],Array.from(this.map.keys())}get values(){return Array.from(this.map.values())}setValues(e){e&&Object.keys(e).forEach(s=>{this.setValue(s,e[s])})}get proxy(){return new Proxy(this,this.proxyHandler)}}z_=Qe;zc.prototype[qc]=!0;function _p(t,e){return new Proxy(t,{construct:(s,r)=>{const o=new t(...r);return o.setValues(e),o.proxy}})}const Re=t=>{const e=_p(zc,t);return new e(t)},$o={failurePolicy:"throw"};class gr extends Error{constructor(s,r,o,n){super(n||`Extension failure in ${r} for id "${s}"`);l(this,"extensionId");l(this,"extensionType");l(this,"cause");this.name="ExtensionException",this.extensionId=s,this.extensionType=r,this.cause=o}}const re="canvas-renderer",Co=new Map,Zi=new Map,Do=new Map,Ao=new Map,Ws=(t,e)=>{Vc[t]=e},Vc={indexExtension:{registerIndexExtension:(t,e)=>{const s=Ao.get(t)||{};Object.assign(s,e),Ao.set(t,e)},loadIndexExtensions:t=>Ao.get(t)||{}},loader:{registerLoader:(t,e,s)=>{Zi.set(t,{loader:e,options:{...$o,...s}})},executeLoader:async(t,e)=>{const s=Zi.get(t);if(!s)return;const{loader:r,options:o}=s;try{return await r(e)}catch(n){if(o.failurePolicy==="continue"){m.error(`Error executing data loader for id ${t}`),m.error(n);return}throw new gr(t,"dataLoader",n)}}},propertyMapper:{registerPropertyMapper:(t,e,s)=>{Do.set(t,{mapper:e,options:{...$o,...s}})},hasMapper:t=>Do.has(t),executeMapper:(t,e,s)=>{const r=Do.get(t);if(!r)return"";const{mapper:o,options:n}=r;try{return o(e,s)}catch(i){if(n.failurePolicy==="continue")return m.error(`Error executing property mapper for id ${t}`),m.error(i),"";throw new gr(t,"propertyMapper",i)}}},dataMapper:{registerDataMapper:(t,e,s)=>{const r=Co.get(t)||[];r.push({mapper:e,options:{...$o,...s}}),Co.set(t,r)},executeMapper:async(t,e,s)=>{const r=Co.get(t);if(!r)return{};const o={};for(const{mapper:n,options:i}of r)try{const a=await n(e,s);Object.assign(o,a)}catch(a){if(i.failurePolicy==="continue"){m.error(`Error executing data mapper for id ${t}`),m.error(a);continue}throw new gr(t,"dataMapper",a)}return o}},canvas:{registerRenderer:(t,e)=>{if(!$[re]){m.warn(`Canvas renderer extension point is not registered. Cannot register renderer "${t}".`);return}$[re].register(t,e)}}},$=Vc,Sp=async({context:t,extension:e})=>{const s=await $.loader.executeLoader(e,{});return t==null||t.set(e,s),s},Op=async({extension:t,contextData:e,data:s})=>await $.dataMapper.executeMapper(t,s,e),Ip=async({extension:t,contextData:e,data:s})=>await $.propertyMapper.executeMapper(t,s,e),$p=Object.freeze(Object.defineProperty({__proto__:null,executeDataMapperExtension:Op,executeLoaderExtension:Sp,executePropertyMapperExtension:Ip},Symbol.toStringTag,{value:"Module"})),Cp="Extensions";class Dp{constructor(){l(this,"extensions");this.extensions={}}register(e,s,r){this.extensions[e]={},this.extensions[e][s]={component:r}}get(e,s){if(!this.extensions[e])throw new Error(`Extension point ${e} not found`);return this.extensions[e][s]}get allExtensions(){return this.extensions}}function Ap(t,e){return t.length!==e.length?!1:t.every(s=>e.includes(s))}class kn{constructor({container:e,key:s}){l(this,"_container");l(this,"_map");l(this,"_key");l(this,"data");this._container=e,this._map=M.observable.map(new Map),this._key=s,this.data=Re(),this.generateIndex(),M.autorun(()=>{this._container.revision&&this.generateIndex()}),M.makeAutoObservable(this)}refresh(){this.generateIndex()}addItemToIndex(e,s,r=this._map,o=this.data){const n=r.get(e)||new Set;n.add(s),r.set(e,n),o[e]=Array.from(n)}resolveIndex(e,s){this.data.keys.filter(o=>!Object.keys(s).includes(o)).forEach(o=>{delete this.data[o],this._map.delete(o)}),Object.keys(s).forEach(o=>{const n=s[o],i=this.data[o]||[];if(Ap(n,i))m.debug(`KosContainerIndex - Index ${o} is the same`);else{this.data[o]=n;const a=e.get(o)||new Set;this._map.set(o,a)}})}generateIndex(){M.runInAction(async()=>{const e=new Map,s={};for(const r of this._container.data){const o=typeof this._key=="function"?await this._key(r):r[this._key];Array.isArray(o)?o.forEach(n=>{this.addItemToIndex(n,r,e,s)}):typeof o=="string"||typeof o=="number"?this.addItemToIndex(String(o),r,e,s):typeof o=="boolean"&&this.addItemToIndex(String(o),r,e,s)}this.resolveIndex(e,s)})}get keys(){return Array.from(this._map.keys())}get index(){return this._map}getByKey(e){const s=this._map.get(e);return s?Array.from(s):[]}}function xp(t,e,s=[]){const r=Object.getOwnPropertyDescriptors(t);return Object.keys(r).filter(i=>M.isComputedProp(t,i)).filter(i=>s.includes(i)).map(i=>M.reaction(()=>t[i],(a,c)=>{e({name:i,newValue:a,oldValue:c})}))}const ce=m.createLogger({name:"kos-container-model"});class Fe{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"_parentId");l(this,"idx");l(this,"_maxCapacity");l(this,"_evictionStrategy");l(this,"_evictionBatchSize");l(this,"_insertionOrder",[]);l(this,"_accessTimes");l(this,"_customEvictionFilter");this._data=M.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1;const s=e!=null&&e.extensionId?$.indexExtension.loadIndexExtensions(e.extensionId):{},r=(e==null?void 0:e.indexMap)||{};this._optionsMap={...r,...s};const o=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((n,i)=>(n[i]=void 0,n),{}):{};this._index=M.observable.map(o),this.idx=Re(),this._parentId=e==null?void 0:e.parentId,this._maxCapacity=e==null?void 0:e.maxCapacity,this._evictionStrategy=(e==null?void 0:e.evictionStrategy)||"fifo",this._evictionBatchSize=(e==null?void 0:e.evictionBatchSize)??Math.max(10,Math.ceil(((e==null?void 0:e.maxCapacity)??100)*.1)),this._customEvictionFilter=e==null?void 0:e.customEvictionFilter,this._evictionStrategy==="lru"&&this._maxCapacity&&(this._accessTimes=M.observable.map(new Map)),M.makeAutoObservable(this),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new kn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get revision(){return this._revision}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){M.runInAction(()=>{this._revision=this._revision+1})}addAll(e){M.runInAction(()=>{e.forEach(s=>this.addModel(s,!0))}),this.increment()}removeAll(e){M.runInAction(()=>{e.forEach(s=>this.removeModel(s,!0)),this.increment()})}async removeAndDestroy(e){const s=this.getModel(e);if(!s){ce.debug(`Model ${e} not found in container, skipping destroy`);return}this.removeModel(e);try{await Ae(s)}catch(r){throw ce.error(`Failed to destroy model ${e}:`,r),r}}async removeAndDestroyAll(e){const s=e.map(n=>this.getModel(n)).filter(n=>n!==void 0);if(s.length===0){ce.debug("No models found to destroy");return}this.removeAll(e);const r=await Promise.allSettled(s.map(n=>Ae(n)));r.forEach((n,i)=>{n.status==="rejected"&&ce.error(`Failed to destroy model ${s[i].id}:`,n.reason)});const o=r.filter(n=>n.status==="rejected");if(o.length>0)throw new Error(`Failed to destroy ${o.length} of ${s.length} models`)}addModel(e,s){this._persistModel(e),this._trackModelMetadata(e),this._establishModelRelationships(e),this._enforceCapacityLimits(),this._configureModelMonitoring(e),s||this.increment()}_persistModel(e){this._data.set(e.id||"",e)}_trackModelMetadata(e){this._maxCapacity&&(this._insertionOrder.push(e.id||""),this._accessTimes&&this._accessTimes.set(e.id||"",Date.now()))}_establishModelRelationships(e){e.id&&this._parentId&&Q.setParentContext(e.id,this._parentId)}_enforceCapacityLimits(){this._maxCapacity&&this._data.size>this._maxCapacity&&this._evictModels()}_configureModelMonitoring(e){const s=this._disposerMap.get(e.id);s&&(s(),this._disposerMap.delete(e.id));const r=Object.entries(this._optionsMap||{}),o=Object.values(this._optionsMap||{}),n=new Map(r.map(([u,d])=>[d,u])),i=u=>{var h,f;o.includes(u.name)&&((h=this.index.get(n.get(u.name)))==null||h.refresh());const d=r.filter(([,p])=>typeof p=="function");for(const[p]of d)(f=this.index.get(p))==null||f.refresh()},a=xp(e,i,o.filter(u=>typeof u=="string")),c=M.observe(e,i);this._disposerMap.set(e.id||"",()=>[c,...a].forEach(u=>u()))}removeModel(e,s){this._data.delete(e);const r=this._insertionOrder.indexOf(e);r!==-1&&this._insertionOrder.splice(r,1),this._accessTimes&&this._accessTimes.delete(e),s||this.increment();const o=this._disposerMap.get(e);o&&(o(),this._disposerMap.delete(e))}updateModel(e){this._data.set(e.id||"",e),this.increment()}getModel(e){const s=this._data.get(e);return s&&this._accessTimes&&this._accessTimes.set(e,Date.now()),s}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(ce.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(ce.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return ce.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async _evictModels(){if(!this._maxCapacity)return;const e=this._data.size-this._maxCapacity;if(e<=0)return;const s=Math.min(this._evictionBatchSize,e);this._logCapacityWarning(s);const r=this._selectModelsForEviction(s);await this._removeEvictedModels(r),this._logEvictionComplete(r.length),this.increment()}_logCapacityWarning(e){ce.info(`Container capacity exceeded (${this._data.size}/${this._maxCapacity}). Evicting ${e} models using ${this._evictionStrategy} strategy.`,{parentId:this._parentId})}_selectModelsForEviction(e){switch(this._evictionStrategy){case"fifo":return this._selectFifoModels(e);case"lru":return this._selectLruModels(e);case"custom":return this._selectCustomModels(e);default:return this._selectFifoModels(e)}}_selectFifoModels(e){const s=[];for(let r=0;r<e&&this._insertionOrder.length>0;r++){const o=this._insertionOrder.shift();if(!o)continue;const n=this._data.get(o);n&&s.push(n)}return s}_selectLruModels(e){const s=[];return this._accessTimes&&Array.from(this._accessTimes.entries()).sort((o,n)=>o[1]-n[1]).slice(0,e).forEach(([o])=>{const n=this._data.get(o);n&&s.push(n)}),s}_selectCustomModels(e){return this._customEvictionFilter?this._customEvictionFilter(this.data).slice(0,e):(ce.error("Custom eviction strategy specified but no customEvictionFilter provided. Falling back to FIFO.",{parentId:this._parentId}),this._selectFifoModels(e))}async _removeEvictedModels(e){for(const s of e)ce.info(`Evicting model: ${s.id} (type: ${s.constructor.name})`,{modelId:s.id,parentId:this._parentId,strategy:this._evictionStrategy}),this.removeModel(s.id,!0),Ae(s).catch(r=>ce.error(`Failed to destroy evicted model ${s.id}:`,r))}_logEvictionComplete(e){ce.info(`Evicted ${e} models. Current size: ${this._data.size}/${this._maxCapacity}`,{parentId:this._parentId})}async clear(){this._data.forEach(e=>{const s=e.id;Ae(e).then(()=>{ce.debug(`${s} destroyed, removing from map`),this.removeModel(s,!0)}).catch(r=>ce.error(r))}),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id,type:s.constructor.name}))}}}var w=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.READY_FAILED="ready_failed",t.RESETTING="resetting",t.RESET="reset",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.FAILED="failed",t.INACTIVE="inactive",t.ACTIVE="active",t.ACTIVATING="activating",t.DEACTIVATING="deactivating",t))(w||{}),N=(t=>(t.CREATE="create",t.INITIALIZE="init",t.LOAD="load",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.RESET="go_offline",t.UNLOAD="unload",t.FAILED="failed",t.GO_ACTIVE="go_active",t.GO_INACTIVE="go_inactive",t.TIMEOUT="timeout",t))(N||{});const ge=async t=>{if(t.id){const e=I.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error(`Model with ID ${t.id} not found`);await(e==null?void 0:e.whenReady())}else throw new Error("Data model must have a valid ID");return t},Ae=async t=>{await I.getInstance().whenReady(),await I.getInstance().modelManager.initiateDestroyModel(t)},Rp=async t=>{if(await I.getInstance().whenReady(),!t.id)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t.id);e&&await e.fsm.transitionTo(N.UNLOAD,w.UNLOADED)},Pp=async t=>{await I.getInstance().whenReady(),await I.getInstance().modelManager.reloadModel(t),m.debug(`reload model initiated for model ${t.id}, model ready: ${Or(t)} - ${Date.now()} `),await ge(t),m.debug(`reload model complete for model ${t.id}, model ready: ${Or(t)} - ${Date.now()} `)},kp=async t=>{if(await I.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);return e==null?void 0:e.modelTypeName},Gc=async t=>{if(await I.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Pe=t=>{if(!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Yc=(t,e)=>{if(!t)throw new Error("Model type is required");return I.getInstance().modelManager.getModelsByType(t).filter(o=>Object.keys(e).every(n=>o[n]===e[n]))},Lp=(t,e)=>Yc(t,e)[0],Fp=(t,e)=>{if(!t.id)throw new Error("Model ID is required");const s=I.getInstance().modelManager.getModelById(t.id);if(!s)throw new Error("Model not found");const r=s.companionModels.get(e);return r==null?void 0:r.modelData},Wc=t=>{if(!t.id)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return Array.from(e.companionModels.all()).map(r=>r.modelData)},Np=t=>{if(!t)throw new Error("Model ID is required");const e=I.getInstance().modelManager.getModelById(t);if(!e)throw new Error("Model not found");return e.companionModels.data},Yo=(t,e)=>{const s=I.getInstance().modelManager.getModelById(t);if(!s){m.info(`Model not found for id ${t}`);return}return Array.from(s.companionModels.all()).find(o=>e(o.modelData))},$e=t=>e=>Object.getPrototypeOf(e).modelTypeId===t,Or=t=>{const e=I.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return e.isReady()},Up=m.createLogger({name:"kos-model-factory"}),Os={byModelType:t=>I.getInstance().modelManager.getModelFactory(t),getModelInstance:(t,e,s)=>{const r=Os.byModelType(e);if(!r)throw Up.error(`No registered factory found for model type ${e}. Please register a factory for this model type. `),Error(`No factory found for model type ${e}`);return r.build(t,s)}},ue={Factory:{create:t=>e=>(s,r)=>(r&&Q.setParentContext(e,r),Os.getModelInstance(e,t,s))},Singleton:{create:t=>(e,s)=>(s&&Q.setParentContext(t,s),Os.getModelInstance(t,t,e))},Model:{instance:t=>e=>Os.getModelInstance(e,t)}};window.KosRegistry=window.KosRegistry||{coreModels:new Map,preloadModels:[],companionModels:new Map,models:new Map};const Xi=window.KosRegistry.coreModels,xo=window.KosRegistry.preloadModels,Ro=window.KosRegistry.companionModels,sr=window.KosRegistry.models,P={model:{registerLegacyModel:t=>(e,s)=>(Xi.set(e,s),{preload:P.model.preloadModel(t),model:P.model.register(t),companion:P.companion.register(t),legacy:P.model.registerLegacyModel(t),root:t}),preloadModel:t=>e=>(xo.includes(e)||xo.push(e),{preload:P.model.preloadModel(t),model:P.model.register(t),companion:P.companion.register(t),legacy:P.model.registerLegacyModel(t),root:t}),register:t=>(e,s)=>{const r=Po(e)?e.registration():e;return sr.set(r.type,r),Po(e)&&e.relatedModels.forEach(o=>sr.set(o.type,o.registration())),I.getInstance().isReady&&(I.getInstance().modelManager.registry.models[r.type]||(console.info(`Model with type ${r.type} doesn't exist. Adding new registration`),I.getInstance().modelManager.registry.models[r.type]=r.registration[r.type],Po(e)&&e.relatedModels.forEach(o=>I.getInstance().modelManager.registry.models[o.type]=o.registration().registration))),s&&P.model.preloadModel(t)(r.type),{preload:P.model.preloadModel(t),model:P.model.register(t),companion:P.companion.register(t),legacy:P.model.registerLegacyModel(t),root:t}},get:t=>sr.get(t),getAll:()=>Array.from(sr.entries()),getPreloadModels:()=>xo,getLegacyModels:()=>Array.from(Xi.entries()).reduce((t,[e,s])=>(t[e]=s,t),{})},companion:{register:t=>(e,s)=>{const r=Ro.get(e)||[];return r.push(s),Ro.set(e,r),{preload:P.model.preloadModel(t),model:P.model.register(t),companion:P.companion.register(t),legacy:P.model.registerLegacyModel(t),root:t}},getAll:()=>Array.from(Ro.entries())}},Qc=P.model.registerLegacyModel,Zc=P.model.register,jp=P.companion.register,Bp=P.model.preloadModel,Ln=t=>typeof t.updateModel=="function",Po=t=>t.registration!==void 0&&typeof t.registration=="function";class Xc{constructor(e){l(this,"singleton");l(this,"type");l(this,"loader");l(this,"class");l(this,"guard");l(this,"factory");l(this,"relatedModels",[]);this.singleton=e.singleton,this.guard=$e(e.type),this.type=e.type,this.loader=`kos.extension.model.loader.${e.type}`,this.factory=e.factory,this.class=e.class}addRelatedModel(e){this.relatedModels.push(e)}registerRelatedModels(){this.relatedModels.forEach(e=>e.register())}register(){P.model.register({})(this.registration()),this.registerRelatedModels()}}class we extends Xc{constructor(e){super({...e,singleton:!1,factory:ue.Factory.create(e.type)})}instance(e){const s=this.factory(e);return{get:()=>{const r=Pe(e);if(!r)throw new Error("Model not found with id "+e);if(this.guard(r.model))return r.model;throw new Error("Model is not of type "+this.type)},forceUpdate:{options:r=>({build:()=>{const o=s(r);if(this.guard(o)){if(Ln(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error("Model is not of type "+this.type)}})},options:r=>({build:()=>{const o=s(r);if(this.guard(o))return o;throw new Error("Model is not of type "+this.type)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!1}},factory:this.factory}}}class Ce extends Xc{constructor(e){super({...e,singleton:!0,factory:ue.Singleton.create(e.type)})}instance(){const e=this.factory;return{get:()=>{const r=Pe(this.type);if(!r)throw new Error("Model not found with id "+this.type);if(this.guard(r))return r;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(r).modelTypeId}`)},forceUpdate:{options:r=>({build:()=>{const o=e(r);if(this.guard(o)){if(Ln(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})},options:r=>({build:()=>{const o=e(r);if(this.guard(o))return o;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!0}},factory:this.factory}}}const Wo=m.createLogger({group:"decorators",name:"kos-model"});function Hp(t,e,s){var n;const r=(n=t[_s])==null?void 0:n.parentId;if(!r)return;const o=pe({value:r,modelData:s,modelId:e});o&&typeof o=="string"&&Q.setParentContext(e,o)}function Kp(t){const e=t[xt];e&&Object.entries(e).forEach(([s,{handler:r}])=>{t[s]=r})}function qp(t,e){const s=t[x]||{};Object.entries(s).forEach(([r,o])=>{const n=pe({value:o.id||o.modelType,modelData:t,modelId:e}),i=Object.entries((o==null?void 0:o.options)||{}).reduce((a,[c,u])=>(a[c]=pe({value:u,modelData:t,modelId:e}),a),{});if(typeof n=="string"){if(!o.lazy){const a=I.getInstance().modelManager.createModelInstance(o.modelType,n,i);t[r]=a.data}I.getInstance().modelManager.addDependency(e,n)}})}function zp(t){const e=t[ro];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new lo(t);t[r]=o,s==="full"&&(Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0}),Object.defineProperty(t,"progress",{get(){var n;return((n=o.future)==null?void 0:n.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var n;return((n=o.future)==null?void 0:n.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var n;return((n=o.future)==null?void 0:n.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Vp(t){const e=t[oo];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new Hc(t);t[r]=o,Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0});const n=t[Pt];n instanceof Map&&n.forEach(i=>{const a=`${i}Future`;Object.defineProperty(t,a,{get(){return o.futureMap.get(i)},enumerable:!0,configurable:!0}),s==="full"&&(Object.defineProperty(t,`${i}Progress`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}Status`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsRunning`,{get(){const c=o.futureMap.get(i);return c?!c.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsCancelled`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t[`cancel${i.charAt(0).toUpperCase()}${i.slice(1)}`]=async()=>{const c=o.futureMap.get(i);c&&await c.cancelFuture()})}),s==="full"&&(Object.defineProperty(t,"progress",{get(){var i;return((i=o.future)==null?void 0:i.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var i;return((i=o.future)==null?void 0:i.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var i;return((i=o.future)==null?void 0:i.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Gp(t){const e=t[Cn];if(!e)return;const{pathProperty:s}=e;Object.defineProperty(t,"troubles",{get(){const r=this[s];if(r==null){const o=`@kosTroubleAware: Path property '${s}' is undefined on model ${this.id||"unknown"}. Returning empty troubles array.`;return this.logger&&typeof this.logger.warn=="function"?this.logger.warn(o):console.warn(o),[]}return this.troubleContainer.troubles.getIndexByKey("byIface",r).sort((o,n)=>n.rank-o.rank)},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troubleStatus",{get(){return""},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troublesByType",{get(){return this.troubles.reduce(Kc,{})},enumerable:!0,configurable:!0})}function Yp(t,e){const s=t[io];if(!s)return;const{containerProperty:r,includeMethods:o,includeGetters:n,modelsProperty:i,containerOptions:a,legacy:c}=s,u={...a,parentId:a.parentId||e},d=new Fe(u);t[r]=d,t[_e]||(t[_e]={}),t[_e][r]=d,o&&(t.getModel=h=>d.getModel(h),t.addModel=h=>{d.addModel(h)},t.removeModel=h=>{d.removeModel(h)},t.addAll=h=>{d.addAll(h)},t.removeAll=h=>{d.removeAll(h)},t.removeAndDestroy=async h=>d.removeAndDestroy(h),t.removeAndDestroyAll=async h=>d.removeAndDestroyAll(h)),n&&(Object.defineProperty(t,i,{get(){return d},enumerable:!0,configurable:!0}),Object.defineProperty(t,"data",{get(){return d.data},enumerable:!0,configurable:!0}))}function Wp(t,e){const s=t.constructor.prototype[Je];if(!s)return;const{mode:r,parentProperty:o,excludeProperties:n}=s,i=e.companionParent;if(!i){Wo.warn("Companion decorator configured but no parent model found in initialData.companionParent");return}if(t.getCompanionParent=()=>i,Object.defineProperty(t,o,{get:()=>i,enumerable:!0,configurable:!0}),r==="composition")return;const a=["init","load","unload","ready","dispose","destroy","activate"],c=["getDependencies","getChildren","update","toJSON","forceUpdate","makeAutoObservable","runInAction","transaction","observe","unobserve","intercept","spy","trace","getCompanionParent"],u=p=>{const g=i.constructor.prototype[J]||{};return Object.values(g).some(v=>{const E=v==null?void 0:v.handler;return E===i[p]||E===i.constructor.prototype[p]})},d=p=>p==="constructor"||p.startsWith("_")||p.startsWith("__")||a.includes(p)||c.includes(p)||n.includes(p)||u(p)||p in t,h=new Set;Object.getOwnPropertyNames(i).filter(p=>!d(p)).forEach(p=>h.add(p));let f=Object.getPrototypeOf(i);for(;f&&f!==Object.prototype;)Object.getOwnPropertyNames(f).filter(p=>!d(p)).forEach(p=>h.add(p)),f=Object.getPrototypeOf(f);for(const p of h)try{const g=i[p];typeof g=="function"?t[p]=(...v)=>g.apply(i,v):Object.defineProperty(t,p,{get:()=>i[p],set:v=>{i[p]=v},enumerable:!0,configurable:!0})}catch(g){Wo.debug(`Skipping companion proxy for property ${p}:`,g)}}function Qp(t){const e=t[Dc];if(!e)return;const{reloadDependencies:s=[]}=e;t._isReloading=!1,Object.defineProperty(t,"isReloading",{get(){var r;if(this._isReloading)return!0;for(const o of s)if((r=this[o])!=null&&r.isReloading)return!0;return!1},enumerable:!0,configurable:!0})}function Zp(t){try{return M.makeAutoObservable(t)}catch(e){return Wo.error("Failed to make observable:",e),t}}const Xp={construct(t,e){var c;const[s,r={}]=e,o=Q.createContext(s);Hp(t,s,r);const i=!!t.prototype[no]?null:m.createLogger({name:t.prototype.modelTypeId,group:((c=t[Rt])==null?void 0:c.group)??"kos-model"}),a=new t(s,r,{logger:i,kosContext:o});return Wp(a,r),Kp(a),zp(a),Vp(a),Gp(a),Yp(a,s),xn(a),Qp(a),qp(a,s),Zp(a)}};function k(t){return e=>{var n,i;const s=e,r=typeof t=="string"?{modelTypeId:t,autoRegister:!1}:{autoRegister:!1,...t};s.prototype.modelTypeId=r.modelTypeId,s.prototype[$n]=!0,(n=s.prototype)[J]??(n[J]={}),(i=s.prototype)[x]??(i[x]={}),r.optionsRequired&&(s.prototype[Vs]=!0),m.ifDebug(()=>{m.debug(`Registering model with id ${r.modelTypeId}`)});const o=new Proxy(s,Xp);if(r.singleton!==void 0){let a;r.singleton?a=new Ce({class:o,type:r.modelTypeId}):a=new we({class:o,type:r.modelTypeId}),Object.defineProperty(o,"Registration",{value:a,writable:!1,enumerable:!0,configurable:!1}),r.autoRegister&&a.register()}return o}}function Jc(t,e,s=300){let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>{e.apply(t,o)},s)}}const Jp=({topic:t,handler:e,websocket:s=!1,condition:r=()=>!0})=>o=>{o[J]=o[J]||{},Array.isArray(t)?t.forEach(n=>{o[J][n]={websocket:s,handler:e,condition:r}}):o[J][t]={websocket:s,handler:Jc(o,M.action(e),200),condition:r}};function el(t,e,s){const r={};if(!t.endsWith("/*"))return r;const o=t.slice(0,-2);if(e.startsWith(o)){const n=e.slice(o.length+1),i=s||"path";r[i]=n}return r}function tl(t){return t.endsWith("/*")}function B(t){return(e,s,r)=>{const o=eg(t,r);sg(e,t.topic,o),t.replay&&rg(t.topic,t.replay.bufferSize)}}function eg(t,e){const{condition:s=(L,Y)=>!0,transform:r=L=>L,websocket:o=!1,fos:n=!1,bridge:i=!1,skipParse:a=!1,lifecycle:c,destinationAddress:u,debounce:d,throttle:h,buffer:f,filter:p,once:g,wildcardName:v,flow:E,requiresBaseline:_}=t,R=e.value,S=Fn(R,{debounce:d,throttle:h,buffer:f,once:g}),O=tg(p,s);return{websocket:o,fos:n,bridge:i,handler:S,condition:O,transform:r,lifecycle:c,skipParse:a,destinationAddress:u,wildcardName:v,flow:E,requiresBaseline:_,once:g}}function Fn(t,e){var n,i;let s=t;const r=typeof e.debounce=="number"?e.debounce:(n=e.debounce)==null?void 0:n.delay,o=typeof e.throttle=="number"?e.throttle:(i=e.throttle)==null?void 0:i.interval;return r&&r>0?s=og(s,e.debounce):o&&o>0?s=cg(s,e.throttle):e.buffer?s=lg(async function(c){for(const u of c)await s.call(this,u)},e.buffer):e.once&&(s=ug(s)),s}function tg(t,e){return t?(s,r,o)=>t(o)?e(s,r,o):!1:e}function sg(t,e,s){t[J]=t[J]||{},Array.isArray(e)?e.forEach(r=>{t[J][r]=s}):t[J][e]=s}function rg(t,e){dg(t,e)}function og(t,e){const s=typeof e=="number"?e:e.delay;return ng(e)==="discard"?ig(t,s):ag(t,s)}function ng(t){return(typeof t=="object"?t.discardIntermediate:!1)?"discard":"accumulate"}function ig(t,e){let s=null;return function(r){s&&clearTimeout(s),s=setTimeout(()=>{t.call(this,r),s=null},e)}}function ag(t,e){let s=null,r=[];return function(o){r.push(o),s&&clearTimeout(s),s=setTimeout(()=>{const n=[...r];r=[],t.call(this,n),s=null},e)}}function cg(t,e){const s=typeof e=="number"?e:e.interval,r=typeof e=="object"?e.discardIntermediate:!1;let o=0,n=null,i=[],a=!1;const c=function(){if(i.length>0){const u=[...i];i=[],t.call(this,u)}};return function(u){const d=Date.now(),h=d-o;r?h>=s?(o=d,t.call(this,u)):n||(n=setTimeout(()=>{o=Date.now(),t.call(this,u),n=null},s-h)):(i.push(u),h>=s?(o=d,c.call(this)):a||(a=!0,n=setTimeout(()=>{o=Date.now(),c.call(this),n=null,a=!1},s-h)))}}function lg(t,e){const s=[];let r=null;const o=e.maxSize||1e3,n=i=>{s.length>0&&(t.call(i,[...s]),s.length=0)};return function(i){if(s.push(i),s.length>=o){r&&(clearTimeout(r),r=null),n(this);return}r||(r=setTimeout(()=>{n(this),r=null},e.time))}}function ug(t){let e=!1;return function(s){e||(e=!0,t.call(this,s))}}function dg(t,e){(Array.isArray(t)?t:[t]).forEach(r=>{_n(r,e)})}function sl(t){return t!==null&&typeof t=="object"&&"ready"in t&&typeof t.ready=="function"}function mr(t){return t!==null&&typeof t=="object"&&"dispose"in t&&typeof t.dispose=="function"}let hg=0;const fg=Symbol("ViewModelEffectDisposers");function pg(t){const e=t[xe];return!!e&&Object.keys(e).length>0}function gg(t,e){if(!pg(t))return;const s=t[xe],r=[];for(const a of Object.keys(s)){const{value:c,dependencies:u,options:d}=s[a],h=c.bind(t),f=()=>{M.runInAction(()=>h())},p=u?M.reaction(()=>u(t),f,{fireImmediately:!!(d!=null&&d.fireImmediately)}):M.autorun(f);r.push(p)}Object.defineProperty(t,fg,{value:r,writable:!1,enumerable:!1,configurable:!0});const o=t,n=o.dispose,i=()=>{for(const a of r)try{a()}catch(c){console.warn(`[kosViewModel] Failed to dispose effect for ${e}:`,c)}};typeof n=="function"?o.dispose=function(){return i(),n.call(this)}:o.dispose=i}function mg(t,e){const s=t[Xt];if(!s)return;const{config:r}=s;r.initializeAt&&r.initializeAt!==D.INIT&&console.warn(`[kosViewModel] ViewModel "${e}" has @kosStateMachine with initializeAt: ${r.initializeAt}. ViewModels do not have lifecycle phases, so the FSM will initialize immediately. Consider removing initializeAt or using @kosModel if lifecycle-aware FSM initialization is required.`),xn(t)}function yg(t){try{return M.makeAutoObservable(t)}catch(e){return console.error("[kosViewModel] Failed to make observable:",e),t}}const bg={construct(t,e){var a;const s=t.prototype[Dn]||{},r=s.typeId||t.name,o=`${r}-${++hg}`,n=new t(...e);mg(n,r),gg(n,r),Object.defineProperty(n,"__viewModelTypeId",{value:r,writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(n,"__viewModelInstanceId",{value:o,writable:!1,enumerable:!1,configurable:!0});const i=yg(n);return s.devToolsEnabled&&((a=globalThis.__KOS_DEVTOOLS__)!=null&&a.registerViewModel)&&globalThis.__KOS_DEVTOOLS__.registerViewModel(o,i),i}};function vg(t){return e=>{const s=t||{},r=s.typeId||e.name;e.prototype[Cc]={type:r},e.prototype[Dn]=s;const o=new Proxy(e,bg);return Object.defineProperty(o,"name",{value:e.name}),o}}const ko=new Map,rl={addToDeletionQueue:(t,e)=>{const s=ko.get(t)||[];s.push(e),ko.set(t,s)},cancelDeletion:t=>{const e=ko.get(t);e&&e.forEach(s=>{clearTimeout(s)})}},wg=m.createLogger({name:"kos-dependency-manager"});class Eg{constructor(){l(this,"_usedByCache",new Map);l(this,"_usesCache",new Map)}add(e,s){rl.cancelDeletion(s);const r=this._usedByCache.get(s)||[];r.includes(e)||r.push(e),this._usedByCache.set(s,r);const o=this._usesCache.get(e)||[];o.includes(s)||o.push(s),this._usesCache.set(e,o)}remove(e,s){const r=this._usedByCache.get(s)||[];this._usedByCache.set(s,r.filter(n=>n!==e));const o=this._usesCache.get(e)||[];this._usesCache.set(e,o.filter(n=>n!==s))}canDestroy(e){const s=this._usedByCache.get(e);return s!=null&&s.length?(wg.info(`Model ${e} is still used by: ${s.join(", ")}`),!1):!0}clear(){this._usedByCache.clear(),this._usesCache.clear()}}const Ji=m.createLogger({name:"kos-model-cache"});class Mg{constructor(e=[]){l(this,"_modelsById",M.observable.map(new Map));l(this,"_toDelete",new Map);l(this,"_preloaded",[]);l(this,"_isPreloaded",!1);this.preloadKeys=e}get models(){return Array.from(this._modelsById.values()).map(e=>e).filter(e=>!this._toDelete.has(e.modelId))}getModelById(e){if(e&&!this._toDelete.has(e))return this._modelsById.get(e)}addModel(e){const s=this.getModelById(e.modelId)||e;return this._modelsById.set(s.modelId,s),s}removeModel(e){this._modelsById.delete(e),this._toDelete.delete(e)}hasModel(e){return!!e&&this._modelsById.has(e)&&!this._toDelete.has(e)}restoreFromDeleteCache(e){if(e&&this._toDelete.has(e)){const s=this._toDelete.get(e);this._toDelete.delete(e),this._modelsById.set(e,s)}}markForDeletion(e){this._modelsById.delete(e.modelId),this._toDelete.set(e.modelId,e)}preload(e){return this._isPreloaded?(Ji.debug("Returning cached preloaded models"),this._preloaded):(this._preloaded=this.preloadKeys.map(s=>(Ji.debug(`Preloading model: ${typeof s=="string"?s:s.modelType}`),e(s))).filter(s=>!!s),this._isPreloaded=!0,this._preloaded)}}class yr extends Error{constructor(s,r,o){super(s,{cause:o});l(this,"context");l(this,"originalCause");this.name="KosModelError",this.context=r,this.originalCause=o,o!=null&&o.stack&&(this.stack=`${this.stack}
|
|
1
|
+
"use strict";var af=Object.defineProperty;var cf=(t,e,s)=>e in t?af(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var l=(t,e,s)=>(cf(t,typeof e!="symbol"?e+"":e,s),s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("loglevel"),E=require("mobx"),b=require("robot3"),We=require("date-fns"),T=require("@emotion/react/jsx-runtime"),an=require("@emotion/styled"),Na=require("react-dom"),lt=require("@emotion/react"),m=require("react"),cn=require("mobx-react-lite"),lf=require("@use-gesture/react"),Yr="method",Ua="topic",Gt="url",Hs="request-id",Wr="response-id",ln="status",ze="dst-addr",ja="src-addr",Re="type",un="ordered",dn="tracker",Ba="Content-Type",Ha="Cache-Control",Ka="requestId",qa=process.env.KOS_LOGIN_URL||"http://localhost",za=process.env.KOS_APP_PORT||"8080",uf=`${qa}:${za}`,vr="{MODEL_ID}";var Ks=(t=>(t.SEND="/ws/log/msg/send",t.RECEIVED="/ws/log/msg/receive",t))(Ks||{}),Va=(t=>(t.MSG_RECEIVE="/mock/msg/receive",t))(Va||{});const hn="/kos/model/ready/";D.info("Initializing event bus");globalThis.kos=globalThis.kos||{};globalThis.kos.subscriptions=globalThis.kos.subscriptions||{};const V=globalThis.kos.subscriptions,df=()=>Symbol("eventKey");function fn(t){return V[t]&&Object.getOwnPropertySymbols(V[t]).length>0}function $(t,e){const s=df();return V[t]||(D.debug(`Initializing subscription for ${t}`),V[t]={}),D.debug(`Subscribing to ${t} with id ${s.toString()}`),V[t][s]=e,{count:V[t]?Object.getOwnPropertySymbols(V[t]).length:0,unsubscribe:()=>(D.debug(`Unsubscribing from ${t} with id ${s.toString()}`),V[t]&&V[t][s]&&delete V[t][s],V[t]&&Object.getOwnPropertySymbols(V[t]).length===0&&delete V[t],{count:V[t]?Object.getOwnPropertySymbols(V[t]).length:0})}}function K(t,e,s={}){if(!V[t]||Object.getOwnPropertySymbols(V[t]).length===0)return D.debug(`No subscriptions for ${t}. Not publishing.`),{eventType:t,subscribers:0};const r=Object.getOwnPropertySymbols(V[t]).length;return Object.getOwnPropertySymbols(V[t]).forEach(o=>{if(s.sync){const n=s.sync;D.debug(`Performing sync publish for ${t} with sync id ${n}`),V[t][o]({body:e,headers:s}).then(i=>{D.debug(`Response recieved for ${n}, publishing back to source.`),K(n,i)})}else D.debug(`Performing async publish for ${t}`),V[t][o]({body:e,headers:s})}),{eventType:t,subscribers:r}}function hf(){D.warn("Resetting event bus"),Object.keys(V).forEach(t=>delete V[t])}function Ga(t,e){const s=$(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function pn(t,e){return new Promise((s,r)=>{let o=null;const n=Ga(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}const ff=Object.freeze(Object.defineProperty({__proto__:null,hasEventSubscriptions:fn,once:Ga,publish:K,reset:hf,subscribe:$,waitFor:pn},Symbol.toStringTag,{value:"Module"}));function Qr(t,e){const s=$(t,r=>{s.unsubscribe(),e(r)});return s.unsubscribe}function Xr(t,e){return new Promise((s,r)=>{let o=null;const n=Qr(t,i=>{o&&clearTimeout(o),s(i)});e&&(o=setTimeout(()=>{n(),r(new Error(`Timeout waiting for event: ${t}`))},e))})}function Ya(t,e){const s=t.map(r=>Xr(r,e));return Promise.all(s)}function Wa(t,e){return new Promise((s,r)=>{const o=[];let n=null,i=!1;const a=()=>{o.forEach(c=>c()),n&&clearTimeout(n)};t.forEach(c=>{const u=Qr(c,d=>{i||(i=!0,a(),s({eventType:c,data:d}))});o.push(u)}),e&&(n=setTimeout(()=>{i||(i=!0,a(),r(new Error(`Timeout waiting for any event: ${t.join(", ")}`)))},e))})}function Qa(t,e,s){return $(t,o=>{o&&e(o)&&s(o)}).unsubscribe}function Xa(t,e,s){return $(t,o=>{if(o){const n=e(o);s(n)}}).unsubscribe}function Za(t,e,s){let r=null;const o=$(t,n=>{r&&clearTimeout(r),r=setTimeout(()=>{s(n)},e)});return()=>{r&&clearTimeout(r),o.unsubscribe()}}function Ja(t,e,s){let r=0,o=null;const n=$(t,i=>{const a=Date.now(),c=a-r;c>=e?(r=a,s(i)):o||(o=setTimeout(()=>{r=Date.now(),s(i),o=null},e-c))});return()=>{o&&clearTimeout(o),n.unsubscribe()}}function ec(t,e,s){let r=[],o=null;const n=()=>{r.length>0&&(s([...r]),r=[])},i=$(t,a=>{a&&(r.push(a),o||(o=setTimeout(()=>{n(),o=null},e)))});return()=>{o&&(clearTimeout(o),n()),i.unsubscribe()}}function gn(t,e=1){const s=[];return $(t,r=>{r&&(s.push(r),s.length>e&&s.shift())}),{subscribe:r=>(s.forEach(o=>r(o)),$(t,r))}}function tc(t,e){const s=t.map(r=>$(r,o=>{o&&e(r,o)}));return()=>{s.forEach(r=>r.unsubscribe())}}function sc(t,e){let s=t;const r=[],o=new Set;return Object.values(e).forEach(n=>{Object.keys(n).forEach(i=>{o.add(i)})}),o.forEach(n=>{const{unsubscribe:i}=$(n,a=>{const c=e[s];c&&c[n]&&(s=c[n](a))});r.push(i)}),{get state(){return s},unsubscribe:()=>{r.forEach(n=>n())}}}function rc(t,e,s,r){const o=Xr(e,r);return K(t,s),o}async function*oc(t){const e=[],s=[],r=$(t,o=>{o&&(s.length>0?s.shift()(o):e.push(o))});try{for(;;)e.length>0?yield e.shift():yield await new Promise(o=>{s.push(o)})}finally{r.unsubscribe()}}const pf={once:Qr,waitFor:Xr,waitForAll:Ya,race:Wa,filter:Qa,map:Xa,debounce:Za,throttle:Ja,buffer:ec,replay:gn,merge:tc,stateMachine:sc,request:rc,eventIterator:oc},gf=Object.freeze(Object.defineProperty({__proto__:null,EventBusFunctional:pf,buffer:ec,debounce:Za,eventIterator:oc,filter:Qa,map:Xa,merge:tc,once:Qr,race:Wa,replay:gn,request:rc,stateMachine:sc,throttle:Ja,waitFor:Xr,waitForAll:Ya},Symbol.toStringTag,{value:"Module"}));async function Zr(t,e){const{getCurrentState:s,transformState:r,shouldUseFetchedState:o,timeout:n}=e,i=pn(t,n),a=await s(),c=r?r(a):a;return o&&o(c)?(i.catch(()=>{}),c):await Promise.race([i,new Promise(d=>{setTimeout(()=>d(c),100)})])}function nc(t,e,s){const{getCurrentState:r,transformState:o}=s;let n=!1;const i=$(t,a=>{a&&(n=!0,e(a))});return Promise.resolve(r()).then(a=>{const c=o?o(a):a;n||e(c)}).catch(a=>{console.error("Failed to fetch initial state:",a)}),i.unsubscribe}function ic(t,e){let s;const r=new Set,o=async()=>{try{typeof e=="string"?s=await(await fetch(e)).json():s=await e(),r.forEach(a=>a(s))}catch(a){throw console.error("Failed to fetch initial state:",a),a}};$(t,a=>{a!=null&&a.body&&(s=a.body,r.forEach(c=>c(s)))});let n=!1;const i=()=>{n||(n=!0,o())};return{get state(){return s},async getState(){return i(),s===void 0&&await new Promise(a=>{const c=()=>{s!==void 0?a():setTimeout(c,10)};c()}),s},subscribe(a){return i(),r.add(a),s!==void 0&&a(s),()=>{r.delete(a)}},async refresh(){return await o(),s}}}async function mn(t,e){if(typeof t=="string")return Zr(t,e);const s=t,{getCurrentState:r,shouldUseFetchedState:o,timeout:n}=e,i=await r(),a=e.transformState?e.transformState(i):i;if(o&&o(a))return a;const c=s.map(d=>pn(d,n)),u=await Promise.all(c);return u[u.length-1]}function ac(t,e,s){const{fetchMissedEvents:r,checkInterval:o=3e4,deduplicateById:n}=s,i=new Set,a=$(t,async u=>{if(u){if(n){const d=n(u);if(i.has(d))return;i.add(d),i.size>1e3&&Array.from(i).slice(0,500).forEach(f=>i.delete(f))}await e(u)}}),c=setInterval(async()=>{try{const u=await r(),d=Array.isArray(u)?u:[u];for(const h of d)if(n){const f=n(h);i.has(f)||(i.add(f),await e(h))}else await e(h)}catch(u){console.error("Failed to fetch missed events:",u)}},o);return()=>{a.unsubscribe(),clearInterval(c)}}function cc(t){const{connectEvent:e,disconnectEvent:s,errorEvent:r,dataEvent:o,fetchInitialState:n,reconnectDelay:i=5e3}=t,a={state:"disconnected",data:void 0,async waitForConnection(d){if(a.state==="connected"&&a.data)return a.data;const h=await Zr(e,{getCurrentState:n,shouldUseFetchedState:f=>!!f,timeout:d});return a.state="connected",a.data=h,u(),h},subscribe(d){return c.add(d),d(a),()=>{c.delete(d)}},async reconnect(){a.state="connecting",u();try{const d=await n();a.state="connected",a.data=d,u()}catch{a.state="error",u(),setTimeout(()=>{a.state==="error"&&a.reconnect()},i)}}},c=new Set,u=()=>{c.forEach(d=>d(a))};return $(e,d=>{a.state="connected",d!=null&&d.body&&(a.data=d.body),u()}),$(s,()=>{a.state="disconnected",u(),setTimeout(()=>{a.state==="disconnected"&&a.reconnect()},i)}),r&&$(r,()=>{a.state="error",u()}),o&&$(o,d=>{d!=null&&d.body&&a.state==="connected"&&(a.data=d.body,u())}),a.reconnect(),a}const mf={waitForOrGetState:Zr,subscribeWithInitialState:nc,createStatefulEventStream:ic,waitForAllWithState:mn,createResilientEventHandler:ac,createConnectionStateManager:cc},yf=Object.freeze(Object.defineProperty({__proto__:null,EventBusState:mf,createConnectionStateManager:cc,createResilientEventHandler:ac,createStatefulEventStream:ic,subscribeWithInitialState:nc,waitForAllWithState:mn,waitForOrGetState:Zr},Symbol.toStringTag,{value:"Module"})),bf=(t,e=0)=>{if(!+t)return{value:0,scale:"bytes",toString:()=>"0 bytes"};const s=1024,r=e<0?0:e,o=["bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(t)/Math.log(s)),i=parseFloat((t/Math.pow(s,n)).toFixed(r)),a=o[n];return{value:i,scale:a,toString:()=>`${i} ${a}`}};function yn(t){let e="pending",s;const r=t.then(n=>{e="success",s=n},n=>{e="error",s=n});return{read:()=>{switch(e){case"pending":throw r;case"error":throw s;default:return s}}}}const be=(t=null)=>(t||window.location.search.replace("?","")).split("&").map(e=>{const[s,r]=e.split("=");return[s,decodeURIComponent(r||"")]}).reduce((e,[s,r])=>(e[s]=r,e),{}),vf="studio.enable.releases",lc="studio.tools.preview",wf="studio.relax.store.validation",uc="studio.log.debug",dc="studio.log.info",Ef={profiles:[lc]};var Fa;const Mf=((Fa=globalThis.getKosConfig)==null?void 0:Fa.call(globalThis))||JSON.stringify(Ef),hc=JSON.parse(Mf);globalThis.kosConfig=hc;const bn=hc,fc=()=>bn.profiles||[],Uo=t=>fc().includes(t),Tf=()=>bn.logging||!1,_f=()=>{const t=Uo(uc),e=Uo(dc);return t?"DEBUG":e?"INFO":void 0},pc=()=>{const t=be(),e=_f(),r=t.kosLogLevel??e??window.kosLogLevel??process.env.KOS_LOG_LEVEL;return r||"WARN"},gc=()=>window.kosMessageLogging||process.env.KOS_MESSAGE_LOGGING==="true",mc=()=>window.kosMessageStudioLogging||process.env.KOS_MESSAGE_STUDIO_LOGGING==="true",yc="ws-log",Sf=D.methodFactory,bc=gc(),Of=mc();D.methodFactory=function(t,e,s){const r=Sf(t,e,s);return function(...o){var c;const n=s?String(s):"",i=n?`[${String(n).substring(n.lastIndexOf(":")+1)}] | `:"[root] | ",a=o.map(u=>typeof u=="object"?JSON.stringify(u):String(u)).join(" ");r(`${i}${a}`),(c=globalThis==null?void 0:globalThis.kosConfig)!=null&&c.logging&&globalThis.kosLog&&(s!==yc||bc&&Of)&&globalThis.kosLog(`UI: ${i}${a}`)}};let vc=pc();D.setLevel(vc);window.setKosLogLevel=t=>{vc=t,D.setLevel(t)};const wr=D.getLogger(yc);window.enableKosMessageLog=()=>{wr.setLevel(D.levels.INFO)};window.disableKosMessageLog=()=>{wr.setLevel(D.levels.ERROR)};bc?window.enableKosMessageLog():window.disableKosMessageLog();const If=["color: black","display: block","background-color: lightgreen","padding: 4px","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),$f=["color: black","display: block","padding: 4px","background-color: yellow","margin: 0","text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)","box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset","font-weight: bold"].join(";"),Xs=t=>e=>{D.getLevel()<=t&&e()},g={...D,ifDebug:Xs(D.levels.DEBUG),ifInfo:Xs(D.levels.INFO),ifWarn:Xs(D.levels.WARN),ifError:Xs(D.levels.ERROR),getLogger:t=>D.getLogger(`kos::${t}`),getLoggers:()=>D.getLoggers(),createLogger:({name:t,group:e})=>{var n,i,a,c;const s=`${e?`${e}:`:"kos"}::${t}`,r=D.getLogger(s);let o=(i=(n=globalThis.kos.logOverrides)==null?void 0:n.find(u=>u.name===s))==null?void 0:i.level;return o?r.setLevel(o):(o=(c=(a=globalThis.kos.logOverrides)==null?void 0:a.find(u=>s.startsWith(u.name)))==null?void 0:c.level,o&&r.setLevel(o)),r},wsSend:(...t)=>{const e=String(t).replace(/\n/g,"\\n");wr.info(`%c⬆ ${e}`,If)},wsReceive:(...t)=>{const e=String(t).replace(/\n/g,"\\n");wr.info(`%c⬇ ${e}`,$f)}},X=Symbol("SubscriptionHandlers"),F=Symbol("DependencyModels"),vs=Symbol("FutureService"),Xe=Symbol("ChildModels"),ws=Symbol("ParentModel"),Es=Symbol("LogConfig"),ur=Symbol("ReferenceConfig"),vn=Symbol("KosModelSymbol"),Ue=Symbol("ModelEffects"),Ze=Symbol("CompanionParentModel"),wn=Symbol("FutureContainerSetup"),En=Symbol("MultipleFutureContainerSetup"),Ms=Symbol("FutureAliases"),Mn=Symbol("TroubleAwareSetup"),Tn=Symbol("LoggerSetup"),_n=Symbol("ContainerAwareSetup"),Yt=Symbol("StateMachineSetup"),xt=Symbol("StateEntryHandlers"),Ts=Symbol("StateExitHandlers"),Cf=Symbol("StateActionHandlers"),qs=Symbol("OptionsRequired"),wc=Symbol("KosViewModelSymbol"),Sn=Symbol("ViewModelConfig"),Ec=Symbol("ReloadAwareSetup"),On=g.createLogger({group:"decorators",name:"fsm-injection"});function In(t){const e=t[Yt];if(!e)return;const{config:s,options:r}=e;Rf(t,s,r),Pf(t,r);const o=Af(t);Df(t,s,r,o),xf(t,s,r)}function Df(t,e,s,r){t.transition=Ff(t,e,s,r.entry,r.exit),t.canTransition=Vf(t,e,s),t.isInState=Gf(t,s)}function xf(t,e,s){kf(t),Lf(t,e,s)}function Af(t){const e=t.constructor.prototype[xt]||new Map,s=t.constructor.prototype[Ts]||new Map;return{entry:e,exit:s}}function Rf(t,e,s){t._fsmConfig=e,t._fsmOptions=s}function Pf(t,e){const{stateProperty:s,trackHistory:r,computeInitialState:o}=e,n=t._fsmConfig,i=o?o(t):n.initial;o&&!n.states[i]?(On.warn(`computeInitialState returned "${i}" which is not a valid state. Falling back to "${n.initial}".`),t[s]=n.initial):t[s]=i,t._fsmInitialized=!0,t.isTransitioning=!1,r&&(t.stateHistory=[{state:t[s],timestamp:new Date}])}function kf(t){Object.defineProperty(t,"isFsmInitialized",{get(){return this._fsmInitialized},enumerable:!0,configurable:!0})}function Lf(t,e,s){const{stateProperty:r}=s;Object.defineProperty(t,"allowedTransitions",{get(){if(!this._fsmInitialized)return[];const o=this[r],n=this._fsmConfig.states[o];return n!=null&&n.on?Object.keys(n.on):[]},enumerable:!0,configurable:!0})}function Ff(t,e,s,r,o){const{stateProperty:n,throwOnInvalid:i}=s;return function(a){if(!this._fsmInitialized){Nf(e.initializeAt,i);return}const c=this[n],u=Uf(c,a,this._fsmConfig,i);u&&Bf(this,c,u,a,n,r,o,s)}}function Nf(t,e){const s=`Cannot transition: FSM not initialized. Waiting for ${t} lifecycle phase.`;if(e)throw new Error(s);console.warn(s)}function Uf(t,e,s,r){var i;const o=s.states[t],n=(i=o==null?void 0:o.on)==null?void 0:i[e];if(!n){jf(t,e,r);return}return n}function jf(t,e,s){const r=`Invalid transition: Event "${e}" not allowed from state "${t}"`;if(s)throw new Error(r);console.warn(r)}function Bf(t,e,s,r,o,n,i,a){t.isTransitioning=!0;try{Hf(t,e,i),t[o]=s,zf(t,s,r,a);const c=Kf(t,s,n);qf(t,s,o,c)}finally{t.isTransitioning=!1}}function Hf(t,e,s){const r=s.get(e);r&&typeof t[r]=="function"&&t[r]()}function Kf(t,e,s){const r=s.get(e);if(r&&typeof t[r]=="function")return t[r]()}function qf(t,e,s,r){var n,i;if(!r||typeof r.then!="function")return;const o=(i=(n=t._fsmConfig)==null?void 0:n.states)==null?void 0:i[e];!(o!=null&&o.onDone)&&!(o!=null&&o.onError)||r.then(()=>{o.onDone&&t[s]===e&&t.transition(o.onDone)},a=>{o.onError&&t[s]===e?t.transition(o.onError):On.error(`Async entry handler for state "${e}" failed:`,a)})}function zf(t,e,s,r){r.trackHistory&&t.stateHistory&&t.stateHistory.push({state:e,timestamp:new Date,event:s})}function Vf(t,e,s){const{stateProperty:r}=s;return function(o){var a;if(!this._fsmInitialized)return!1;const n=this[r],i=this._fsmConfig.states[n];return((a=i==null?void 0:i.on)==null?void 0:a[o])!==void 0}}function Gf(t,e){const{stateProperty:s}=e;return function(r){return this._fsmInitialized?this[s]===r:!1}}function Mc(t,e){const s=t[Yt];if(!s)return;const{config:r,options:o}=s,{stateProperty:n}=o;r.initializeAt===e&&(t._fsmInitialized||(Yf(t,n,r.initial),t._fsmInitialized=!0,Wf(t,r.initial,o),Qf(t,r.initial),On.debug(`FSM initialized for model ${t.id} at lifecycle ${e} with initial state "${r.initial}"`)))}function Yf(t,e,s){t[e]=s}function Wf(t,e,s){s.trackHistory&&t.stateHistory&&t.stateHistory.push({state:e,timestamp:new Date})}function Qf(t,e){const r=(t.constructor.prototype[xt]||new Map).get(e);r&&typeof t[r]=="function"&&t[r]()}const Pe=(t,e)=>{t[Xe]=t[Xe]||{},t[Xe][e]=!0},mt=t=>`{PROP_${String(t)}}`,Xf=t=>`{PROP_${String(t)}}`,Zf=mt("kosParentId"),Jr=t=>e=>{e[ws]=e[ws]||{};const s=(t==null?void 0:t.parentId)||Zf;e[ws]={parentId:s},e.prototype[qs]=!0};function Jf(t){return e=>{const s=(t==null?void 0:t.mode)||"decorator",r=(t==null?void 0:t.parentProperty)||"companionParent",o=(t==null?void 0:t.excludeProperties)||[],n=t==null?void 0:t.lifecycle;return Jr()(e),e.prototype[Ze]={mode:s,parentProperty:r,excludeProperties:o,lifecycle:n},e}}function Tc(t){return e=>{const s=t!=null&&t.legacy?"_models":(t==null?void 0:t.containerProperty)||"container",r=(t==null?void 0:t.includeMethods)!==!1,o=(t==null?void 0:t.includeGetters)!==!1,n=(t==null?void 0:t.modelsProperty)||"models",i=(t==null?void 0:t.containerOptions)||{};return e.prototype[_n]={containerProperty:s,includeMethods:r,includeGetters:o,modelsProperty:n,containerOptions:i,legacy:(t==null?void 0:t.legacy)||!1},e}}function ep(t,e,s){const r=s.value;s.value=function(...o){const n=W.getContext(this.id);return o.push(n),r.apply(this,o)}}const eo=Symbol("KosExecutionContext");function $n(t){return t&&typeof t=="object"&&eo in t}function tp(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[wn]={mode:s,handlerProperty:r},e}}function sp(t){return e=>{const s=(t==null?void 0:t.mode)||"full",r=(t==null?void 0:t.handlerProperty)||"futureHandler";return e.prototype[En]={mode:s,handlerProperty:r},e}}var C=(t=>(t.INIT="init",t.LOAD="load",t.READY="ready",t.ACTIVATE="activate",t.ONLINE="online",t))(C||{}),Qe=(t=>(t.CREATE="create",t.CONTINUE="continue",t.FAIL="fail",t))(Qe||{});const rp=Object.freeze(Object.defineProperty({__proto__:null,DependencyLifecycle:C,DependencyResolutionPolicy:Qe},Symbol.toStringTag,{value:"Module"})),je=Symbol("HttpRouteHandlers"),Hi="__httpBrowserRouter";function to(t){return function(s){return function(r,o,n){r[je]=r[je]||[];const i={method:t,path:s,handler:o};return r[je].push(i),r[F]=r[F]||{},r[F][Hi]||(r[F][Hi]={modelType:"browser-router-model",lifecycle:C.INIT}),n}}}const _c=to("GET"),zs=to("POST"),op=to("PUT"),Sc=to("DELETE"),np=Sc;function Er(t){return!!(t!=null&&t[je])&&t[je].length>0}function Oc(t){return(t==null?void 0:t[je])||[]}const ip=({group:t}={group:""})=>e=>{e[Es]=e[Es]||{},e[Es]={group:t}};class Cn{static create({modelId:e,modelTypeName:s,component:r}){const o=[r??"kos",s,e].filter(Boolean).join(".");return g.createLogger({name:o})}}function Ic(t){return e=>{const s=(t==null?void 0:t.loggerProperty)||"logger",r=t==null?void 0:t.loggerContext;e.prototype[Tn]={loggerProperty:s,loggerContext:r};const o=()=>{var i;return(i=e.prototype[vn])==null?void 0:i.type};let n;return Object.defineProperty(e.prototype,s,{get(){if(!n){const i=o();n=Cn.create({modelTypeName:r||i,component:"kos-model"})}return n},enumerable:!1,configurable:!1}),e}}function $c(t){return(e,s,r)=>{e[Ue]=e[Ue]||{},e[Ue][s]={dependencies:t==null?void 0:t.dependencies,value:r.value},r.value=function(){throw new Error(`Method ${s} cannot be called directly.`)}}}const ap=t=>(e,s)=>{e[ur]=e[ur]||{},e[ur][s]=t},wo=g.createLogger({name:"resolve-parameters"}),fe=({value:t,modelId:e,modelData:s})=>{let r=t;if(Array.isArray(r))return[...t];if(typeof r!="string"&&typeof r!="object")return r;if(typeof r=="object")r=Object.keys(r).reduce((o,n)=>(o[n]=fe({value:r[n],modelId:e,modelData:s}),o),{});else if(typeof r=="string"){const o=new RegExp("{PROP_(.+?)}","g");let n=r!=null&&r.includes(vr)?r.replace(vr,e):r;if(s){let i=!1;const a=/^{PROP_.+?}$/.test(n);if(n=n.replace(o,(c,u)=>{if(Object.getOwnPropertyNames(s).includes(u)||Object.getOwnPropertyNames(Object.getPrototypeOf(s)).includes(u)){const h=s[u];return h!=null?(wo.debug(`Resolved ${c} to ${h}`),h):(wo[a?"debug":"warn"](`Property ${u} is null or undefined${a?"":" in composite string"}, marking for undefined return`),i=!0,c)}return wo[a?"debug":"warn"](`Property ${u} not found in modelData${a?"":" for composite string"}`),c}),i)return}return n}else return r;return r};function Cc(t,e,s,r){const o=fe({value:t.path,modelId:e.id,modelData:e}),n=fe({modelId:e.id,modelData:e,value:{...typeof t.pathParams=="function"?t.pathParams(e):t.pathParams||{},...(r==null?void 0:r.pathParams)||{}}}),i=fe({modelId:e.id,modelData:e,value:{...typeof t.queryParams=="function"?t.queryParams(e):t.queryParams||{},...(r==null?void 0:r.queryParams)||{}}}),a=(r==null?void 0:r.body)||(typeof t.body=="function"?t.body(e):t.body),u={...(typeof t.requestOptions=="function"?t.requestOptions(e,...s):t.requestOptions)||{},...(r==null?void 0:r.requestOptions)||{}},d={};return n&&Object.keys(n).length>0&&(d.path=n),i&&Object.keys(i).length>0&&(d.query=i),{resolvedPath:o,apiParams:d,finalBody:a,finalRequestOptions:u}}async function Dc(t,e,s,r,o,n){const i=(e||"get").toLowerCase(),a=t;switch(i){case"get":return await a.get(s,r,n);case"post":return await a.post(s,r,o,n);case"put":return await a.put(s,r,o,n);case"delete":return await a.delete(s,r,o,n);default:return await a.get(s,r,n)}}function xc(t,e,s,r){if(!s)return[t,null];switch(s.strategy){case"log":return console.error(`Service request status ${e==null?void 0:e.status} error: ${t}`),s.onError&&s.onError(new Error(t),r),[null,s.defaultValue];case"ignore":return[null,s.defaultValue];case"default":return[null,s.defaultValue];case"throw":default:return[t,null]}}const ft=Symbol("ServiceRequestHandlers"),Ki=new WeakMap;function yt(t){return(e,s,r)=>{var a;e[ft]=e[ft]||{};const o=r.value,n={...t,handlerMethod:s,originalHandler:o},i=`${((a=t.method)==null?void 0:a.toUpperCase())||"GET"}:${String(t.path)}`;if(e[ft][i]=n,!t.lifecycle){const c=function(...u){const d=u[u.length-1],h=async f=>{const p=Ki.get(c);if(!p)throw new Error("Service request metadata not found for method");try{const{default:y}=await Promise.resolve().then(()=>kn),{resolvedPath:w,apiParams:M,finalBody:S,finalRequestOptions:U}=Cc(p,this,u,f),[x,O]=await Dc(y,p.method,w,M,S,U);if(x)return xc(x,O,p.errorHandler,this);let L=O;return p.transform&&(L=p.transform(O)),[null,L]}catch(y){return[y.message||"Unknown error",null]}};if($n(d))return d.$request=h,o.apply(this,u);{const f={[eo]:!0,$request:h};return o.apply(this,[...u,f])}};Ki.set(c,n),r.value=c}return r}}var Ac=(t=>(t.GET="GET",t.PUT="PUT",t.POST="POST",t.DELETE="DELETE",t))(Ac||{}),oe=(t=>(t.IMMEDIATE="immediate",t.SINGLE="single",t.TTL="ttl",t.PERMANENT="permanent",t.MANUAL="manual",t))(oe||{}),ht=(t=>(t.ALL="all",t.AFTER_REQUEST="after-request",t.AFTER_RESPONSE="after-response",t.NONE="none",t))(ht||{});const cp=g.createLogger({name:"kos-state-machine"});function lp(t,e){return s=>(s.prototype[Yt]={config:{...t,initializeAt:t.initializeAt||C.READY},options:{stateProperty:(e==null?void 0:e.stateProperty)||"currentState",trackHistory:(e==null?void 0:e.trackHistory)||!1,throwOnInvalid:(e==null?void 0:e.throwOnInvalid)!==!1,computeInitialState:e==null?void 0:e.computeInitialState}},s)}function up(t){return(e,s)=>{e[xt]||(e[xt]=new Map),e[xt].set(t,s)}}function dp(t){return(e,s)=>{e[Ts]||(e[Ts]=new Map),e[Ts].set(t,s)}}function hp(t){return(e,s,r)=>{const o=r.value;return r.value=function(...n){var u,d;if(!this.isFsmInitialized)return o.apply(this,n);const a=this.currentState;if(!t.allowedStates.includes(a)){const h=`Method ${String(s)} cannot be called from state "${a}". Allowed states: ${t.allowedStates.join(", ")}`;if(t.throwOnInvalid!==void 0?t.throwOnInvalid:((d=(u=this[Yt])==null?void 0:u.options)==null?void 0:d.throwOnInvalid)!==!1)throw new Error(h);cp.warn(h);return}return o.apply(this,n)},r}}function fp(t){return e=>{const s=(t==null?void 0:t.pathProperty)||"path";return e.prototype[Mn]={pathProperty:s},e.prototype[F]=e.prototype[F]||{},e.prototype[F].troubleContainer={modelType:"trouble-container-model",id:"trouble-container-model",options:{},lazy:!1},e}}const Wt=({modelType:t,id:e,options:s,lifecycle:r,resolutionPolicy:o})=>(n,i)=>{n[F]=n[F]||{},n[F][i]={modelType:t,id:e,options:s,lifecycle:r||C.INIT,resolutionPolicy:o}};class Rc{constructor(e,s){l(this,"futures");l(this,"defaultContext");l(this,"context");l(this,"disposers",new Map);l(this,"container");this.futures=Kn.map(new Map),this.context="",this.defaultContext=s||"",this.container=e,E.makeAutoObservable(this)}get allFutures(){return Array.from(this.futures.values())}get future(){return this.futures.get(this.defaultContext)}addFuture(e,s){this.futures.set(s||e.id,e),this.context=s||e.id;const r=s,o=Q(()=>{var n,i;(e.endState||e.progress)&&((i=(n=this.container)==null?void 0:n.onFutureUpdate)==null||i.call(n,e,r))});this.disposers.set(s||e.id,o)}removeFuture(e){var s;this.futures.delete(e||this.context),(s=this.disposers.get(e||this.context))==null||s(),this.disposers.delete(e||this.context)}getFuture(e){return this.futures.get(e||this.context)}get futureMap(){return this.futures}}class so{constructor(e){l(this,"disposer");l(this,"_future");l(this,"container");l(this,"onFutureUpdate");this._future=void 0,this.container=e,E.makeAutoObservable(this)}removeFuture(){var e;this._future=void 0,(e=this.disposer)==null||e.call(this),this.disposer=void 0}get future(){return this._future}getFuture(){return this._future}addFuture(e){this._future=e;const s=Q(()=>{var r,o;(e.endState||e.progress)&&((o=(r=this.container)==null?void 0:r.onFutureUpdate)==null||o.call(r,e))});this.disposer=s}get allFutures(){return this._future?[this._future]:[]}get timeRemaining(){var e;return((e=this._future)==null?void 0:e.timeRemaining)||""}get status(){var e;return((e=this._future)==null?void 0:e.status)||"NOT_RESOLVED"}get progress(){var e;return((e=this._future)==null?void 0:e.progress)||-1}async cancel(){if(this._future)try{await this._future.cancelFuture()}catch(e){throw g.error(e),e}}}const Pc=(t,e)=>{const s=e.type;return t[s]||(t[s]=[]),t[s].push(e),t},kc=Symbol("KosObservableData"),Ye=Symbol("revision");var g_;class Lc{constructor(){l(this,"map");l(this,g_,1);l(this,"atomMap",new Map);l(this,"proxyHandler",{get:(e,s)=>{var r;return s===Ye||e[s]!==void 0?e[s]:this.atomMap.has(s)&&(r=this.atomMap.get(s))!=null&&r.reportObserved()?this.getValue(s):this.getValue(s)},set:(e,s,r)=>{var o;return this.map.has(s),this.setValue(s,r),this.atomMap.has(s)||this.atomMap.set(s,E.createAtom(s.toString())),(o=this.atomMap.get(s))==null||o.reportChanged(),!0},ownKeys:e=>[...Array.from(this.map.keys()),Ye],getOwnPropertyDescriptor:(e,s)=>{if(this.map.has(s))return{enumerable:!0,configurable:!0,writable:!0,value:this.getValue(s)};if(s===Ye)return{enumerable:!1,configurable:!0,writable:!0,value:e[Ye]}}});this.map=E.observable.map(new Map),E.makeObservable(this,{[Ye]:E.observable})}setValue(e,s){const r=this.map.has(e);this.map.set(e,s),r||E.action(()=>{this[Ye]++})()}getValue(e){return this.map.get(e)}has(e){return this.map.has(e)}get entries(){return Array.from(this.map.entries())}get keys(){return this[Ye],Array.from(this.map.keys())}get values(){return Array.from(this.map.values())}setValues(e){e&&Object.keys(e).forEach(s=>{this.setValue(s,e[s])})}get proxy(){return new Proxy(this,this.proxyHandler)}}g_=Ye;Lc.prototype[kc]=!0;function pp(t,e){return new Proxy(t,{construct:(s,r)=>{const o=new t(...r);return o.setValues(e),o.proxy}})}const xe=t=>{const e=pp(Lc,t);return new e(t)},Eo={failurePolicy:"throw"};class dr extends Error{constructor(s,r,o,n){super(n||`Extension failure in ${r} for id "${s}"`);l(this,"extensionId");l(this,"extensionType");l(this,"cause");this.name="ExtensionException",this.extensionId=s,this.extensionType=r,this.cause=o}}const se="canvas-renderer",Fc="kos.declarative.futureLifecycleWrapper",Mo=new Map,qi=new Map,To=new Map,_o=new Map,Qt=(t,e)=>{Nc[t]=e},Nc={indexExtension:{registerIndexExtension:(t,e)=>{const s=_o.get(t)||{};Object.assign(s,e),_o.set(t,e)},loadIndexExtensions:t=>_o.get(t)||{}},loader:{registerLoader:(t,e,s)=>{qi.set(t,{loader:e,options:{...Eo,...s}})},executeLoader:async(t,e)=>{const s=qi.get(t);if(!s)return;const{loader:r,options:o}=s;try{return await r(e)}catch(n){if(o.failurePolicy==="continue"){g.error(`Error executing data loader for id ${t}`),g.error(n);return}throw new dr(t,"dataLoader",n)}}},propertyMapper:{registerPropertyMapper:(t,e,s)=>{To.set(t,{mapper:e,options:{...Eo,...s}})},hasMapper:t=>To.has(t),executeMapper:(t,e,s)=>{const r=To.get(t);if(!r)return"";const{mapper:o,options:n}=r;try{return o(e,s)}catch(i){if(n.failurePolicy==="continue")return g.error(`Error executing property mapper for id ${t}`),g.error(i),"";throw new dr(t,"propertyMapper",i)}}},dataMapper:{registerDataMapper:(t,e,s)=>{const r=Mo.get(t)||[];r.push({mapper:e,options:{...Eo,...s}}),Mo.set(t,r)},executeMapper:async(t,e,s)=>{const r=Mo.get(t);if(!r)return{};const o={};for(const{mapper:n,options:i}of r)try{const a=await n(e,s);Object.assign(o,a)}catch(a){if(i.failurePolicy==="continue"){g.error(`Error executing data mapper for id ${t}`),g.error(a);continue}throw new dr(t,"dataMapper",a)}return o}},canvas:{registerRenderer:(t,e)=>{if(!I[se]){g.warn(`Canvas renderer extension point is not registered. Cannot register renderer "${t}".`);return}I[se].register(t,e)}}},I=Nc,gp=async({context:t,extension:e})=>{const s=await I.loader.executeLoader(e,{});return t==null||t.set(e,s),s},mp=async({extension:t,contextData:e,data:s})=>await I.dataMapper.executeMapper(t,s,e),yp=async({extension:t,contextData:e,data:s})=>await I.propertyMapper.executeMapper(t,s,e),bp=Object.freeze(Object.defineProperty({__proto__:null,executeDataMapperExtension:mp,executeLoaderExtension:gp,executePropertyMapperExtension:yp},Symbol.toStringTag,{value:"Module"})),vp="Extensions";class wp{constructor(){l(this,"extensions");this.extensions={}}register(e,s,r){this.extensions[e]={},this.extensions[e][s]={component:r}}get(e,s){if(!this.extensions[e])throw new Error(`Extension point ${e} not found`);return this.extensions[e][s]}get allExtensions(){return this.extensions}}function Ep(t,e){return t.length!==e.length?!1:t.every(s=>e.includes(s))}class Dn{constructor({container:e,key:s}){l(this,"_container");l(this,"_map");l(this,"_key");l(this,"data");this._container=e,this._map=E.observable.map(new Map),this._key=s,this.data=xe(),this.generateIndex(),E.autorun(()=>{this._container.revision&&this.generateIndex()}),E.makeAutoObservable(this)}refresh(){this.generateIndex()}addItemToIndex(e,s,r=this._map,o=this.data){const n=r.get(e)||new Set;n.add(s),r.set(e,n),o[e]=Array.from(n)}resolveIndex(e,s){this.data.keys.filter(o=>!Object.keys(s).includes(o)).forEach(o=>{delete this.data[o],this._map.delete(o)}),Object.keys(s).forEach(o=>{const n=s[o],i=this.data[o]||[];if(Ep(n,i))g.debug(`KosContainerIndex - Index ${o} is the same`);else{this.data[o]=n;const a=e.get(o)||new Set;this._map.set(o,a)}})}generateIndex(){E.runInAction(async()=>{const e=new Map,s={};for(const r of this._container.data){const o=typeof this._key=="function"?await this._key(r):r[this._key];Array.isArray(o)?o.forEach(n=>{this.addItemToIndex(n,r,e,s)}):typeof o=="string"||typeof o=="number"?this.addItemToIndex(String(o),r,e,s):typeof o=="boolean"&&this.addItemToIndex(String(o),r,e,s)}this.resolveIndex(e,s)})}get keys(){return Array.from(this._map.keys())}get index(){return this._map}getByKey(e){const s=this._map.get(e);return s?Array.from(s):[]}}function Mp(t,e,s=[]){const r=Object.getOwnPropertyDescriptors(t);return Object.keys(r).filter(i=>E.isComputedProp(t,i)).filter(i=>s.includes(i)).map(i=>E.reaction(()=>t[i],(a,c)=>{e({name:i,newValue:a,oldValue:c})}))}const ae=g.createLogger({name:"kos-container-model"});class ke{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"_parentId");l(this,"idx");l(this,"_maxCapacity");l(this,"_evictionStrategy");l(this,"_evictionBatchSize");l(this,"_insertionOrder",[]);l(this,"_accessTimes");l(this,"_customEvictionFilter");this._data=E.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1;const s=e!=null&&e.extensionId?I.indexExtension.loadIndexExtensions(e.extensionId):{},r=(e==null?void 0:e.indexMap)||{};this._optionsMap={...r,...s};const o=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((n,i)=>(n[i]=void 0,n),{}):{};this._index=E.observable.map(o),this.idx=xe(),this._parentId=e==null?void 0:e.parentId,this._maxCapacity=e==null?void 0:e.maxCapacity,this._evictionStrategy=(e==null?void 0:e.evictionStrategy)||"fifo",this._evictionBatchSize=(e==null?void 0:e.evictionBatchSize)??Math.max(10,Math.ceil(((e==null?void 0:e.maxCapacity)??100)*.1)),this._customEvictionFilter=e==null?void 0:e.customEvictionFilter,this._evictionStrategy==="lru"&&this._maxCapacity&&(this._accessTimes=E.observable.map(new Map)),E.makeAutoObservable(this),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new Dn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get revision(){return this._revision}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){E.runInAction(()=>{this._revision=this._revision+1})}addAll(e){E.runInAction(()=>{e.forEach(s=>this.addModel(s,!0))}),this.increment()}removeAll(e){E.runInAction(()=>{e.forEach(s=>this.removeModel(s,!0)),this.increment()})}async removeAndDestroy(e){const s=this.getModel(e);if(!s){ae.debug(`Model ${e} not found in container, skipping destroy`);return}this.removeModel(e);try{await De(s)}catch(r){throw ae.error(`Failed to destroy model ${e}:`,r),r}}async removeAndDestroyAll(e){const s=e.map(n=>this.getModel(n)).filter(n=>n!==void 0);if(s.length===0){ae.debug("No models found to destroy");return}this.removeAll(e);const r=await Promise.allSettled(s.map(n=>De(n)));r.forEach((n,i)=>{n.status==="rejected"&&ae.error(`Failed to destroy model ${s[i].id}:`,n.reason)});const o=r.filter(n=>n.status==="rejected");if(o.length>0)throw new Error(`Failed to destroy ${o.length} of ${s.length} models`)}addModel(e,s){this._persistModel(e),this._trackModelMetadata(e),this._establishModelRelationships(e),this._enforceCapacityLimits(),this._configureModelMonitoring(e),s||this.increment()}_persistModel(e){this._data.set(e.id||"",e)}_trackModelMetadata(e){this._maxCapacity&&(this._insertionOrder.push(e.id||""),this._accessTimes&&this._accessTimes.set(e.id||"",Date.now()))}_establishModelRelationships(e){e.id&&this._parentId&&W.setParentContext(e.id,this._parentId)}_enforceCapacityLimits(){this._maxCapacity&&this._data.size>this._maxCapacity&&this._evictModels()}_configureModelMonitoring(e){const s=this._disposerMap.get(e.id);s&&(s(),this._disposerMap.delete(e.id));const r=Object.entries(this._optionsMap||{}),o=Object.values(this._optionsMap||{}),n=new Map(r.map(([u,d])=>[d,u])),i=u=>{var h,f;o.includes(u.name)&&((h=this.index.get(n.get(u.name)))==null||h.refresh());const d=r.filter(([,p])=>typeof p=="function");for(const[p]of d)(f=this.index.get(p))==null||f.refresh()},a=Mp(e,i,o.filter(u=>typeof u=="string")),c=E.observe(e,i);this._disposerMap.set(e.id||"",()=>[c,...a].forEach(u=>u()))}removeModel(e,s){this._data.delete(e);const r=this._insertionOrder.indexOf(e);r!==-1&&this._insertionOrder.splice(r,1),this._accessTimes&&this._accessTimes.delete(e),s||this.increment();const o=this._disposerMap.get(e);o&&(o(),this._disposerMap.delete(e))}updateModel(e){this._data.set(e.id||"",e),this.increment()}getModel(e){const s=this._data.get(e);return s&&this._accessTimes&&this._accessTimes.set(e,Date.now()),s}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(ae.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(ae.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return ae.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}async _evictModels(){if(!this._maxCapacity)return;const e=this._data.size-this._maxCapacity;if(e<=0)return;const s=Math.min(this._evictionBatchSize,e);this._logCapacityWarning(s);const r=this._selectModelsForEviction(s);await this._removeEvictedModels(r),this._logEvictionComplete(r.length),this.increment()}_logCapacityWarning(e){ae.info(`Container capacity exceeded (${this._data.size}/${this._maxCapacity}). Evicting ${e} models using ${this._evictionStrategy} strategy.`,{parentId:this._parentId})}_selectModelsForEviction(e){switch(this._evictionStrategy){case"fifo":return this._selectFifoModels(e);case"lru":return this._selectLruModels(e);case"custom":return this._selectCustomModels(e);default:return this._selectFifoModels(e)}}_selectFifoModels(e){const s=[];for(let r=0;r<e&&this._insertionOrder.length>0;r++){const o=this._insertionOrder.shift();if(!o)continue;const n=this._data.get(o);n&&s.push(n)}return s}_selectLruModels(e){const s=[];return this._accessTimes&&Array.from(this._accessTimes.entries()).sort((o,n)=>o[1]-n[1]).slice(0,e).forEach(([o])=>{const n=this._data.get(o);n&&s.push(n)}),s}_selectCustomModels(e){return this._customEvictionFilter?this._customEvictionFilter(this.data).slice(0,e):(ae.error("Custom eviction strategy specified but no customEvictionFilter provided. Falling back to FIFO.",{parentId:this._parentId}),this._selectFifoModels(e))}async _removeEvictedModels(e){for(const s of e)ae.info(`Evicting model: ${s.id} (type: ${s.constructor.name})`,{modelId:s.id,parentId:this._parentId,strategy:this._evictionStrategy}),this.removeModel(s.id,!0),De(s).catch(r=>ae.error(`Failed to destroy evicted model ${s.id}:`,r))}_logEvictionComplete(e){ae.info(`Evicted ${e} models. Current size: ${this._data.size}/${this._maxCapacity}`,{parentId:this._parentId})}async clear(){this._data.forEach(e=>{const s=e.id;De(e).then(()=>{ae.debug(`${s} destroyed, removing from map`),this.removeModel(s,!0)}).catch(r=>ae.error(r))}),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id,type:s.constructor.name}))}}}var v=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.READY_FAILED="ready_failed",t.RESETTING="resetting",t.RESET="reset",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.FAILED="failed",t.INACTIVE="inactive",t.ACTIVE="active",t.ACTIVATING="activating",t.DEACTIVATING="deactivating",t))(v||{}),k=(t=>(t.CREATE="create",t.INITIALIZE="init",t.LOAD="load",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.RESET="go_offline",t.UNLOAD="unload",t.FAILED="failed",t.GO_ACTIVE="go_active",t.GO_INACTIVE="go_inactive",t.TIMEOUT="timeout",t))(k||{});const pe=async t=>{if(t.id){const e=_.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error(`Model with ID ${t.id} not found`);await(e==null?void 0:e.whenReady())}else throw new Error("Data model must have a valid ID");return t},De=async t=>{await _.getInstance().whenReady(),await _.getInstance().modelManager.initiateDestroyModel(t)},Tp=async t=>{if(await _.getInstance().whenReady(),!t.id)throw new Error("Model ID is required");const e=_.getInstance().modelManager.getModelById(t.id);e&&await e.fsm.transitionTo(k.UNLOAD,v.UNLOADED)},_p=async t=>{await _.getInstance().whenReady(),await _.getInstance().modelManager.reloadModel(t),g.debug(`reload model initiated for model ${t.id}, model ready: ${Mr(t)} - ${Date.now()} `),await pe(t),g.debug(`reload model complete for model ${t.id}, model ready: ${Mr(t)} - ${Date.now()} `)},Sp=async t=>{if(await _.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=_.getInstance().modelManager.getModelById(t);return e==null?void 0:e.modelTypeName},Uc=async t=>{if(await _.getInstance().whenReady(),!t)throw new Error("Model ID is required");const e=_.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},Ae=t=>{if(!t)throw new Error("Model ID is required");const e=_.getInstance().modelManager.getModelById(t);return{model:e==null?void 0:e.modelData,type:e==null?void 0:e.modelTypeName}},jc=(t,e)=>{if(!t)throw new Error("Model type is required");return _.getInstance().modelManager.getModelsByType(t).filter(o=>Object.keys(e).every(n=>o[n]===e[n]))},Op=(t,e)=>jc(t,e)[0],Ip=(t,e)=>{if(!t.id)throw new Error("Model ID is required");const s=_.getInstance().modelManager.getModelById(t.id);if(!s)throw new Error("Model not found");const r=s.companionModels.get(e);return r==null?void 0:r.modelData},Bc=t=>{if(!t.id)throw new Error("Model ID is required");const e=_.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return Array.from(e.companionModels.all()).map(r=>r.modelData)},$p=t=>{if(!t)throw new Error("Model ID is required");const e=_.getInstance().modelManager.getModelById(t);if(!e)throw new Error("Model not found");return e.companionModels.data},jo=(t,e)=>{const s=_.getInstance().modelManager.getModelById(t);if(!s){g.info(`Model not found for id ${t}`);return}return Array.from(s.companionModels.all()).find(o=>e(o.modelData))},Ie=t=>e=>Object.getPrototypeOf(e).modelTypeId===t,Mr=t=>{const e=_.getInstance().modelManager.getModelById(t.id);if(!e)throw new Error("Model not found");return e.isReady()},Cp=g.createLogger({name:"kos-model-factory"}),_s={byModelType:t=>_.getInstance().modelManager.getModelFactory(t),getModelInstance:(t,e,s)=>{const r=_s.byModelType(e);if(!r)throw Cp.error(`No registered factory found for model type ${e}. Please register a factory for this model type. `),Error(`No factory found for model type ${e}`);return r.build(t,s)}},le={Factory:{create:t=>e=>(s,r)=>(r&&W.setParentContext(e,r),_s.getModelInstance(e,t,s))},Singleton:{create:t=>(e,s)=>(s&&W.setParentContext(t,s),_s.getModelInstance(t,t,e))},Model:{instance:t=>e=>_s.getModelInstance(e,t)}};window.KosRegistry=window.KosRegistry||{coreModels:new Map,preloadModels:[],companionModels:new Map,models:new Map};const zi=window.KosRegistry.coreModels,So=window.KosRegistry.preloadModels,Oo=window.KosRegistry.companionModels,Zs=window.KosRegistry.models,A={model:{registerLegacyModel:t=>(e,s)=>(zi.set(e,s),{preload:A.model.preloadModel(t),model:A.model.register(t),companion:A.companion.register(t),legacy:A.model.registerLegacyModel(t),root:t}),preloadModel:t=>e=>(So.includes(e)||So.push(e),{preload:A.model.preloadModel(t),model:A.model.register(t),companion:A.companion.register(t),legacy:A.model.registerLegacyModel(t),root:t}),register:t=>(e,s)=>{const r=Io(e)?e.registration():e;return Zs.set(r.type,r),Io(e)&&e.relatedModels.forEach(o=>Zs.set(o.type,o.registration())),_.getInstance().isReady&&(_.getInstance().modelManager.registry.models[r.type]||(console.info(`Model with type ${r.type} doesn't exist. Adding new registration`),_.getInstance().modelManager.registry.models[r.type]=r.registration[r.type],Io(e)&&e.relatedModels.forEach(o=>_.getInstance().modelManager.registry.models[o.type]=o.registration().registration))),s&&A.model.preloadModel(t)(r.type),{preload:A.model.preloadModel(t),model:A.model.register(t),companion:A.companion.register(t),legacy:A.model.registerLegacyModel(t),root:t}},get:t=>Zs.get(t),getAll:()=>Array.from(Zs.entries()),getPreloadModels:()=>So,getLegacyModels:()=>Array.from(zi.entries()).reduce((t,[e,s])=>(t[e]=s,t),{})},companion:{register:t=>(e,s)=>{const r=Oo.get(e)||[];return r.push(s),Oo.set(e,r),{preload:A.model.preloadModel(t),model:A.model.register(t),companion:A.companion.register(t),legacy:A.model.registerLegacyModel(t),root:t}},getAll:()=>Array.from(Oo.entries())}},Hc=A.model.registerLegacyModel,Kc=A.model.register,Dp=A.companion.register,xp=A.model.preloadModel,xn=t=>typeof t.updateModel=="function",Io=t=>t.registration!==void 0&&typeof t.registration=="function";class qc{constructor(e){l(this,"singleton");l(this,"type");l(this,"loader");l(this,"class");l(this,"guard");l(this,"factory");l(this,"relatedModels",[]);this.singleton=e.singleton,this.guard=Ie(e.type),this.type=e.type,this.loader=`kos.extension.model.loader.${e.type}`,this.factory=e.factory,this.class=e.class}addRelatedModel(e){this.relatedModels.push(e)}registerRelatedModels(){this.relatedModels.forEach(e=>e.register())}register(){A.model.register({})(this.registration()),this.registerRelatedModels()}}class ve extends qc{constructor(e){super({...e,singleton:!1,factory:le.Factory.create(e.type)})}instance(e){const s=this.factory(e);return{get:()=>{const r=Ae(e);if(!r)throw new Error("Model not found with id "+e);if(this.guard(r.model))return r.model;throw new Error("Model is not of type "+this.type)},forceUpdate:{options:r=>({build:()=>{const o=s(r);if(this.guard(o)){if(xn(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error("Model is not of type "+this.type)}})},options:r=>({build:()=>{const o=s(r);if(this.guard(o))return o;throw new Error("Model is not of type "+this.type)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!1}},factory:this.factory}}}class $e extends qc{constructor(e){super({...e,singleton:!0,factory:le.Singleton.create(e.type)})}instance(){const e=this.factory;return{get:()=>{const r=Ae(this.type);if(!r)throw new Error("Model not found with id "+this.type);if(this.guard(r))return r;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(r).modelTypeId}`)},forceUpdate:{options:r=>({build:()=>{const o=e(r);if(this.guard(o)){if(xn(o))o.updateModel(r);else throw new Error(`Model ${this.type} is not updateable. Please implement UpdateAware interface`);return o}else throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})},options:r=>({build:()=>{const o=e(r);if(this.guard(o))return o;throw new Error(`Model is not of type ${this.type}. Received type ${Object.getPrototypeOf(o).modelTypeId}`)}})}}registration(){return{type:this.type,predicate:this.guard,registration:{[this.type]:{class:this.class,singleton:!0}},factory:this.factory}}}const Bo=g.createLogger({group:"decorators",name:"kos-model"});function Ap(t,e,s){var n;const r=(n=t[ws])==null?void 0:n.parentId;if(!r)return;const o=fe({value:r,modelData:s,modelId:e});o&&typeof o=="string"&&W.setParentContext(e,o)}function Rp(t){const e=t[vs];e&&Object.entries(e).forEach(([s,{handler:r}])=>{t[s]=r})}function Pp(t,e){const s=t[F]||{};Object.entries(s).forEach(([r,o])=>{const n=fe({value:o.id||o.modelType,modelData:t,modelId:e}),i=Object.entries((o==null?void 0:o.options)||{}).reduce((a,[c,u])=>(a[c]=fe({value:u,modelData:t,modelId:e}),a),{});if(typeof n=="string"){if(!o.lazy){const a=_.getInstance().modelManager.createModelInstance(o.modelType,n,i);t[r]=a.data}_.getInstance().modelManager.addDependency(e,n)}})}function kp(t){const e=t[wn];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new so(t);t[r]=o,s==="full"&&(Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0}),Object.defineProperty(t,"progress",{get(){var n;return((n=o.future)==null?void 0:n.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var n;return((n=o.future)==null?void 0:n.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var n;return((n=o.future)==null?void 0:n.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Lp(t){const e=t[En];if(!e)return;const{mode:s,handlerProperty:r}=e,o=new Rc(t);t[r]=o,Object.defineProperty(t,"future",{get(){return o.future},enumerable:!0,configurable:!0});const n=t[Ms];n instanceof Map&&n.forEach(i=>{const a=`${i}Future`;Object.defineProperty(t,a,{get(){return o.futureMap.get(i)},enumerable:!0,configurable:!0}),s==="full"&&(Object.defineProperty(t,`${i}Progress`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}Status`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsRunning`,{get(){const c=o.futureMap.get(i);return c?!c.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,`${i}IsCancelled`,{get(){const c=o.futureMap.get(i);return(c==null?void 0:c.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t[`cancel${i.charAt(0).toUpperCase()}${i.slice(1)}`]=async()=>{const c=o.futureMap.get(i);c&&await c.cancelFuture()})}),s==="full"&&(Object.defineProperty(t,"progress",{get(){var i;return((i=o.future)==null?void 0:i.progress)||0},enumerable:!0,configurable:!0}),Object.defineProperty(t,"status",{get(){var i;return((i=o.future)==null?void 0:i.status)||"IDLE"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isRunning",{get(){return o.future?!o.future.endState:!1},enumerable:!0,configurable:!0}),Object.defineProperty(t,"isCancelled",{get(){var i;return((i=o.future)==null?void 0:i.status)==="CANCELLED"||!1},enumerable:!0,configurable:!0}),t.cancelFuture=async()=>{o.future&&await o.future.cancelFuture()})}function Fp(t){const e=t[Mn];if(!e)return;const{pathProperty:s}=e;Object.defineProperty(t,"troubles",{get(){const r=this[s];if(r==null){const o=`@kosTroubleAware: Path property '${s}' is undefined on model ${this.id||"unknown"}. Returning empty troubles array.`;return this.logger&&typeof this.logger.warn=="function"?this.logger.warn(o):console.warn(o),[]}return this.troubleContainer.troubles.getIndexByKey("byIface",r).sort((o,n)=>n.rank-o.rank)},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troubleStatus",{get(){return""},enumerable:!0,configurable:!0}),Object.defineProperty(t,"troublesByType",{get(){return this.troubles.reduce(Pc,{})},enumerable:!0,configurable:!0})}function Np(t,e){const s=t[_n];if(!s)return;const{containerProperty:r,includeMethods:o,includeGetters:n,modelsProperty:i,containerOptions:a,legacy:c}=s,u={...a,parentId:a.parentId||e},d=new ke(u);t[r]=d,t[Xe]||(t[Xe]={}),t[Xe][r]=d,o&&(t.getModel=h=>d.getModel(h),t.addModel=h=>{d.addModel(h)},t.removeModel=h=>{d.removeModel(h)},t.addAll=h=>{d.addAll(h)},t.removeAll=h=>{d.removeAll(h)},t.removeAndDestroy=async h=>d.removeAndDestroy(h),t.removeAndDestroyAll=async h=>d.removeAndDestroyAll(h)),n&&(Object.defineProperty(t,i,{get(){return d},enumerable:!0,configurable:!0}),Object.defineProperty(t,"data",{get(){return d.data},enumerable:!0,configurable:!0}))}function Up(t,e){const s=t.constructor.prototype[Ze];if(!s)return;const{mode:r,parentProperty:o,excludeProperties:n}=s,i=e.companionParent;if(!i){Bo.warn("Companion decorator configured but no parent model found in initialData.companionParent");return}if(t.getCompanionParent=()=>i,Object.defineProperty(t,o,{get:()=>i,enumerable:!0,configurable:!0}),r==="composition")return;const a=["init","load","unload","ready","dispose","destroy","activate"],c=["getDependencies","getChildren","update","toJSON","forceUpdate","makeAutoObservable","runInAction","transaction","observe","unobserve","intercept","spy","trace","getCompanionParent"],u=p=>{const y=i.constructor.prototype[X]||{};return Object.values(y).some(w=>{const M=w==null?void 0:w.handler;return M===i[p]||M===i.constructor.prototype[p]})},d=p=>p==="constructor"||p.startsWith("_")||p.startsWith("__")||a.includes(p)||c.includes(p)||n.includes(p)||u(p)||p in t,h=new Set;Object.getOwnPropertyNames(i).filter(p=>!d(p)).forEach(p=>h.add(p));let f=Object.getPrototypeOf(i);for(;f&&f!==Object.prototype;)Object.getOwnPropertyNames(f).filter(p=>!d(p)).forEach(p=>h.add(p)),f=Object.getPrototypeOf(f);for(const p of h)try{const y=i[p];typeof y=="function"?t[p]=(...w)=>y.apply(i,w):Object.defineProperty(t,p,{get:()=>i[p],set:w=>{i[p]=w},enumerable:!0,configurable:!0})}catch(y){Bo.debug(`Skipping companion proxy for property ${p}:`,y)}}function jp(t){const e=t[Ec];if(!e)return;const{reloadDependencies:s=[]}=e;t._isReloading=!1,Object.defineProperty(t,"isReloading",{get(){var r;if(this._isReloading)return!0;for(const o of s)if((r=this[o])!=null&&r.isReloading)return!0;return!1},enumerable:!0,configurable:!0})}function Bp(t){try{return E.makeAutoObservable(t)}catch(e){return Bo.error("Failed to make observable:",e),t}}const Hp={construct(t,e){var c;const[s,r={}]=e,o=W.createContext(s);Ap(t,s,r);const i=!!t.prototype[Tn]?null:g.createLogger({name:t.prototype.modelTypeId,group:((c=t[Es])==null?void 0:c.group)??"kos-model"}),a=new t(s,r,{logger:i,kosContext:o});return Up(a,r),Rp(a),kp(a),Lp(a),Fp(a),Np(a,s),In(a),jp(a),Pp(a,s),Bp(a)}};function R(t){return e=>{var n,i;const s=e,r=typeof t=="string"?{modelTypeId:t,autoRegister:!1}:{autoRegister:!1,...t};s.prototype.modelTypeId=r.modelTypeId,s.prototype[vn]=!0,(n=s.prototype)[X]??(n[X]={}),(i=s.prototype)[F]??(i[F]={}),r.optionsRequired&&(s.prototype[qs]=!0),g.ifDebug(()=>{g.debug(`Registering model with id ${r.modelTypeId}`)});const o=new Proxy(s,Hp);if(r.singleton!==void 0){let a;r.singleton?a=new $e({class:o,type:r.modelTypeId}):a=new ve({class:o,type:r.modelTypeId}),Object.defineProperty(o,"Registration",{value:a,writable:!1,enumerable:!0,configurable:!1}),r.autoRegister&&a.register()}return o}}function zc(t,e,s=300){let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>{e.apply(t,o)},s)}}const Kp=({topic:t,handler:e,websocket:s=!1,condition:r=()=>!0})=>o=>{o[X]=o[X]||{},Array.isArray(t)?t.forEach(n=>{o[X][n]={websocket:s,handler:e,condition:r}}):o[X][t]={websocket:s,handler:zc(o,E.action(e),200),condition:r}};function Vc(t,e,s){const r={};if(!t.endsWith("/*"))return r;const o=t.slice(0,-2);if(e.startsWith(o)){const n=e.slice(o.length+1),i=s||"path";r[i]=n}return r}function Gc(t){return t.endsWith("/*")}function B(t){return(e,s,r)=>{const o=qp(t,r);Vp(e,t.topic,o),t.replay&&Gp(t.topic,t.replay.bufferSize)}}function qp(t,e){const{condition:s=(L,J)=>!0,transform:r=L=>L,websocket:o=!1,fos:n=!1,bridge:i=!1,skipParse:a=!1,lifecycle:c,destinationAddress:u,debounce:d,throttle:h,buffer:f,filter:p,once:y,wildcardName:w,flow:M,requiresBaseline:S}=t,U=e.value,x=Yc(U,{debounce:d,throttle:h,buffer:f,once:y}),O=zp(p,s);return{websocket:o,fos:n,bridge:i,handler:x,condition:O,transform:r,lifecycle:c,skipParse:a,destinationAddress:u,wildcardName:w,flow:M,requiresBaseline:S,once:y}}function Yc(t,e){var n,i;let s=t;const r=typeof e.debounce=="number"?e.debounce:(n=e.debounce)==null?void 0:n.delay,o=typeof e.throttle=="number"?e.throttle:(i=e.throttle)==null?void 0:i.interval;return r&&r>0?s=Yp(s,e.debounce):o&&o>0?s=Zp(s,e.throttle):e.buffer?s=Jp(async function(c){for(const u of c)await s.call(this,u)},e.buffer):e.once&&(s=eg(s)),s}function zp(t,e){return t?(s,r,o)=>t(o)?e(s,r,o):!1:e}function Vp(t,e,s){t[X]=t[X]||{},Array.isArray(e)?e.forEach(r=>{t[X][r]=s}):t[X][e]=s}function Gp(t,e){tg(t,e)}function Yp(t,e){const s=typeof e=="number"?e:e.delay;return Wp(e)==="discard"?Qp(t,s):Xp(t,s)}function Wp(t){return(typeof t=="object"?t.discardIntermediate:!1)?"discard":"accumulate"}function Qp(t,e){let s=null;return function(r){s&&clearTimeout(s),s=setTimeout(()=>{t.call(this,r),s=null},e)}}function Xp(t,e){let s=null,r=[];return function(o){r.push(o),s&&clearTimeout(s),s=setTimeout(()=>{const n=[...r];r=[],t.call(this,n),s=null},e)}}function Zp(t,e){const s=typeof e=="number"?e:e.interval,r=typeof e=="object"?e.discardIntermediate:!1;let o=0,n=null,i=[],a=!1;const c=function(){if(i.length>0){const u=[...i];i=[],t.call(this,u)}};return function(u){const d=Date.now(),h=d-o;r?h>=s?(o=d,t.call(this,u)):n||(n=setTimeout(()=>{o=Date.now(),t.call(this,u),n=null},s-h)):(i.push(u),h>=s?(o=d,c.call(this)):a||(a=!0,n=setTimeout(()=>{o=Date.now(),c.call(this),n=null,a=!1},s-h)))}}function Jp(t,e){const s=[];let r=null;const o=e.maxSize||1e3,n=i=>{s.length>0&&(t.call(i,[...s]),s.length=0)};return function(i){if(s.push(i),s.length>=o){r&&(clearTimeout(r),r=null),n(this);return}r||(r=setTimeout(()=>{n(this),r=null},e.time))}}function eg(t){let e=!1;return function(s){e||(e=!0,t.call(this,s))}}function tg(t,e){(Array.isArray(t)?t:[t]).forEach(r=>{gn(r,e)})}function Wc(t){return t!==null&&typeof t=="object"&&"ready"in t&&typeof t.ready=="function"}function hr(t){return t!==null&&typeof t=="object"&&"dispose"in t&&typeof t.dispose=="function"}let sg=0;const rg=Symbol("ViewModelEffectDisposers");function og(t){const e=t[Ue];return!!e&&Object.keys(e).length>0}function ng(t,e){if(!og(t))return;const s=t[Ue],r=[];for(const a of Object.keys(s)){const{value:c,dependencies:u,options:d}=s[a],h=c.bind(t),f=()=>{E.runInAction(()=>h())},p=u?E.reaction(()=>u(t),f,{fireImmediately:!!(d!=null&&d.fireImmediately)}):E.autorun(f);r.push(p)}Object.defineProperty(t,rg,{value:r,writable:!1,enumerable:!1,configurable:!0});const o=t,n=o.dispose,i=()=>{for(const a of r)try{a()}catch(c){console.warn(`[kosViewModel] Failed to dispose effect for ${e}:`,c)}};typeof n=="function"?o.dispose=function(){return i(),n.call(this)}:o.dispose=i}function ig(t,e){const s=t[Yt];if(!s)return;const{config:r}=s;r.initializeAt&&r.initializeAt!==C.INIT&&console.warn(`[kosViewModel] ViewModel "${e}" has @kosStateMachine with initializeAt: ${r.initializeAt}. ViewModels do not have lifecycle phases, so the FSM will initialize immediately. Consider removing initializeAt or using @kosModel if lifecycle-aware FSM initialization is required.`),In(t)}function ag(t){try{return E.makeAutoObservable(t)}catch(e){return console.error("[kosViewModel] Failed to make observable:",e),t}}const cg={construct(t,e){var a;const s=t.prototype[Sn]||{},r=s.typeId||t.name,o=`${r}-${++sg}`,n=new t(...e);ig(n,r),ng(n,r),Object.defineProperty(n,"__viewModelTypeId",{value:r,writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(n,"__viewModelInstanceId",{value:o,writable:!1,enumerable:!1,configurable:!0});const i=ag(n);return s.devToolsEnabled&&((a=globalThis.__KOS_DEVTOOLS__)!=null&&a.registerViewModel)&&globalThis.__KOS_DEVTOOLS__.registerViewModel(o,i),i}};function lg(t){return e=>{const s=t||{},r=s.typeId||e.name;e.prototype[wc]={type:r},e.prototype[Sn]=s;const o=new Proxy(e,cg);return Object.defineProperty(o,"name",{value:e.name}),o}}const $o=new Map,Qc={addToDeletionQueue:(t,e)=>{const s=$o.get(t)||[];s.push(e),$o.set(t,s)},cancelDeletion:t=>{const e=$o.get(t);e&&e.forEach(s=>{clearTimeout(s)})}},ug=g.createLogger({name:"kos-dependency-manager"});class dg{constructor(){l(this,"_usedByCache",new Map);l(this,"_usesCache",new Map)}add(e,s){Qc.cancelDeletion(s);const r=this._usedByCache.get(s)||[];r.includes(e)||r.push(e),this._usedByCache.set(s,r);const o=this._usesCache.get(e)||[];o.includes(s)||o.push(s),this._usesCache.set(e,o)}remove(e,s){const r=this._usedByCache.get(s)||[];this._usedByCache.set(s,r.filter(n=>n!==e));const o=this._usesCache.get(e)||[];this._usesCache.set(e,o.filter(n=>n!==s))}canDestroy(e){const s=this._usedByCache.get(e);return s!=null&&s.length?(ug.info(`Model ${e} is still used by: ${s.join(", ")}`),!1):!0}clear(){this._usedByCache.clear(),this._usesCache.clear()}}const Vi=g.createLogger({name:"kos-model-cache"});class hg{constructor(e=[]){l(this,"_modelsById",E.observable.map(new Map));l(this,"_toDelete",new Map);l(this,"_preloaded",[]);l(this,"_isPreloaded",!1);this.preloadKeys=e}get models(){return Array.from(this._modelsById.values()).map(e=>e).filter(e=>!this._toDelete.has(e.modelId))}getModelById(e){if(e&&!this._toDelete.has(e))return this._modelsById.get(e)}addModel(e){const s=this.getModelById(e.modelId)||e;return this._modelsById.set(s.modelId,s),s}removeModel(e){this._modelsById.delete(e),this._toDelete.delete(e)}hasModel(e){return!!e&&this._modelsById.has(e)&&!this._toDelete.has(e)}restoreFromDeleteCache(e){if(e&&this._toDelete.has(e)){const s=this._toDelete.get(e);this._toDelete.delete(e),this._modelsById.set(e,s)}}markForDeletion(e){this._modelsById.delete(e.modelId),this._toDelete.set(e.modelId,e)}preload(e){return this._isPreloaded?(Vi.debug("Returning cached preloaded models"),this._preloaded):(this._preloaded=this.preloadKeys.map(s=>(Vi.debug(`Preloading model: ${typeof s=="string"?s:s.modelType}`),e(s))).filter(s=>!!s),this._isPreloaded=!0,this._preloaded)}}class fr extends Error{constructor(s,r,o){super(s,{cause:o});l(this,"context");l(this,"originalCause");this.name="KosModelError",this.context=r,this.originalCause=o,o!=null&&o.stack&&(this.stack=`${this.stack}
|
|
2
2
|
Caused by: ${o.stack}`)}toDetailedString(){const s=[`KosModelError: ${this.message}`,"","Context:",` Model Type: ${this.context.modelType}`,` Model ID: ${this.context.modelId}`];return this.context.parentModel&&s.push(` Parent Model: ${this.context.parentModel.type} [${this.context.parentModel.id}]`),this.context.lifecycle&&s.push(` Lifecycle: ${this.context.lifecycle}`),this.context.operation&&s.push(` Operation: ${this.context.operation}`),this.context.options&&Object.keys(this.context.options).length>0&&s.push(` Options: ${JSON.stringify(this.context.options,null,2)}`),this.originalCause&&s.push("",`Original Error: ${this.originalCause.message}`),s.join(`
|
|
3
|
-
`)}}function
|
|
3
|
+
`)}}function At(t,e){const s=t instanceof Error?t:new Error(String(t));return t instanceof fr?new fr(`${t.message} (enriched with additional context)`,{...t.context,...e},t.originalCause||s):new fr(`Error in ${e.operation||"model operation"}: ${s.message}`,e,s)}function fg(t,e){t.length!==0&&(g.error(`${e} - ${t.length} error(s) occurred:`),t.forEach(({error:s,context:r},o)=>{const n=s instanceof fr?s:At(s,r);g.error(` [${o+1}/${t.length}] ${n.toDetailedString()}`)}))}function Gi(t,e){console.error("Model instantiation failed",{modelType:e.modelType,options:e.options,registryId:e.registryId,error:t instanceof Error?t.message:String(t),stack:t instanceof Error?t.stack:void 0,timestamp:new Date().toISOString()})}const Xc=t=>typeof t=="function",Js=g.createLogger({name:"kos-companion-instantiator"});class pg{constructor(e,s,r){this.registry=e,this.cache=s,this.createModel=r}createCompanionModels(e,s,r){const o=this.getCompanionDefinitions(e.modelTypeName);r!==void 0&&Js.debug(`Creating ${r} lifecycle companions for ${e.modelTypeName} [${e.modelId}]`);for(const n of o){const i=this.resolveCompanionType(n,e,s,r);i&&this.shouldCreateCompanion(i.lifecycle,r)&&this.instantiateCompanion(i.type,e,s,r)}}getCompanionDefinitions(e){var s;return((s=this.registry.companionModels)==null?void 0:s[e])||[]}resolveCompanionType(e,s,r,o){return Xc(e.type)?this.resolveFactoryCompanion(e,s,r,o):this.resolveStringCompanion(e)}resolveFactoryCompanion(e,s,r,o){const n=e.type(s.modelData,r);if(!n)return Js.debug(`Companion factory returned undefined for ${s.modelTypeName} at ${o||"INIT"} phase`),null;const i=this.extractLifecycleFromType(n);return{type:n,lifecycle:i}}resolveStringCompanion(e){return{type:e.type,lifecycle:e.lifecycle}}extractLifecycleFromType(e){const s=this.registry.models[e];if(!(s!=null&&s.class))return;const r=s.class.prototype[Ze];return r==null?void 0:r.lifecycle}shouldCreateCompanion(e,s){return s!==void 0?e===s:e===void 0}instantiateCompanion(e,s,r,o){const n=this.generateCompanionId(e,s.modelId);if(this.companionAlreadyExists(n,e,s.modelTypeName))return;const i=this.createCompanionInstance(e,n,s,r);i&&(this.attachCompanionToParent(i,s),Js.debug(`Created ${o||"INIT"} companion ${e} for ${s.modelTypeName} [${s.modelId}]`))}generateCompanionId(e,s){return`${e}-${s}`}companionAlreadyExists(e,s,r){return this.cache.hasModel(e)?(Js.debug(`Companion ${s} already exists for ${r}`),!0):!1}createCompanionInstance(e,s,r,o){const n=this.createModel(e,s,{data:o,companionParent:r.modelData,kosParentId:r.modelId});return(n==null?void 0:n.model)||null}attachCompanionToParent(e,s){e[Ze]=s,s.addCompanionModel(e)}}function Zc(t,e){return`${hn}${t}${e?`/${e}`:`/${t}`}`}function Jc(t){return`${hn}${t}`}function Co(t){const e=[];return new Promise((s,r)=>{for(const{condition:o,onMatch:n}of t){const i=E.when(o,()=>{e.forEach(a=>a());try{n==null||n(),s()}catch(a){r(a)}});e.push(i)}})}const el=5e3,gg=t=>t.fsm.transitionTo(k.GO_ACTIVE,v.ACTIVE),mg=t=>t.whenReady(),yg=t=>t.fsm.transitionTo(k.LOAD,v.LOADED),bg=t=>t.fsm.transitionTo(k.UNLOAD,v.UNLOADED),vg=t=>t.fsm.transitionTo(k.INITIALIZE,v.INITIALIZED);var An=(t=>(t.ACTIVE="active",t.READY="ready",t.LOAD="load",t.UNLOAD="unload",t.INIT="init",t))(An||{});const pr={active:gg,ready:mg,load:yg,unload:bg,init:vg};class tl extends Error{constructor(s,r){super(s);l(this,"model");this.model=r}}const sl=(t,e,s)=>{let r;return{promise:new Promise((i,a)=>{r=setTimeout(()=>{g.error(`Model ${e.modelId} - ${e.modelTypeName} - ${s} timed out after ${t}ms`),a(new tl(`${e.modelId} - ${e.modelTypeName} - ${s}`,e))},t)}),cancel:()=>{r&&clearTimeout(r)}}},wg=t=>typeof t.toJSON=="function",Ss=t=>t[F]!==void 0,Rn=t=>t.revision!==void 0&&t.index!==void 0,rl=t=>{if(t){if(Ss(t))return t;if(Rn(t))return t.data;if(t instanceof Map||t instanceof E.ObservableMap||t instanceof Set)return Array.from(t.values()).filter(Ss);if(Array.isArray(t))return t.filter(Ss)}},ol=(t,e)=>{var f;const s=e.id||e.modelType,r=fe({value:s,modelData:t.modelData,modelId:t.modelId}),o=e.resolutionPolicy||Qe.CREATE;g.debug(`Resolving dependent model ${e.modelType} with id ${r} (policy: ${o})`);const n=Object.keys((e==null?void 0:e.options)||{}).reduce((p,y)=>{const w=e.options[y];return p[y]=fe({value:w,modelData:t.modelData,modelId:t.modelId}),p},{}),i=_.getInstance().modelManager,a=i.registry.models[e.modelType];if(!a){const p=`No model registered for type ${e.modelType}`;if(g.error(`Failed to resolve dependency for model ${t.modelId}:
|
|
4
4
|
- Dependency Type: ${e.modelType}
|
|
5
5
|
- Dependency ID: ${r}
|
|
6
6
|
- Resolution Policy: ${o}
|
|
7
7
|
- Parent Model: ${t.modelTypeName}
|
|
8
8
|
- Parent Model ID: ${t.modelId}
|
|
9
|
-
- Error: ${p}`),o===
|
|
9
|
+
- Error: ${p}`),o===Qe.CONTINUE)return g.warn(`Model type not registered (policy: CONTINUE) - Model ${t.modelId} will continue without dependency ${e.modelType} [${r}]`),{dependentModel:null,dataModelId:r,success:!1};throw new Error(`Dependency resolution failed - Model ${t.modelId} cannot resolve dependency ${e.modelType} [${r}]: ${p}`)}const c=i.getModelById(r);if(c){if(c.modelTypeName!==e.modelType){const p=`Model type mismatch: expected ${e.modelType}, found ${c.modelTypeName}`;if(g.error(`Failed to resolve dependency for model ${t.modelId}:
|
|
10
10
|
- Dependency Type: ${e.modelType}
|
|
11
11
|
- Dependency ID: ${r}
|
|
12
12
|
- Resolution Policy: ${o}
|
|
13
13
|
- Parent Model: ${t.modelTypeName}
|
|
14
14
|
- Parent Model ID: ${t.modelId}
|
|
15
15
|
- Found Model Type: ${c.modelTypeName}
|
|
16
|
-
- Error: ${p}`),o===
|
|
16
|
+
- Error: ${p}`),o===Qe.CONTINUE)return g.warn(`Model type mismatch (policy: CONTINUE) - Model ${t.modelId} will continue without dependency`),{dependentModel:null,dataModelId:r,success:!1};throw new Error(`Dependency resolution failed - Model ${t.modelId} cannot resolve dependency ${e.modelType} [${r}]: ${p}`)}return g.debug(`Found existing dependent model ${e.modelType} with id ${r}`),{dependentModel:{model:c,data:c.modelData},dataModelId:r,success:!0}}if(g.debug(`Model ${e.modelType} [${r}] does not exist. Applying resolution policy: ${o}`),o===Qe.CONTINUE)return g.warn(`Model ${e.modelType} [${r}] not found (policy: CONTINUE) - Model ${t.modelId} will continue without this dependency`),{dependentModel:null,dataModelId:r,success:!1};const u=Object.keys(n).length>0,d=a.class||a.create;if(((f=d==null?void 0:d.prototype)==null?void 0:f[qs])===!0&&!u){const p=`Model ${e.modelType} requires options but none were provided`;throw g.error(`Failed to resolve dependency for model ${t.modelId}:
|
|
17
17
|
- Dependency Type: ${e.modelType}
|
|
18
18
|
- Dependency ID: ${r}
|
|
19
19
|
- Resolution Policy: ${o}
|
|
@@ -21,93 +21,93 @@ Caused by: ${o.stack}`)}toDetailedString(){const s=[`KosModelError: ${this.messa
|
|
|
21
21
|
- Parent Model ID: ${t.modelId}
|
|
22
22
|
- Provided Options: ${JSON.stringify(n,null,2)}
|
|
23
23
|
- Error: ${p}
|
|
24
|
-
- Model requires options but dependency declaration provides none`),new Error(`Dependency resolution failed - Model ${t.modelId} cannot resolve dependency ${e.modelType} [${r}]: ${p}. Use resolutionPolicy: DependencyResolutionPolicy.CONTINUE if this dependency is optional.`)}try{const p=
|
|
24
|
+
- Model requires options but dependency declaration provides none`),new Error(`Dependency resolution failed - Model ${t.modelId} cannot resolve dependency ${e.modelType} [${r}]: ${p}. Use resolutionPolicy: DependencyResolutionPolicy.CONTINUE if this dependency is optional.`)}try{const p=_.getInstance().modelManager.createModelInstance(e.modelType,r,n);return g.debug(`Successfully created dependent model ${e.modelType} with id ${r}`),{dependentModel:p,dataModelId:r,success:!0}}catch(p){const y=p instanceof Error?p.message:String(p);throw g.error(`Failed to create dependency for model ${t.modelId}:
|
|
25
25
|
- Dependency Type: ${e.modelType}
|
|
26
26
|
- Dependency ID: ${r}
|
|
27
27
|
- Resolution Policy: ${o}
|
|
28
28
|
- Parent Model: ${t.modelTypeName}
|
|
29
29
|
- Parent Model ID: ${t.modelId}
|
|
30
30
|
- Provided Options: ${JSON.stringify(n,null,2)}
|
|
31
|
-
- Error: ${g}`),o===Xe.FAIL?new Error(`Dependency resolution failed (policy: FAIL) - Model ${t.modelId} cannot resolve dependency ${e.modelType} [${r}]: ${g}`):p}},hl=(t,e=D.READY)=>{var o;const s=((o=t.modelData)==null?void 0:o[x])||{};return Object.keys(s).length===0?(m.debug(`${t.modelId} has no dependencies. Returning`),[]):Object.keys(s).filter(n=>s[n].lifecycle===e).map(n=>{const i=s[n],a=dl(t,i);if(!a.success||!a.dependentModel)return m.debug(`Skipping dependency ${i.modelType} with id ${a.dataModelId} - resolution failed with CONTINUE policy`),t.modelData[n]=void 0,null;const{dependentModel:c,dataModelId:u}=a;t.modelData[n]=c.data,m.debug(`waiting for dependent model ${i.modelType} with id ${u} - waiting for WHENREADY`);const d=async(p,g,v)=>{var E;await((E=p.whenReady)==null?void 0:E.call(p)),m.debug(`dependent model ${g} with id ${v} - READY`)},{promise:h,cancel:f}=ll(al,t,t.status);return Promise.race([d(c.model,i.modelType,u).then(()=>{f()}).catch(p=>{const g=Lt(p,{modelType:i.modelType,modelId:u,parentModel:{type:t.modelTypeName,id:t.modelId},lifecycle:e,operation:"dependency whenReady()"});throw m.error(g.toDetailedString()),f(),g}),h])}).filter(n=>!!n)},fl=async(t,e,s,r)=>{if(m.debug(`Execute lifecycle with ${e.length} models`),e.length===0){m.debug(`${t.modelId} has no children. Returning`);return}if(!s){m.error(`${t.modelId} is not transitioning with a valid target ${s}`);return}const o=e.map(a=>{let c;return br[s]&&a?c=br[s](a):(a||m.error("model is undefined. This shouldn't happen"),br[s]||m.error(`There is no promise in the Transition Map for ${s}`)),{promise:c,modelId:a==null?void 0:a.modelId,model:a,type:a==null?void 0:a.modelTypeName,status:a==null?void 0:a.status}}).filter(a=>a.promise?a.model?!0:(m.error(`No model found ${a.modelId}`),!1):(m.error(`No promise found ${a.modelId}`),!1)),n=await Promise.allSettled(o.map(a=>{var d;if(!a.model||!a.status)return Promise.resolve();const{promise:c,cancel:u}=ll(al,a.model,a.status);return Promise.race([(d=a.promise)==null?void 0:d.then(()=>{u()}).catch(h=>{const f=Lt(h,{modelType:a.type||"unknown",modelId:a.modelId,parentModel:{type:t.modelTypeName,id:t.modelId},lifecycle:r,operation:`transition to ${s}`});throw m.error(f.toDetailedString()),u(),f}),c])})),i=n.filter(a=>a.status==="rejected");if(i.length>0){const a=i.map(c=>{const u=o[n.indexOf(c)];return{error:c.status==="rejected"?c.reason:new Error("Unknown error"),context:{modelType:u.type||"unknown",modelId:u.modelId,parentModel:{type:t.modelTypeName,id:t.modelId},lifecycle:r,operation:`transition to ${s}`}}});Tg(a,`Model ${t.modelId} had ${i.length} failed child model(s) on ${r}`)}},pl=async(t,e,s)=>{await fl(t,t.getChildren().filter(r=>!!r),e,s)},ds=async(t,e)=>{const r=(await Promise.allSettled(hl(t,e))).filter(o=>o.status==="rejected");r.length&&(m.error(`There were ${r.length} failed dependent models on ${e}`),m.error(r))};function Ag(t){const e=`KosModel(${t.modelTypeName}:${t.modelId})`;try{Object.defineProperty(t,Symbol.toStringTag,{value:e,configurable:!0})}catch{t.toString=()=>e}try{Object.defineProperty(t.constructor,"name",{value:`KosModel_${t.modelTypeName}`,configurable:!0})}catch{t.constructor.name=`KosModel_${t.modelTypeName}`}const s=["fsm","effectManager","subscriptionManager","onlineLifecycleManager","companionManager","childResolver","_offlineQueue"];for(const r of s)r in t&&Object.defineProperty(t,r,{enumerable:!1});Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var r,o,n;return{id:t.modelId,type:t.modelTypeName,initialized:t.initialized,loaded:t.loaded,status:t.status,onlineStatus:t.onlineStatus,activeStatus:t.activeStatus,companions:(o=(r=t.companionManager)==null?void 0:r.all())==null?void 0:o.map(i=>i.modelTypeName),children:(n=t.getChildren)==null?void 0:n.call(t).map(i=>i.modelId),effects:!!t.effectManager,subscriptions:!!t.subscriptionManager}}}),xg(t.modelData,t.modelTypeName,t.modelId,t)}function xg(t,e,s,r){Object.defineProperty(t,Symbol.toStringTag,{value:`KosModelData(${e}:${s})`,configurable:!0});try{Object.defineProperty(t.constructor,"name",{value:`${e}ModelData`,configurable:!0})}catch{t.constructor.name=`${e}ModelData`}Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var a,c,u;const o=((a=r.getChildren)==null?void 0:a.call(r))||[],n=((c=r.companionManager)==null?void 0:c.all())||[],i=r.modelData[x]||{};return{id:s,type:e,companions:{count:n.length,data:n.map(d=>({type:d.modelTypeName,id:d.modelId}))},dependencies:{count:Object.keys(i).length,data:Object.values(i).map(d=>({id:d.id||d.modelType,type:d.modelType,options:d.options,lifecycle:d.lifecycle}))},children:{count:o.length,data:o.map(d=>({id:d.modelId,type:d.modelTypeName}))},data:((u=t.toJSON)==null?void 0:u.call(t))||{},subscriptions:(()=>{const d=t[J]||{},h=Object.keys(d);return h.length===0?{count:0,data:[]}:{count:h.length,data:h.map(f=>{const p=d[f];return{topic:f,websocket:!!p.websocket,...p.lifecycle&&{lifecycle:p.lifecycle},...p.fos&&{fos:!0},...p.bridge&&{bridge:!0},...p.destinationAddress&&{destinationAddress:p.destinationAddress},...p.wildcardName&&{wildcardName:p.wildcardName},...p.flow&&{flow:!0},...p.requiresBaseline&&{requiresBaseline:!0}}})}})()}}}),Object.defineProperty(t,"toJSON",{configurable:!0,enumerable:!1,writable:!0,value:()=>{const o={};for(const n of Object.keys(t))if(!(n.startsWith("_")||typeof t[n]=="function"))try{const i=t[n];Is(i)?o[`[KOS Model] ${n}`]=typeof i.toJSON=="function"?i.toJSON():{id:i.id,type:i.constructor.name}:Un(i)?o[`[KOS Container] ${n}`]=typeof i.toJSON=="function"?i.toJSON():["Container"]:Array.isArray(i)?o[n]=`[Array(${i.length})]`:typeof i=="object"&&i!==null?o[n]=JSON.parse(JSON.stringify(i)):o[n]=i}catch{o[n]="[unreadable]"}return o}})}class Rg{constructor(e){this.model=e}resolve(){const e=new Set([...this.getResolvedDecoratedChildren(),...this.getAdditionalChildren(),...this.model.companionModels.all()]),s=Array.from(e).map(r=>this.model.modelManager.getModelById(r.id||"")).filter(r=>r&&r.status!==w.FAILED).filter(r=>!!r);return s.forEach(r=>{try{Q.setParentContext(r.modelId,this.model.modelId)}catch(o){console.error(`Failed to set parent context for ${r.modelId} under ${this.model.modelId}`,o)}}),s}getResolvedDecoratedChildren(){var s;const e=((s=this.model.modelData)==null?void 0:s[_e])||{};return Object.keys(e).map(r=>ul(this.model.modelData[r])).filter(r=>!!r).flat()}getAdditionalChildren(){var e,s;return((s=(e=this.model.modelData)==null?void 0:e.getChildren)==null?void 0:s.call(e))||[]}}class Pg{constructor(e){l(this,"companions",new M.ObservableMap);this.hostModel=e}add(e){this.companions.set(e.modelTypeName,e)}clear(){this.companions.clear()}get(e){return this.companions.get(e)}all(){return[...this.companions.values()]}get data(){return this.companions}}class kg{constructor(e,s,r,o){l(this,"disposers",[]);this.modelTypeName=e,this.modelId=s,this.modelData=r,this.log=o}setup(){var s;const e=((s=this.modelData)==null?void 0:s[xe])||{};for(const r of Object.keys(e)){const{value:o,dependencies:n,options:i}=e[r],a=o.bind(this.modelData),c=()=>{this.log.info(`Running effect ${r} for ${this.modelTypeName} (${this.modelId})`),M.runInAction(()=>a())},u=n?M.reaction(()=>n(this.modelData),c,{fireImmediately:!!(i!=null&&i.fireImmediately)}):M.autorun(c);this.disposers.push(u)}}disposeAll(){for(const e of this.disposers)try{e()}catch(s){this.log.info(`Failed to dispose effect for ${this.modelId}`,s)}this.disposers=[]}}const Lg=m.createLogger({name:"model-active-machine"}),Fg=t=>{const e=b.createMachine(w.INACTIVE,{[w.FAILED]:b.state(b.transition(N.GO_ACTIVE,w.ACTIVATING)),[w.INACTIVE]:b.state(b.transition(N.GO_ACTIVE,w.ACTIVATING)),[w.ACTIVATING]:b.invoke(()=>(t.activeStatus=w.ACTIVATING,t.activate()),b.transition("done",w.ACTIVE,b.action(()=>{t.activeStatus=w.ACTIVE})),b.transition("error",w.FAILED,b.action(()=>{t.activeStatus=w.FAILED}))),[w.ACTIVE]:b.state(b.transition(N.GO_INACTIVE,w.DEACTIVATING)),[w.DEACTIVATING]:b.invoke(()=>(t.activeStatus=w.DEACTIVATING,t.deactivate()),b.transition("done",w.INACTIVE,b.action(()=>{t.activeStatus=w.INACTIVE})),b.transition("error",w.FAILED,b.action(()=>{t.activeStatus=w.FAILED})))});return{service:b.interpret(e,r=>Lg.debug(r.machine.current)),machine:e}},ta=m.createLogger({name:"model-online-machine"}),Ng=t=>{const e=b.createMachine(w.OFFLINE,{[w.ONLINE]:b.state(b.transition(N.GO_OFFLINE,w.OFFLINE,b.action(async()=>{await t.offline(),t.onlineStatus=w.OFFLINE}))),[w.OFFLINE]:b.state(b.transition(N.GO_ONLINE,w.ONLINE,b.action(async()=>{ta.debug(`Going online with model ${t.modelId}`),await t.online(),t.onlineStatus=w.ONLINE,await t.fsm.transitionTo(N.INITIALIZE,w.INITIALIZED)})))}),s=b.interpret(e,r=>ta.debug(r.machine.current));return{machine:e,service:s}},Ug=t=>{var r;const e=Fg(t).service,s=Ng(t).service;return b.createMachine(w.CREATING,{[w.CREATING]:b.state(b.transition(N.CREATE,w.CREATED)),[w.CREATED]:b.state(b.immediate(w.INITIALIZING)),[w.INITIALIZING]:b.invoke(()=>(te(()=>{t.status=w.INITIALIZING}),t.init()),b.transition("done",w.INITIALIZED,b.action(()=>{t.status=w.INITIALIZED})),b.transition("error",w.FAILED,b.action(()=>{m.error(`Model ${t.modelId} - ${t.modelTypeName} failed to initialize. Transitioning to FAILED state.`),t.status=w.FAILED}))),[w.INITIALIZED]:b.state(b.immediate(w.LOADING)),[w.LOADING]:b.invoke(()=>(te(()=>{t.status=w.LOADING}),t.load()),b.transition("done",w.LOADED,b.action(()=>{t.status=w.LOADED})),b.transition("error",w.FAILED,b.action(()=>{t.status=w.FAILED}))),[w.LOADED]:b.state(b.immediate(w.READYING),b.transition(N.UNLOAD,w.UNLOADING)),[w.RESETTING]:b.invoke(()=>{var o;return te(()=>{t.status=w.RESETTING}),(o=t.unload)==null||o.call(t),t.load()},b.transition("done",w.LOADED,b.action(()=>{t.status=w.LOADED}))),[w.READYING]:b.invoke(()=>(te(()=>{t.status=w.READYING}),t.ready()),b.transition("done",w.READY,b.action(()=>{te(()=>{t.status=w.READY}),s.send(N.GO_ONLINE)})),b.transition("error",w.FAILED,b.action(()=>{t.status=w.FAILED}))),[w.READY]:b.state(b.transition(N.UNLOAD,w.UNLOADED,b.action((r=t.unload)==null?void 0:r.bind(t))),b.transition(N.RESET,w.RESETTING),b.transition(N.GO_ONLINE,w.READY,b.action(()=>{s.send(N.GO_ONLINE)})),b.transition(N.GO_OFFLINE,w.READY,b.action(()=>{s.send(N.GO_OFFLINE)})),b.transition(N.GO_ACTIVE,w.READY,b.action(()=>{e.send(N.GO_ACTIVE)})),b.transition(N.GO_INACTIVE,w.READY,b.action(()=>{e.send(N.GO_INACTIVE)}))),[w.UNLOADED]:b.state(),[w.FAILED]:b.state()})},jg=m.createLogger({name:"kos-model-lifecycle"}),Bg=t=>({service:b.interpret(Ug(t),s=>jg.debug(`state machine for model ${t.modelId}: ${s.machine.current});`))});class Hg{constructor(e,s){l(this,"disposer");l(this,"service");this.model=e,this.log=s;const r=Bg(e);this.service=r.service,this.service.send(N.CREATE)}get current(){return this.service.machine.current}async transitionTo(e,s,r=w.FAILED){return this.getTransitionStatusFor(s)===s?(this.log.debug(`Model ${this.model.modelId} already in state ${s}, skipping transition`),Promise.resolve()):(this.log.debug(`Transitioning model ${this.model.modelId} with event ${e} toward target ${s}`),new Promise((n,i)=>{var a;(a=this.disposer)==null||a.call(this),this.disposer=M.when(()=>{const c=this.getTransitionStatusFor(s);return c===s||c===r},()=>{this.getTransitionStatusFor(s)===r?(this.log.error(`Model ${this.model.modelId} entered error state ${r} during transition`),i(new Error(`FSM transition failed for model ${this.model.modelId} with event ${e}`))):(this.log.debug(`Model ${this.model.modelId} reached target state ${s}`),n())}),this.service.send(e)}).finally(()=>{var n;(n=this.disposer)==null||n.call(this),this.disposer=void 0}))}getTransitionStatusFor(e){return[w.ACTIVE,w.INACTIVE].includes(e)?this.model.activeStatus:this.model.status}}const gl="browser-router-model";class jn{constructor(e,s){l(this,"logger");l(this,"model");l(this,"router",null);l(this,"registered",!1);l(this,"registeredRoutes",[]);this.model=e,this.logger=s}registerAll(){var s;if(!Sr(this.model))return;let e=this.model.__httpBrowserRouter;if(!e)for(const r of Object.keys(this.model)){const o=this.model[r];if(o&&typeof o=="object"&&"use"in o&&typeof o.use=="function"){e=o;break}}if(e||(e=(s=Pe(gl))==null?void 0:s.model),!e)throw this.logger.error("Cannot register HTTP routes: BrowserRouter not found. The HTTP decorators should have auto-injected it, but something went wrong."),new Error("BrowserRouter is required for HTTP route decorators but was not found. This should not happen as HTTP decorators auto-inject the dependency.");this.setRouter(e)}setRouter(e){this.router=e,this.registered||this.registerRoutes()}hasRoutes(){return Sr(this.model)}registerRoutes(){if(!this.router){this.logger.warn("Cannot register routes: router not set");return}if(this.registered){this.logger.debug("Routes already registered");return}const e=kc(this.model);e.length!==0&&(this.logger.debug(`Registering ${e.length} HTTP routes`),e.forEach(s=>{this.registerRoute(s)}),this.registered=!0)}resolvePropKey(e){const s=/\{PROP_([^}]+)\}/g;let r=e;if(r.includes("{MODEL_ID}")){const n=this.model.id||this.model._id||"unknown";r=r.replace(/\{MODEL_ID\}/g,n)}let o;for(;(o=s.exec(e))!==null;){const n=o[1];if(n in this.model){const i=this.model[n];r=r.replace(o[0],String(i))}else this.logger.warn(`Property '${n}' not found on model for PropKey resolution in path: ${e}`)}return r}registerRoute(e){if(!this.router)return;const s=this.model[e.handler];if(!s||typeof s!="function"){this.logger.error(`Handler method '${e.handler}' not found on model`);return}const r=this.resolvePropKey(e.path);this.logger.debug(`Registering ${e.method} ${r} -> ${e.handler}`+(r!==e.path?` (resolved from ${e.path})`:""));const o=async(n,i)=>{var a;try{await s.call(this.model,n,i)}catch(c){this.logger.error(`Error in route handler ${e.method} ${r}:`,c),(a=i.status)==null||a.call(i,500).send({error:"Internal server error",message:c instanceof Error?c.message:String(c)})}};this.checkForDuplicateRoute(e.method,r),this.router.use(e.method,r,o),this.registeredRoutes.push({method:e.method,path:r})}checkForDuplicateRoute(e,s){if(!this.router)return;this.router.getRoutes().find(n=>n.method===e&&n.path===s)&&this.logger.warn(`Duplicate route detected: ${e} ${s}. This route is already registered by another model. The new handler from model '${this.model.id||"unknown"}' will override the existing one. Only the last registered handler will receive requests. Consider using different paths or namespacing to avoid conflicts.`)}dispose(){if(this.router&&this.registeredRoutes.length>0){this.logger.debug(`Removing ${this.registeredRoutes.length} HTTP routes for model ${this.model.id||"unknown"}`);let e=0;for(const s of this.registeredRoutes){const r=this.router.remove(s.method,s.path);e+=r,r>0?this.logger.debug(`Removed route: ${s.method} ${s.path}`):this.logger.warn(`Failed to remove route: ${s.method} ${s.path} (not found)`)}this.logger.debug(`Successfully removed ${e} routes from browser router`)}this.registered=!1,this.registeredRoutes=[],this.router=null}getRegisteredRoutes(){return[...this.registeredRoutes]}}function Kg(t,e){if(!Sr(t))return;const s=Pe(gl);if(!(s!=null&&s.model))throw e.error("Cannot register HTTP routes: BrowserRouter not found. Make sure to include BrowserRouter in your model dependencies or create an instance."),new Error("BrowserRouter is required for HTTP route decorators but was not found. Add it as a dependency using @kosDependency or ensure an instance exists.");new jn(t,e).setRouter(s.model)}class qg{constructor(e){l(this,"queue",[]);this.log=e}enqueue(e,s,r){this.queue.push({handler:e,receivedAt:Date.now(),topic:s,payload:r})}flush(){if(this.queue.length!==0){this.log.warn(`Processing ${this.queue.length} offline message(s)`);for(const e of this.queue)try{e.handler()}catch(s){this.log.error("Error while processing offline message:",s)}this.queue=[],this.log.info("Offline queue flushed")}}flushWithStrategy(e,s,r){if(this.queue.length===0)return;const o=this.queue.length,n=this.filterEventsByStrategy(e,s,r),i=o-n.length;this.log.warn(`Processing ${n.length}/${o} offline message(s) with strategy: ${e}`);for(const a of n)try{a.handler()}catch(c){this.log.error(`Error while processing offline message for topic ${a.topic}:`,c)}this.queue=[],this.log.info(`Offline queue flushed with strategy ${e}. Replayed: ${n.length}, Discarded: ${i}`)}filterEventsByStrategy(e,s,r){switch(e){case pt.ALL:return[...this.queue];case pt.AFTER_REQUEST:return s===void 0?(this.log.warn("AFTER_REQUEST strategy requires baselineRequestedAt, replaying all events"),[...this.queue]):this.queue.filter(o=>o.receivedAt>=s);case pt.AFTER_RESPONSE:return r===void 0?(this.log.warn("AFTER_RESPONSE strategy requires baselineReceivedAt, replaying all events"),[...this.queue]):this.queue.filter(o=>o.receivedAt>=r);case pt.NONE:return[];default:return this.log.warn(`Unknown replay strategy: ${e}, replaying all`),[...this.queue]}}getStatistics(e,s){if(this.queue.length===0)return{total:0};const r=this.queue.map(n=>n.receivedAt),o={total:this.queue.length,oldestEventAt:Math.min(...r),newestEventAt:Math.max(...r)};return e!==void 0&&(o.afterRequest=this.queue.filter(n=>n.receivedAt>=e).length),s!==void 0&&(o.afterResponse=this.queue.filter(n=>n.receivedAt>=s).length),o}clear(){this.queue=[]}get length(){return this.queue.length}get isEmpty(){return this.queue.length===0}}class zg{constructor(e,s){l(this,"unsubscribers",[]);this.model=e,this.log=s}register(){const e=this.model.modelId,s=C("/kosCore/online",async()=>{this.log.debug(`Online event received for ${e}, waiting for readiness...`),await this.model.whenReady(),this.log.debug(`${e} is ready — sending GO_ONLINE`),await this.model.fsm.transitionTo(N.GO_ONLINE,w.ONLINE)}),r=C("/kosCore/offline",async()=>{this.log.debug(`Offline event received for ${e} — sending GO_OFFLINE`),await this.model.fsm.transitionTo(N.GO_OFFLINE,w.OFFLINE)});this.unsubscribers.push(s.unsubscribe),this.unsubscribers.push(r.unsubscribe)}dispose(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[]}}function vt(){return"xxxxxxxx-xxxx-4xxx-2xxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=Math.random()*16|0;return(t=="x"?e:e&3|8).toString(16)})}function Qo(t){const e=new Uint8Array(t);let s="";for(let r=0;r<e.byteLength;r++)s+=String.fromCharCode(e[r]);return btoa(s)}function Vg(t){const e=atob(t),s=new Uint8Array(e.length);for(let r=0;r<e.length;r++)s[r]=e.charCodeAt(r);return s.buffer}async function Gg(t){return await t.arrayBuffer()}function Yg(t,e){return new Blob([t],{type:e})}async function Wg(t){const e={},s=[],r=[];t.forEach((o,n)=>{r.push([n,o])});for(const[o,n]of r)if(n instanceof File){const i=await n.arrayBuffer();s.push({name:o,filename:n.name,type:n.type,data:Qo(i)})}else e[o]=n.toString();return{fields:e,files:s}}function Qg(t){return new ReadableStream({async start(){},async pull(e){await t(e)},cancel(){}})}async function Zg(t){if(!t)return{data:"",contentType:"text/plain"};if(typeof t=="string")return{data:t,contentType:"text/plain"};if(t instanceof ArrayBuffer||t instanceof Uint8Array){let e;return t instanceof Uint8Array?(e=new ArrayBuffer(t.byteLength),new Uint8Array(e).set(t)):e=t,{data:Qo(e),contentType:"application/octet-stream",encoding:"base64"}}if(t instanceof Blob){const e=await Gg(t);return{data:Qo(e),contentType:t.type||"application/octet-stream",encoding:"base64"}}if(t instanceof FormData){const e=await Wg(t);return{data:JSON.stringify(e),contentType:"multipart/form-data",encoding:"json"}}throw new Error("Unsupported body type")}const ml=({path:t,requestId:e,method:s,destinationAddress:r})=>{let o=`${Xr}:${s}
|
|
31
|
+
- Error: ${y}`),o===Qe.FAIL?new Error(`Dependency resolution failed (policy: FAIL) - Model ${t.modelId} cannot resolve dependency ${e.modelType} [${r}]: ${y}`):p}},nl=(t,e=C.READY)=>{var o;const s=((o=t.modelData)==null?void 0:o[F])||{};return Object.keys(s).length===0?(g.debug(`${t.modelId} has no dependencies. Returning`),[]):Object.keys(s).filter(n=>s[n].lifecycle===e).map(n=>{const i=s[n],a=ol(t,i);if(!a.success||!a.dependentModel)return g.debug(`Skipping dependency ${i.modelType} with id ${a.dataModelId} - resolution failed with CONTINUE policy`),t.modelData[n]=void 0,null;const{dependentModel:c,dataModelId:u}=a;t.modelData[n]=c.data,g.debug(`waiting for dependent model ${i.modelType} with id ${u} - waiting for WHENREADY`);const d=async(p,y,w)=>{var M;await((M=p.whenReady)==null?void 0:M.call(p)),g.debug(`dependent model ${y} with id ${w} - READY`)},{promise:h,cancel:f}=sl(el,t,t.status);return Promise.race([d(c.model,i.modelType,u).then(()=>{f()}).catch(p=>{const y=At(p,{modelType:i.modelType,modelId:u,parentModel:{type:t.modelTypeName,id:t.modelId},lifecycle:e,operation:"dependency whenReady()"});throw g.error(y.toDetailedString()),f(),y}),h])}).filter(n=>!!n)},il=async(t,e,s,r)=>{if(g.debug(`Execute lifecycle with ${e.length} models`),e.length===0){g.debug(`${t.modelId} has no children. Returning`);return}if(!s){g.error(`${t.modelId} is not transitioning with a valid target ${s}`);return}const o=e.map(a=>{let c;return pr[s]&&a?c=pr[s](a):(a||g.error("model is undefined. This shouldn't happen"),pr[s]||g.error(`There is no promise in the Transition Map for ${s}`)),{promise:c,modelId:a==null?void 0:a.modelId,model:a,type:a==null?void 0:a.modelTypeName,status:a==null?void 0:a.status}}).filter(a=>a.promise?a.model?!0:(g.error(`No model found ${a.modelId}`),!1):(g.error(`No promise found ${a.modelId}`),!1)),n=await Promise.allSettled(o.map(a=>{var d;if(!a.model||!a.status)return Promise.resolve();const{promise:c,cancel:u}=sl(el,a.model,a.status);return Promise.race([(d=a.promise)==null?void 0:d.then(()=>{u()}).catch(h=>{const f=At(h,{modelType:a.type||"unknown",modelId:a.modelId,parentModel:{type:t.modelTypeName,id:t.modelId},lifecycle:r,operation:`transition to ${s}`});throw g.error(f.toDetailedString()),u(),f}),c])})),i=n.filter(a=>a.status==="rejected");if(i.length>0){const a=i.map(c=>{const u=o[n.indexOf(c)];return{error:c.status==="rejected"?c.reason:new Error("Unknown error"),context:{modelType:u.type||"unknown",modelId:u.modelId,parentModel:{type:t.modelTypeName,id:t.modelId},lifecycle:r,operation:`transition to ${s}`}}});fg(a,`Model ${t.modelId} had ${i.length} failed child model(s) on ${r}`)}},al=async(t,e,s)=>{await il(t,t.getChildren().filter(r=>!!r),e,s)},as=async(t,e)=>{const r=(await Promise.allSettled(nl(t,e))).filter(o=>o.status==="rejected");r.length&&(g.error(`There were ${r.length} failed dependent models on ${e}`),g.error(r))};function Eg(t){const e=`KosModel(${t.modelTypeName}:${t.modelId})`;try{Object.defineProperty(t,Symbol.toStringTag,{value:e,configurable:!0})}catch{t.toString=()=>e}try{Object.defineProperty(t.constructor,"name",{value:`KosModel_${t.modelTypeName}`,configurable:!0})}catch{t.constructor.name=`KosModel_${t.modelTypeName}`}const s=["fsm","effectManager","subscriptionManager","onlineLifecycleManager","companionManager","childResolver","_offlineQueue"];for(const r of s)r in t&&Object.defineProperty(t,r,{enumerable:!1});Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var r,o,n;return{id:t.modelId,type:t.modelTypeName,initialized:t.initialized,loaded:t.loaded,status:t.status,onlineStatus:t.onlineStatus,activeStatus:t.activeStatus,companions:(o=(r=t.companionManager)==null?void 0:r.all())==null?void 0:o.map(i=>i.modelTypeName),children:(n=t.getChildren)==null?void 0:n.call(t).map(i=>i.modelId),effects:!!t.effectManager,subscriptions:!!t.subscriptionManager}}}),Mg(t.modelData,t.modelTypeName,t.modelId,t)}function Mg(t,e,s,r){Object.defineProperty(t,Symbol.toStringTag,{value:`KosModelData(${e}:${s})`,configurable:!0});try{Object.defineProperty(t.constructor,"name",{value:`${e}ModelData`,configurable:!0})}catch{t.constructor.name=`${e}ModelData`}Object.defineProperty(t,"debugState",{enumerable:!1,configurable:!0,get(){var a,c,u;const o=((a=r.getChildren)==null?void 0:a.call(r))||[],n=((c=r.companionManager)==null?void 0:c.all())||[],i=r.modelData[F]||{};return{id:s,type:e,companions:{count:n.length,data:n.map(d=>({type:d.modelTypeName,id:d.modelId}))},dependencies:{count:Object.keys(i).length,data:Object.values(i).map(d=>({id:d.id||d.modelType,type:d.modelType,options:d.options,lifecycle:d.lifecycle}))},children:{count:o.length,data:o.map(d=>({id:d.modelId,type:d.modelTypeName}))},data:((u=t.toJSON)==null?void 0:u.call(t))||{},subscriptions:(()=>{const d=t[X]||{},h=Object.keys(d);return h.length===0?{count:0,data:[]}:{count:h.length,data:h.map(f=>{const p=d[f];return{topic:f,websocket:!!p.websocket,...p.lifecycle&&{lifecycle:p.lifecycle},...p.fos&&{fos:!0},...p.bridge&&{bridge:!0},...p.destinationAddress&&{destinationAddress:p.destinationAddress},...p.wildcardName&&{wildcardName:p.wildcardName},...p.flow&&{flow:!0},...p.requiresBaseline&&{requiresBaseline:!0}}})}})()}}}),Object.defineProperty(t,"toJSON",{configurable:!0,enumerable:!1,writable:!0,value:()=>{const o={};for(const n of Object.keys(t))if(!(n.startsWith("_")||typeof t[n]=="function"))try{const i=t[n];Ss(i)?o[`[KOS Model] ${n}`]=typeof i.toJSON=="function"?i.toJSON():{id:i.id,type:i.constructor.name}:Rn(i)?o[`[KOS Container] ${n}`]=typeof i.toJSON=="function"?i.toJSON():["Container"]:Array.isArray(i)?o[n]=`[Array(${i.length})]`:typeof i=="object"&&i!==null?o[n]=JSON.parse(JSON.stringify(i)):o[n]=i}catch{o[n]="[unreadable]"}return o}})}class Tg{constructor(e){this.model=e}resolve(){const e=new Set([...this.getResolvedDecoratedChildren(),...this.getAdditionalChildren(),...this.model.companionModels.all()]),s=Array.from(e).map(r=>this.model.modelManager.getModelById(r.id||"")).filter(r=>r&&r.status!==v.FAILED).filter(r=>!!r);return s.forEach(r=>{try{W.setParentContext(r.modelId,this.model.modelId)}catch(o){console.error(`Failed to set parent context for ${r.modelId} under ${this.model.modelId}`,o)}}),s}getResolvedDecoratedChildren(){var s;const e=((s=this.model.modelData)==null?void 0:s[Xe])||{};return Object.keys(e).map(r=>rl(this.model.modelData[r])).filter(r=>!!r).flat()}getAdditionalChildren(){var e,s;return((s=(e=this.model.modelData)==null?void 0:e.getChildren)==null?void 0:s.call(e))||[]}}class _g{constructor(e){l(this,"companions",new E.ObservableMap);this.hostModel=e}add(e){this.companions.set(e.modelTypeName,e)}clear(){this.companions.clear()}get(e){return this.companions.get(e)}all(){return[...this.companions.values()]}get data(){return this.companions}}class Sg{constructor(e,s,r,o){l(this,"disposers",[]);this.modelTypeName=e,this.modelId=s,this.modelData=r,this.log=o}setup(){var s;const e=((s=this.modelData)==null?void 0:s[Ue])||{};for(const r of Object.keys(e)){const{value:o,dependencies:n,options:i}=e[r],a=o.bind(this.modelData),c=()=>{this.log.info(`Running effect ${r} for ${this.modelTypeName} (${this.modelId})`),E.runInAction(()=>a())},u=n?E.reaction(()=>n(this.modelData),c,{fireImmediately:!!(i!=null&&i.fireImmediately)}):E.autorun(c);this.disposers.push(u)}}disposeAll(){for(const e of this.disposers)try{e()}catch(s){this.log.info(`Failed to dispose effect for ${this.modelId}`,s)}this.disposers=[]}}const Og=g.createLogger({name:"model-active-machine"}),Ig=t=>{const e=b.createMachine(v.INACTIVE,{[v.FAILED]:b.state(b.transition(k.GO_ACTIVE,v.ACTIVATING)),[v.INACTIVE]:b.state(b.transition(k.GO_ACTIVE,v.ACTIVATING)),[v.ACTIVATING]:b.invoke(()=>(t.activeStatus=v.ACTIVATING,t.activate()),b.transition("done",v.ACTIVE,b.action(()=>{t.activeStatus=v.ACTIVE})),b.transition("error",v.FAILED,b.action(()=>{t.activeStatus=v.FAILED}))),[v.ACTIVE]:b.state(b.transition(k.GO_INACTIVE,v.DEACTIVATING)),[v.DEACTIVATING]:b.invoke(()=>(t.activeStatus=v.DEACTIVATING,t.deactivate()),b.transition("done",v.INACTIVE,b.action(()=>{t.activeStatus=v.INACTIVE})),b.transition("error",v.FAILED,b.action(()=>{t.activeStatus=v.FAILED})))});return{service:b.interpret(e,r=>Og.debug(r.machine.current)),machine:e}},Yi=g.createLogger({name:"model-online-machine"}),$g=t=>{const e=b.createMachine(v.OFFLINE,{[v.ONLINE]:b.state(b.transition(k.GO_OFFLINE,v.OFFLINE,b.action(async()=>{await t.offline(),t.onlineStatus=v.OFFLINE}))),[v.OFFLINE]:b.state(b.transition(k.GO_ONLINE,v.ONLINE,b.action(async()=>{Yi.debug(`Going online with model ${t.modelId}`),await t.online(),t.onlineStatus=v.ONLINE,await t.fsm.transitionTo(k.INITIALIZE,v.INITIALIZED)})))}),s=b.interpret(e,r=>Yi.debug(r.machine.current));return{machine:e,service:s}},Cg=t=>{var r;const e=Ig(t).service,s=$g(t).service;return b.createMachine(v.CREATING,{[v.CREATING]:b.state(b.transition(k.CREATE,v.CREATED)),[v.CREATED]:b.state(b.immediate(v.INITIALIZING)),[v.INITIALIZING]:b.invoke(()=>(ee(()=>{t.status=v.INITIALIZING}),t.init()),b.transition("done",v.INITIALIZED,b.action(()=>{t.status=v.INITIALIZED})),b.transition("error",v.FAILED,b.action(()=>{g.error(`Model ${t.modelId} - ${t.modelTypeName} failed to initialize. Transitioning to FAILED state.`),t.status=v.FAILED}))),[v.INITIALIZED]:b.state(b.immediate(v.LOADING)),[v.LOADING]:b.invoke(()=>(ee(()=>{t.status=v.LOADING}),t.load()),b.transition("done",v.LOADED,b.action(()=>{t.status=v.LOADED})),b.transition("error",v.FAILED,b.action(()=>{t.status=v.FAILED}))),[v.LOADED]:b.state(b.immediate(v.READYING),b.transition(k.UNLOAD,v.UNLOADING)),[v.RESETTING]:b.invoke(()=>{var o;return ee(()=>{t.status=v.RESETTING}),(o=t.unload)==null||o.call(t),t.load()},b.transition("done",v.LOADED,b.action(()=>{t.status=v.LOADED}))),[v.READYING]:b.invoke(()=>(ee(()=>{t.status=v.READYING}),t.ready()),b.transition("done",v.READY,b.action(()=>{ee(()=>{t.status=v.READY}),s.send(k.GO_ONLINE)})),b.transition("error",v.FAILED,b.action(()=>{t.status=v.FAILED}))),[v.READY]:b.state(b.transition(k.UNLOAD,v.UNLOADED,b.action((r=t.unload)==null?void 0:r.bind(t))),b.transition(k.RESET,v.RESETTING),b.transition(k.GO_ONLINE,v.READY,b.action(()=>{s.send(k.GO_ONLINE)})),b.transition(k.GO_OFFLINE,v.READY,b.action(()=>{s.send(k.GO_OFFLINE)})),b.transition(k.GO_ACTIVE,v.READY,b.action(()=>{e.send(k.GO_ACTIVE)})),b.transition(k.GO_INACTIVE,v.READY,b.action(()=>{e.send(k.GO_INACTIVE)}))),[v.UNLOADED]:b.state(),[v.FAILED]:b.state()})},Dg=g.createLogger({name:"kos-model-lifecycle"}),xg=t=>({service:b.interpret(Cg(t),s=>Dg.debug(`state machine for model ${t.modelId}: ${s.machine.current});`))});class Ag{constructor(e,s){l(this,"disposer");l(this,"service");this.model=e,this.log=s;const r=xg(e);this.service=r.service,this.service.send(k.CREATE)}get current(){return this.service.machine.current}async transitionTo(e,s,r=v.FAILED){return this.getTransitionStatusFor(s)===s?(this.log.debug(`Model ${this.model.modelId} already in state ${s}, skipping transition`),Promise.resolve()):(this.log.debug(`Transitioning model ${this.model.modelId} with event ${e} toward target ${s}`),new Promise((n,i)=>{var a;(a=this.disposer)==null||a.call(this),this.disposer=E.when(()=>{const c=this.getTransitionStatusFor(s);return c===s||c===r},()=>{this.getTransitionStatusFor(s)===r?(this.log.error(`Model ${this.model.modelId} entered error state ${r} during transition`),i(new Error(`FSM transition failed for model ${this.model.modelId} with event ${e}`))):(this.log.debug(`Model ${this.model.modelId} reached target state ${s}`),n())}),this.service.send(e)}).finally(()=>{var n;(n=this.disposer)==null||n.call(this),this.disposer=void 0}))}getTransitionStatusFor(e){return[v.ACTIVE,v.INACTIVE].includes(e)?this.model.activeStatus:this.model.status}}const cl="browser-router-model";class Pn{constructor(e,s){l(this,"logger");l(this,"model");l(this,"router",null);l(this,"registered",!1);l(this,"registeredRoutes",[]);this.model=e,this.logger=s}registerAll(){var s;if(!Er(this.model))return;let e=this.model.__httpBrowserRouter;if(!e)for(const r of Object.keys(this.model)){const o=this.model[r];if(o&&typeof o=="object"&&"use"in o&&typeof o.use=="function"){e=o;break}}if(e||(e=(s=Ae(cl))==null?void 0:s.model),!e)throw this.logger.error("Cannot register HTTP routes: BrowserRouter not found. The HTTP decorators should have auto-injected it, but something went wrong."),new Error("BrowserRouter is required for HTTP route decorators but was not found. This should not happen as HTTP decorators auto-inject the dependency.");this.setRouter(e)}setRouter(e){this.router=e,this.registered||this.registerRoutes()}hasRoutes(){return Er(this.model)}registerRoutes(){if(!this.router){this.logger.warn("Cannot register routes: router not set");return}if(this.registered){this.logger.debug("Routes already registered");return}const e=Oc(this.model);e.length!==0&&(this.logger.debug(`Registering ${e.length} HTTP routes`),e.forEach(s=>{this.registerRoute(s)}),this.registered=!0)}resolvePropKey(e){const s=/\{PROP_([^}]+)\}/g;let r=e;if(r.includes("{MODEL_ID}")){const n=this.model.id||this.model._id||"unknown";r=r.replace(/\{MODEL_ID\}/g,n)}let o;for(;(o=s.exec(e))!==null;){const n=o[1];if(n in this.model){const i=this.model[n];r=r.replace(o[0],String(i))}else this.logger.warn(`Property '${n}' not found on model for PropKey resolution in path: ${e}`)}return r}registerRoute(e){if(!this.router)return;const s=this.model[e.handler];if(!s||typeof s!="function"){this.logger.error(`Handler method '${e.handler}' not found on model`);return}const r=this.resolvePropKey(e.path);this.logger.debug(`Registering ${e.method} ${r} -> ${e.handler}`+(r!==e.path?` (resolved from ${e.path})`:""));const o=async(n,i)=>{var a;try{await s.call(this.model,n,i)}catch(c){this.logger.error(`Error in route handler ${e.method} ${r}:`,c),(a=i.status)==null||a.call(i,500).send({error:"Internal server error",message:c instanceof Error?c.message:String(c)})}};this.checkForDuplicateRoute(e.method,r),this.router.use(e.method,r,o),this.registeredRoutes.push({method:e.method,path:r})}checkForDuplicateRoute(e,s){if(!this.router)return;this.router.getRoutes().find(n=>n.method===e&&n.path===s)&&this.logger.warn(`Duplicate route detected: ${e} ${s}. This route is already registered by another model. The new handler from model '${this.model.id||"unknown"}' will override the existing one. Only the last registered handler will receive requests. Consider using different paths or namespacing to avoid conflicts.`)}dispose(){if(this.router&&this.registeredRoutes.length>0){this.logger.debug(`Removing ${this.registeredRoutes.length} HTTP routes for model ${this.model.id||"unknown"}`);let e=0;for(const s of this.registeredRoutes){const r=this.router.remove(s.method,s.path);e+=r,r>0?this.logger.debug(`Removed route: ${s.method} ${s.path}`):this.logger.warn(`Failed to remove route: ${s.method} ${s.path} (not found)`)}this.logger.debug(`Successfully removed ${e} routes from browser router`)}this.registered=!1,this.registeredRoutes=[],this.router=null}getRegisteredRoutes(){return[...this.registeredRoutes]}}function Rg(t,e){if(!Er(t))return;const s=Ae(cl);if(!(s!=null&&s.model))throw e.error("Cannot register HTTP routes: BrowserRouter not found. Make sure to include BrowserRouter in your model dependencies or create an instance."),new Error("BrowserRouter is required for HTTP route decorators but was not found. Add it as a dependency using @kosDependency or ensure an instance exists.");new Pn(t,e).setRouter(s.model)}class Pg{constructor(e){l(this,"queue",[]);this.log=e}enqueue(e,s,r){this.queue.push({handler:e,receivedAt:Date.now(),topic:s,payload:r})}flush(){if(this.queue.length!==0){this.log.warn(`Processing ${this.queue.length} offline message(s)`);for(const e of this.queue)try{e.handler()}catch(s){this.log.error("Error while processing offline message:",s)}this.queue=[],this.log.info("Offline queue flushed")}}flushWithStrategy(e,s,r){if(this.queue.length===0)return;const o=this.queue.length,n=this.filterEventsByStrategy(e,s,r),i=o-n.length;this.log.warn(`Processing ${n.length}/${o} offline message(s) with strategy: ${e}`);for(const a of n)try{a.handler()}catch(c){this.log.error(`Error while processing offline message for topic ${a.topic}:`,c)}this.queue=[],this.log.info(`Offline queue flushed with strategy ${e}. Replayed: ${n.length}, Discarded: ${i}`)}filterEventsByStrategy(e,s,r){switch(e){case ht.ALL:return[...this.queue];case ht.AFTER_REQUEST:return s===void 0?(this.log.warn("AFTER_REQUEST strategy requires baselineRequestedAt, replaying all events"),[...this.queue]):this.queue.filter(o=>o.receivedAt>=s);case ht.AFTER_RESPONSE:return r===void 0?(this.log.warn("AFTER_RESPONSE strategy requires baselineReceivedAt, replaying all events"),[...this.queue]):this.queue.filter(o=>o.receivedAt>=r);case ht.NONE:return[];default:return this.log.warn(`Unknown replay strategy: ${e}, replaying all`),[...this.queue]}}getStatistics(e,s){if(this.queue.length===0)return{total:0};const r=this.queue.map(n=>n.receivedAt),o={total:this.queue.length,oldestEventAt:Math.min(...r),newestEventAt:Math.max(...r)};return e!==void 0&&(o.afterRequest=this.queue.filter(n=>n.receivedAt>=e).length),s!==void 0&&(o.afterResponse=this.queue.filter(n=>n.receivedAt>=s).length),o}clear(){this.queue=[]}get length(){return this.queue.length}get isEmpty(){return this.queue.length===0}}class kg{constructor(e,s){l(this,"unsubscribers",[]);this.model=e,this.log=s}register(){const e=this.model.modelId,s=$("/kosCore/online",async()=>{this.log.debug(`Online event received for ${e}, waiting for readiness...`),await this.model.whenReady(),this.log.debug(`${e} is ready — sending GO_ONLINE`),await this.model.fsm.transitionTo(k.GO_ONLINE,v.ONLINE)}),r=$("/kosCore/offline",async()=>{this.log.debug(`Offline event received for ${e} — sending GO_OFFLINE`),await this.model.fsm.transitionTo(k.GO_OFFLINE,v.OFFLINE)});this.unsubscribers.push(s.unsubscribe),this.unsubscribers.push(r.unsubscribe)}dispose(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[]}}function bt(){return"xxxxxxxx-xxxx-4xxx-2xxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=Math.random()*16|0;return(t=="x"?e:e&3|8).toString(16)})}function Ho(t){const e=new Uint8Array(t);let s="";for(let r=0;r<e.byteLength;r++)s+=String.fromCharCode(e[r]);return btoa(s)}function Lg(t){const e=atob(t),s=new Uint8Array(e.length);for(let r=0;r<e.length;r++)s[r]=e.charCodeAt(r);return s.buffer}async function Fg(t){return await t.arrayBuffer()}function Ng(t,e){return new Blob([t],{type:e})}async function Ug(t){const e={},s=[],r=[];t.forEach((o,n)=>{r.push([n,o])});for(const[o,n]of r)if(n instanceof File){const i=await n.arrayBuffer();s.push({name:o,filename:n.name,type:n.type,data:Ho(i)})}else e[o]=n.toString();return{fields:e,files:s}}function jg(t){return new ReadableStream({async start(){},async pull(e){await t(e)},cancel(){}})}async function Bg(t){if(!t)return{data:"",contentType:"text/plain"};if(typeof t=="string")return{data:t,contentType:"text/plain"};if(t instanceof ArrayBuffer||t instanceof Uint8Array){let e;return t instanceof Uint8Array?(e=new ArrayBuffer(t.byteLength),new Uint8Array(e).set(t)):e=t,{data:Ho(e),contentType:"application/octet-stream",encoding:"base64"}}if(t instanceof Blob){const e=await Fg(t);return{data:Ho(e),contentType:t.type||"application/octet-stream",encoding:"base64"}}if(t instanceof FormData){const e=await Ug(t);return{data:JSON.stringify(e),contentType:"multipart/form-data",encoding:"json"}}throw new Error("Unsupported body type")}const ll=({path:t,requestId:e,method:s,destinationAddress:r})=>{let o=`${Yr}:${s}
|
|
32
32
|
`;return o+=`topic:${t}
|
|
33
|
-
`,o+=`${
|
|
34
|
-
`,o+=`${
|
|
35
|
-
`,r&&(o+=`${
|
|
36
|
-
`),o+=`${
|
|
33
|
+
`,o+=`${Gt}:${t}
|
|
34
|
+
`,o+=`${Hs}:${e}
|
|
35
|
+
`,r&&(o+=`${ze}:${r}
|
|
36
|
+
`),o+=`${Re}:kos.studio.request
|
|
37
37
|
`,o+=`
|
|
38
|
-
`,o},
|
|
39
|
-
`;return i+=`${
|
|
40
|
-
`,i+=`${
|
|
41
|
-
`,i+=`${
|
|
42
|
-
`,r&&(i+=`${
|
|
43
|
-
`),o&&(i+=`${
|
|
44
|
-
`),n&&(i+=`${
|
|
45
|
-
`),i+=`${
|
|
38
|
+
`,o},ul=({path:t,requestId:e,method:s,destinationAddress:r,ordered:o,tracker:n})=>{let i=`${Ua}:/http${t}
|
|
39
|
+
`;return i+=`${Yr}:${s}
|
|
40
|
+
`,i+=`${Gt}:${t}
|
|
41
|
+
`,i+=`${Ka}:${e}
|
|
42
|
+
`,r&&(i+=`${ze}:${r}
|
|
43
|
+
`),o&&(i+=`${un}:true
|
|
44
|
+
`),n&&(i+=`${dn}:${n}
|
|
45
|
+
`),i+=`${Re}:fos.http.request
|
|
46
46
|
`,i+=`
|
|
47
|
-
`,i},
|
|
48
|
-
`;return c+=`${
|
|
49
|
-
`,c+=`${
|
|
50
|
-
`,r&&(c+=`${
|
|
51
|
-
`),o&&(c+=`${
|
|
52
|
-
`),n&&(c+=`${
|
|
47
|
+
`,i},dl=({path:t,requestId:e,method:s,destinationAddress:r,ordered:o,tracker:n,bridge:i,headers:a})=>{let c=`${Yr}:${s}
|
|
48
|
+
`;return c+=`${Gt}:${t}
|
|
49
|
+
`,c+=`${Hs}:${e}
|
|
50
|
+
`,r&&(c+=`${ze}:${r}
|
|
51
|
+
`),o&&(c+=`${un}:true
|
|
52
|
+
`),n&&(c+=`${dn}:${n}
|
|
53
53
|
`),a&&Object.keys(a).forEach(u=>{c+=`${u}:${a[u]}
|
|
54
|
-
`}),c+=`${
|
|
54
|
+
`}),c+=`${Re}:${i?"fos":"kos"}.http.request
|
|
55
55
|
`,c+=`
|
|
56
|
-
`,c},
|
|
57
|
-
`;return r+=`${
|
|
58
|
-
`,r+=`${
|
|
59
|
-
`,r+=`${
|
|
60
|
-
`,r+=`${
|
|
56
|
+
`,c},st=(t,e)=>{let s=t;return e&&(s+=e),s};function hl(t){const e={...t};return{append(s,r){e[s]=r},delete(s){delete e[s]},get(s){return e[s]},forEach(s){Object.keys(e).forEach(r=>s(e[r],r,this))},has(s){return Object.hasOwn(e,s)},set(s,r){e[s]=r},keys(){return Object.keys(e)},values(){return Object.values(e)},entries(){return Object.entries(e)}}}function fl(t){let e=!1;return window.ReadableStream?new ReadableStream({start(r){function o(){return Promise.resolve({done:e,value:t}).then(({done:n,value:i})=>{if(n){r.close();return}r.enqueue(i),e=!0,o()})}o()}}):t}const pl=({path:t,requestId:e,destinationAddress:s})=>{let r=`topic:${t}
|
|
57
|
+
`;return r+=`${Gt}:${t}
|
|
58
|
+
`,r+=`${Hs}:${e}
|
|
59
|
+
`,r+=`${ze}:${s}
|
|
60
|
+
`,r+=`${Re}:kos.studio.request
|
|
61
61
|
`,r+=`
|
|
62
|
-
`,r},
|
|
63
|
-
`;return o+=`${
|
|
64
|
-
`,o+=`${
|
|
62
|
+
`,r},gl=({requestId:t,destinationAddress:e,requestType:s,headers:r})=>{let o=`${Hs}:${t}
|
|
63
|
+
`;return o+=`${ze}:${e}
|
|
64
|
+
`,o+=`${Re}:${s}
|
|
65
65
|
`,r&&Object.keys(r).forEach(n=>{o+=`${n}:${r[n]}
|
|
66
66
|
`}),o+=`
|
|
67
|
-
`,o},
|
|
68
|
-
`;return o+=`${
|
|
69
|
-
`,e&&(o+=`${
|
|
70
|
-
`),o+=`${
|
|
71
|
-
`,o+=`${
|
|
72
|
-
`,o+=`${
|
|
67
|
+
`,o},Hg=(t,e)=>{const s=t,r=st(gl(e),typeof s=="string"?s:JSON.stringify(s)),o=_.getInstance().transport.socket;o?(g.debug("Sending message",r),o.socket.send(r)):g.error("socket transport is not initialized")},ml=({path:t,responseId:e,status:s,destinationAddress:r})=>{let o=`topic:${t}
|
|
68
|
+
`;return o+=`${Gt}:${t}
|
|
69
|
+
`,e&&(o+=`${Wr}:${e}
|
|
70
|
+
`),o+=`${ln}:${s}
|
|
71
|
+
`,o+=`${ze}:${r}
|
|
72
|
+
`,o+=`${Re}:kos.studio.response
|
|
73
73
|
`,o+=`
|
|
74
|
-
`,o},
|
|
75
|
-
`;return e+=`${
|
|
74
|
+
`,o},Kg=(t,e)=>{const s=t,r=st(pl(e),JSON.stringify(s)),o=_.getInstance().transport.socket;o?o.socket.send(r):g.error("socket transport is not initialized")},qg=(t,e)=>{const s=e.responseId?{status:e.status,data:t}:t,r=st(ml(e),JSON.stringify(s)),o=_.getInstance().transport.socket;o?o.socket.send(r):g.error("socket transport is not initialized")},yl=({topic:t})=>{let e=`topic:${t}
|
|
75
|
+
`;return e+=`${Re}:kos.broker.send
|
|
76
76
|
`,e+=`
|
|
77
|
-
`,e},
|
|
78
|
-
`;return n+=`${
|
|
79
|
-
`,n+=`${
|
|
80
|
-
`,n+=`${
|
|
81
|
-
`,n+=`${
|
|
82
|
-
`,n+=`${
|
|
83
|
-
`,n+=`${
|
|
77
|
+
`,e},bl=({responseId:t,destinationAddress:e,type:s,sourceAddress:r,status:o})=>{let n=`${Wr}:${t}
|
|
78
|
+
`;return n+=`${ze}:${e}
|
|
79
|
+
`,n+=`${ja}:${r}
|
|
80
|
+
`,n+=`${Re}:${s??"kos.message.request"}
|
|
81
|
+
`,n+=`${ln}:${o}
|
|
82
|
+
`,n+=`${Ba}:application/json
|
|
83
|
+
`,n+=`${Ha}:no-cache
|
|
84
84
|
`,n+=`
|
|
85
|
-
`,n},
|
|
86
|
-
`;return e&&(o+=`${
|
|
87
|
-
`),o+=`${
|
|
88
|
-
`,o+=`${
|
|
85
|
+
`,n},vl=({topic:t,responseId:e,destinationAddress:s,type:r})=>{let o=`topic:${t}
|
|
86
|
+
`;return e&&(o+=`${Wr}:${e}
|
|
87
|
+
`),o+=`${ze}:${s}
|
|
88
|
+
`,o+=`${Re}:${r??"kos.message.request"}
|
|
89
89
|
`,o+=`
|
|
90
|
-
`,o},tm=({msg:t,options:e})=>{const s=t,r=rt(_l(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Il=({msg:t,options:e})=>{const s=t,r=rt(Ol(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},$l=({msg:t,options:e})=>{const s=t,r=rt(Sl(e),JSON.stringify(s)),o=I.getInstance().transport.socket;o?o.socket.send(r):m.error("socket transport is not initialized")},Zo=(t,e)=>{try{return e?t.body??t:JSON.parse(t.body)}catch{return t.body||t}},nt=m.createLogger({name:"kos-fetch"}),sm=process.env.KOS_WS_TIMEOUT?parseInt(process.env.KOS_WS_TIMEOUT):3e4,rm=()=>new Promise(t=>{setTimeout(()=>{t(!0)},0)}),om=t=>{if("timeout"in AbortSignal)return AbortSignal.timeout(t);const e=new AbortController;return setTimeout(()=>{e.abort(new DOMException(`Request timed out after ${t}ms`,"TimeoutError"))},t),e.signal},nm=t=>{if("any"in AbortSignal)return AbortSignal.any(t);const e=new AbortController;for(const s of t){if(s.aborted)return e.abort(s.reason),e.signal;s.addEventListener("abort",()=>e.abort(s.reason),{once:!0})}return e.signal},im=t=>t!=null&&t.studio?ml:t!=null&&t.fos?yl:bl,am=async(t,e)=>{const s=I.getInstance().transport;await s.whenReady();const r=vt(),o=new URL(t),n=`${o.pathname}${o.search}`;nt.debug(`path: ${n}`);const i=(e==null?void 0:e.timeout)||sm,a=im(e),c=om(i),u=e!=null&&e.signal?nm([e.signal,c]):c,d=await Zg(e==null?void 0:e.body),h={};d.contentType&&(h["content-type"]=d.contentType),d.encoding&&(h["content-encoding"]=d.encoding);const f=rt(a({path:n,requestId:r,method:(e==null?void 0:e.method)||"GET",destinationAddress:(e==null?void 0:e.destinationAddress)||"",ordered:e==null?void 0:e.ordered,tracker:e==null?void 0:e.tracker,bridge:e==null?void 0:e.bridge,headers:{...e==null?void 0:e.headers,...h}}),d.data);return new Promise((p,g)=>{let v=null;if(u.aborted){const S=u.reason;(S==null?void 0:S.name)==="TimeoutError"?nt.error(`Timeout occurred - url: ${t}`):nt.debug(`Request aborted - url: ${t}`),g(S||new DOMException("Aborted","AbortError"));return}const E=()=>{v&&v();const S=u.reason;(S==null?void 0:S.name)==="TimeoutError"?nt.error(`Timeout occurred - url: ${t}`):nt.debug(`Request aborted - url: ${t}`),g(S||new DOMException("Aborted","AbortError"))};u.addEventListener("abort",E,{once:!0});const _=C(r,S=>{u.removeEventListener("abort",E);const O=(S==null?void 0:S.headers)||{},L=O["content-type"]||"text/plain",Y=O["content-encoding"],ae=(S==null?void 0:S.body)||"";let H=ae;if(Y==="base64"&&ae)try{H=Vg(ae)}catch(se){nt.error("Failed to decode base64 response",se)}const ls={headers:vl(O),status:O.status&&parseInt(O.status)||200,ok:O.status==="200",json:async()=>{try{if(typeof H=="string")return H.length?JSON.parse(H):null;{const De=new TextDecoder().decode(H);return De.length?JSON.parse(De):null}}catch{throw Error("Not a JSON response")}},text:async()=>typeof H=="string"?H:new TextDecoder().decode(H),arrayBuffer:async()=>H instanceof ArrayBuffer?H:new TextEncoder().encode(H).buffer,blob:async()=>H instanceof ArrayBuffer?Yg(H,L):new Blob([H],{type:L}),formData:async()=>{const se=new FormData;if(L==="multipart/form-data"&&typeof H=="string")try{const De=JSON.parse(H);De.fields&&Object.entries(De.fields).forEach(([Gi,Yi])=>{se.append(Gi,Yi)}),De.files&&nt.warn("File reconstruction in FormData not fully implemented")}catch{throw new Error("Failed to parse FormData")}return se},body:e!=null&&e.stream?Qg(async se=>{if(H instanceof ArrayBuffer)se.enqueue(new Uint8Array(H));else{const De=new TextEncoder;se.enqueue(De.encode(H))}se.close()}):wl(typeof H=="string"?H:""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){return{...this}},bodyUsed:!1};_.unsubscribe(),rm().then(()=>p(ls))});v=_.unsubscribe;const R=e!=null&&e.fos?s.fosSocket:s.socket;if(!R)throw Error(`No web socket transport available: ${e}`);R==null||R.send(f)})};exports.BASE_URL="kos:";exports.kosFetch=am;if(process.env.KOS_MOCK_FETCH==="true"){const t=process.env.KOS_PORT||"9999";exports.kosFetch=fetch,exports.BASE_URL=`http://localhost:${t}`}const Cl=()=>({isMock:!1,URL:exports.BASE_URL}),or=m.createLogger({name:"kos-service-request"}),sa="errUnknown";async function nr(t,e,s,r,o){const n=r!=null&&r.path?Object.keys(r.path).reduce((u,d)=>String(u).replace(`{${d}}`,r==null?void 0:r.path[d]),String(t)):String(t),i=r!=null&&r.query?Object.keys(r.query).map(u=>`${encodeURIComponent(u)}=${encodeURIComponent(r.query[u])}`).join("&"):"",a=`${Cl().URL}${n}${i?`?${i}`:""}`;or.debug(`fullUrl: ${a}`);const c={method:String(e).toUpperCase(),body:null,...s};o&&(c.body=JSON.stringify(o));try{const u=await exports.kosFetch(a,c);return u.status<200||u.status>=400?[`${u.statusText||sa}`,null]:[null,(await u.json()).data]}catch(u){if(u instanceof DOMException){if(u.name==="TimeoutError")return or.error(`Request timed out: ${a}`),["Request timed out",null];if(u.name==="AbortError")return or.debug(`Request aborted: ${a}`),["Request aborted",null]}return or.error(`Unexpected error during fetch: ${u}`),[u instanceof Error?u.message:sa,null]}}function Ye(){return{get:(t,e,s)=>nr(t,"get",s,e),post:(t,e,s,r)=>nr(t,"post",r,e,s),put:(t,e,s,r)=>nr(t,"put",r,e,s),delete:(t,e,s,r)=>nr(t,"delete",r,e,s)}}const Ne=Ye(),Bn=Object.freeze(Object.defineProperty({__proto__:null,default:Ne},Symbol.toStringTag,{value:"Module"})),ct=m.createLogger({name:"kos-service-request-manager",group:"Model"});function cm(t,e){return!t.condition||t.condition(e)}function lm(t,e){return pe({value:t.path,modelId:e.id,modelData:e})}function um(t,e){if(t.pathParams)return pe({value:typeof t.pathParams=="function"?t.pathParams(e):t.pathParams,modelId:e.id,modelData:e})}function dm(t,e){if(t.queryParams)return pe({value:typeof t.queryParams=="function"?t.queryParams(e):t.queryParams,modelId:e.id,modelData:e})}function hm(t,e){if(t.body)return pe({value:typeof t.body=="function"?t.body(e):t.body,modelId:e.id,modelData:e})}function fm(t,e){if(t.requestOptions)return typeof t.requestOptions=="function"?t.requestOptions(e):t.requestOptions}function pm(t){return(t||"get").toLowerCase()}function ir(t,e){return`${e.toUpperCase()}:${t}`}function Dl(t){return t==null}function gm(t,e,s,r){r&&Dl(t)&&ct.warn(`Required field '${e}' is missing in response for ${s}`)}function mm(t,e){return Dl(t)&&e!==void 0?e:t}class ym{constructor(e,s){l(this,"model");l(this,"responseStore");l(this,"handlers");this.model=e,this.responseStore=s,this.handlers=new Map,this.discoverHandlers()}discoverHandlers(){const s=Object.getPrototypeOf(this.model)[He]||{};Object.values(s).forEach(r=>{const o=r.lifecycle;this.handlers.has(o)||this.handlers.set(o,[]),this.handlers.get(o).push(r)}),Object.keys(s).length>0&&ct.debug(`Discovered ${Object.keys(s).length} service request handlers for model ${this.model.id}`)}async executeForLifecycle(e){const s=this.handlers.get(e);!s||s.length===0||(ct.debug(`Executing ${s.length} service requests for lifecycle ${e}`),await Promise.all(s.map(r=>this.executeHandler(r))))}async executeHandler(e){try{if(!this.shouldProcessRequest(e))return;const s=await this.prepareAndExecuteRequest(e);await this.processAndStoreResponse(s,e)}catch(s){const r=s instanceof Error?s:new Error(String(s));await this.handleError(r,e)}}shouldProcessRequest(e){return cm(e,this.model)?!0:(ct.debug(`Skipping request ${e.path} - condition returned false`),!1)}async prepareAndExecuteRequest(e){const s=this.prepareRequest(e),r=this.captureRequestTiming(),[o,n]=await this.performRequest(s),i=this.captureResponseTiming();return{requestContext:s,error:o,response:n,requestedAt:r.requestedAt,receivedAt:i.receivedAt}}captureRequestTiming(){return{requestedAt:Date.now()}}captureResponseTiming(){return{receivedAt:Date.now()}}async processAndStoreResponse(e,s){if(e.error){await this.handleError(new Error(e.error),s);return}const r=await this.processResponse(e.response,s);await this.storeAndInvokeHandler(r,s,e.requestContext.resolvedPath,e.requestedAt,e.receivedAt)}prepareRequest(e){const s=lm(e,this.model),r=um(e,this.model),o=dm(e,this.model),n=hm(e,this.model),i=fm(e,this.model),a=pm(e.method);return{resolvedPath:s,method:a,pathParams:r,queryParams:o,body:n,requestOptions:i}}async performRequest(e){return await this.makeRequest(e.resolvedPath,e.method,{path:e.pathParams,query:e.queryParams},e.body,e.requestOptions)}async processResponse(e,s){let r=e;return s.transform&&(r=s.transform(e)),s.mappings&&s.mappings.length>0&&(r=this.applyMappings(r,s)),s.iterateOver&&(r=await this.handleIteration(r,s)),r}async storeAndInvokeHandler(e,s,r,o,n){const i=s.cache||{retention:X.SINGLE},a=ir(r,s.method||"get");this.responseStore.set(a,e,i,o,n),await s.originalHandler.call(this.model,null,e),this.triggerBaselineQueueFlush(r),this.responseStore.shouldCleanupAfterHandler(a)&&this.responseStore.delete(a)}triggerBaselineQueueFlush(e){const s=this.model.subscriptionManager;!s||!s.flushQueueForBaseline||s.flushQueueForBaseline(e)}async makeRequest(e,s,r,o,n){const i=Ne;switch(s){case"get":return await i.get(e,r,n);case"post":return await i.post(e,r,o,n);case"put":return await i.put(e,r,o,n);case"delete":return await i.delete(e,r,o,n);default:return[`Unsupported HTTP method: ${s}`,null]}}applyMappings(e,s){if(!s.mappings||s.mappings.length===0)return e;const r={};return s.mappings.forEach(o=>{const n=this.getNestedValue(e,o.from),i=o.transform?this.applyTransform(n,o.transform):n;gm(i,o.from,s.path,o.required||!1);const a=mm(i,o.default);r[o.to]=a}),r}getNestedValue(e,s){return s.split(".").reduce((r,o)=>r==null?void 0:r[o],e)}applyTransform(e,s){if(typeof s=="function")return s(e);switch(s){case"string":return String(e);case"number":return Number(e);case"boolean":return!!e;case"date":return e?new Date(e):void 0;case"json":return typeof e=="string"?JSON.parse(e):e;default:return ct.warn(`Unknown transformer: ${s}`),e}}async handleIteration(e,s){if(!s.iterateOver)return e;const r=this.getNestedValue(e,s.iterateOver);return Array.isArray(r)?s.modelFactory?r.map(o=>{const n=s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o,i=s.idExtractor?s.idExtractor(n):n.id;if(!i)throw new Error("Cannot create model instance: no ID found in response data. Provide an 'idExtractor' function or ensure response items have an 'id' field.");const a=s.modelFactory;return typeof a=="function"?a(i)(n):a.instance(i).options(n).build()}):r.map(o=>s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o):(ct.warn(`iterateOver path '${s.iterateOver}' did not resolve to an array`),[])}async handleError(e,s){const r=s.errorHandler||{strategy:"throw"};switch(r.onError&&r.onError(e,this.model),r.strategy){case"throw":throw e;case"log":if(ct.error(`Service request failed for ${s.path}:`,e.message),r.defaultValue!==void 0){const o=ir(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:X.SINGLE}),await s.originalHandler.call(this.model,e.message,r.defaultValue)}break;case"ignore":if(r.defaultValue!==void 0){const o=ir(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:X.SINGLE}),await s.originalHandler.call(this.model,e.message,r.defaultValue)}break;case"default":if(r.defaultValue!==void 0){const o=ir(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:X.SINGLE}),await s.originalHandler.call(this.model,e.message,r.defaultValue)}break}}}class bm{constructor(e){l(this,"subscription");l(this,"unsubscribe");l(this,"eventType");this.eventType=e,this.subscription={queue:[],resolvers:[],closed:!1};const s=C(e,r=>{if(!this.subscription.closed&&r!==void 0){const o=this.subscription.resolvers.shift();o?o(r):this.subscription.queue.push(r)}});this.unsubscribe=s.unsubscribe}async next(){return this.subscription.closed&&this.subscription.queue.length===0?{done:!0,value:void 0}:this.subscription.queue.length>0?{done:!1,value:this.subscription.queue.shift()}:new Promise(e=>{this.subscription.closed?e({done:!0,value:void 0}):this.subscription.resolvers.push(s=>{e({done:!1,value:s})})})}async return(){return this.subscription.closed=!0,this.unsubscribe(),this.subscription.resolvers.forEach(e=>{e(void 0)}),this.subscription.resolvers=[],{done:!0,value:void 0}}async throw(e){throw this.subscription.closed=!0,this.unsubscribe(),e}[Symbol.asyncIterator](){return this}}function ra(t){return new bm(t)}class vm{constructor(e){l(this,"config");l(this,"stats");l(this,"filterHistory",[]);l(this,"activePromises",new Set);l(this,"eventQueue",[]);l(this,"rateLimitWindow",new Map);this.config=e,this.stats={eventsReceived:0,batchesProcessed:0,eventsDropped:0,currentQueueSize:0,averageBatchSize:0,processingRate:0,lastProcessedAt:Date.now()}}async*processEvents(e){const s=this.config.batch||{size:1,window:0};if(s.size===1&&!s.window)for await(const r of e)yield*this.processSingleEvent(r);else yield*this.processBatchedEvents(e,s)}async*processSingleEvent(e){if(this.stats.eventsReceived++,!(this.config.filter&&!this.shouldProcessEvent(e))){if(this.config.rateLimit&&!this.checkRateLimit())if(this.config.rateLimit.onExceeded==="drop"){this.stats.eventsDropped++;return}else this.config.rateLimit.onExceeded==="delay"&&await this.waitForRateLimit();if(this.config.backpressure){this.enqueueEvent(e),await this.waitForCapacity();const s=this.dequeueEvent();s&&(yield this.config.transform?this.config.transform([s]):[s],this.updateProcessingStats([s]))}else yield this.config.transform?this.config.transform([e]):[e],this.updateProcessingStats([e])}}async*processBatchedEvents(e,s){const r=s.size||100,o=s.window||1e3;let n=[],i=Date.now();const a=async()=>{if(n.length===0)return;const c=[...n];n=[],i=Date.now();const u=this.config.filter?c.filter(h=>this.shouldProcessEvent(h)):c;if(u.length===0)return;this.config.backpressure&&await this.waitForCapacity();const d=this.config.transform?this.config.transform(u):u;return this.stats.batchesProcessed++,this.updateProcessingStats(u),d};try{for await(const u of e)if(this.stats.eventsReceived++,this.config.backpressure)for(this.enqueueEvent(u);this.eventQueue.length>0;){const d=this.dequeueEvent();d&&n.push(d);const f=Date.now()-i;if(n.length>=r||f>=o){const p=await a();p!==void 0&&(yield p);break}}else{n.push(u);const h=Date.now()-i;if(n.length>=r||h>=o){const f=await a();f!==void 0&&(yield f)}}const c=await a();c!==void 0&&(yield c)}finally{}}shouldProcessEvent(e){if(!this.config.filter)return!0;const s={history:[...this.filterHistory],currentBatch:[],startTime:Date.now()},r=this.config.filter.predicate(e,s);return this.config.filter.historySize&&(this.filterHistory.push(e),this.filterHistory.length>this.config.filter.historySize&&this.filterHistory.shift()),r}checkRateLimit(){if(!this.config.rateLimit)return!0;const e=Date.now(),s=Math.floor(e/this.config.rateLimit.windowMs),r=this.rateLimitWindow.get(s)||0;if(r>=this.config.rateLimit.maxEvents)return!1;this.rateLimitWindow.set(s,r+1);for(const[o]of this.rateLimitWindow)o<s-1&&this.rateLimitWindow.delete(o);return!0}async waitForRateLimit(){if(!this.config.rateLimit)return;const e=Date.now(),o=(Math.floor(e/this.config.rateLimit.windowMs)+1)*this.config.rateLimit.windowMs-e;o>0&&await new Promise(n=>setTimeout(n,o))}async waitForCapacity(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxConcurrent||5,s=this.config.backpressure.maxQueue||1e3;for(;this.activePromises.size>=e;)await Promise.race(this.activePromises);this.eventQueue.length>=s&&this.handleQueueOverflow()}handleQueueOverflow(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxQueue||1e3,s=this.config.backpressure.dropPolicy||"oldest",r=this.config.backpressure.onQueueFull;if(s==="none")return;const o=this.eventQueue.length-e;if(o<=0)return;let n=[];if(s==="oldest"?n=this.eventQueue.splice(0,o):s==="newest"&&(n=this.eventQueue.splice(-o)),this.stats.eventsDropped+=n.length,this.stats.currentQueueSize=this.eventQueue.length,r&&n.length>0)try{r(n)}catch(i){console.warn("Error in onQueueFull callback:",i)}}enqueueEvent(e){if(this.eventQueue.push(e),this.stats.currentQueueSize=this.eventQueue.length,this.config.backpressure){const s=this.config.backpressure.maxQueue||1e3;this.eventQueue.length>s&&this.handleQueueOverflow()}}dequeueEvent(){const e=this.eventQueue.shift();return this.stats.currentQueueSize=this.eventQueue.length,e}updateProcessingStats(e){const s=Date.now(),r=s-this.stats.lastProcessedAt;this.stats.averageBatchSize=(this.stats.averageBatchSize*this.stats.batchesProcessed+e.length)/(this.stats.batchesProcessed+1),this.stats.processingRate=r>0?e.length/(r/1e3):this.stats.processingRate,this.stats.lastProcessedAt=s,this.stats.currentQueueSize=this.eventQueue.length}trackPromise(e){return this.activePromises.add(e),e.finally(()=>this.activePromises.delete(e)),e}getStats(){return{...this.stats}}}class wm extends WebSocket{constructor(e){super(e)}}var Te=(t=>(t.CONNECTED="websocket.connected",t.DISCONNECTED="websocket.disconnected",t.ERROR="websocket.error",t.MAX_RETRIES_EXCEEDED="websocket.max_retries_exceeded",t.RELOAD="websocket.reload",t))(Te||{});function oa(t){const e=`
|
|
90
|
+
`,o},zg=({msg:t,options:e})=>{const s=t,r=st(yl(e),JSON.stringify(s)),o=_.getInstance().transport.socket;o?o.socket.send(r):g.error("socket transport is not initialized")},wl=({msg:t,options:e})=>{const s=t,r=st(vl(e),JSON.stringify(s)),o=_.getInstance().transport.socket;o?o.socket.send(r):g.error("socket transport is not initialized")},El=({msg:t,options:e})=>{const s=t,r=st(bl(e),JSON.stringify(s)),o=_.getInstance().transport.socket;o?o.socket.send(r):g.error("socket transport is not initialized")},Ko=(t,e)=>{try{return e?t.body??t:JSON.parse(t.body)}catch{return t.body||t}},ot=g.createLogger({name:"kos-fetch"}),Vg=process.env.KOS_WS_TIMEOUT?parseInt(process.env.KOS_WS_TIMEOUT):3e4,Gg=()=>new Promise(t=>{setTimeout(()=>{t(!0)},0)}),Yg=t=>{if("timeout"in AbortSignal)return AbortSignal.timeout(t);const e=new AbortController;return setTimeout(()=>{e.abort(new DOMException(`Request timed out after ${t}ms`,"TimeoutError"))},t),e.signal},Wg=t=>{if("any"in AbortSignal)return AbortSignal.any(t);const e=new AbortController;for(const s of t){if(s.aborted)return e.abort(s.reason),e.signal;s.addEventListener("abort",()=>e.abort(s.reason),{once:!0})}return e.signal},Qg=t=>t!=null&&t.studio?ll:t!=null&&t.fos?ul:dl,Xg=async(t,e)=>{const s=_.getInstance().transport;await s.whenReady();const r=bt(),o=new URL(t),n=`${o.pathname}${o.search}`;ot.debug(`path: ${n}`);const i=(e==null?void 0:e.timeout)||Vg,a=Qg(e),c=Yg(i),u=e!=null&&e.signal?Wg([e.signal,c]):c,d=await Bg(e==null?void 0:e.body),h={};d.contentType&&(h["content-type"]=d.contentType),d.encoding&&(h["content-encoding"]=d.encoding);const f=st(a({path:n,requestId:r,method:(e==null?void 0:e.method)||"GET",destinationAddress:(e==null?void 0:e.destinationAddress)||"",ordered:e==null?void 0:e.ordered,tracker:e==null?void 0:e.tracker,bridge:e==null?void 0:e.bridge,headers:{...e==null?void 0:e.headers,...h}}),d.data);return new Promise((p,y)=>{let w=null;if(u.aborted){const x=u.reason;(x==null?void 0:x.name)==="TimeoutError"?ot.error(`Timeout occurred - url: ${t}`):ot.debug(`Request aborted - url: ${t}`),y(x||new DOMException("Aborted","AbortError"));return}const M=()=>{w&&w();const x=u.reason;(x==null?void 0:x.name)==="TimeoutError"?ot.error(`Timeout occurred - url: ${t}`):ot.debug(`Request aborted - url: ${t}`),y(x||new DOMException("Aborted","AbortError"))};u.addEventListener("abort",M,{once:!0});const S=$(r,x=>{u.removeEventListener("abort",M);const O=(x==null?void 0:x.headers)||{},L=O["content-type"]||"text/plain",J=O["content-encoding"],we=(x==null?void 0:x.body)||"";let H=we;if(J==="base64"&&we)try{H=Lg(we)}catch(te){ot.error("Failed to decode base64 response",te)}const ns={headers:hl(O),status:O.status&&parseInt(O.status)||200,ok:O.status==="200",json:async()=>{try{if(typeof H=="string")return H.length?JSON.parse(H):null;{const Ce=new TextDecoder().decode(H);return Ce.length?JSON.parse(Ce):null}}catch{throw Error("Not a JSON response")}},text:async()=>typeof H=="string"?H:new TextDecoder().decode(H),arrayBuffer:async()=>H instanceof ArrayBuffer?H:new TextEncoder().encode(H).buffer,blob:async()=>H instanceof ArrayBuffer?Ng(H,L):new Blob([H],{type:L}),formData:async()=>{const te=new FormData;if(L==="multipart/form-data"&&typeof H=="string")try{const Ce=JSON.parse(H);Ce.fields&&Object.entries(Ce.fields).forEach(([ji,Bi])=>{te.append(ji,Bi)}),Ce.files&&ot.warn("File reconstruction in FormData not fully implemented")}catch{throw new Error("Failed to parse FormData")}return te},body:e!=null&&e.stream?jg(async te=>{if(H instanceof ArrayBuffer)te.enqueue(new Uint8Array(H));else{const Ce=new TextEncoder;te.enqueue(Ce.encode(H))}te.close()}):fl(typeof H=="string"?H:""),redirected:!1,statusText:"",type:"basic",url:"",clone:function(){return{...this}},bodyUsed:!1};S.unsubscribe(),Gg().then(()=>p(ns))});w=S.unsubscribe;const U=e!=null&&e.fos?s.fosSocket:s.socket;if(!U)throw Error(`No web socket transport available: ${e}`);U==null||U.send(f)})};exports.BASE_URL="kos:";exports.kosFetch=Xg;if(process.env.KOS_MOCK_FETCH==="true"){const t=process.env.KOS_PORT||"9999";exports.kosFetch=fetch,exports.BASE_URL=`http://localhost:${t}`}const Ml=()=>({isMock:!1,URL:exports.BASE_URL}),er=g.createLogger({name:"kos-service-request"}),Wi="errUnknown";async function tr(t,e,s,r,o){const n=r!=null&&r.path?Object.keys(r.path).reduce((u,d)=>String(u).replace(`{${d}}`,r==null?void 0:r.path[d]),String(t)):String(t),i=r!=null&&r.query?Object.keys(r.query).map(u=>`${encodeURIComponent(u)}=${encodeURIComponent(r.query[u])}`).join("&"):"",a=`${Ml().URL}${n}${i?`?${i}`:""}`;er.debug(`fullUrl: ${a}`);const c={method:String(e).toUpperCase(),body:null,...s};o&&(c.body=JSON.stringify(o));try{const u=await exports.kosFetch(a,c);return u.status<200||u.status>=400?[`${u.statusText||Wi}`,null]:[null,(await u.json()).data]}catch(u){if(u instanceof DOMException){if(u.name==="TimeoutError")return er.error(`Request timed out: ${a}`),["Request timed out",null];if(u.name==="AbortError")return er.debug(`Request aborted: ${a}`),["Request aborted",null]}return er.error(`Unexpected error during fetch: ${u}`),[u instanceof Error?u.message:Wi,null]}}function Ve(){return{get:(t,e,s)=>tr(t,"get",s,e),post:(t,e,s,r)=>tr(t,"post",r,e,s),put:(t,e,s,r)=>tr(t,"put",r,e,s),delete:(t,e,s,r)=>tr(t,"delete",r,e,s)}}const Le=Ve(),kn=Object.freeze(Object.defineProperty({__proto__:null,default:Le},Symbol.toStringTag,{value:"Module"})),at=g.createLogger({name:"kos-service-request-manager",group:"Model"});function Zg(t,e){return!t.condition||t.condition(e)}function Jg(t,e){return fe({value:t.path,modelId:e.id,modelData:e})}function em(t,e){if(t.pathParams)return fe({value:typeof t.pathParams=="function"?t.pathParams(e):t.pathParams,modelId:e.id,modelData:e})}function tm(t,e){if(t.queryParams)return fe({value:typeof t.queryParams=="function"?t.queryParams(e):t.queryParams,modelId:e.id,modelData:e})}function sm(t,e){if(t.body)return fe({value:typeof t.body=="function"?t.body(e):t.body,modelId:e.id,modelData:e})}function rm(t,e){if(t.requestOptions)return typeof t.requestOptions=="function"?t.requestOptions(e):t.requestOptions}function om(t){return(t||"get").toLowerCase()}function sr(t,e){return`${e.toUpperCase()}:${t}`}function Tl(t){return t==null}function nm(t,e,s,r){r&&Tl(t)&&at.warn(`Required field '${e}' is missing in response for ${s}`)}function im(t,e){return Tl(t)&&e!==void 0?e:t}class am{constructor(e,s){l(this,"model");l(this,"responseStore");l(this,"handlers");this.model=e,this.responseStore=s,this.handlers=new Map,this.discoverHandlers()}discoverHandlers(){const s=Object.getPrototypeOf(this.model)[ft]||{};Object.values(s).forEach(r=>{const o=r.lifecycle;this.handlers.has(o)||this.handlers.set(o,[]),this.handlers.get(o).push(r)}),Object.keys(s).length>0&&at.debug(`Discovered ${Object.keys(s).length} service request handlers for model ${this.model.id}`)}async executeForLifecycle(e){const s=this.handlers.get(e);!s||s.length===0||(at.debug(`Executing ${s.length} service requests for lifecycle ${e}`),await Promise.all(s.map(r=>this.executeHandler(r))))}async executeHandler(e){try{if(!this.shouldProcessRequest(e))return;const s=await this.prepareAndExecuteRequest(e);await this.processAndStoreResponse(s,e)}catch(s){const r=s instanceof Error?s:new Error(String(s));await this.handleError(r,e)}}shouldProcessRequest(e){return Zg(e,this.model)?!0:(at.debug(`Skipping request ${e.path} - condition returned false`),!1)}async prepareAndExecuteRequest(e){const s=this.prepareRequest(e),r=this.captureRequestTiming(),[o,n]=await this.performRequest(s),i=this.captureResponseTiming();return{requestContext:s,error:o,response:n,requestedAt:r.requestedAt,receivedAt:i.receivedAt}}captureRequestTiming(){return{requestedAt:Date.now()}}captureResponseTiming(){return{receivedAt:Date.now()}}async processAndStoreResponse(e,s){if(e.error){await this.handleError(new Error(e.error),s);return}const r=await this.processResponse(e.response,s);await this.storeAndInvokeHandler(r,s,e.requestContext.resolvedPath,e.requestedAt,e.receivedAt)}prepareRequest(e){const s=Jg(e,this.model),r=em(e,this.model),o=tm(e,this.model),n=sm(e,this.model),i=rm(e,this.model),a=om(e.method);return{resolvedPath:s,method:a,pathParams:r,queryParams:o,body:n,requestOptions:i}}async performRequest(e){return await this.makeRequest(e.resolvedPath,e.method,{path:e.pathParams,query:e.queryParams},e.body,e.requestOptions)}async processResponse(e,s){let r=e;return s.transform&&(r=s.transform(e)),s.mappings&&s.mappings.length>0&&(r=this.applyMappings(r,s)),s.iterateOver&&(r=await this.handleIteration(r,s)),r}async storeAndInvokeHandler(e,s,r,o,n){const i=s.cache||{retention:oe.SINGLE},a=sr(r,s.method||"get");this.responseStore.set(a,e,i,o,n),await s.originalHandler.call(this.model,null,e),this.triggerBaselineQueueFlush(r),this.responseStore.shouldCleanupAfterHandler(a)&&this.responseStore.delete(a)}triggerBaselineQueueFlush(e){const s=this.model.subscriptionManager;!s||!s.flushQueueForBaseline||s.flushQueueForBaseline(e)}async makeRequest(e,s,r,o,n){const i=Le;switch(s){case"get":return await i.get(e,r,n);case"post":return await i.post(e,r,o,n);case"put":return await i.put(e,r,o,n);case"delete":return await i.delete(e,r,o,n);default:return[`Unsupported HTTP method: ${s}`,null]}}applyMappings(e,s){if(!s.mappings||s.mappings.length===0)return e;const r={};return s.mappings.forEach(o=>{const n=this.getNestedValue(e,o.from),i=o.transform?this.applyTransform(n,o.transform):n;nm(i,o.from,s.path,o.required||!1);const a=im(i,o.default);r[o.to]=a}),r}getNestedValue(e,s){return s.split(".").reduce((r,o)=>r==null?void 0:r[o],e)}applyTransform(e,s){if(typeof s=="function")return s(e);switch(s){case"string":return String(e);case"number":return Number(e);case"boolean":return!!e;case"date":return e?new Date(e):void 0;case"json":return typeof e=="string"?JSON.parse(e):e;default:return at.warn(`Unknown transformer: ${s}`),e}}async handleIteration(e,s){if(!s.iterateOver)return e;const r=this.getNestedValue(e,s.iterateOver);return Array.isArray(r)?s.modelFactory?r.map(o=>{const n=s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o,i=s.idExtractor?s.idExtractor(n):n.id;if(!i)throw new Error("Cannot create model instance: no ID found in response data. Provide an 'idExtractor' function or ensure response items have an 'id' field.");const a=s.modelFactory;return typeof a=="function"?a(i)(n):a.instance(i).options(n).build()}):r.map(o=>s.mappings&&s.mappings.length>0?this.applyMappings(o,s):o):(at.warn(`iterateOver path '${s.iterateOver}' did not resolve to an array`),[])}async handleError(e,s){const r=s.errorHandler||{strategy:"throw"};switch(r.onError&&r.onError(e,this.model),r.strategy){case"throw":throw e;case"log":if(at.error(`Service request failed for ${s.path}:`,e.message),r.defaultValue!==void 0){const o=sr(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:oe.SINGLE}),await s.originalHandler.call(this.model,e.message,r.defaultValue)}break;case"ignore":if(r.defaultValue!==void 0){const o=sr(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:oe.SINGLE}),await s.originalHandler.call(this.model,e.message,r.defaultValue)}break;case"default":if(r.defaultValue!==void 0){const o=sr(s.path,s.method||"get");this.responseStore.set(o,r.defaultValue,s.cache||{retention:oe.SINGLE}),await s.originalHandler.call(this.model,e.message,r.defaultValue)}break}}}class cm{constructor(e){l(this,"subscription");l(this,"unsubscribe");l(this,"eventType");this.eventType=e,this.subscription={queue:[],resolvers:[],closed:!1};const s=$(e,r=>{if(!this.subscription.closed&&r!==void 0){const o=this.subscription.resolvers.shift();o?o(r):this.subscription.queue.push(r)}});this.unsubscribe=s.unsubscribe}async next(){return this.subscription.closed&&this.subscription.queue.length===0?{done:!0,value:void 0}:this.subscription.queue.length>0?{done:!1,value:this.subscription.queue.shift()}:new Promise(e=>{this.subscription.closed?e({done:!0,value:void 0}):this.subscription.resolvers.push(s=>{e({done:!1,value:s})})})}async return(){return this.subscription.closed=!0,this.unsubscribe(),this.subscription.resolvers.forEach(e=>{e(void 0)}),this.subscription.resolvers=[],{done:!0,value:void 0}}async throw(e){throw this.subscription.closed=!0,this.unsubscribe(),e}[Symbol.asyncIterator](){return this}}function Qi(t){return new cm(t)}class lm{constructor(e){l(this,"config");l(this,"stats");l(this,"filterHistory",[]);l(this,"activePromises",new Set);l(this,"eventQueue",[]);l(this,"rateLimitWindow",new Map);this.config=e,this.stats={eventsReceived:0,batchesProcessed:0,eventsDropped:0,currentQueueSize:0,averageBatchSize:0,processingRate:0,lastProcessedAt:Date.now()}}async*processEvents(e){const s=this.config.batch||{size:1,window:0};if(s.size===1&&!s.window)for await(const r of e)yield*this.processSingleEvent(r);else yield*this.processBatchedEvents(e,s)}async*processSingleEvent(e){if(this.stats.eventsReceived++,!(this.config.filter&&!this.shouldProcessEvent(e))){if(this.config.rateLimit&&!this.checkRateLimit())if(this.config.rateLimit.onExceeded==="drop"){this.stats.eventsDropped++;return}else this.config.rateLimit.onExceeded==="delay"&&await this.waitForRateLimit();if(this.config.backpressure){this.enqueueEvent(e),await this.waitForCapacity();const s=this.dequeueEvent();s&&(yield this.config.transform?this.config.transform([s]):[s],this.updateProcessingStats([s]))}else yield this.config.transform?this.config.transform([e]):[e],this.updateProcessingStats([e])}}async*processBatchedEvents(e,s){const r=s.size||100,o=s.window||1e3;let n=[],i=Date.now();const a=async()=>{if(n.length===0)return;const c=[...n];n=[],i=Date.now();const u=this.config.filter?c.filter(h=>this.shouldProcessEvent(h)):c;if(u.length===0)return;this.config.backpressure&&await this.waitForCapacity();const d=this.config.transform?this.config.transform(u):u;return this.stats.batchesProcessed++,this.updateProcessingStats(u),d};try{for await(const u of e)if(this.stats.eventsReceived++,this.config.backpressure)for(this.enqueueEvent(u);this.eventQueue.length>0;){const d=this.dequeueEvent();d&&n.push(d);const f=Date.now()-i;if(n.length>=r||f>=o){const p=await a();p!==void 0&&(yield p);break}}else{n.push(u);const h=Date.now()-i;if(n.length>=r||h>=o){const f=await a();f!==void 0&&(yield f)}}const c=await a();c!==void 0&&(yield c)}finally{}}shouldProcessEvent(e){if(!this.config.filter)return!0;const s={history:[...this.filterHistory],currentBatch:[],startTime:Date.now()},r=this.config.filter.predicate(e,s);return this.config.filter.historySize&&(this.filterHistory.push(e),this.filterHistory.length>this.config.filter.historySize&&this.filterHistory.shift()),r}checkRateLimit(){if(!this.config.rateLimit)return!0;const e=Date.now(),s=Math.floor(e/this.config.rateLimit.windowMs),r=this.rateLimitWindow.get(s)||0;if(r>=this.config.rateLimit.maxEvents)return!1;this.rateLimitWindow.set(s,r+1);for(const[o]of this.rateLimitWindow)o<s-1&&this.rateLimitWindow.delete(o);return!0}async waitForRateLimit(){if(!this.config.rateLimit)return;const e=Date.now(),o=(Math.floor(e/this.config.rateLimit.windowMs)+1)*this.config.rateLimit.windowMs-e;o>0&&await new Promise(n=>setTimeout(n,o))}async waitForCapacity(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxConcurrent||5,s=this.config.backpressure.maxQueue||1e3;for(;this.activePromises.size>=e;)await Promise.race(this.activePromises);this.eventQueue.length>=s&&this.handleQueueOverflow()}handleQueueOverflow(){if(!this.config.backpressure)return;const e=this.config.backpressure.maxQueue||1e3,s=this.config.backpressure.dropPolicy||"oldest",r=this.config.backpressure.onQueueFull;if(s==="none")return;const o=this.eventQueue.length-e;if(o<=0)return;let n=[];if(s==="oldest"?n=this.eventQueue.splice(0,o):s==="newest"&&(n=this.eventQueue.splice(-o)),this.stats.eventsDropped+=n.length,this.stats.currentQueueSize=this.eventQueue.length,r&&n.length>0)try{r(n)}catch(i){console.warn("Error in onQueueFull callback:",i)}}enqueueEvent(e){if(this.eventQueue.push(e),this.stats.currentQueueSize=this.eventQueue.length,this.config.backpressure){const s=this.config.backpressure.maxQueue||1e3;this.eventQueue.length>s&&this.handleQueueOverflow()}}dequeueEvent(){const e=this.eventQueue.shift();return this.stats.currentQueueSize=this.eventQueue.length,e}updateProcessingStats(e){const s=Date.now(),r=s-this.stats.lastProcessedAt;this.stats.averageBatchSize=(this.stats.averageBatchSize*this.stats.batchesProcessed+e.length)/(this.stats.batchesProcessed+1),this.stats.processingRate=r>0?e.length/(r/1e3):this.stats.processingRate,this.stats.lastProcessedAt=s,this.stats.currentQueueSize=this.eventQueue.length}trackPromise(e){return this.activePromises.add(e),e.finally(()=>this.activePromises.delete(e)),e}getStats(){return{...this.stats}}}class um extends WebSocket{constructor(e){super(e)}}var Te=(t=>(t.CONNECTED="websocket.connected",t.DISCONNECTED="websocket.disconnected",t.ERROR="websocket.error",t.MAX_RETRIES_EXCEEDED="websocket.max_retries_exceeded",t.RELOAD="websocket.reload",t))(Te||{});function Xi(t){const e=`
|
|
91
91
|
|
|
92
92
|
`,s=`
|
|
93
|
-
`,r=/:(.*)/s,[o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}function
|
|
93
|
+
`,r=/:(.*)/s,[o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}function dm(t){const e=`
|
|
94
94
|
|
|
95
95
|
`,s=`
|
|
96
|
-
`,r=/:(.*)/s,[,o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}const Ee=class Ee{constructor({host:e,port:s,protocol:r,alias:o,onConnectionEstablished:n,onConnectionLost:i,Transport:a=
|
|
96
|
+
`,r=/:(.*)/s,[,o,n]=t.split(e).map(a=>a.trim());return{headers:o.split(s).reduce((a,c)=>{const[u,d]=c.split(r).map(h=>h.trim());return u&&d&&(a[u]=d),a},{}),body:n}}const Ee=class Ee{constructor({host:e,port:s,protocol:r,alias:o,onConnectionEstablished:n,onConnectionLost:i,Transport:a=um}){l(this,"host");l(this,"port");l(this,"protocol");l(this,"socket");l(this,"connectionEstablished");l(this,"alias");l(this,"onConnectionEstablished");l(this,"onConnectionLost");l(this,"offlineMessages",[]);l(this,"oldSend");l(this,"reconnectAttempts",0);this.host=e,this.port=s,this.protocol=r,this.onConnectionEstablished=n,this.onConnectionLost=i,this.alias=o,this.socket=new a(`${this.protocol}${this.host}:${this.port}/events`),this.socket.onmessage=this.onMessage.bind(this),this.socket.onopen=this.onOpen.bind(this),this.socket.onclose=this.onClose.bind(this),this.socket.onerror=this.onError.bind(this),this.oldSend=this.socket.send,this.connectionEstablished=!1,$("/mock/msg/receive",c=>{var u,d;if(c!=null&&c.body){g.wsReceive(c==null?void 0:c.body);const h={data:c.body};(d=(u=this.socket)==null?void 0:u.onmessage)==null||d.call(u,h)}}),E.makeObservable(this,{connectionEstablished:E.observable})}addOfflineMessage(e){this.offlineMessages.push({msg:e})}processMessageEvent(e){const{data:s}=e;return Xi(s)}onMessage(e){try{g.debug("webSocketTransport: onMessage received");const{headers:s,body:r}=this.processMessageEvent(e);g.wsReceive(e.data);const o=s.subscription||s[this.RESPONSE_ID_HEADER]||s.topic||s.type;if(o){let n=r,i=s;if(o==="kos.sniffer.msg"){const{headers:a,body:c}=dm(e.data);n=c,i={...s,...a}}K(o,n,i)}}catch(s){g.error("onMessage exception",s.message,s.stack)}}onOpen(e){g.info("websocket connection opened"),this.reconnectAttempts=0,this.socket=e.currentTarget,E.runInAction(()=>{var s;this.connectionEstablished=!0,this.alias&&this.socket.send(`type:kos.addr.alias
|
|
97
97
|
alias:${this.alias}
|
|
98
98
|
|
|
99
|
-
`),
|
|
99
|
+
`),g.debug(`sending ${this.offlineMessages.length} offline FOS messages`),this.offlineMessages.forEach(r=>{var o;g.debug(`sending offline message ${r.msg}`),(o=this.socket)==null||o.send(r.msg)}),this.offlineMessages=[],(s=this.onConnectionEstablished)==null||s.call(this)})}onClose(e){const{code:s,reason:r,wasClean:o}=e;g.warn(`WebSocket closed: code=${s}, reason=${r||"none"}, wasClean=${o}`),E.runInAction(()=>{this.connectionEstablished=!1}),K("websocket.disconnected",{code:s,reason:r,wasClean:o});const n=this.shouldAttemptReconnection(s);if(this.onConnectionLost)if(n&&this.reconnectAttempts<Ee.MAX_RECONNECT_ATTEMPTS){const i=this.calculateBackoffDelay();g.debug(`Reconnecting in ${i}ms (attempt ${this.reconnectAttempts+1}/${Ee.MAX_RECONNECT_ATTEMPTS})`),setTimeout(()=>{var a;this.reconnectAttempts++,(a=this.onConnectionLost)==null||a.call(this)},i)}else this.reconnectAttempts>=Ee.MAX_RECONNECT_ATTEMPTS?(g.error(`Max reconnection attempts (${Ee.MAX_RECONNECT_ATTEMPTS}) reached. Giving up.`),K("websocket.max_retries_exceeded",{attempts:this.reconnectAttempts})):g.info(`Not reconnecting due to close code ${s} (intentional close or configuration error)`)}onError(e){g.error("websocket error: ",e),K("websocket.error",{event:e})}shouldAttemptReconnection(e){switch(e){case 1e3:return!1;case 1001:return!0;case 1002:return!1;case 1003:return!1;case 1005:return!0;case 1006:return!0;case 1007:return!1;case 1008:return!1;case 1009:return!1;case 1010:return!1;case 1011:return!0;case 1012:return!0;case 1013:return!0;case 1014:return!0;case 1015:return!1;default:return!0}}calculateBackoffDelay(){const e=Math.min(Ee.BASE_DELAY_MS*Math.pow(2,this.reconnectAttempts),Ee.MAX_DELAY_MS),s=e*.25*(Math.random()*2-1);return Math.floor(e+s)}send(e){var s,r;if(g.wsSend(e),window.kosLogEvents){const{headers:o,body:n}=Xi(String(e));K(Ks.SEND,{headers:o,body:n})}if(window.kosTopicIntercept&&window.kosEnableMocks){const{handler:o,requestId:n}=window.kosTopicIntercept(e);if(o){e=`mocked:true
|
|
100
100
|
${e}`;const a={data:`mocked:true
|
|
101
|
-
${o(n)}`};(r=(s=this.socket)==null?void 0:s.onmessage)==null||r.call(s,a)}else this.oldSend.call(this.socket,e)}else this.oldSend.call(this.socket,e)}};l(Ee,"MAX_RECONNECT_ATTEMPTS",10),l(Ee,"BASE_DELAY_MS",1e3),l(Ee,"MAX_DELAY_MS",3e4);let
|
|
101
|
+
${o(n)}`};(r=(s=this.socket)==null?void 0:s.onmessage)==null||r.call(s,a)}else this.oldSend.call(this.socket,e)}else this.oldSend.call(this.socket,e)}};l(Ee,"MAX_RECONNECT_ATTEMPTS",10),l(Ee,"BASE_DELAY_MS",1e3),l(Ee,"MAX_DELAY_MS",3e4);let Cs=Ee;class hm{constructor(e){l(this,"addEventListener");l(this,"dispatchEvent");l(this,"removeEventListener");l(this,"_onclose");l(this,"_onerror");l(this,"_onmessage");l(this,"_onopen");l(this,"messageQueue",[]);l(this,"isSending",!1);D.debug(`called Bridge Transport with addr ${e}`);const s=this;globalThis.kosWindowWebsocketRecv=r=>{if(s.onmessage){const o={data:r};s.onmessage(o)}},D.debug("Opening bridge transport"),globalThis.kosWindowWebsocketOpen(),D.debug("Opened bridge transport"),this._onclose=null,this._onerror=null,this._onmessage=null,this._onopen=null,this.addEventListener=()=>D.debug("not implemented"),this.dispatchEvent=()=>D.debug("not implemented"),this.removeEventListener=()=>D.debug("not implemented")}close(){D.debug("closing")}sendNextMessage(){if(this.messageQueue.length>0){const e=this.messageQueue.shift();globalThis.kosWindowWebsocketSend(e),setTimeout(()=>this.sendNextMessage(),1)}else this.isSending=!1}enqueueMessage(e){this.messageQueue.push(e),this.isSending||(this.isSending=!0,this.sendNextMessage())}send(e){globalThis.kosWindowWebsocketSend(e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage=e}get onopen(){return this._onopen}set onopen(e){this._onopen=e}get onclose(){return this._onclose}set onclose(e){this._onclose=e}get onerror(){return this._onerror}set onerror(e){this._onerror=e}}class fm extends Cs{constructor({host:s,port:r,alias:o}){super({host:s,port:r,Transport:hm,alias:o,protocol:"kos://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}class pm extends Cs{constructor({host:s,port:r}){super({host:s,port:r,protocol:"ws://"});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="requestId"}}class gm extends Cs{constructor({host:s,port:r,protocol:o,onConnectionEstablished:n,onConnectionLost:i,alias:a}){super({host:s,port:r,onConnectionEstablished:n,onConnectionLost:i,alias:a,protocol:o});l(this,"RESPONSE_ID_HEADER");this.RESPONSE_ID_HEADER="response-id"}}window.kosEnableMocks=process.env.KOS_MOCK_WS==="true";window.kosLogEvents=process.env.KOS_LOG_WS==="true";class qo{static build({host:e,port:s,protocol:r,fos:o,alias:n,onConnectionEstablished:i,onConnectionLost:a}){return g.debug("initializing websocket connection"),g.warn(`kosWindowWebsocketOpen: ${globalThis.kosWindowWebsocketOpen?"true":"false"}`),g.warn(`fos: ${o?"true":"false"}`),window.kosMockWs||globalThis.kosWindowWebsocketOpen&&!o?(g.warn("Using bridged message transport"),new fm({host:e,port:s,protocol:r,onConnectionEstablished:i,onConnectionLost:a,alias:n})):o?new pm({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a}):new gm({host:e,port:s,protocol:r,alias:n,onConnectionEstablished:i,onConnectionLost:a})}}const mm=be();mm.fos&&(window.kosUseFos=!0);const Zi=process.env.KOS_FOS_PORT;window.kosUseFos=!!(window.kosUseFos||process.env.KOS_USE_FOS==="true");window.kosFosPort=Zi?parseInt(Zi):0;const nt=D.getLogger("web-socket-transport");var _l=(t=>(t.NOT_INITIALIZED="not_initialized",t.INITIALIZED="initialized",t.OFFLINE="OFFLINE",t.ONLINE="ONLINE",t))(_l||{});class Pt{constructor({host:e="localhost",port:s=8080,protocol:r="ws://",token:o,initialize:n,alias:i,fos:a}){l(this,"host");l(this,"port");l(this,"protocol");l(this,"_token");l(this,"webSocketSupported",!!globalThis.WebSocket);l(this,"authorized");l(this,"alias");l(this,"socket");l(this,"fosSocket");l(this,"fosPort");l(this,"useFosTransport");this.host=e,this.port=s,this.protocol=r,this._token=o,this.alias=i,this.authorized=process.env.KOS_ALLOW_ANONYMOUS==="true",this.useFosTransport=!!a,this.fosPort=a==null?void 0:a.port,this.socket=void 0,this.fosSocket=void 0;let c=!1;E.makeObservable(this,{authorized:E.observable,socket:E.observable,fosSocket:E.observable,init:E.action,connectionEstablished:E.computed}),E.reaction(()=>this.connectionEstablished,u=>{u&&(nt.warn("Connection Established"),K(Te.CONNECTED,Te.CONNECTED),c&&K(Te.RELOAD,Te.RELOAD),c=!0)}),n&&this.init()}get connectionEstablished(){return!this.webSocketSupported||!this.socket||this.useFosTransport&&!this.fosSocket?!1:this.useFosTransport&&this.fosSocket?this.socket.connectionEstablished&&this.fosSocket.connectionEstablished:!this.useFosTransport&&this.socket?this.socket.connectionEstablished:!1}init(){var e,s;if(g.warn(`Initializing WebSocketTransport on ${this.host}:${this.port}`),this.useFosTransport&&(this.fosSocket=qo.build({host:this.host,port:this.fosPort||9854,protocol:this.protocol,fos:!0})),this.socket=qo.build({host:this.host,port:this.port,protocol:this.protocol,alias:this.alias,onConnectionLost:()=>{nt.error("Connection Lost"),K(Te.DISCONNECTED,Te.DISCONNECTED),this.init()}}),globalThis.kosWindowWebsocketOpen){const r={currentTarget:this.socket.socket};(s=(e=this.socket.socket)==null?void 0:e.onopen)==null||s.call(e,r)}return this}_sendSubscriptionMessage(e,s,r=!1,o=!1,n){var f,p,y,w;nt.debug(`${s} to topic ${e}`);const i=be(),a=i==null?void 0:i.connId,c=n??a??((f=window==null?void 0:window.kosBridge)==null?void 0:f.call(window,"connId"));nt.debug(`subscribing with connId ${c}`);const u=c?`dst-addr:${c}
|
|
102
102
|
`:"",d=r?`subscribe:${e}`:o?`type:fos.broker
|
|
103
103
|
cmd:${s}
|
|
104
104
|
${u}topics:${e}
|
|
105
105
|
`:`${u}type:kos.broker.${s}
|
|
106
106
|
|
|
107
|
-
["${e}"]`;if(r?(p=this.fosSocket)==null?void 0:p.connectionEstablished:(g=this.socket)==null?void 0:g.connectionEstablished){const E=r?this.fosSocket:this.socket;(v=E==null?void 0:E.socket)==null||v.send(d)}else{it.debug("no connection adding to offline messages");const E=r?this.fosSocket:this.socket;E==null||E.addOfflineMessage(d)}}subscribeTopic({topic:e,callback:s,fos:r,bridge:o,destinationAddress:n}){const{unsubscribe:i,count:a}=C(e,s);return it.debug(`Topic ${e} currently has ${a} subscribers`),this._sendSubscriptionMessage(e,"subscribe",r,o,n),()=>{const{count:c}=i();it.debug(`Topic ${e} currently has ${c} subscribers`),c===0&&this._sendSubscriptionMessage(e,"unsubscribe",r,o,n)}}async whenReady(){const e=this;return this.webSocketSupported?(await M.when(()=>{var s,r;return!!((s=e.socket)!=null&&s.connectionEstablished)&&(!e.useFosTransport||!!((r=e.fosSocket)!=null&&r.connectionEstablished))&&e.authorized}),{status:"success"}):{status:"not supported"}}get token(){return this._token}set token(e){this._token=e,this.init()}static host(e="localhost"){return this.getInstance().host=e,this}static port(e=8080){return this.getInstance().port=e,this}static alias(e){this.getInstance().alias=e}static getInstance(e=8080,s){if(!this._instance){const r=window.kosUseFos?{port:window.kosFosPort||8081}:void 0;this._instance=new this({port:e,token:s,fos:r})}return this._instance}}l(Nt,"_instance");class Im{constructor(e,s,r,o,n){l(this,"disposers",[]);l(this,"activatableDisposers",[]);l(this,"flowControllers",new Map);l(this,"baselineDependencies",new Map);l(this,"registeredTopics",new Set);l(this,"onceTopics",new Set);this.model=e,this.modelData=s,this.modelId=r,this.offlineQueue=o,this.log=n}registerAll(e){var o;const s=((o=this.modelData)==null?void 0:o[J])||{},r=Object.keys(s);this.log.debug(`Found ${r.length} subscriptions in ${this.modelId} (lifecycle: ${e??"any"})`),r.forEach(n=>{const i=s[n],a=i.lifecycle;if(e&&e!==a)return;const c=this.resolvePropKey(n);if(this.onceTopics.has(c)){this.log.debug(`Skipping once topic (already fired): ${c}`);return}if(this.registeredTopics.has(c)){this.log.debug(`Skipping duplicate subscription for ${c}`);return}if(this.registeredTopics.add(c),i.once&&this.onceTopics.add(c),this.log.debug(`Resolved topic: ${n} → ${c}`),i.requiresBaseline&&(this.baselineDependencies.set(c,i.requiresBaseline),this.log.debug(`Registered baseline dependency for ${c}: ${i.requiresBaseline.path}`)),i.flow)this.subscribeWithFlowControl(i,c,a);else{const u=this.createHandler(c,i);this.subscribe(i,c,u,a===D.ACTIVATE)}})}deactivate(){var s;this.log.debug(`Deactivating subscriptions for ${this.modelId}`);for(const r of this.activatableDisposers)try{r()}catch(o){this.log.error("Error during subscription disposal",o)}this.activatableDisposers=[];const e=((s=this.modelData)==null?void 0:s[J])||{};for(const[r,o]of Object.entries(e))if(o.lifecycle===D.ACTIVATE){const n=this.resolvePropKey(r);this.registeredTopics.delete(n)}}disposeAll(){const e=[...this.disposers,...this.activatableDisposers];this.log.debug(`Disposing ${e.length} subscriptions for ${this.modelId}`);for(const[s,r]of this.flowControllers)this.log.debug(`Disposing flow controller for ${s}`);this.flowControllers.clear();for(const s of e)try{s()}catch(r){this.log.error("Error during subscription disposal",r)}this.disposers=[],this.activatableDisposers=[],this.registeredTopics.clear()}subscribe(e,s,r,o){const n=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;if(e.websocket){this.log.debug(`Subscribing to WebSocket topic: ${s}`);const i=Nt.getInstance().subscribeTopic({topic:s,callback:r,fos:e.fos,bridge:e.bridge,destinationAddress:n});o?this.activatableDisposers.push(i):this.disposers.push(i)}else{this.log.debug(`Subscribing to EventBus topic: ${s}`);const{unsubscribe:i}=C(s,r);o?this.activatableDisposers.push(i):this.disposers.push(i)}}createHandler(e,s){return async r=>{var o;try{const n=(o=r==null?void 0:r.headers)==null?void 0:o["src-addr"],i=s.destinationAddress&&this.resolvePropKey(s.destinationAddress),a=i?n===i:!0,c=this.extractWildcardCapture(e,r,s),u=this.isBaselineReady(e);if(!this.model.isReady()||!u){u?this.log.warn(`Model ${this.modelId} not ready. Queuing message for ${e}`):this.log.warn(`Baseline not ready for ${e}. Queuing message.`);const d=()=>{const h=Zo(r,s.skipParse),f=s.transform(h);if(a&&s.condition(f,this.modelData,r))return this.callHandlerWithWildcard(s,f,c,r)};this.offlineQueue.enqueue(d,e,r)}else{const d=Zo(r,s.skipParse),h=s.transform(d);if(a&&s.condition(h,this.modelData,r))return this.callHandlerWithWildcard(s,h,c,r)}}catch(n){this.log.error(`Error handling subscription for ${e}`,n)}}}extractWildcardCapture(e,s,r){var n;if(!r.wildcardName||!tl(e))return null;const o=((n=s==null?void 0:s.headers)==null?void 0:n.topic)||"";return el(e,o,r.wildcardName)}callHandlerWithWildcard(e,s,r,o){if(r&&Object.keys(r).length>0){const n={...o,wildcardCapture:r};return e.handler.call(this.modelData,s,n,this.modelData)}else return e.handler.call(this.modelData,s,o,this.modelData)}resolvePropKey(e){const s=/.*({PROP_(.+)})/;let r=e.includes("{MODEL_ID}")?e.replace("{MODEL_ID}",this.modelId):e;const o=r.match(s);return o&&o[2]in this.modelData&&(r=r.replace(o[1],this.modelData[o[2]])),r}async subscribeWithFlowControl(e,s,r){this.log.debug(`Setting up flow control for topic: ${s}`);const o=new vm(e.flow);this.flowControllers.set(s,o);const n=this.createFlowControlHandler(s,e),i=this.startFlowProcessing(e,s,n,o),a=()=>{this.flowControllers.delete(s),i.then(c=>c==null?void 0:c.abort())};r===D.ACTIVATE?this.activatableDisposers.push(a):this.disposers.push(a)}async startFlowProcessing(e,s,r,o){const n=new AbortController;try{let i;if(e.websocket){const a=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;Nt.getInstance().subscribeTopic({topic:s,callback:()=>{},fos:e.fos,bridge:e.bridge,destinationAddress:a}),i=ra(s)}else i=ra(s);return(async()=>{try{for await(const a of o.processEvents(i)){if(n.signal.aborted)break;const c=r(a);c instanceof Promise&&await o.trackPromise(c)}}catch(a){this.log.error(`Flow control error for ${s}:`,a)}})(),n}catch(i){return this.log.error(`Failed to start flow processing for ${s}:`,i),null}}createFlowControlHandler(e,s){return async r=>{var o,n,i,a;try{if(s.condition&&!s.condition(r,this.modelData,r))return;if(this.model.isReady())return s.handler.call(this.modelData,r,r,this.modelData);{this.log.warn(`Model ${this.modelId} not ready. Queuing flow-controlled message for ${e}`);const c=()=>s.handler.call(this.modelData,r,r,this.modelData);this.offlineQueue.enqueue(c,e,r)}}catch(c){if(this.log.error(`Error in flow control handler for ${e}:`,c),(n=(o=s.flow)==null?void 0:o.errorHandling)!=null&&n.retry)await this.retryHandler(s,r,c);else if(!((a=(i=s.flow)==null?void 0:i.errorHandling)!=null&&a.continueOnError))throw c}}}async retryHandler(e,s,r){const o=e.flow.errorHandling.retry;let n=r;for(let i=1;i<=o.attempts;i++)try{return this.log.debug(`Retry attempt ${i}/${o.attempts} for handler`),await new Promise(a=>setTimeout(a,o.backoffMs*i)),e.handler.call(this.modelData,s,s,this.modelData)}catch(a){n=a,this.log.warn(`Retry attempt ${i} failed:`,a)}throw this.log.error("All retry attempts failed, throwing last error:",n),n}getFlowControlStats(){const e={};for(const[s,r]of this.flowControllers)e[s]=r.getStats();return e}getResponseStore(){return this.modelData.serviceResponses}isBaselineReady(e){const s=this.baselineDependencies.get(e);if(!s)return!0;const r=this.getResponseStore();if(!r)return this.log.warn(`ServiceResponseStore not found for baseline check on topic: ${e}`),!1;const n=`${(s.method||"get").toUpperCase()}:${s.path}`;return r.has(n)}flushQueueForBaseline(e){const s=this.baselineDependencies.get(e);if(!s){this.log.debug(`No baseline dependency for topic: ${e}`);return}const r=this.getResponseStore();if(!r){this.log.warn("ServiceResponseStore not found, falling back to standard flush"),this.offlineQueue.flush();return}const o=s.method||"get",n=r.getTemporalMetadataByPath(s.path,o);if(!n){this.log.warn(`Baseline temporal metadata not found for ${s.path}, falling back to standard flush`),this.offlineQueue.flush();return}const i=s.replayStrategy||pt.AFTER_REQUEST;this.log.info(`Flushing queue with strategy ${i} for topic: ${e}`),this.log.debug(`Baseline timing - requested: ${n.requestedAt}, received: ${n.receivedAt}`),this.offlineQueue.flushWithStrategy(i,n.requestedAt,n.receivedAt)}}function St(t,e){const s=`[Model:${e}]`;return{debug:(...r)=>t.debug(s,...r),info:(...r)=>t.info(s,...r),warn:(...r)=>t.warn(s,...r),error:(...r)=>t.error(s,...r)}}function $m(t){return!!(t!=null&&t[xe])&&Object.keys(t[xe]).length>0}function Cm(t){return!!(t!=null&&t[J])&&Object.keys(t[J]).length>0}function Dm(t){return!!(t!=null&&t[Be])&&t[Be].length>0}function Am(t){const e=Object.getPrototypeOf(t);return!!(e!=null&&e[He])&&Object.keys(e[He]).length>0}function xm(t){return t.retention===X.TTL&&t.extendOnRefresh===!0&&t.ttl!==void 0}function Rm(t,e){return t.has(e)}function Pm(t){return!t.expiresAt||Date.now()<t.expiresAt}function ia(t,e,s,r){const o=setTimeout(()=>r(t),e);s.set(t,o)}class km{constructor(){l(this,"responses",new Map);l(this,"retentionPolicies",new Map);l(this,"cleanupTimers",new Map)}set(e,s,r={retention:X.SINGLE},o=Date.now(),n=Date.now()){if(this.shouldExtendTTL(e,r))return this.extendExistingTTL(e,r.ttl),!1;const i=this.createCachedResponse(s,e,r,o,n);return this.storeResponse(e,i,r),!0}get(e){const s=this.responses.get(e);if(s){if(s.expiresAt&&Date.now()>s.expiresAt){this.delete(e);return}return s.data}}getByPath(e,s="get"){return this.get(this.makeKey(e,s))}has(e){return this.get(e)!==void 0}delete(e){this.responses.delete(e),this.retentionPolicies.delete(e);const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}clearPath(e){Array.from(this.responses.keys()).filter(r=>this.extractPath(r)===e).forEach(r=>this.delete(r))}clear(){this.cleanupTimers.forEach(e=>clearTimeout(e)),this.responses.clear(),this.retentionPolicies.clear(),this.cleanupTimers.clear()}get size(){return this.responses.size}shouldCleanupAfterHandler(e){const s=this.retentionPolicies.get(e);return(s==null?void 0:s.retention)===X.IMMEDIATE}shouldExtendTTL(e,s){if(!xm(s)||!Rm(this.responses,e))return!1;const r=this.responses.get(e);return Pm(r)}extendExistingTTL(e,s){const r=this.responses.get(e);r.expiresAt=Date.now()+s,this.resetCleanupTimer(e,s)}resetCleanupTimer(e,s){this.clearTimerIfExists(e),ia(e,s,this.cleanupTimers,r=>this.delete(r))}clearTimerIfExists(e){const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}createCachedResponse(e,s,r,o,n){return{data:e,timestamp:n,requestedAt:o,receivedAt:n,path:this.extractPath(s),method:this.extractMethod(s),expiresAt:this.calculateExpiresAt(r)}}calculateExpiresAt(e){return e.retention===X.TTL&&e.ttl?Date.now()+e.ttl:void 0}storeResponse(e,s,r){this.responses.set(e,s),this.retentionPolicies.set(e,r),this.applyRetentionPolicy(e,r)}applyRetentionPolicy(e,s){switch(s.retention){case X.IMMEDIATE:break;case X.TTL:s.ttl&&ia(e,s.ttl,this.cleanupTimers,r=>this.delete(r));break;case X.SINGLE:break;case X.PERMANENT:case X.MANUAL:break}}makeKey(e,s){return`${s.toUpperCase()}:${e}`}extractPath(e){return e.split(":",2)[1]||e}extractMethod(e){return e.split(":",2)[0]||"get"}getTemporalMetadata(e){const s=this.responses.get(e);if(s)return{requestedAt:s.requestedAt,receivedAt:s.receivedAt}}getTemporalMetadataByPath(e,s="get"){return this.getTemporalMetadata(this.makeKey(e,s))}cleanup(){const e=Date.now();Array.from(this.responses.entries()).filter(([r,o])=>o.expiresAt&&e>o.expiresAt).map(([r])=>r).forEach(r=>this.delete(r))}}class Lm{static createAll(e){const{modelId:s,modelTypeName:r,modelData:o}=e,n=Pn.create({modelId:s,modelTypeName:r}),i=new Hg(e,St(n,"fsm")),a=new qg(St(n,"offline-queue")),c=new Pg(e),u=new Rg(e),d=new km;o.serviceResponses=d;const h={fsm:i,offlineQueue:a,serviceResponseStore:d,companionManager:c,childResolver:u};if($m(o)&&(h.effectManager=new kg(r,s,o,St(n,"effect"))),Cm(o)){const f=St(n,"subscription");h.subscriptionManager=new Im(e,o,s,a,f),h.onlineLifecycleManager=new zg(e,St(n,"online"))}return Dm(o)&&(h.httpRouteManager=new jn(o,St(n,"http-routes"))),Am(o)&&(h.serviceRequestManager=new ym(o,d)),h}}const U=A.getLogger("kos-model"),Fm="kos.extension.model.loader";class xl{constructor({modelTypeName:e,id:s,modelData:r}){l(this,"_id");l(this,"_status");l(this,"_activeStatus");l(this,"_onlineStatus");l(this,"modelData");l(this,"modelTypeName");l(this,"initialized");l(this,"loaded");l(this,"_isLoadExecuting");l(this,"offlineQueue");l(this,"subscriptionManager");l(this,"effectManager");l(this,"httpRouteManager");l(this,"onlineLifecycleManager");l(this,"serviceResponses");l(this,"serviceRequestManager");l(this,"companionManager");l(this,"childResolver");l(this,"fsm");this._id=typeof s<"u"?`${s}`:e,this.modelTypeName=e,this.initialized=!1,this.loaded=!1,this._isLoadExecuting=!1,this.modelData=r,this._status=w.CREATED,this._activeStatus=w.INACTIVE,this._onlineStatus=w.OFFLINE;const o=Lm.createAll(this);this.fsm=o.fsm,this.offlineQueue=o.offlineQueue,this.companionManager=o.companionManager,this.childResolver=o.childResolver,this.serviceResponses=o.serviceResponseStore,o.effectManager&&(this.effectManager=o.effectManager),o.subscriptionManager&&(this.subscriptionManager=o.subscriptionManager),o.httpRouteManager&&(this.httpRouteManager=o.httpRouteManager),o.onlineLifecycleManager&&(this.onlineLifecycleManager=o.onlineLifecycleManager),o.serviceRequestManager&&(this.serviceRequestManager=o.serviceRequestManager),M.makeAutoObservable(this,{fsm:!1,effectManager:!1,subscriptionManager:!1,onlineLifecycleManager:!1,serviceRequestManager:!1,serviceResponses:!1,companionManager:!1,childResolver:!1,offlineQueue:!1}),Ag(this)}get companionModels(){return this.companionManager}set status(e){this._status=e}get status(){return this._status}get modelId(){return this._id}get id(){return this._id}get activeStatus(){return this._activeStatus}set activeStatus(e){this._activeStatus=e}get onlineStatus(){return this._onlineStatus}set onlineStatus(e){this._onlineStatus=e}get modelManager(){return globalThis.kos.modelManager}isActive(){return this._status===w.ACTIVE}isOnline(){return this._onlineStatus===w.ONLINE}isReady(){return this._status===w.READY}async deactivate(){var e,s,r;U.debug(`deactivating model ${this.modelTypeName} with id ${this.modelId}`);try{const o=Q.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.deactivate)==null?void 0:s.call(e,o)),U.debug(`Model ${this.modelTypeName} with id ${this.modelId} deactivated`),(r=this.subscriptionManager)==null||r.deactivate()}catch(o){throw U.debug(`Model ${this.modelId} failed to deactivated`),o}}async activate(){var e,s,r,o;U.debug(`activating model ${this.modelTypeName} with id ${this.modelId}`),await ds(this,D.ACTIVATE);try{await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(D.ACTIVATE));const n=Q.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.activate)==null?void 0:r.call(s,n)),this.initializeStateMachineForLifecycle(D.ACTIVATE),U.debug(`Model ${this.modelTypeName} with id ${this.modelId} subscribing to all topics`),(o=this.subscriptionManager)==null||o.registerAll(D.ACTIVATE),this.createLifecycleCompanions(D.ACTIVATE),U.debug(`Model ${this.modelTypeName} with id ${this.modelId} activated`)}catch(n){throw U.debug(`Model ${this.modelId} failed to activate`),n}}async whenLoaded(){await Lo([{condition:()=>this.status===w.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.loaded,onMatch:()=>{U.debug(`Model ${this.modelId} is loaded`)}}])}async whenInitialized(){await Lo([{condition:()=>this.status===w.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.initialized,onMatch:()=>{U.debug(`Model ${this.modelId} is initialized`)}}])}async whenReady(){await Lo([{condition:()=>this.status===w.FAILED,onMatch:()=>{throw new Error(`Failed to ready model ${this.modelId}`)}},{condition:()=>this.status===w.READY,onMatch:()=>{U.debug(`Model ${this.modelId} is ready`)}}])}async ready(){var e,s,r,o;if(this.fsm.current===w.READY){U.debug(`already readying model ${this.modelTypeName} with id ${this.modelId} returning`);return}try{U.debug(`readying model ${this.modelTypeName} with id ${this.modelId}`),await ds(this,D.READY),await pl(this,Nn.READY,D.READY),await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(D.READY));const n=Q.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.ready)==null?void 0:r.call(s,n)),this.offlineQueue.flush(),this.initializeStateMachineForLifecycle(D.READY),(o=this.subscriptionManager)==null||o.registerAll(D.READY),this.createLifecycleCompanions(D.READY),U.debug(`Model ${this.modelId} is ready`);const i={modelId:this.modelId,modelType:this.modelTypeName};K(nl(this.modelTypeName,this.modelId),i),K(il(this.modelTypeName),i)}catch(n){throw U.error(n),Error(n)}}async load(){var o,n,i,a,c,u;const e=this[Je];e&&await e.whenLoaded();const{modelTypeName:s,modelId:r}=this;if(this.fsm.current===w.LOADED){U.debug(`Model ${s} with id ${r} already loaded`);return}if(this._isLoadExecuting){U.debug(`Model ${s} with id ${r} is currently executing load`);return}this._isLoadExecuting=!0;try{U.debug(`Loading model ${s} with id ${r}`),await ds(this,D.LOAD);const d=Q.getContext(r),h=`${Fm}.${s}`,f=await $.loader.executeLoader(h,{});f&&(U.info(`Setting loaded context for ${r}, type: ${s}`),d==null||d.set(h,f)),await((o=this.serviceRequestManager)==null?void 0:o.executeForLifecycle(D.LOAD)),await((i=(n=this.modelData)==null?void 0:n.load)==null?void 0:i.call(n,d)),te(()=>{this.loaded=!0}),U.debug(`Model ${s} with id ${r} successfully loaded`),this.initializeStateMachineForLifecycle(D.LOAD),(a=this.subscriptionManager)==null||a.registerAll(D.LOAD),(c=this.httpRouteManager)==null||c.registerAll(),(u=this.effectManager)==null||u.setup(),this.createLifecycleCompanions(D.LOAD)}catch(d){throw U.error(`Model ${r} failed to load`,d),d}finally{this._isLoadExecuting=!1}}async unload(){var e,s,r,o,n,i,a;U.debug(`unloading model ${this.modelTypeName} with id ${this.modelId}`);try{const c=this.getChildren().map(d=>{var h;return(h=d.unload)==null?void 0:h.call(d)}).filter(d=>!!d);await Promise.allSettled(c);const u=Q.getContext(this.modelId);if(await((s=(e=this.modelData)==null?void 0:e.unload)==null?void 0:s.call(e,u)),this.loaded=!1,(r=this.onlineLifecycleManager)==null||r.dispose(),this.modelData){const d=this.modelData;if(d._fsmInitialized=!1,d._fsmConfig){const h=((o=d._fsmOptions)==null?void 0:o.stateProperty)||"currentState";d[h]=void 0}d.stateHistory&&(d.stateHistory=[])}U.debug(`Model ${this.modelTypeName} with id ${this.modelId} unloaded`),(n=this.effectManager)==null||n.disposeAll(),(i=this.subscriptionManager)==null||i.disposeAll(),(a=this.httpRouteManager)==null||a.dispose()}catch(c){throw U.debug(`Model ${this.modelId} failed to unload`),c}}async init(){var n,i,a,c;const e=this[Je];e&&await e.whenInitialized();const{modelId:s,modelTypeName:r}=this,o=Q.getContext(s);U.debug(`Initializing model ${r} with id ${s}`),await ds(this,D.INIT);try{await((n=this.serviceRequestManager)==null?void 0:n.executeForLifecycle(D.INIT)),await((a=(i=this.modelData)==null?void 0:i.init)==null?void 0:a.call(i,o)),this.initialized=!0,U.debug(`Model ${r} with id ${s} initialized`),(c=this.onlineLifecycleManager)==null||c.register(),this.initializeStateMachineForLifecycle(D.INIT),this.registerSubscribers(D.INIT),this.createLifecycleCompanions(D.INIT)}catch(u){throw U.error(`Model ${s} failed to initialize`,u),u}}async registerSubscribers(e){var s;U.debug(`registering subscribers in ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.registerAll(e)}initializeStateMachineForLifecycle(e){this.modelData&&Ac(this.modelData,e)}createLifecycleCompanions(e){this.modelManager.createLifecycleCompanions(this,{},e)}async online(){var s,r;U.debug(`online model ${this.modelTypeName} with id ${this.modelId}`),this.registerSubscribers();const e=Q.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.online)==null?void 0:r.call(s,e)),this.createLifecycleCompanions(D.ONLINE)}async offline(){var s,r,o;U.debug(`offline model ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.disposeAll();const e=Q.getContext(this.modelId);await((o=(r=this.modelData)==null?void 0:r.offline)==null?void 0:o.call(r,e))}accept(e){e.visit(this)}getChildren(){return this.childResolver.resolve()}addCompanionModel(e){this.companionManager.add(e)}clearCompanionModels(){this.companionManager.clear()}}const Fo=m.createLogger({name:"kos-model-instantiator"});class Nm{constructor(e,s){l(this,"companionInstantiator");this.registry=e,this.cache=s,this.companionInstantiator=new _g(e,s,this.createModelInstance.bind(this))}createModelInstance(e,s,r={}){var a;const o=this.registry.models[e];if(!o){const c=`No model registered for type ${e}`;throw Fo.error(c,{modelType:e,requestedId:s,providedOptions:r,availableModelTypes:Object.keys(this.registry.models)}),Lt(new Error(c),{modelType:e,modelId:s,operation:"model instantiation - registry lookup",options:r,metadata:{availableModelTypes:Object.keys(this.registry.models)}})}const n=o.singleton?e:s;if(this.cache.restoreFromDeleteCache(n),!this.cache.hasModel(n)){Fo.debug(`Creating model instance: ${e} [${n}]`);const c=r&&Object.keys(r).length>0,u=o.class||o.create;if(((a=u==null?void 0:u.prototype)==null?void 0:a[Vs])===!0&&!c){const h=new Error(`Model ${e} requires options but none were provided`);throw ea(h,{modelType:e,options:r,registryId:this.registry.alias||"unknown"}),Lt(h,{modelType:e,modelId:n,operation:"model instantiation - options validation",options:r,metadata:{requiresOptions:!0,hasOptions:!1}})}try{const h=o.create?o.create({modelTypeId:e,id:n,options:r}):new o.class(n,r),f=new xl({modelTypeName:e,id:n,modelData:h});this.cache.addModel(f),this._createCompanionModels(f,r)}catch(h){throw ea(h,{modelType:e,options:r,registryId:this.registry.alias||"unknown"}),Lt(h,{modelType:e,modelId:n,operation:"model instantiation",options:r})}}const i=this.cache.getModelById(n);if(!i)throw Fo.error(`Model ${e} [${n}] not found in cache`),new Error(`Model ${e} [${n}] not found in cache`);return{model:i,data:i.modelData}}createCompanionModels(e,s,r){this.companionInstantiator.createCompanionModels(e,s,r)}_createCompanionModels(e,s){this.createCompanionModels(e,s)}}let Um=class{constructor(e){this._registry=e}get registry(){return this._registry}getModelTypeRegistry(e){const s=this.registry.models[e];if(!s)throw new Error(`No registration for model type ${e}`);return s}registerModel(e){const s=e.type;this.registry.models[s]||(this.registry.models={...this.registry.models,...e.registration})}registerCompanionModel(e,s){var r,o;(r=this.registry).companionModels??(r.companionModels={}),(o=this.registry.companionModels)[e]??(o[e]=[]),this.registry.companionModels[e].some(n=>n.type===s)||this.registry.companionModels[e].push({type:s})}getModelSubscriptions(e){var s;return((s=this.getModelTypeRegistry(e))==null?void 0:s.subscriptions)||{}}getDataModelBuilder(e){var r;const s=(r=this.getModelTypeRegistry(e))==null?void 0:r.builder;if(!s)throw new Error(`No builder found for model type ${e}`);return s}getModelFactory(e){return es(e)}};const Rl=10,aa=m.createLogger({name:"kos-model-manager"});class Pl{constructor(){l(this,"cache");l(this,"instantiator");l(this,"dependencies");l(this,"_registry");globalThis.kos=globalThis.kos||{},this.dependencies=new Eg,globalThis.kos.modelManager=this,globalThis.kos.resolveKosModel=e=>{const s=this.getModelById(e);if(s)return s.modelData||{}},globalThis.kos.kosModelJson=e=>{var r,o;const s=this.getModelById(e);if(s)return((o=(r=s.modelData).toJSON)==null?void 0:o.call(r))||{}},globalThis.kos.kosModelDebug=e=>{var r;const s=this.getModelById(e);if(s)return((r=s.modelData)==null?void 0:r.debugState)||{}},globalThis.kos.kmd=globalThis.kos.kosModelDebug,globalThis.kos.kmj=globalThis.kos.kosModelJson}static create(e,s){const r=this.getInstance(s);return r._registry=new Um(e),r.cache=new Mg(e.preloadModels),r.instantiator=new Nm(e,r.cache),r}static getInstance(e){var s,r;return(!((s=globalThis.kos)!=null&&s.modelManager)||e)&&(aa.debug("Creating new instance of KosModelManager"),new this),(r=globalThis.kos)==null?void 0:r.modelManager}get registry(){return this._registry.registry}get preloadedModels(){return this.cache.preload(e=>(aa.debug(`preloading ${e}`),typeof e=="string"?this.createModelInstance(e).model:this.createModelInstance(e.modelType,e.modelId,e.options).model))}get models(){return this.cache.models}getModelById(e){return this.cache.getModelById(e)}addModel(e){return this.cache.addModel(e)}removeModel(e){this.cache.removeModel(e.modelId)}hasModel(e){return this.cache.hasModel(e)}getModelsByType(e,s){return Array.from(this.models).filter(r=>r.modelTypeName===e).filter(r=>s?s(r.modelData):!0).map(r=>r.modelData)}getModelSubscriptions(e){return this._registry.getModelSubscriptions(e)}getDataModelBuilder(e){return this._registry.getDataModelBuilder(e)}getModelFactory(e){return es(e)}addDependency(e,s){this.cache.restoreFromDeleteCache(s),this.dependencies.add(e,s)}removeDependency(e,s){this.dependencies.remove(e,s)}async reloadModel(e){if(e.id){const s=this.getModelById(e.id);s&&await s.fsm.transitionTo(N.RESET,w.RESETTING)}}async initiateDestroyModel(e){if(!e.id)throw new Error("Model ID is required");if(!this.dependencies.canDestroy(e.id))return;const s=this.getModelById(e.id);s&&(this.cache.markForDeletion(s),rl.addToDeletionQueue(e.id,setTimeout(()=>this.destroyModel(s),Rl)))}async destroyModel(e){var s;e!=null&&e.modelId&&this.dependencies.canDestroy(e.modelId)&&(await((s=e.unload)==null?void 0:s.call(e)),this.removeModel(e))}createModelInstance(e,s,r={}){return this.instantiator.createModelInstance(e,s,r)}createLifecycleCompanions(e,s,r){this.instantiator.createCompanionModels(e,s,r)}registerCompanionModel(e,s){this._registry.registerCompanionModel(e,s)}registerModel(e){this._registry.registerModel(e)}}var vr=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.RELOADING="reloading",t))(vr||{}),lt=(t=>(t.CREATE="create",t.INITIALIZE="init",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.UNLOAD="unload",t.RELOAD="reload",t))(lt||{});const jm=t=>{const e=b.createMachine("offline",{online:b.state(b.transition("go_offline","offline",b.action(()=>{t.offline(),M.runInAction(()=>{t.isOnline=!1})}))),offline:b.state(b.transition("go_online","online",b.action(()=>{t.online(),M.runInAction(()=>{t.isOnline=!0})})))}),s=b.interpret(e,n=>A.debug(n.machine.current)),r=b.createMachine({creating:b.state(b.transition("create","created")),created:b.state(b.immediate("initializing")),initializing:b.invoke(()=>t.init(),b.transition("done","initialized")),initialized:b.state(b.immediate("loading")),loading:b.invoke(()=>t.load(),b.transition("done","loaded")),loaded:b.state(b.immediate("readying"),b.transition("unload","unloading")),readying:b.invoke(()=>t.ready(),b.transition("done","ready",b.action(()=>{M.runInAction(()=>{t.status="ready"})}))),reloading:b.invoke(()=>t.reload(),b.transition("done","loading")),ready:b.state(b.transition("reload","reloading"),b.transition("unload","unloaded",b.action(t.unload.bind(t))),b.transition("go_online","ready",b.action(()=>{s.send("go_online")})),b.transition("go_offline","ready",b.action(()=>{s.send("go_offline")}))),unloaded:b.state()});return{service:b.interpret(r,n=>A.debug(n.machine.current)),online:s}},W=m.createLogger({name:"kos-core"}),Bm=()=>{const t=ve(),e=t==null?void 0:t.alias,s=process.env.KOS_CONNECTION_ALIAS;return e||s||void 0},Hm=()=>{const t=window.location.protocol,e=ve(),s=e==null?void 0:e.host;let r;try{r=new URL(s).protocol==="https:"?"wss://":"ws://"}catch{}return r||(t==="https:"?"wss://":"ws://")},Km=()=>{const t=window.location.hostname,e=process.env.KOS_HOST,s=ve(),r=s==null?void 0:s.host;let o;try{o=new URL(r).hostname}catch{}return o??e??t},qm=()=>{const t=window.location.port,e=process.env.KOS_PORT,s=ve(),r=s==null?void 0:s.host;let o;try{o=new URL(r).port}catch{}return o??e??t},zm=(t,e)=>{let s;return{promise:new Promise((n,i)=>{s=setTimeout(()=>{e?m.error(`Model ${e.modelId} - ${e.modelTypeName} preloading - timed out after ${t}ms`):m.error(`KOS Core preloading timed out after ${t}ms`),i(new Error(`Model ${e==null?void 0:e.modelId} - ${e==null?void 0:e.modelTypeName} - timed out after ${t}ms`))},t)}),cancel:()=>{s&&clearTimeout(s)}}},ca=t=>typeof t.reload=="function",Vm=t=>typeof t.unload=="function";var kl=(t=>(t.LOGGED_IN="logged_in",t.LOGGED_OUT="logged_out",t))(kl||{});class I{constructor(e){l(this,"fsmService");l(this,"status");l(this,"initialized");l(this,"loaded");l(this,"_transport");l(this,"modelManager");l(this,"authState");l(this,"isOnline");l(this,"_reloading");l(this,"_unloading");l(this,"connectionAlias");this.initialized=!1,this.connectionAlias=e,this.loaded=!1,this.isOnline=!1,this.status=vr.CREATED,this.authState="logged_out",this._reloading=!1,this._unloading=!1,M.makeAutoObservable(this),C("token",a=>{a&&(this.transport.token=a.body)}),C(Te.CONNECTED,async()=>{await this.whenReady(),this.fsmService.service.send(lt.GO_ONLINE)}),C(Te.DISCONNECTED,async()=>{this.fsmService.service.send(lt.GO_OFFLINE)}),C("/studioServer/auth/LOGGED_IN",()=>{this.authState="logged_in",this.transport.authorized=!0,this.fsmService.service.send(lt.RELOAD)}),C("/studioServer/auth/LOGIN_REQUIRED",()=>{this.authState="logged_out",this.transport.authorized=!1}),C(Te.RELOAD,()=>{W.warn("WebSocket requested reload"),this.fsmService.service.send(lt.RELOAD)}),C("/studio/project/reload",()=>{W.warn("Project requested reload"),this.fsmService.service.send(lt.RELOAD)});const s=Nt.getInstance(),r=Km(),o=qm(),n=Hm();s.host=r,s.port=Number.parseInt(o),s.protocol=n,process.env.KOS_ALLOW_ANONYMOUS==="true"&&(s.authorized=!0);const i=Bm()??e;i&&(s.alias=i.replace("{{TIMESTAMP}}",Date.now().toString())),this._transport=s.init(),this.fsmService=jm(this),this.fsmService.service.send(lt.CREATE)}get onlineStatus(){return this.isOnline&&!this._reloading&&!this._unloading}get reloading(){return this._reloading}get unloading(){return this._unloading}async reload(){var o,n,i,a;const e=Date.now();if(this._reloading){W.info("reload already in progress");return}this._reloading=!0,W.warn("reloading KOS Core"),W.warn("reloading preloaded models");const s=this.modelManager;for(const c of s.preloadedModels)ca(c.modelData)&&(W.info(`reloading model ${c.modelId}`),(o=c.unload)==null||o.call(c),await c.modelData.reload(),(n=c.registerSubscribers)==null||n.call(c),W.info(`reloading model ${c.modelId} complete`));for(const c of s.models)!s.preloadedModels.includes(c)&&ca(c.modelData)&&(W.warn(`reloading model ${c.modelId}`),(i=c.unload)==null||i.call(c),await c.modelData.reload(),(a=c.registerSubscribers)==null||a.call(c));const r=Date.now()-e;setTimeout(()=>{M.runInAction(()=>{W.warn("reloading KOS Core complete"),this._reloading=!1})},1e3-r)}async online(){W.debug("KOS Core going online"),await this._transport.whenReady(),W.debug("KOS Transport Ready. Calling online() for models"),K("/kosCore/online","/kosCore/online"),console.timeEnd("kosCore:startup")}async offline(){W.debug("KOS Core going offline"),K("/kosCore/offline","/kosCore/offline")}async unload(){var o;W.debug("Unloading KOS Core");const e=Date.now();this._unloading=!0,W.debug("unloading KOS Core");const s=this.modelManager;for(const n of s.models)Vm(n.modelData)&&((o=n.unload)==null||o.call(n));const r=Date.now()-e;setTimeout(()=>{M.runInAction(()=>{this._unloading=!1})},1e3-r)}async whenReady(){await M.when(()=>this.status===vr.READY)}async ready(){W.debug("Readying KOS Core"),await this._transport.whenReady();const e=this.modelManager.preloadedModels.map(o=>({modelId:o.modelId,model:o,promise:o.whenReady()})),r=(await Promise.allSettled(e.map(o=>{const{promise:n,cancel:i}=zm(5e3,o.model);Promise.race([o.promise.then(()=>{i()}),n])}))).filter(o=>o.status==="rejected");if(r.length)throw W.error(`There were ${r.length} failed models on model preloading`),Error(`There were ${r.length} failed models on model preloading`);W.debug("leaving kos-core ready() ")}get isReady(){return this.status===vr.READY}set transport(e){this._transport=e}get transport(){return this._transport}get coreInitialized(){return this.initialized}get modelsLoaded(){return this.loaded}async init(){W.debug("entering kos-core init()"),console.time("kosCore:startup"),console.time("kosCore:init"),await this._transport.whenReady(),this.initialized=!0,W.debug("initialized - leaving kos-core init()"),console.timeEnd("kosCore:init")}async load(){W.debug("entering kos-core load()"),console.time("kosCore:load"),this.loaded=!0,W.debug("loaded - leaving kos-core load()"),console.timeEnd("kosCore:load")}static create(e,s,r){var i,a,c;const o=this.getInstance({reset:s,connectionAlias:r});(i=e.extensions)!=null&&i.dataMapper&&Object.keys(e.extensions.dataMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.dataMapper)==null?void 0:f[u];d&&(Array.isArray(d)?d.forEach(p=>{$.dataMapper.registerDataMapper(u,p)}):$.dataMapper.registerDataMapper(u,d))}),(a=e.extensions)!=null&&a.propertyMapper&&Object.keys(e.extensions.propertyMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.propertyMapper)==null?void 0:f[u];d&&$.propertyMapper.registerPropertyMapper(u,d)}),(c=e.extensions)!=null&&c.contextLoader&&Object.keys(e.extensions.contextLoader).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.contextLoader)==null?void 0:f[u];d&&$.loader.registerLoader(u,d)}),P.model.getAll().forEach(([,u])=>{e.models={...e.models,...u.registration}}),e.models={...e.models,...P.model.getLegacyModels()},P.companion.getAll().forEach(([u,d])=>{e.companionModels={...e.companionModels},e.companionModels[u]=e.companionModels[u]||[];for(const h of d){let f;if(typeof h=="string"){const p=e.models[h];if(p!=null&&p.class){const g=p.class.prototype[Je];f=g==null?void 0:g.lifecycle}}e.companionModels[u].push({type:h,lifecycle:f})}}),P.model.getPreloadModels().forEach(u=>{e.preloadModels.includes(u)||e.preloadModels.push(u)});const n=Pl.create(e,s);return o.modelManager=n,o}static getInstance(e){return this._instance=window.KosCore,(!this._instance||e!=null&&e.reset)&&(window.KosCore=new this(e==null?void 0:e.connectionAlias),this._instance=window.KosCore),this._instance}}l(I,"_instance");const Gm=m.createLogger({name:"kos-model-visitor",group:"kos-ui-core"});class Ll{constructor(){l(this,"visitedModels",new Set);this.visitedModels=new Set}start(e){var r;if(e.id===void 0)throw new Error("rootModel must have an id");const s=I.getInstance().modelManager.getModelById(e.id);if(!s)throw new Error(`Could not find rootModel with id: ${e.id}`);this.visitedModels.clear(),(r=s.accept)==null||r.call(s,this)}visit(e){var r;if(this.visitedModels.has(e.modelId)){Gm.info(`model ${e.modelId} already visited`);return}const s=!!this.visitModel(e.modelData,this);this.visitedModels.add(e.modelId),!s&&((r=e.getChildren)==null||r.call(e).forEach(o=>{var n;(n=o.accept)==null||n.call(o,this)}))}}class Ym extends Ll{constructor(s){super();l(this,"targetId");l(this,"currentPath",[]);l(this,"foundPath",null);this.targetId=s}visit(s){var o;if(this.visitedModels.has(s.modelId))return;this.currentPath.push(s.modelId),this.visitedModels.add(s.modelId),!!this.visitModel(s.modelData)||(o=s.getChildren)==null||o.call(s).forEach(n=>{var i;this.foundPath||(i=n.accept)==null||i.call(n,this)}),this.foundPath||this.currentPath.pop()}visitModel(s){return s.id===this.targetId?(this.foundPath=this.currentPath.slice(0,-1),!0):!1}getAncestorPath(){return this.foundPath??[]}wasFound(){return this.foundPath!==null}}function Wm(t,e){e.forEach(s=>{Object.getOwnPropertyNames(s.prototype).forEach(r=>{const o=Object.getOwnPropertyDescriptor(s.prototype,r);Object.defineProperty(t.prototype,r,o)})})}function Qm(t,e){const s=t??[],r=e??[];return s.length!==r.length?!1:s.every((o,n)=>o===r[n])}const Hn=(t,e)=>{const s=t.map(n=>n.id);return e.map(n=>n.id).filter(n=>!s.includes(n))},Fl=t=>t,Kn=t=>t,Zm=({container:t,onAddItem:e,onUpdateItem:s,onRemoveItem:r=Fl,idMapper:o=Kn})=>n=>{const i=n.map(o),c=Hn(i,t.data).map(r).filter(Boolean);t.removeAll(c);const u=i.map(d=>{const h=t.getModel(d.id);return h&&s?s(d,h):e(d)}).filter(Boolean);t.addAll(u)},Xm=({container:t,onAddItem:e,onRemoveItem:s=Fl,idMapper:r=Kn})=>o=>{const n=o.map(r);Hn(n,t.models).forEach(s),n.forEach(e)},Jm=({items:t,onAddItem:e,onRemoveItem:s,idMapper:r=Kn})=>o=>{const n=o.map(r);Hn(n,t).forEach(s),n.forEach(e)},ey=(t,e="parent-")=>{let s=t;return s.startsWith(e)&&(s=s.replace(e,"")),s},la=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),ua=[{amount:60,name:"seconds"},{amount:60,name:"minutes"},{amount:24,name:"hours"},{amount:7,name:"days"},{amount:4.34524,name:"weeks"},{amount:12,name:"months"},{amount:Number.POSITIVE_INFINITY,name:"years"}];function Nl(t){let e=(t.getTime()-Date.now())/1e3;for(let s=0;s<=ua.length;s++){const r=ua[s];if(Math.abs(e)<r.amount)return la.format(Math.round(e),r.name);e/=r.amount}return la.format(Math.round(e),"years")}const qn=t=>t%4===0&&t%100!==0||t%400===0,zn=(t,e)=>[31,qn(t)?29:28,31,30,31,30,31,31,30,31,30,31][e],Ul=(t,e)=>{const s=new Date(t),r=t.getDate();return s.setDate(1),s.setMonth(s.getMonth()+e),s.setDate(Math.min(r,zn(s.getFullYear(),s.getMonth()))),s},jl=(t,e)=>{const s=new Date(t);return s.setDate(s.getDate()+e),s},Ut="en-US",Bl={short:{year:"numeric",month:"2-digit",day:"2-digit"},medium:{year:"numeric",month:"short",day:"2-digit"},long:{year:"numeric",month:"long",day:"numeric"},full:{year:"numeric",month:"long",day:"numeric",weekday:"long"}},Hl={short:{hour:"2-digit",minute:"2-digit",hour12:!0},medium:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0},long:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0,timeZoneName:"short"},full:{hour:"2-digit",minute:"2-digit",hour12:!0,timeZoneName:"long"}},Kl=(t,{dateStyle:e="short",locales:s=Ut}={dateStyle:"short",locales:Ut})=>{const r=e==="short"?Bl.short:{dateStyle:e};return new Intl.DateTimeFormat(s,r).format(t)},ql=(t,{locales:e=Ut,timeStyle:s="short"}={locales:Ut,timeStyle:"short"})=>{const r=Hl[s];return new Intl.DateTimeFormat(e,r).format(t)},zl=(t,{dateStyle:e="short",locales:s=Ut,timeStyle:r="short"}={dateStyle:"short",locales:Ut,timeStyle:"short"})=>{const o={...e&&Bl[e],...r&&Hl[r]};return new Intl.DateTimeFormat(s,o).format(t)},ty=Object.freeze(Object.defineProperty({__proto__:null,addDaysToDate:jl,addMonthsToDate:Ul,formatDate:Kl,formatDateSince:Nl,formatDateTime:zl,formatTime:ql,getDaysInMonth:zn,isLeapYear:qn},Symbol.toStringTag,{value:"Module"})),Vl="featureFlagResolver",ar=new Map;Ws(Vl,{register:(t,e)=>{var s;ar.has(t)||ar.set(t,[]),(s=ar.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=ar.get(t);if(!s)return[];const r=s.map(a=>a(e)),n=(await Promise.allSettled(r)).map(a=>a.status==="fulfilled"?a.value:(m.info(`Feature flag resolver ${t} failed: ${a.reason}`),[])).flat(),i=Array.from(new Set(n)).reduce((a,c)=>(a[c]=!0,a),{});return Yl.updateFlags(i),Object.keys(i)}});const sy="kos.loader.featureFlag";class Gl{constructor(e={}){l(this,"flags",{});this.flags=e}isFeatureEnabled(e){return!!this.flags[e]}enableFeature(e){this.flags[e]=!0}disableFeature(e){this.flags[e]=!1}toggleFeature(e){this.flags[e]=!this.flags[e]}updateFlags(e){this.flags={...this.flags,...e}}}window.KosFeatureFlags=window.KosFeatureFlags??new Gl;const Yl=window.KosFeatureFlags,Wl=(t,e,s)=>{s/=100;const r=e*Math.min(s,1-s)/100,o=n=>{const i=(n+t/30)%12,a=s-r*Math.max(Math.min(i-3,9-i,1),-1);return Math.round(255*a).toString(16).padStart(2,"0")};return`#${o(0)}${o(8)}${o(4)}`},Ql=t=>{const s=new RegExp("hsl\\((\\d+),\\s+(\\d+)\\%,\\s+(\\d+)\\%\\)").exec(t);if(!s)throw Error("Invalid HSL string");return Wl(parseInt(s[1]),parseInt(s[2]),parseInt(s[3]))},Zl=(t,e)=>getComputedStyle(t).getPropertyValue(e),ry=(t,e)=>Ql(Zl(t,e)),oy=(t,e)=>{const s={...t};return s.id&&delete s.id,s},Jo=(t,e,s=oy)=>{const r=s(t,e);M.runInAction(()=>{Object.assign(e,r)})};class Xl{constructor(){l(this,"middlewares",[])}use(e){this.middlewares.push(e)}async execute(e){let s=0;const r=async()=>{s++,s<this.middlewares.length&&await this.middlewares[s](e,r)};await this.middlewares[s](e,r)}}const ny=async(t,e)=>{const s=new Xl;e.forEach(o=>s.use(o));const r={data:t,result:{}};return await s.execute(r),r.result},es=t=>({type:t,build:(e,s)=>I.getInstance().modelManager.createModelInstance(t,e,s).data,buildAsync:async(e,s)=>{const r=I.getInstance().modelManager.createModelInstance(t,e,s);return await r.model.whenInitialized(),r.data}}),iy=t=>{I.getInstance().modelManager.registerModel(t)},ay=(t,e)=>{I.getInstance().modelManager.registerCompanionModel(t,e)},da="/kos/ui/internal/heartbeat/",cy=({relationshipId:t,destinationAddress:e,onAbort:s,waitTime:r,beatTime:o})=>{const n=I.getInstance().transport,i=new AbortController;let a=performance.now();const c=n.subscribeTopic({topic:`${da}${t}`,callback:()=>{a=performance.now()}}),u=r??3e3,d=window.setInterval(()=>{let v=performance.now()-a;v=v/1e3,v>u/1e3&&i.abort()},u),h=o??2e3,f=window.setInterval(()=>{Il({msg:{},options:{topic:`${da}${t}`,destinationAddress:e}})},h),p=()=>{window.clearInterval(f),window.clearInterval(d),c()},g=()=>{p(),s&&s(),i.signal.removeEventListener("abort",g)};return i.signal.addEventListener("abort",g),{cleanUpHeartbeat:p}},Jl=(...t)=>e=>t.reduce((s,r)=>r(s),e),ly={maxAttempts:5,baseDelayMs:100,backoffFactor:1.5};async function uy(t,e){let s=1;const r={...ly,...e},{maxAttempts:o,baseDelayMs:n,backoffFactor:i}=r;let a=n;for(;s<=o;)try{return await t()}catch(c){if(m.error(`Attempt ${s} failed: ${c}`),s<o)a=n*Math.pow(i,s),await new Promise(u=>setTimeout(u,a)),s++;else throw c}throw new Error("All attempts failed")}const dy=m.createLogger({name:"kos-service-request"}),de=t=>({isMock:!1,URL:exports.BASE_URL}),hy=(t,e,s)=>async({id:r,tracker:o,urlOverride:n,ordered:i,studio:a,fos:c,bridge:u,timeout:d,signal:h,destinationAddress:f})=>{const p={method:"DELETE"};t&&(p.destinationAddress=t),o&&(p.tracker=o),ts(p,{ordered:i,studio:a,fos:c,bridge:u,timeout:d,signal:h,destinationAddress:f});try{const g=await s(n||`${e}/${r}`,p);if(!g.ok)throw Error(`There was a problem deleting the model; returned status ${g.status}`);return await g.json()??void 0}catch(g){if(g instanceof DOMException){if(g.name==="TimeoutError")throw new z("Request timed out while deleting model");if(g.name==="AbortError")throw new z("Request was cancelled while deleting model")}throw g}},ts=(t,{ordered:e,studio:s,fos:r,destinationAddress:o,bridge:n,timeout:i,signal:a})=>(i&&(t.timeout=i),a&&(t.signal=a),e&&(t.ordered=e),s&&(t.studio=s),r&&(t.fos=r),n&&(t.bridge=n),(o||o==="")&&(t.destinationAddress=o),t),fy=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,timeout:c,signal:u,destinationAddress:d})=>{const h={method:"GET"};t&&(h.destinationAddress=t),ts(h,{timeout:c,ordered:o,studio:n,fos:i,bridge:a,signal:u,destinationAddress:d});const f=r||e;try{const p=await s(f,h);if(!p.ok){let v;try{v=await p.json()}catch{}throw new z(`There was a problem retrieving the model; returned status ${p.status}`,v??void 0)}return await p.json()??void 0}catch(p){if(p instanceof DOMException){if(p.name==="TimeoutError")throw new z("Request timed out while retrieving models");if(p.name==="AbortError")throw new z("Request was cancelled while retrieving models")}throw p}},py=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,tracker:c,timeout:u,signal:d,destinationAddress:h})=>{const f={method:"GET"};t&&(f.destinationAddress=t),c&&(f.tracker=c),ts(f,{timeout:u,ordered:o,studio:n,fos:i,bridge:a,signal:d,destinationAddress:h});const p=r||e;dy.debug(`resolvedUrl: ${p}`);try{const g=await s(p,f);if(!g.ok){let E;try{E=await g.json()}catch{}throw new z(`There was a problem retrieving the model; returned status ${g.status}`,E??void 0)}return await g.json()??void 0}catch(g){if(g instanceof DOMException){if(g.name==="TimeoutError")throw new z("Request timed out while retrieving model");if(g.name==="AbortError")throw new z("Request was cancelled while retrieving model")}throw g}},gy=(t,e,s)=>async({urlOverride:r,id:o,ordered:n,studio:i,fos:a,bridge:c,timeout:u,signal:d,destinationAddress:h})=>{const f={method:"GET"};t&&(f.destinationAddress=t),ts(f,{timeout:u,ordered:n,studio:i,fos:a,bridge:c,signal:d,destinationAddress:h});const p=r||`${e}/${o}`;try{const g=await s(p,f);if(!g.ok){let E;try{E=await g.json()}catch{}throw new z(`There was a problem retrieving the model; returned status ${g.status}`,E??void 0)}return await g.json()??void 0}catch(g){if(g instanceof DOMException){if(g.name==="TimeoutError")throw new z("Request timed out while retrieving model by ID");if(g.name==="AbortError")throw new z("Request was cancelled while retrieving model by ID")}throw g}};class z extends Error{constructor(s,r){super(s);l(this,"payload");this.name="FetchException",this.payload=r}}const ha=(t,e,s)=>async({model:r,urlOverride:o,ordered:n,tracker:i,studio:a,fos:c,bridge:u,timeout:d,signal:h,destinationAddress:f})=>{const p={method:"POST",body:typeof r=="string"?r:JSON.stringify(r)};t&&(p.destinationAddress=t),i&&(p.tracker=i),ts(p,{timeout:d,ordered:n,studio:a,fos:c,bridge:u,signal:h,destinationAddress:f});try{const g=await s(o||e,p);if(!g.ok){let E;try{E=await g.json()}catch{}throw new z(`There was a problem sending the POST data; returned status ${g.status}`,E??void 0)}return await g.json()??void 0}catch(g){if(g instanceof DOMException){if(g.name==="TimeoutError")throw new z("Request timed out while adding model");if(g.name==="AbortError")throw new z("Request was cancelled while adding model")}throw g}},fa=(t="POST",e,s,r)=>async({model:o,id:n,urlOverride:i,ordered:a,studio:c,fos:u,bridge:d,timeout:h,signal:f,destinationAddress:p})=>{const g={method:t};o&&(g.body=JSON.stringify(o)),e&&(g.destinationAddress=e),ts(g,{timeout:h,ordered:a,studio:c,fos:u,bridge:d,signal:f,destinationAddress:p});try{const v=await r(i||`${s}/${n}`,g);if(!v.ok){let _;try{_=await v.json()}catch{}throw new z(`There was a problem modifying the model; returned status ${v.status}`,_??void 0)}return await v.json()??void 0}catch(v){if(v instanceof DOMException){if(v.name==="TimeoutError")throw new z("Request timed out while modifying model");if(v.name==="AbortError")throw new z("Request was cancelled while modifying model")}throw v}},ie={build:({destinationAddress:t="",basePath:e,getAllPath:s,getOnePath:r,deleteModelPath:o,addModelPath:n,modifyModelPath:i,mock:a=!1})=>{const c=a?fetch:exports.kosFetch;return{getAll:fy(t,s||e,c),getModelById:gy(t,r||e,c),getOne:py(t,r||e,c),addModel:ha(t,n||e,c),deleteModel:hy(t,o||e,c),modifyModel:fa("POST",t,i||e,c),putModel:fa("PUT",t,i||e,c),postModel:ha(t,n||e,c)}}};function my(t,e,s="get"){const r=t.serviceResponses;if(r)return r.getByPath(e,s)}function yy(t,e,s="get"){const r=t.serviceResponses;return r?r.has(`${s.toUpperCase()}:${e}`):!1}function by(t,e,s="get"){const r=t.serviceResponses;r&&r.delete(`${s.toUpperCase()}:${e}`)}function vy(t,e){const s=t.serviceResponses;s&&s.clearPath(e)}function wy(t){const e=t.serviceResponses;e&&e.clear()}const Ey=vt(),eu=()=>`kos-${Ey}`,My=t=>!!t&&!t.includes("VM_SERVICE")&&t.startsWith(eu()),Vn=async(t,e=6e4)=>new Promise((s,r)=>{const{unsubscribe:o}=C(t,i=>{A.debug(`recieved response for refId ${t}: ${i}`),o(),clearTimeout(n);try{const a=i!=null&&i.body?JSON.parse(i.body):{};s(a)}catch{const a=(i==null?void 0:i.body)||{};s(a)}}),n=setTimeout(()=>{o(),r(Error(`Request with ID ${t} timed out. Cancelling.`))},e)}),Ty=async(t,e,s)=>{const r=Vn(s),o=await Promise.allSettled([t(e),r]);if(o[0].status==="fulfilled"){if(o[1].status==="rejected")throw Error(o[1].reason);if(o[0].value){if(o[1].value.error)throw Error(o[1].value.error);return o[0].value.data=o[1].value,o[0].value}}else throw Error(o[0].reason)},_y=async({topic:t,msg:e,requestId:s})=>{const r=s??vt(),o=Vn(r);K(t,e,{sync:r});const n=await o;if(n.error)throw Error(n.error);return n},me=new Map;class tu{constructor(e){l(this,"_context");l(this,"_parent");l(this,"_id");this._id=e,this._context=new M.ObservableMap({}),this._parent="",M.makeAutoObservable(this)}setParent(e){te(()=>{this._parent=e})}get id(){return this._id}get context(){return this._context}get parentModel(){var e;if(this._parent)return(e=Pe(this._parent))==null?void 0:e.model}get companionModels(){const e=Pe(this._id);return e!=null&&e.model?Wc(e.model):[]}get(e){var s,r;if(this._context.has(e))return this._context.get(e);if(this.companionModels.length>0){const o=this.companionModels.find(n=>{var i;return!n.id||!me.has(n.id)?!1:(i=me.get(n.id))==null?void 0:i.context.has(e)});if(o)return(s=me.get(o.id))==null?void 0:s.get(e)}if(this._parent)return(r=me.get(this._parent))==null?void 0:r.get(e)}set(e,s){this._context.set(e,s)}remove(e){this._context.delete(e)}clear(){this._context.clear()}}const Q={createContext:(t,e)=>{const s=me.get(t)??new tu(t);if(e){if(!me.has(e))throw new Error(`Parent context ${e} does not exist`);s.setParent(e)}else t!=="root"&&s.setParent("root");return me.set(t,s),s},getContext:t=>me.get(t),deleteContext:t=>{me.delete(t)},setParentContext:(t,e)=>{var s;if(!me.has(e))throw new Error(`Parent context ${e} does not exist`);(s=me.get(t))==null||s.setParent(e)},rootContext:()=>me.get("root")};Q.createContext("root");const Sy=t=>Q.getContext(t.id),ft=class ft{constructor(){l(this,"bindings",new Map)}static getInstance(){return ft._instance||(ft._instance=new ft),ft._instance}register(e,s){this.bindings.has(e)&&console.warn(`[declarative-model] Overwriting existing bindings for model type "${e}"`),this.bindings.set(e,s)}get(e){return this.bindings.get(e)}has(e){return this.bindings.has(e)}remove(e){return this.bindings.delete(e)}clear(){this.bindings.clear()}};l(ft,"_instance");let en=ft;const ss=en.getInstance();let su;function ru(t){su=t}function Oy(){return su}const Iy={IMMEDIATE:X.IMMEDIATE,SINGLE:X.SINGLE,TTL:X.TTL,PERMANENT:X.PERMANENT};function $y(t,e,s,r,o){var g,v,E;const n=s.service,i=s.handler,a=(n.method||"GET").toUpperCase();let c;if(i&&((g=r==null?void 0:r.serviceHandlers)!=null&&g[i])){const _=r.serviceHandlers[i],R=`__svc_${i}`;t[R]=function(S,O){_(this,S,O)},c=t[R]}else{const _=`__svc_merge_${e}`;t[_]=function(R,S){S&&typeof S=="object"&&!Array.isArray(S)&&Object.assign(this,S)},c=t[_]}let u;if(i&&((v=r==null?void 0:r.serviceTransforms)!=null&&v[i]))u=r.serviceTransforms[i];else if(n.transform){const _=n.transform;u=R=>_.split(".").reduce((S,O)=>S==null?void 0:S[O],R)}let d;i&&((E=r==null?void 0:r.serviceConditions)!=null&&E[i])&&(d=r.serviceConditions[i]);let h;n.cache&&(h={retention:Iy[n.cache.retention]??X.SINGLE,ttl:n.cache.ttl});let f;n.errorHandler&&(f={strategy:n.errorHandler.strategy,defaultValue:n.errorHandler.defaultValue});const p=`${a}:${n.path}`;o[p]={path:n.path,method:n.method,lifecycle:s.lifecycle?Gn(s.lifecycle):void 0,handlerMethod:`__svc_${i||e}`,originalHandler:c,transform:u,condition:d,errorHandler:f,cache:h,iterateOver:n.iterateOver,pathParams:n.pathParams,queryParams:n.queryParams,body:n.body,requestOptions:n.requestOptions}}function Cy(t,e,s,r){var u,d;const o=s.service,n=s.handler||e,i=(u=r==null?void 0:r.actions)==null?void 0:u[n];if(!i){console.warn(`[declarative-model] Method-driven service action "${e}" references handler "${n}" but no binding was found in actions. Skipping.`);return}const a={path:o.path,method:o.method||"GET",pathParams:o.pathParams,queryParams:o.queryParams,body:o.body,requestOptions:o.requestOptions,errorHandler:o.errorHandler?{strategy:o.errorHandler.strategy,defaultValue:o.errorHandler.defaultValue}:void 0};let c;if(n&&((d=r==null?void 0:r.serviceTransforms)!=null&&d[n]))c=r.serviceTransforms[n];else if(o.transform){const h=o.transform;c=f=>h.split(".").reduce((p,g)=>p==null?void 0:p[g],f)}t[e]=function(...h){const f=this,p=async v=>{try{const{default:E}=await Promise.resolve().then(()=>Bn),{resolvedPath:_,apiParams:R,finalBody:S,finalRequestOptions:O}=Nc(a,f,h,v),[L,Y]=await Uc(E,a.method,_,R,S,O);if(L)return jc(L,Y,a.errorHandler,f);let ae=Y;return c&&(ae=c(Y)),[null,ae]}catch(E){return[E.message||"Unknown error",null]}},g={[Gs]:!0,$request:p};return i(f,...h,g)}}function Dy(t,e,s,r,o,n,i){var f,p;const a=s.future,c=s.handler,u=c?(p=(f=r==null?void 0:r.futureHandlers)==null?void 0:f.handlers)==null?void 0:p[c]:void 0;if(!u){console.warn(`[declarative-model] Future action "${e}" on "${i}" references handler "${c}" but no binding was found. Skipping.`);return}const d=Oy();if(!d){console.error(`[declarative-model] Future lifecycle wrapper not registered. Cannot wire future action "${e}" on "${i}".`);return}t[e]=function(...g){return u(this,...g)};const h=d(t[e],e,{alias:a.alias,namespace:a.namespace,abortController:a.abortController??!1,trackerPolicy:a.trackerPolicy??"id"});o[e]={handler:h},a.alias&&n.set(e,a.alias)}function Ay(t,e){var a;if(!e.actions)return;const s=ss.get(e.model.modelTypeId),r=t[He]??{},o={},n=new Map;let i=0;for(const[c,u]of Object.entries(e.actions))u.service&&(u.lifecycle?$y(t,c,u,s,r):Cy(t,c,u,s)),u.future&&(Dy(t,c,u,s,o,n,e.model.modelTypeId),i++);if(Object.keys(r).length>0&&(t[He]=r),Object.keys(o).length>0&&(t[xt]=o),n.size>0&&(t[Pt]=n),i>0){const c={mode:"full",handlerProperty:"futureHandler"};if(i>1?t[oo]=c:t[ro]=c,(a=s==null?void 0:s.futureHandlers)!=null&&a.onFutureUpdate){const u=s.futureHandlers.onFutureUpdate;t.onFutureUpdate=function(d,h){u(this,d,h)}}}}const No={INIT:"init",LOAD:"load",READY:"ready",ACTIVATE:"activate",ONLINE:"online"};function Gn(t){return t?No[t]??No.INIT:No.INIT}const xy={string:"",number:0,boolean:!1,object:null,array:[]};function Ry(t){return t.default!==void 0?t.default:xy[t.type]??null}function Py(t){var i,a;const{model:e}=t,s=e.properties??{},r=ss.get(e.modelTypeId),o=function(c,u={}){this.id=c;for(const[d,h]of Object.entries(s))if((u==null?void 0:u[d])!==void 0)this[d]=u[d];else{const f=Ry(h);Array.isArray(f)?this[d]=[...f]:f!==null&&typeof f=="object"?this[d]={...f}:this[d]=f}if(u&&typeof u=="object")for(const[d,h]of Object.entries(u))!(d in s)&&d!=="parentId"&&(this[d]=h)};o.prototype.modelTypeId=e.modelTypeId;const n=["init","load","ready","activate","online","offline","unload","deactivate"];for(const c of n){const u=(i=r==null?void 0:r.lifecycle)==null?void 0:i[c];u?o.prototype[c]=async function(d){return u(this,d)}:(a=t.lifecycle)!=null&&a[c]&&console.warn(`[declarative-model] Lifecycle "${c}" declared on "${e.modelTypeId}" but no binding handler was found.`)}if(r!=null&&r.computed)for(const[c,u]of Object.entries(r.computed))Object.defineProperty(o.prototype,c,{get(){return u(this)},enumerable:!0,configurable:!0});if(r!=null&&r.actions)for(const[c,u]of Object.entries(r.actions))o.prototype[c]=function(...d){return u(this,...d)};return o}function ky(t,e){var o,n,i;if(!e.topics)return;const s=t[J]??{},r=ss.get(e.model.modelTypeId);for(const[a,c]of Object.entries(e.topics)){const u=c.handler;let d;if(u&&((o=r==null?void 0:r.topicHandlers)!=null&&o[u])){const p=r.topicHandlers[u],g=`__topic_${u}`;t[g]=function(v,E){p(this,v,E)},d=t[g]}else{const p=`__topic_merge_${a.replace(/[^a-zA-Z0-9]/g,"_")}`;t[p]=function(g){g&&typeof g=="object"&&Object.assign(this,g)},d=t[p]}(c.debounce||c.throttle||c.once)&&(d=Fn(d,{debounce:c.debounce,throttle:c.throttle,once:c.once}));const h=u&&((n=r==null?void 0:r.topicConditions)!=null&&n[u])?r.topicConditions[u]:()=>!0,f=u&&((i=r==null?void 0:r.topicTransforms)!=null&&i[u])?r.topicTransforms[u]:p=>p;s[a]={websocket:c.websocket??!0,fos:c.fos??!1,bridge:c.bridge??!1,handler:d,lifecycle:Gn(c.lifecycle),condition:h,transform:f,once:c.once,destinationAddress:c.destinationAddress,wildcardName:c.wildcardName}}t[J]=s}function Ly(t,e){if(!e.dependencies)return;const s=t[x]??{};for(const[r,o]of Object.entries(e.dependencies)){const n=(o.resolutionPolicy??"CREATE").toLowerCase();s[r]={modelType:o.modelType,id:o.id,options:o.options??{},lifecycle:Gn(o.lifecycle),resolutionPolicy:n}}t[x]=s}function Fy(t,e){var o;if(!e.configProperties)return;const s=t[x]??{},r=ss.get(e.model.modelTypeId);for(const[n,i]of Object.entries(e.configProperties)){const a=i.converter?{...i.converter}:void 0;a&&(typeof a.from=="string"&&(a.from={unit:a.from}),typeof a.to=="string"&&(a.to={unit:a.to}));let c;i.optionsExpander&&((o=r==null?void 0:r.configPropertyExpanders)!=null&&o[i.optionsExpander])&&(c=r.configPropertyExpanders[i.optionsExpander]),s[n]={modelType:"config-bean-prop-model",id:`${i.path}-${i.attribute}`,options:{path:i.path,attribute:i.attribute,serviceBasePath:i.serviceBasePath,converter:a,formatter:i.formatter,optionsExpander:c},lifecycle:"init",lazy:i.lazy}}t[x]=s}function Ny(t,e){if(!e.stateProperties)return;const s=t[x]??{};for(const[r,o]of Object.entries(e.stateProperties))s[r]={modelType:"state-prop-model",id:`${o.path}-${o.attribute}`,options:{path:o.path,attribute:o.attribute},lifecycle:"init"};t[x]=s}function Uy(t,e){e.container&&(t[io]={containerProperty:e.container.containerProperty||"container",includeMethods:e.container.includeMethods!==!1,includeGetters:e.container.includeGetters!==!1,modelsProperty:e.container.modelsProperty||"models",containerOptions:e.container.containerOptions??{},childModelType:e.container.childModelType})}function jy(t,e){var o;if(!e.effects)return;const s={},r=ss.get(e.model.modelTypeId);for(const[n,i]of Object.entries(e.effects)){const a=i.handler,c=(o=r==null?void 0:r.effectHandlers)==null?void 0:o[a];if(!c){console.warn(`[declarative-model] Effect "${n}" on "${e.model.modelTypeId}" references handler "${a}" but no binding was found. Skipping.`);continue}const u=typeof c=="function"?c:c.handler,d=typeof c=="object"?c.dependencies:void 0,h=function(){u(this)},f=i.dependencies,p=d??(f?g=>f.map(v=>v.split(".").reduce((E,_)=>E==null?void 0:E[_],g)):void 0);s[n]={dependencies:p,value:h,options:{fireImmediately:i.fireImmediately??!1}}}Object.keys(s).length>0&&(t[xe]=s)}function By(t,e){const s=e.model.modelTypeId;t[no]={loggerProperty:"logger"};let r;Object.defineProperty(t,"logger",{get(){return r||(r=Pn.create({modelTypeName:s,component:"kos-model"})),r},enumerable:!1,configurable:!0})}function Hy(t,e){var s;(s=e.logging)!=null&&s.group&&(t[Rt]={group:e.logging.group})}const hs=new Map,Ky={get(t){return hs.get(t)},has(t){return hs.has(t)},remove(t){return hs.delete(t)},clear(){hs.clear()}};function ou(t){var n;const{model:e}=t;if(!(e!=null&&e.modelTypeId))throw new Error("[declarative-model] model.modelTypeId is required in declarative config");const s=Py(t);By(s.prototype,t),ky(s.prototype,t),Fy(s.prototype,t),Ny(s.prototype,t),Ly(s.prototype,t),Uy(s.prototype,t),Ay(s.prototype,t),jy(s.prototype,t),Hy(s,t),(n=s.prototype)[_e]??(n[_e]={});const o=k({modelTypeId:e.modelTypeId,singleton:e.singleton??!1,optionsRequired:e.optionsRequired})(s);return hs.set(e.modelTypeId,o),o}function qy(t){return typeof t=="function"&&typeof t.keys=="function"}function pa(t){if(qy(t)){const e={};for(const s of t.keys())e[s]=t(s);return e}return t}function zy(t){let e=0,s=0;for(const[r,o]of Object.entries(t)){if(!o||typeof o!="object")continue;const n=o.default&&typeof o.default=="object"?o.default:o;for(const[i,a]of Object.entries(n))if(typeof a=="function"&&i.startsWith("register")&&i.endsWith("Bindings"))try{a(),e++}catch(c){s++,console.warn(`[declarative-model-discovery] Error executing ${i} from ${r}:`,c)}}s>0&&console.warn(`[declarative-model-discovery] Registered ${e} bindings with ${s} errors`)}function Vy(t){var r;let e=0,s=0;for(const[o,n]of Object.entries(t))try{const i=(n==null?void 0:n.default)??n;if(!((r=i==null?void 0:i.model)!=null&&r.modelTypeId)){console.warn(`[declarative-model-discovery] Skipping ${o}: missing model.modelTypeId`);continue}const a=ou(i);a.Registration&&(a.Registration.register(),e++)}catch(i){s++,console.warn(`[declarative-model-discovery] Error processing ${o}:`,i)}s>0&&console.warn(`[declarative-model-discovery] Registered ${e} models with ${s} errors`)}function Gy(t){const e=t.bindings?pa(t.bindings):{},s=pa(t.models);zy(e),Vy(s)}const at=m.createLogger({name:"kos-data-container"});class Yn{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"idx");l(this,"_maxCapacity");l(this,"_evictionStrategy");l(this,"_evictionBatchSize");l(this,"_insertionOrder",[]);l(this,"_accessTimes");l(this,"_customEvictionFilter");this._data=M.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1,this._optionsMap=(e==null?void 0:e.indexMap)||{};const s=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((r,o)=>(r[o]=void 0,r),{}):{};this._index=M.observable.map(s),this.idx=Re(),this._maxCapacity=e==null?void 0:e.maxCapacity,this._evictionStrategy=(e==null?void 0:e.evictionStrategy)||"fifo",this._evictionBatchSize=(e==null?void 0:e.evictionBatchSize)??Math.max(10,Math.ceil(((e==null?void 0:e.maxCapacity)??100)*.1)),this._customEvictionFilter=e==null?void 0:e.customEvictionFilter,this._evictionStrategy==="lru"&&this._maxCapacity&&(this._accessTimes=M.observable.map(new Map)),M.makeAutoObservable(this,{}),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new kn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}get revision(){return this._revision}addAll(e){M.runInAction(()=>{e.forEach(s=>this.addModel(s))})}removeAll(e){M.runInAction(()=>{e.forEach(s=>this.removeModel(s))})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){M.runInAction(()=>{this._revision=this._revision+1})}addModel(e,s){const r=this._ensureObservable(e);this._cleanupExistingDisposer(e.id),this._persistData(r),this._trackDataMetadata(r),this._enforceCapacityLimits(),this._configureDataMonitoring(r),s||this.increment()}_ensureObservable(e){return M.isObservable(e)?e:M.observable.object(e)}_cleanupExistingDisposer(e){if(!e)return;const s=this._disposerMap.get(e);s&&(s(),this._disposerMap.delete(e))}_persistData(e){this._data.set(e.id||"",e)}_trackDataMetadata(e){this._maxCapacity&&(this._insertionOrder.push(e.id||""),this._accessTimes&&this._accessTimes.set(e.id||"",Date.now()))}_enforceCapacityLimits(){this._maxCapacity&&this._data.size>this._maxCapacity&&this._evictModels()}_configureDataMonitoring(e){const s=M.observe(e,r=>{Object.values(this._optionsMap||{}).includes(r.name)&&this.increment()});this._disposerMap.set(e.id||"",s)}removeModel(e){this._data.delete(e);const s=this._insertionOrder.indexOf(e);s!==-1&&this._insertionOrder.splice(s,1),this._accessTimes&&this._accessTimes.delete(e),this.increment();const r=this._disposerMap.get(e);r&&(r(),this._disposerMap.delete(e))}updateModel(e){const s=M.observable.object(e);this._data.set(s.id||"",s),this.increment()}getModel(e){const s=this._data.get(e);return s&&this._accessTimes&&this._accessTimes.set(e,Date.now()),s}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(at.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(at.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return at.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}_evictModels(){if(!this._maxCapacity)return;const e=this._data.size-this._maxCapacity;if(e<=0)return;const s=Math.min(this._evictionBatchSize,e);this._logDataCapacityWarning(s);const r=this._selectDataForEviction(s);this._removeEvictedData(r),this._logDataEvictionComplete(r.length)}_logDataCapacityWarning(e){at.info(`Data container capacity exceeded (${this._data.size}/${this._maxCapacity}). Evicting ${e} items using ${this._evictionStrategy} strategy. This may indicate missing cleanup handlers or data inconsistency.`)}_selectDataForEviction(e){switch(this._evictionStrategy){case"fifo":return this._selectFifoData(e);case"lru":return this._selectLruData(e);case"custom":return this._selectCustomData(e);default:return this._selectFifoData(e)}}_selectFifoData(e){const s=[];for(let r=0;r<e&&this._insertionOrder.length>0;r++){const o=this._insertionOrder.shift();o&&this._data.has(o)&&s.push(o)}return s}_selectLruData(e){const s=[];return this._accessTimes&&Array.from(this._accessTimes.entries()).sort((o,n)=>o[1]-n[1]).slice(0,e).forEach(([o])=>{this._data.has(o)&&s.push(o)}),s}_selectCustomData(e){return this._customEvictionFilter?this._customEvictionFilter(this.data).slice(0,e).map(r=>r.id):(at.error("Custom eviction strategy specified but no customEvictionFilter provided. Falling back to FIFO."),this._selectFifoData(e))}_removeEvictedData(e){e.forEach(s=>{var o;const r=this._data.get(s);at.info(`Evicting data item: ${s}`,{itemId:s,itemType:r?(o=r.constructor)==null?void 0:o.name:"unknown",strategy:this._evictionStrategy}),this.removeModel(s)})}_logDataEvictionComplete(e){at.info(`Evicted ${e} data items. Current size: ${this._data.size}/${this._maxCapacity}`)}async clear(){this._data.clear(),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id}))}}}class Yy{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"childRegistration");l(this,"model");this.type=e,this.model=s,this.childRegistration=r}get factory(){return ue.Factory.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!1,factory:this.factory},...this.childRegistration}}get predicate(){return $e(this.type)}}class Wy{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"model");l(this,"childRegistration");this.type=e,this.model=s,this.childRegistration=r}get factory(){return ue.Singleton.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!0,factory:this.factory},...this.childRegistration}}get predicate(){return $e(this.type)}}class nu{constructor(){l(this,"_token");M.makeAutoObservable(this),C("token",e=>{this.token=e==null?void 0:e.body})}get token(){return this._token}set token(e){this._token=e}}class iu{constructor(){l(this,"routes",[]);l(this,"openApiRoutes",[])}use(e,s,...r){this.routes.push({method:e,path:s,middlewares:r});const o=this.extractOpenApiParams(s);this.openApiRoutes.push({method:e,path:s,parameters:o})}remove(e,s){const r=this.routes.length;return this.routes=this.routes.filter(o=>!(o.method===e&&o.path===s)),this.openApiRoutes=this.openApiRoutes.filter(o=>!(o.method===e&&o.path===s)),r-this.routes.length}removeAllForPath(e){const s=this.routes.length;return this.routes=this.routes.filter(r=>r.path!==e),this.openApiRoutes=this.openApiRoutes.filter(r=>r.path!==e),s-this.routes.length}getRoutes(){return this.routes.map(e=>({method:e.method,path:e.path}))}async handle(e,s){var a;const{path:r,query:o,params:n}=this.extractPathParams(e.path),i={...e,params:n,query:o};for(const c of this.routes){const u=this.matchRoute(c.path,r);if(c.method===e.method&&u){i.params=u;let d=0;const h=async()=>{if(d<c.middlewares.length){const f=c.middlewares[d++];await f(i,s,h)}};await h();return}}(a=s.status)==null||a.call(s,404).send({error:"Route not found"})}extractOpenApiParams(e){return e.split("/").filter(s=>s.startsWith(":")).map(s=>({name:s.slice(1),in:"path",required:!0,schema:{type:"string"}}))}generateOpenApiSpec(){const e={};for(const s of this.openApiRoutes)e[s.path]||(e[s.path]={}),e[s.path][s.method.toLowerCase()]={summary:s.description||`Handles ${s.method} ${s.path}`,parameters:s.parameters||[],responses:{200:{description:"Successful response"}}};return{openapi:"3.0.0",info:{title:"Kos Router API",version:"1.0.0",description:"Dynamically generated OpenAPI documentation"},paths:e}}extractPathParams(e){const[s,r]=e.split("?"),o=this.parseQueryParams(r);for(const n of this.routes){const i=this.matchRoute(n.path,s);if(i)return{path:s,query:o,params:i}}return{path:s,query:o,params:{}}}matchRoute(e,s){const r=e.split("/").filter(Boolean),o=s.split("/").filter(Boolean);if(r.length!==o.length)return null;const n={};for(let i=0;i<r.length;i++)if(r[i].startsWith(":"))n[r[i].slice(1)]=decodeURIComponent(o[i]);else if(r[i]!==o[i])return null;return n}parseQueryParams(e){return e?e.split("&").reduce((s,r)=>{const[o,n]=r.split("=").map(decodeURIComponent);return s[o]=n??"",s},{}):{}}}const au=m.createLogger({name:"intent-service"}),Qy=t=>{Mn(`/kos/intent/${t.type}`)?K(`/kos/intent/${t.type}`,t.options,{"kos.intent.type":t.type}):au.info(`No subscribers for intent ${t.type}. Intent not sent.`)},Zy=async t=>new Promise(e=>{const{type:s,options:r}=t;if(Mn(`/kos/intent/${t.type}`)){const o=vt(),{unsubscribe:n}=C(o,a=>{clearTimeout(i),n(),a&&(a.headers=a.headers||{},a.headers["kos.intent.type"]=s,a.headers.responseId=o),e([null,{body:a==null?void 0:a.body,payload:a}])}),i=setTimeout(()=>{n(),e([`Intent ${s} timed out after 1 second`,null]),console.warn(`Intent ${s} timed out after 1 second`)},1e3);K(`/kos/intent/${s}`,r,{"kos.intent.type":s,sync:o})}else au.info(`No subscribers for intent ${t.type}. Intent not sent.`),e([null,{body:void 0,payload:void 0}])}),je=m.createLogger({name:"app-startup-service"});async function cu(t,e={}){const{timeout:s=3e4,throwOnTimeout:r=!0,requirePostStarted:o=!1}=e;if(t.length===0)return je.warn("No app IDs provided to waitForAppsToStart"),!0;je.debug(`Waiting for apps to start: ${t.join(", ")}`);try{const n=t.map(c=>`/kos/app/started/${c}`),i=await Sn(n,{getCurrentState:async()=>{try{const{default:c}=await Promise.resolve().then(()=>Bn),[u,d]=await c.get("/api/kos/apps/started");return u?(je.error("Error fetching started apps:",u),[]):d}catch(c){je.error("Failed to fetch app startup status:",c)}return[]},shouldUseFetchedState:c=>t.every(u=>{const d=c.find(h=>h.appId===u);return!(!d||!d.started||o&&!d.postStarted)}),timeout:s}),a=t.filter(c=>{const u=i.find(d=>d.appId===c);return!!(!u||!u.started||o&&!u.postStarted)});if(a.length>0){const c=`Apps not started: ${a.join(", ")}`;if(je.error(c),r)throw new Error(`App startup timeout: ${c}`);return!1}return je.info(`All apps started successfully: ${t.join(", ")}`),!0}catch(n){const i=`Failed to wait for apps to start: ${t.join(", ")}`;if(je.error(i,n),r)throw new Error(`${i} - ${n instanceof Error?n.message:String(n)}`);return!1}}async function Xy(t,e={}){return cu([t],e)}async function Jy(t,e=!1){const s={};try{const r=await exports.kosFetch("kos:///api/kos/apps/started");if(!r.ok)return t.forEach(i=>s[i]=!1),s;const o=await r.json(),n=(o==null?void 0:o.data)??[];t.forEach(i=>{const a=n.find(c=>c.appId===i);s[i]=(a==null?void 0:a.started)===!0&&(!e||(a==null?void 0:a.postStarted)===!0)})}catch(r){je.error("Failed to check app startup status:",r),t.forEach(o=>s[o]=!1)}return s}async function eb(){try{const t=await exports.kosFetch("kos:///api/kos/apps/started");if(!t.ok)return[];const e=await t.json();return(e==null?void 0:e.data)??[]}catch(t){return je.error("Failed to fetch started apps:",t),[]}}const tn=M.when,Wn=M.computed,te=M.runInAction,Z=M.autorun,lu=M.reaction,Qn=M.observable,Zn="Not Assigned",tb="kos.trouble.added",sb="kos.trouble.removed";var Se=(t=>(t.TroubleRank="kos.trouble.rank.mapper",t.TroubleColor="kos.trouble.color.mapper",t.TroubleRole="kos.trouble.role.mapper",t))(Se||{}),$s=(t=>(t.TIME_CHANGE="/kos/internal/time/time",t.DAY_CHANGE="/kos/internal/time/day",t.TIMEZONE_CHANGE="/kos/internal/time/timezone",t))($s||{});const uu=m.createLogger({name:"config-bean-service",group:"Services"}),Xn=exports.BASE_URL,du=t=>(t==null?void 0:t.decimals)!==void 0,{postModel:rb,getOne:ob}=ie.build({destinationAddress:"",basePath:`${Xn}/kos/config/`}),hu=async(t,e,s="/api/kos/config")=>(uu.debug(`sending modify request for ConfigBean: ${t}`),rb({model:e,urlOverride:`${Xn}${s}/${t}`})),fu=async(t,e="/api/kos/config")=>(uu.debug(`sending get request for ConfigBean: ${t}`),await ob({urlOverride:`${Xn}${e}/details/${t}/15`})),Jn=t=>t.toLowerCase()==="true"||t.toLowerCase()==="false",uo=t=>{try{const e=Number(t);return!isNaN(e)}catch{return!1}};function pu(t=[]){return t.reverse().reduce((e,s)=>{const{overrides:r}=s;return r&&(e={...e,...r}),e},{})}function gu(t,e="",s={}){for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){const o=e?`${e}.${r}`:r;typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])?gu(t[r],o,s):s[o]=t[r]}return s}const mu=(t,e)=>{const s=t.details[0].bean||pu(t.details[0].scopes),r=gu(s);M.runInAction(()=>{const o={...r};e.props.setValues(o)})},yu=(t,e)=>{M.runInAction(()=>{const s=t.changes.reduce((n,i)=>(n[i.attr]=i,n),{}),r=t.scopedChanges.reduce((n,i)=>{const a=n[i.attr];return a&&(n[i.attr]={...a,currentValue:i.currentValue??a.currentValue,previousValue:i.previousValue??a.previousValue}),n},s);Object.values(r).forEach(n=>{const i=n.attr;let a=n.currentValue,c=n.previousValue;typeof a=="string"&&Jn(a)&&(a=a.toLowerCase()=="true",c=(c==null?void 0:c.toLowerCase())=="true"),typeof a=="string"&&uo(a)&&(a=Number(a),c=Number(c)),e.props[i]=a,e.prevProps[i]=c})})},bu=t=>Object.fromEntries(t.props.entries),nb=t=>e=>s=>t.build(e,s);var ib=Object.defineProperty,ab=Object.getOwnPropertyDescriptor,vu=(t,e,s,r)=>{for(var o=r>1?void 0:r?ab(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ib(e,s,o),o};function cb(t,e){for(const s of t)if(new RegExp(`^${s}$`).test(e))return s}const ei="config-bean-model",cr=m.getLogger(ei),lb=yt("path");let Ir=class{constructor(t,e){l(this,"_modifyConfigBean");l(this,"_getConfigBean");l(this,"_schema");l(this,"id");l(this,"path");l(this,"props");l(this,"prevProps");l(this,"serviceBasePath");Object.assign(this,e),this.id=t,this.path=e.path,this.serviceBasePath=e.serviceBasePath;const{modifyConfigBean:s=hu,getConfigBean:r=fu}=e;this._modifyConfigBean=s,this._getConfigBean=r,this.props=Re(),this.prevProps=Re()}get values(){return this.props.values}async ready(){cr.debug(`readying config bean ${this.path}`),cr.debug(`complete readying config bean ${this.path}`)}async load(){cr.debug(`loading config bean ${this.path}`);const t=await this._getConfigBean(this.path,this.serviceBasePath);if(t!=null&&t.data){const e=t.data;mu(e,this),cr.debug(this.values);const s=t==null?void 0:t.data.details[0].schema;te(()=>{s&&(this._schema=s)})}}get schemaKeys(){var t;return Object.keys(((t=this._schema)==null?void 0:t.schema)||{})}getSchemaForProperty(t){var s,r;if(this.schemaKeys.includes(t))return(s=this._schema)==null?void 0:s.schema[t];const e=cb(this.schemaKeys,t);if(e)return(r=this._schema)==null?void 0:r.schema[e]}async updateProperty(t,e){this.props[t]=e,await this.updateConfigBean()}async updateConfigBean(){const t=bu(this);await this._modifyConfigBean(this.path,t,this.serviceBasePath)}handleConfigBeanUpdated(t){yu(t,this)}};vu([B({topic:`/kos/config/${lb}`,websocket:!0})],Ir.prototype,"handleConfigBeanUpdated",1);Ir=vu([k(ei)],Ir);const xs=new we({class:Ir,type:ei}),ho=({path:t,lazy:e,serviceBasePath:s})=>(r,o)=>{r[x]=r[x]||{},r[x][o]={modelType:xs.type,id:`${xs.type}-${t}`,options:{path:t,serviceBasePath:s},lifecycle:D.INIT,lazy:e}},{URL:wu}=de(),{getOne:ub,getAll:db}=ie.build({basePath:`${wu}/api/kos/regions/info`}),Eu=async()=>{try{return await ub({})}catch{return}},Mu=async()=>{try{return await db({urlOverride:`${wu}/api/kos/regions`})}catch{return}},hb=Object.freeze(Object.defineProperty({__proto__:null,getRegionInfo:Eu,getRegions:Mu},Symbol.toStringTag,{value:"Module"}));var fe=(t=>(t[t.family=0]="family",t[t.scale=1]="scale",t[t.offset=2]="offset",t[t.decimals=3]="decimals",t[t.alias=4]="alias",t[t.system=5]="system",t))(fe||{});const Tu={s:["time",1,0,0],second:["time",1,0,0],m:["time",1/60,0,0],minute:["time",1/60,0,0],h:["time",1/3600,0,0],hour:["time",1/3600,0,0],day:["time",1/86400,0,0],week:["time",1/604800,0,0],month:["time",1/2628e3,0,0],year:["time",1/31536e3,0,0],default:["time",1/.001,0,0],ms:["time",1/.001,0,0],millisecond:["time",1/.001,0,0],microsecond:["time",1/1e-6,0,0],nanosecond:["time",1/1e-9,0,0],picosecond:["time",1/1e-12,0,0]};function fb(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return o[n.name]=i,n.alias&&(o[n.alias]=i),o},{...Tu});return{...t,...r}}function pb(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{},a=i[s]||{};i[s]=a;const c=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return a[n.name]=c,n.alias&&(a[n.alias]=c),Object.hasOwn(n,"default")&&Object.defineProperty(a,"default",{value:c,writable:!0,enumerable:!0,configurable:!0}),o[n.measure]=i,o},{time:{[s]:{...Tu}}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}function gb(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{};return Object.hasOwn(n,"default")&&(i[s]=n.name),o[n.measure]=i,o},{time:{[s]:"millisecond"}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}var mb=Object.defineProperty,yb=Object.getOwnPropertyDescriptor,ti=(t,e,s,r)=>{for(var o=r>1?void 0:r?yb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&mb(e,s,o),o};const wr="region-info-model",us=m.createLogger({name:"region-info-model"});let Rs=class{constructor(t){l(this,"id");l(this,"unitSystemMap");l(this,"measureMap");l(this,"defaultMeasureMap");l(this,"regionMap");l(this,"timeFormats");l(this,"dateFormats");l(this,"unitSystems");l(this,"regionSource");l(this,"region");l(this,"regions",[]);l(this,"timeZoneMap",{});this.id=t,this.unitSystems={},this.unitSystemMap={},this.measureMap={},this.defaultMeasureMap={},this.timeFormats={},this.regions=[],this.dateFormats={},this.timeZoneMap={},this.regionMap={}}get availableRegions(){return this.regions}get defaultUnitSystem(){return String(this.regionSource.props.unitSystemId).toLowerCase()||""}get unitSystemId(){return this.defaultUnitSystem}get timeFormatId(){const t=this.regionSource.props.timeFormatId;if(!t)return"";const e=String(t),s=this.timeFormats[e];return s?String(s.id):""}get selectedTimeFormat(){const t=this.timeFormatId;return t?String(this.timeFormats[t].format):"HH:mm:ss"}get is12HourTimeFormat(){const t=this.timeFormatId;return t?this.timeFormats[t].ampm:!0}get dateFormatId(){const t=this.regionSource.props.dateFormatId;if(!t)return"";const e=String(t);return e?this.dateFormats[e].id:""}get selectedDateFormat(){const t=this.dateFormatId;return t?this.dateFormats[t].format:""}get selectedDateOrder(){const t=this.dateFormatId;return t?this.dateFormats[t].order.toLowerCase():"dmy"}get selectedCountry(){return this.regionSource.props.country||"en"}get selectedTimeZone(){return this.regionSource.props.timeZone||""}get timeZones(){return this.regionId?this.timeZoneMap[this.regionId]||[]:[]}get allTimeZones(){return Intl.supportedValuesOf("timeZone")}get regionId(){return this.region.props.regionId||""}get selectedRegion(){return this.regionMap[this.regionId]}get selectedUnitSystem(){return String(this.regionSource.props.unitSystemId)||""}get timeFormatOptions(){return Object.keys(this.timeFormats).map(t=>({id:t,format:this.timeFormats[t].format,ampm:this.timeFormats[t].ampm}))}get dateFormatOptions(){return Object.keys(this.dateFormats).map(t=>({id:t,format:this.dateFormats[t].format,order:this.dateFormats[t].order}))}get unitSystemOptions(){return Object.keys(this.unitSystems).map(t=>({id:t,name:t}))}setSelectedTimeFormat(t){if(!this.timeFormatOptions.find(e=>e.id===t))throw Error(`Invalid time format id. Must be one of ${this.timeFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("timeFormatId",t)}setSelectedDateFormat(t){if(!this.dateFormatOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.dateFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("dateFormatId",t)}setSelectedUnitSystem(t){if(!this.unitSystemOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.unitSystemOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("unitSystemId",t)}getUnitSystem(t){if(!t)return this.defaultUnitSystem;const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[fe.system]}getUnitMeasure(t){const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[fe.family]}getDefaultUnitDecimalPlaces(t,e,s){if(!t||!e)throw Error("Measure and unit system are required");const r=s==="drt"?"second":s,o=this.measureMap[t];if(!o)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const n=o[e.toLowerCase()];if(!n)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(o).join(", ")}`);const i=n[r||"default"];if(!i)throw Error(`No unit "${r||"default"}" found for measure: ${t} and unit system: ${e}. Unit should come from list of units: ${Object.keys(n).join(", ")}`);return i[fe.decimals]}getDefaultUnitForMeasure(t,e){if(!t||!e)throw Error("Measure and unit system are required");const s=this.defaultMeasureMap[t];if(!s)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const r=s[e.toLowerCase()];if(!r)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(s).join(", ")}`);return r}convertByUnit(t,e,s){if(e[fe.family]!==s[fe.family])throw new Error(`Cannot convert between units of different families: ${e[fe.family]} and ${s[fe.family]}`);const r=e[fe.offset],o=e[fe.scale],n=s[fe.scale],i=s[fe.offset],a=s[fe.decimals];return((t-r)/(o/n)+i).toFixed(a)}convertByUnitName(t,e,s){const r=this.unitSystemMap[e],o=this.unitSystemMap[s];if(!r||!o)throw new Error(`No unit found with name: ${e} or ${s}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return this.convertByUnit(t,r,o)}convert(t,e,s){var a,c;if(e.unit&&s.unit)return this.convertByUnitName(t,e.unit,s.unit);const r=e.unit||"",o=s.unit||"";let n=this.unitSystemMap[r],i=this.unitSystemMap[o];if(!i&&s.measure&&s.system){const u=this.measureMap[s.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);i=(a=u[s.system])==null?void 0:a.default,i||us.info("Could not find default unit for measure",s.measure)}if(!n&&e.measure&&e.system){const u=this.measureMap[e.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);n=(c=u[e.system])==null?void 0:c.default,n||us.info("Could not find default unit for measure",e.measure)}return!n||!i?(us.warn("Could not find unit to convert to or from. Return value as is"),String(t)):this.convertByUnit(t,n,i)}async init(){us.debug("initializing region info")}async load(){us.debug("loading region info");const t=await Mu();t&&(this.regions=t.data.map(s=>s.id),this.timeZoneMap=t.data.reduce((s,r)=>({...s,[r.id]:r.timeZones}),this.timeZoneMap),this.regionMap=t.data.reduce((s,r)=>({...s,[r.id]:r}),{}));const e=await Eu();e&&(this.unitSystems=e.data.unitSystems.reduce((s,r)=>{const o={id:r.id,name:r.id};return s[r.id]=o,s},this.unitSystems),this.unitSystemMap=e.data.unitSystems.reduce(fb,{}),this.measureMap=e.data.unitSystems.reduce(pb,{}),this.defaultMeasureMap=e.data.unitSystems.reduce(gb,{}),this.timeFormats=e.data.timeFormats.reduce((s,r)=>({...s,[r.id]:r}),{}),this.dateFormats=e.data.dateFormats.reduce((s,r)=>({...s,[r.id]:r}),{}))}async ready(){var t,e;await((e=(t=this.regionSource).ready)==null?void 0:e.call(t))}};ti([ho({path:"kos:service:region:settings"})],Rs.prototype,"regionSource",2);ti([ho({path:"kos:service:region"})],Rs.prototype,"region",2);Rs=ti([k(wr)],Rs);const ne={registration:{[wr]:{class:Rs,singleton:!0}},type:wr,factory:ue.Singleton.create(wr)},$r=({source:t,defaultSystem:e="si",defaultMeasure:s})=>{let r={system:e,measure:s};return typeof t=="string"?r={...r,unit:t}:r={...r,...t},r},si=(t,e,s)=>{const{model:r}=Pe(ne.type);if(!r)throw new Error("RegionInfo model not found");if(!Or(r))throw new Error("RegionInfo model not ready");const o={system:r.defaultUnitSystem},n=$r({source:e}),i=$r({source:s||o,defaultMeasure:r.getUnitMeasure(n.unit||"")});return r.convert(t,n,i)};function ga(t,e,s){const r=e.toLowerCase().replace(/_/g,"-").replace(/s$/,""),o=new Intl.NumberFormat().resolvedOptions().locale??"en-US";try{const n=(s==null?void 0:s.mode)||"long",i=(s==null?void 0:s.maxDecimals)??2,a=(s==null?void 0:s.minDecimals)??0;return new Intl.NumberFormat(o,{style:"unit",unit:r,unitDisplay:n,minimumFractionDigits:a,maximumFractionDigits:i}).format(t)}catch{return e}}const bb=(t,e,s,r)=>{const o=si(t,e,s),n=$r({source:e}),{model:i}=Pe(ne.type);if(!i)throw new Error("RegionInfo model not found");const a=i.getUnitMeasure(n.unit||""),c={system:i.defaultUnitSystem},u=$r({source:s||c,defaultMeasure:i.getUnitMeasure(n.unit||"")}),d=i.getDefaultUnitForMeasure(a,u.system),h=i.getDefaultUnitDecimalPlaces(a,u.system),f={...r,minDecimals:(r==null?void 0:r.minDecimals)??h,maxDecimals:(r==null?void 0:r.maxDecimals)??h};return{value:o,unit:d||n.unit||"",display:ga(o,d||n.unit||"",{...f,mode:"long"}),shortDisplay:ga(o,d||n.unit||"",{...f,mode:"short"})}};function ma({start:t,end:e,count:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<2)throw new Error("Count should be at least 2 for distribution.");if(t>=e)throw new Error("Start should be less than end.");const o=(e-t)/(s-1),n=[];for(let i=0;i<s;i++){const a=Math.round(t+i*o);n.push(a.toFixed(r))}return n}function ya({start:t,end:e,interval:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<=0)throw new Error("Interval should be a positive number.");if(t>=e)throw new Error("Start should be less than end.");const o=[];let n=t;for(;n<=e;)o.push(n.toFixed(r)),n+=s;return o[o.length-1]!==e.toString()&&o.push(e.toString()),o}const Ot=(t,e)=>s=>!t||!e?s:uo(s)?si(Number(s),t,e):s,vb=(t,e,s,r)=>{if((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options))return[];if(t.options.type==="rangeCount")return ma(t.options).map(Ot(s,r));if(t.options.type==="rangeInterval")return ya(t.options).map(Ot(s,r));if(t.options.type==="list"){const{list:o}=t.options;return o.map(Ot(s,r))}else{if(t.options.type==="unitSystemRangeCount"&&e)return ma(t.options.unitSystems[e]).map(Ot(s,r));if(t.options.type==="unitSystemRangeInterval"&&e)return ya(t.options.unitSystems[e]).map(Ot(s,r));if(t.options.type==="unitSystemList"&&e){const{list:o}=t.options.unitSystems[e];return o.map(Ot(s,r))}}return[]},wb=(t,e)=>{if(!((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options)))return t.options.type==="unitSystemRangeCount"&&e?{type:"rangeCount",...t.options.unitSystems[e]}:t.options.type==="unitSystemRangeInterval"&&e?{type:"rangeInterval",...t.options.unitSystems[e]}:t.options.type==="unitSystemList"&&e?{type:"list",...t.options.unitSystems[e]}:t.options.type==="unitSystemKeypad"&&e?{type:"keypad",...t.options.unitSystems[e]}:t.options};var Eb=Object.defineProperty,Mb=Object.getOwnPropertyDescriptor,ri=(t,e,s,r)=>{for(var o=r>1?void 0:r?Mb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Eb(e,s,o),o};function Tb(t){return(t==null?void 0:t.type)==="enum"}function _b(t){switch(t){case"s":return"second";case"ms":return"millisecond";case"min":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"m":return"month";case"y":return"year";case"ml":return"milliliter";default:return t}}function Sb(t,e){const s=new Date;s.setHours(0,0,0,0);const r=new Date(s.getTime()+t*1e3);return Ze.format(r,e)}const Er="config-bean-prop-model",It=m.createLogger({name:"config-bean-prop-model"}),Ob=yt("path"),Ib=yt("serviceBasePath");let Ps=class{constructor(t,e){l(this,"id");l(this,"path");l(this,"attribute");l(this,"converter");l(this,"formatter");l(this,"optionsExpander");l(this,"serviceBasePath");l(this,"regionInfo");l(this,"bean");this.id=t,this.path=e.path,this.attribute=e.attribute,this.converter=e.converter,this.formatter=e.formatter,this.serviceBasePath=e.serviceBasePath,this.optionsExpander=e.optionsExpander}getDefaultUnitDecimalPlaces(t,e,s){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return du(this.displayOptions)?this.displayOptions.decimals:this.regionInfo.getDefaultUnitDecimalPlaces(t,e,s)}getDefaultUnitForMeasure(t,e){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return this.regionInfo.getDefaultUnitForMeasure(t,e)}get schemaType(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.type?t.type:"String"}get schemaFormat(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.format?_b(t.format):""}get options(){var i;const t=this.regionInfo.defaultUnitSystem,e=this.getConverter(),s=((i=e==null?void 0:e.to)==null?void 0:i.system)??t,r=this.bean.getSchemaForProperty(this.attribute),o=Tb(r)?r.values:vb(r,s,e==null?void 0:e.from,e==null?void 0:e.to),n=o.length>0?o.map(a=>({label:a,value:a})):[];return this.optionsExpander?typeof this.optionsExpander=="function"?this.optionsExpander(s,o):this.optionsExpander:n}convertUnit(t,e,s){const r=(t==null?void 0:t.measure)||s,o=(t==null?void 0:t.system)||e,n=t==null?void 0:t.unit;return{measure:r,system:o,unit:n}}getConverterUnits(){const t=this.regionInfo.defaultUnitSystem,e=this.getConverter();if(!e)throw Error("No converter defined");const s=e.measure,r=this.convertUnit(e.from,"si",s),o=this.convertUnit(e.to,t,s);return{backend:r,display:o}}set value(t){this.updateProperty(t)}get value(){return this.getValue(!0)}get rawValue(){return this.bean.props[this.attribute]}get significantValue(){var o,n;const t=this.value,e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=(s==null?void 0:s.measure)||((o=s==null?void 0:s.to)==null?void 0:o.measure);if(!isNaN(t)&&s&&r){const i=this.getDefaultUnitDecimalPlaces(r,e,(n=s==null?void 0:s.to)==null?void 0:n.unit);try{const c=this.getFormatterOptions(s);if(c){let u=String(t);return u=c.formatToParts(Number(t))[0].value,Number(u)}}catch(c){It.info(`error formatting value ${t}`,c)}return Number(t).toFixed(i)}return t}get previousValue(){return this.getValue(!1)}getValue(t){const e=this.bean[t?"props":"prevProps"][this.attribute];if(typeof e=="boolean")return e;if(this.getConverter()&&!isNaN(e)){const{backend:r,display:o}=this.getConverterUnits();return this.regionInfo.convert(Number(e),r,o)}return e||""}async activate(){It.debug(`activating config bean ${this.id}`)}get displayValue(){const t=this.value;if(typeof t=="boolean")return String(t);if(this.schemaFormat==="drt"){const s=this.regionInfo.is12HourTimeFormat?"h:mm:ss a":"HH:mm:ss";return Sb(t,s)}if(!isNaN(t))try{const e=this.getConverter(),s=this.getFormatterOptions(e);if(s){let r=String(t);return r=s.format(Number(t)),r}}catch(e){It.error(`error formatting value ${t}`,e)}return String(t)}get unit(){const t=this.getConverter();if(!isNaN(this.value)){const e=this.getFormatterOptions(t);if(e){const r=e.formatToParts(Number(this.value)).find(o=>o.type==="unit");return(r==null?void 0:r.value)??this.getDefaultUnit(t)}}return this.getDefaultUnit(t)}get displayOptions(){var o;const t=this.bean.getSchemaForProperty(this.attribute),e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=((o=s==null?void 0:s.to)==null?void 0:o.system)??e;return wb(t,r)}getMeasureFromFormat(){const t=this.schemaFormat;return t?this.regionInfo.getUnitMeasure(t):""}getConverterFromFormat(){const t=this.getMeasureFromFormat();if(t){const e=this.regionInfo.selectedUnitSystem;return{unit:this.schemaFormat||this.regionInfo.getDefaultUnitForMeasure(t,e),measure:t}}return{}}getDefaultUnit(t){var r,o;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure;return s?((r=t==null?void 0:t.to)==null?void 0:r.unit)||this.getDefaultUnitForMeasure(s,((o=t==null?void 0:t.to)==null?void 0:o.system)||e):this.getConverterFromFormat().unit}getFormatterOptions(t){var n,i,a;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure,r=new Intl.NumberFormat().resolvedOptions().locale;let o=null;if(s||this.formatter){const c=s?{style:"unit",unit:this.getDefaultUnit(t)}:null,u=this.formatter||c;if(u){let d=typeof u=="function"?u(((n=t==null?void 0:t.to)==null?void 0:n.system)||e):u;s&&(d={unit:this.getDefaultUnit(t),...d},d.style==="unit"&&(d.maximumFractionDigits=d.maximumFractionDigits??this.getDefaultUnitDecimalPlaces(s,((i=t==null?void 0:t.to)==null?void 0:i.system)||e,(a=t==null?void 0:t.to)==null?void 0:a.unit)));try{o=new Intl.NumberFormat(r,{...d})}catch(h){It.error(`error creating formatter ${d}. Returning the raw value`,h)}}else It.debug(`no formatter found for config bean prop ${this.id}. Returning the raw value`)}return o}getConverter(){var r,o,n,i,a,c,u,d,h,f,p;const{unit:t,measure:e}=this.getConverterFromFormat(),s=t==="drt"?"second":t;if(this.converter){const g=(r=this.converter)==null?void 0:r.measure,v=(n=(o=this.converter)==null?void 0:o.to)==null?void 0:n.measure,E=(a=(i=this.converter)==null?void 0:i.from)==null?void 0:a.measure,_=g||v||E||e,R=((u=(c=this.converter)==null?void 0:c.to)==null?void 0:u.unit)||this.regionInfo.getDefaultUnitForMeasure(_,((h=(d=this.converter)==null?void 0:d.to)==null?void 0:h.system)??this.regionInfo.defaultUnitSystem),S=((p=(f=this.converter)==null?void 0:f.to)==null?void 0:p.system)??this.regionInfo.getUnitSystem(R),O=this.schemaFormat==="drt"?"second":this.schemaFormat||s;return{...this.converter,from:{unit:O,...this.converter.from},to:{...this.converter.to,unit:R,system:S},measure:_}}if(s&&e){const g=this.regionInfo.getDefaultUnitForMeasure(e,this.regionInfo.defaultUnitSystem),v=this.regionInfo.getUnitSystem(s),E=this.regionInfo.getUnitSystem(g);return{measure:e,to:{unit:v===E?s:g}}}}async updateProperty(t){It.debug(`updating property ${this.attribute} with value ${t}`);let e=t;if(this.getConverter()&&!isNaN(e)){const{backend:o,display:n}=this.getConverterUnits();e=this.regionInfo.convert(Number(e),n,o)}const r=Array.isArray(e)?JSON.stringify(e):String(e);await this.bean.updateProperty(this.attribute,r)}};ri([Jt({modelType:ne.type})],Ps.prototype,"regionInfo",2);ri([ho({path:Ob,serviceBasePath:Ib})],Ps.prototype,"bean",2);Ps=ri([k(Er)],Ps);const wt={registration:{[Er]:{class:Ps,singleton:!1}},type:Er,factory:ue.Factory.create(Er)};function $b(t){const{path:e,attribute:s,converter:r,formatter:o,lazy:n,optionsExpander:i,serviceBasePath:a}=t,c=r;return c&&(typeof c!="function"&&typeof c.from=="string"&&(c.from={unit:c.from}),typeof c!="function"&&typeof c.to=="string"&&(c.to={unit:c.to})),(u,d)=>{u[x]=u[x]||{},u[x][d]={modelType:wt.type,id:`${e}-${s}`,options:{path:e,attribute:s,serviceBasePath:a,converter:c,formatter:o,optionsExpander:i},lifecycle:D.INIT,lazy:n}}}const oi=t=>({id:String(t.id),progress:t.progress,remainingTimeMs:t.remainingTimeMs,endState:t.endState,reason:t.reason,clientData:t.clientData,reasonData:t.reasonData,note:t.note,tracker:t.tracker}),ni=(t,e)=>{m.debug(`future dto ${t.id} end state ${t.endState}`),m.debug(`future model ${e.id} end state ${e.endState}`),e.endState?m.debug(`future model ${e.id} is already complete`):(m.debug(`updating future model ${e.id}`),M.runInAction(()=>{const s=oi(t);te(()=>{Object.keys(s).forEach(r=>{r==="id"?(e.futureId=s.id,s.tracker||(e.id=s.id)):r==="tracker"?e.id=s.tracker:e[r]=s[r]})})}))},_u=t=>e=>s=>t.build(String(e),s),ii=t=>e=>Jl(oi,_u(t)(e.tracker||e.id))(e),fo=m.createLogger({name:"future-service",group:"Services"}),{isMock:Cb,URL:Qs}=de();var et=(t=>(t.Success="SUCCESS",t.Fail="FAIL",t.Aborted="ABORT",t.Canceled="CANCEL",t))(et||{});const{getAll:Db,modifyModel:Ab,addModel:xb,deleteModel:Rb,postModel:Pb}=ie.build({destinationAddress:"",basePath:`${Qs}/api/future`,mock:Cb}),kb=async()=>await Db({}),Su=async(t,e="/api/kos/future")=>(fo.info(`sending delete request for Future: ${t}`),await Rb({id:t,urlOverride:`${Qs}${e}/${t}`})),Ou=async(t,e="/api/kos/future")=>(fo.info("sending add request for Future"),await xb({model:t,urlOverride:`${Qs}${e}`})),Lb=async(t,e,s="/api/kos/future")=>(fo.info(`sending modify request for Future: ${t}`),Ab({model:e,id:t,urlOverride:`${Qs}${s}/${t}`})),Iu=async(t,e="/api/kos/future")=>(fo.info(`sending cancel request for Future: ${t}`),Pb({urlOverride:`${Qs}${e}/${t}/cancel`,ordered:!0,model:{}})),$u=Ye();var Fb=Object.defineProperty,Nb=Object.getOwnPropertyDescriptor,Cu=(t,e,s,r)=>{for(var o=r>1?void 0:r?Nb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Fb(e,s,o),o};const Du="browser-router-model",Ub="kos.http.request",jb="kos.http.response";let Cr=class{constructor(t,e,s){l(this,"_id");l(this,"logger");l(this,"router");this._id=t,this.logger=s.logger,this.router=new iu}get id(){return this._id}async handleRequest(t,e){const s=e.headers["src-addr"],r=e.headers["dst-addr"],o=e.headers.url,n=e.headers.method,i=e.headers["request-id"],a={id:i,method:n,path:o,body:t};let c=200;const u={send:d=>{this.logger.debug(`sending response to ${r}`),this.logger.debug(d),$l({msg:d,options:{responseId:i,destinationAddress:s,type:jb,sourceAddress:r,status:c}})},status:function(d){return c=d,this}};if(a.path==="/openapi.json"){u.send(this.router.generateOpenApiSpec());return}await this.router.handle(a,u)}use(t,e,...s){this.router.use(t,e,...s)}remove(t,e){return this.router.remove(t,e)}removeAllForPath(t){return this.router.removeAllForPath(t)}getRoutes(){return this.router.getRoutes()}async init(){this.logger.debug(`initializing browser-router ${this.id}`)}async load(){this.logger.debug(`loading browser-router ${this.id}`)}};Cu([B({topic:Ub})],Cr.prototype,"handleRequest",1);Cr=Cu([k(Du)],Cr);const ai=new Ce({class:Cr,type:Du}),Au="future-model",rs=es(Au);var Bb=Object.defineProperty,Hb=Object.getOwnPropertyDescriptor,xu=(t,e,s,r)=>{for(var o=r>1?void 0:r?Hb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Bb(e,s,o),o};const Uo=m.getLogger(rs.type);let Dr=class{constructor(t,e,s){l(this,"logger");l(this,"_cancelFuture");l(this,"futureId");Object.assign(this,e),this.logger=s.logger,this.id=t,this.futureId=e.id,this.namespace=e.namespace||"kos",this._cancelFuture=Iu,tn(()=>this.status===et.Success||this.status===et.Fail,()=>{Uo.info(`Future ${this.id} has completed with status ${this.status}`),Ae(this)})}async load(){Uo.debug(`loading Future ${this.id}`)}unload(){Uo.info(`unloading Future ${this.id}`)}async cancelFuture(){const t=this.namespace==="studio"?"/api/future":`/api/${this.namespace}/future`;await tn(()=>this.futureId!==Zn),await this._cancelFuture(this.futureId,t)}get status(){return this.endState?this.endState:this.progress>-1?"IN_PROGRESS":"NOT_ACTIVE"}get timeRemaining(){var a,c;const t=this.remainingTimeMs||-1;if(t<0)return"";const e={year:1e3*60*60*24*365,month:1e3*60*60*24*30,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60,second:1e3};let s="second",r=0;for(const[u,d]of Object.entries(e))if(Math.abs(t)>=d){s=u,r=Math.round(t/d);break}const n=new Intl.RelativeTimeFormat("en",{numeric:"auto"}).formatToParts(r,s);return n.length===3?`${((a=n[1])==null?void 0:a.value)??0} ${((c=n[2])==null?void 0:c.value)??""}`:"0 seconds"}handleFutureUpdated(t){this.logger.debug(`Future ${this.id} updated. future: ${t.id} endState: ${t.endState} progress: ${t.progress} remainingTimeMs: ${t.remainingTimeMs}`),ni(t,this)}};xu([B({topic:`kos.future/${Tr}`})],Dr.prototype,"handleFutureUpdated",1);Dr=xu([k(rs.type)],Dr);const Ru=Dr,Pu="future-container-model",tt=es(Pu),ku=t=>ii(rs)(t),Kb=t=>{const e=ku(t);return tt.build(tt.type,{}).addFutureModel(e),e},qb=t=>tt.build(tt.type,{}).getFuture(String(t)),gt={buildFutureModel:ku,initiateFuture:Kb,getFuture:qb};var zb=Object.defineProperty,Vb=Object.getOwnPropertyDescriptor,ci=(t,e,s,r)=>{for(var o=r>1?void 0:r?Vb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&zb(e,s,o),o};const lr=m.getLogger(tt.type);let ks=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_deleteFuture");l(this,"_addFuture");l(this,"_futures");l(this,"createModel");l(this,"deleteModel");const{deleteFuture:r=Su,addFuture:o=Ou}=e;this.logger=s.logger,this._deleteFuture=r,this._addFuture=o,this.id=t,this._futures=new Fe,this.createModel=this.createFuture,this.deleteModel=this.removeFuture}get futures(){return this._futures.data}get models(){return this.futures}getFuture(t){return this._futures.getModel(t)}addFutureModel(t){this._futures.addModel(t)}removeFutureModel(t){this._futures.removeModel(t)}async removeFuture(t){try{await this._deleteFuture(t)}catch(e){lr.error("error deleting a Future"),lr.error(e)}}async createFuture(t){try{const e=await this._addFuture(t),s=e==null?void 0:e.data;if(s){const r=ii(rs)(s);return this.addFutureModel(r),r}}catch(e){throw lr.error("error creating a Future"),lr.error(e),e}}handleFutureUpdated(t,e){const s=gt.buildFutureModel(t);this.addFutureModel(s);const r=`kos.future/${t.tracker||t.id}`;this.logger.debug(`publishing future update to ${r}`),K(r,e.body,e.headers)}};ci([Le],ks.prototype,"_futures",2);ci([B({topic:"kos.future"})],ks.prototype,"handleFutureUpdated",1);ks=ci([k(tt.type)],ks);const Lu=ks,{URL:Zs}=de(),{getOne:Gb,postModel:Yb,deleteModel:Fu}=ie.build({basePath:`${Zs}/api/keyVal`}),sn=m.createLogger({name:"key-value-service",group:"Services"}),Nu=async(t,e)=>{await Fu({urlOverride:`${Zs}/api/keyVal/${t}/${e}`,id:e})},Uu=async(t,e,s)=>{const r=await Yb({urlOverride:`${Zs}/api/keyVal/${t}/${e}`,model:s.toString()});if((r==null?void 0:r.status)!==200)throw sn.error("Failed to update key-value data",r),new Error(`Failed to update key-value data for namespace ${t}`);return r.data},ju=async(t="studio")=>{sn.debug(`Retrieving all key-value data for namespace: ${t}`);const e=await Gb({urlOverride:`${Zs}/api/keyVal/${t}`});if((e==null?void 0:e.status)!==200)throw sn.error("Failed to retrieve key-value data",e),new Error(`Failed to retrieve key-value data for namespace ${t}`);return e.data},Wb=async t=>{await Fu({urlOverride:`${Zs}/api/keyVal/${t}`,id:""})},Qb=Object.freeze(Object.defineProperty({__proto__:null,deleteKeyValue:Nu,deleteKeyValueNamespace:Wb,getKeyValue:ju,updateKeyValue:Uu},Symbol.toStringTag,{value:"Module"}));var Zb=Object.defineProperty,Xb=Object.getOwnPropertyDescriptor,li=(t,e,s,r)=>{for(var o=r>1?void 0:r?Xb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Zb(e,s,o),o};const Bu="key-value-model";let Ls=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"namespace");l(this,"data");this.id=t,this.logger=s.logger,this.data=Re(),this.namespace=e.namespace||"studio"}async init(){this.logger.debug(`initializing studio-state ${this.id}`)}async updateState(t,e){this.logger.debug(`updating studio-state ${t} with value ${e}`),e!==void 0?(await Uu(this.namespace,t,e),this.data[t]=e):(await Nu(this.namespace,t),this.data[t]=void 0)}async load(){this.logger.debug(`loading studio-state ${this.id}`);const t=await ju(this.namespace);this.data.setValues(t)}handleStateUpdate(t){t.namespace===this.namespace&&(this.data[t.key]=t.value)}handleStateDelete(t){t.namespace===this.namespace&&(this.data[t.key]=void 0)}};li([B({topic:"/keyVal/set"})],Ls.prototype,"handleStateUpdate",1);li([B({topic:"/keyVal/remove"})],Ls.prototype,"handleStateDelete",1);Ls=li([k(Bu)],Ls);const ui=new we({class:Ls,type:Bu});var ye="INUMBER",os="IOP1",ns="IOP2",is="IOP3",Ke="IVAR",mt="IVARNAME",jt="IFUNCALL",po="IFUNDEF",le="IEXPR",di="IEXPREVAL",Et="IMEMBER",go="IENDSTATEMENT",Bt="IARRAY";function F(t,e){this.type=t,this.value=e??0}F.prototype.toString=function(){switch(this.type){case ye:case os:case ns:case is:case Ke:case mt:case go:return this.value;case jt:return"CALL "+this.value;case po:return"DEF "+this.value;case Bt:return"ARRAY "+this.value;case Et:return"."+this.value;default:return"Invalid Instruction"}};function mo(t){return new F(os,t)}function We(t){return new F(ns,t)}function Hu(t){return new F(is,t)}function rn(t,e,s,r,o){for(var n=[],i=[],a,c,u,d,h=0;h<t.length;h++){var f=t[h],p=f.type;if(p===ye||p===mt)Array.isArray(f.value)?n.push.apply(n,rn(f.value.map(function(g){return new F(ye,g)}).concat(new F(Bt,f.value.length)),e,s,r,o)):n.push(f);else if(p===Ke&&o.hasOwnProperty(f.value))f=new F(ye,o[f.value]),n.push(f);else if(p===ns&&n.length>1)c=n.pop(),a=n.pop(),d=s[f.value],f=new F(ye,d(a.value,c.value)),n.push(f);else if(p===is&&n.length>2)u=n.pop(),c=n.pop(),a=n.pop(),f.value==="?"?n.push(a.value?c.value:u.value):(d=r[f.value],f=new F(ye,d(a.value,c.value,u.value)),n.push(f));else if(p===os&&n.length>0)a=n.pop(),d=e[f.value],f=new F(ye,d(a.value)),n.push(f);else if(p===le){for(;n.length>0;)i.push(n.shift());i.push(new F(le,rn(f.value,e,s,r,o)))}else if(p===Et&&n.length>0)a=n.pop(),n.push(new F(ye,a.value[f.value]));else{for(;n.length>0;)i.push(n.shift());i.push(f)}}for(;n.length>0;)i.push(n.shift());return i}function Ku(t,e,s){for(var r=[],o=0;o<t.length;o++){var n=t[o],i=n.type;if(i===Ke&&n.value===e)for(var a=0;a<s.tokens.length;a++){var c=s.tokens[a],u;c.type===os?u=mo(c.value):c.type===ns?u=We(c.value):c.type===is?u=Hu(c.value):u=new F(c.type,c.value),r.push(u)}else i===le?r.push(new F(le,Ku(n.value,e,s))):r.push(n)}return r}function dt(t,e,s){var r=[],o,n,i,a,c,u;if(hi(t))return Ue(t,s);for(var d=t.length,h=0;h<d;h++){var f=t[h],p=f.type;if(p===ye||p===mt)r.push(f.value);else if(p===ns)n=r.pop(),o=r.pop(),f.value==="and"?r.push(o?!!dt(n,e,s):!1):f.value==="or"?r.push(o?!0:!!dt(n,e,s)):f.value==="="?(a=e.binaryOps[f.value],r.push(a(o,dt(n,e,s),s))):(a=e.binaryOps[f.value],r.push(a(Ue(o,s),Ue(n,s))));else if(p===is)i=r.pop(),n=r.pop(),o=r.pop(),f.value==="?"?r.push(dt(o?n:i,e,s)):(a=e.ternaryOps[f.value],r.push(a(Ue(o,s),Ue(n,s),Ue(i,s))));else if(p===Ke)if(f.value in e.functions)r.push(e.functions[f.value]);else if(f.value in e.unaryOps&&e.parser.isOperatorEnabled(f.value))r.push(e.unaryOps[f.value]);else{var g=s[f.value];if(g!==void 0)r.push(g);else throw new Error("undefined variable: "+f.value)}else if(p===os)o=r.pop(),a=e.unaryOps[f.value],r.push(a(Ue(o,s)));else if(p===jt){for(u=f.value,c=[];u-- >0;)c.unshift(Ue(r.pop(),s));if(a=r.pop(),a.apply&&a.call)r.push(a.apply(void 0,c));else throw new Error(a+" is not a function")}else if(p===po)r.push(function(){for(var v=r.pop(),E=[],_=f.value;_-- >0;)E.unshift(r.pop());var R=r.pop(),S=function(){for(var O=Object.assign({},s),L=0,Y=E.length;L<Y;L++)O[E[L]]=arguments[L];return dt(v,e,O)};return Object.defineProperty(S,"name",{value:R,writable:!1}),s[R]=S,S}());else if(p===le)r.push(Jb(f,e));else if(p===di)r.push(f);else if(p===Et)o=r.pop(),r.push(o[f.value]);else if(p===go)r.pop();else if(p===Bt){for(u=f.value,c=[];u-- >0;)c.unshift(r.pop());r.push(c)}else throw new Error("invalid Expression")}if(r.length>1)throw new Error("invalid Expression (parity)");return r[0]===0?0:Ue(r[0],s)}function Jb(t,e,s){return hi(t)?t:{type:di,value:function(r){return dt(t.value,e,r)}}}function hi(t){return t&&t.type===di}function Ue(t,e){return hi(t)?t.value(e):t}function fi(t,e){for(var s=[],r,o,n,i,a,c,u=0;u<t.length;u++){var d=t[u],h=d.type;if(h===ye)typeof d.value=="number"&&d.value<0?s.push("("+d.value+")"):Array.isArray(d.value)?s.push("["+d.value.map(ba).join(", ")+"]"):s.push(ba(d.value));else if(h===ns)o=s.pop(),r=s.pop(),i=d.value,e?i==="^"?s.push("Math.pow("+r+", "+o+")"):i==="and"?s.push("(!!"+r+" && !!"+o+")"):i==="or"?s.push("(!!"+r+" || !!"+o+")"):i==="||"?s.push("(function(a,b){ return Array.isArray(a) && Array.isArray(b) ? a.concat(b) : String(a) + String(b); }(("+r+"),("+o+")))"):i==="=="?s.push("("+r+" === "+o+")"):i==="!="?s.push("("+r+" !== "+o+")"):i==="["?s.push(r+"[("+o+") | 0]"):s.push("("+r+" "+i+" "+o+")"):i==="["?s.push(r+"["+o+"]"):s.push("("+r+" "+i+" "+o+")");else if(h===is)if(n=s.pop(),o=s.pop(),r=s.pop(),i=d.value,i==="?")s.push("("+r+" ? "+o+" : "+n+")");else throw new Error("invalid Expression");else if(h===Ke||h===mt)s.push(d.value);else if(h===os)r=s.pop(),i=d.value,i==="-"||i==="+"?s.push("("+i+r+")"):e?i==="not"?s.push("(!"+r+")"):i==="!"?s.push("fac("+r+")"):s.push(i+"("+r+")"):i==="!"?s.push("("+r+"!)"):s.push("("+i+" "+r+")");else if(h===jt){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());i=s.pop(),s.push(i+"("+a.join(", ")+")")}else if(h===po){for(o=s.pop(),c=d.value,a=[];c-- >0;)a.unshift(s.pop());r=s.pop(),e?s.push("("+r+" = function("+a.join(", ")+") { return "+o+" })"):s.push("("+r+"("+a.join(", ")+") = "+o+")")}else if(h===Et)r=s.pop(),s.push(r+"."+d.value);else if(h===Bt){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());s.push("["+a.join(", ")+"]")}else if(h===le)s.push("("+fi(d.value,e)+")");else if(h!==go)throw new Error("invalid Expression")}return s.length>1&&(e?s=[s.join(",")]:s=[s.join(";")]),String(s[0])}function ba(t){return typeof t=="string"?JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"):t}function At(t,e){for(var s=0;s<t.length;s++)if(t[s]===e)return!0;return!1}function pi(t,e,s){s=s||{};for(var r=!!s.withMembers,o=null,n=0;n<t.length;n++){var i=t[n];i.type===Ke||i.type===mt?!r&&!At(e,i.value)?e.push(i.value):(o!==null&&(At(e,o)||e.push(o)),o=i.value):i.type===Et&&r&&o!==null?o+="."+i.value:i.type===le?pi(i.value,e,s):o!==null&&(At(e,o)||e.push(o),o=null)}o!==null&&!At(e,o)&&e.push(o)}function Oe(t,e){this.tokens=t,this.parser=e,this.unaryOps=e.unaryOps,this.binaryOps=e.binaryOps,this.ternaryOps=e.ternaryOps,this.functions=e.functions}Oe.prototype.simplify=function(t){return t=t||{},new Oe(rn(this.tokens,this.unaryOps,this.binaryOps,this.ternaryOps,t),this.parser)};Oe.prototype.substitute=function(t,e){return e instanceof Oe||(e=this.parser.parse(String(e))),new Oe(Ku(this.tokens,t,e),this.parser)};Oe.prototype.evaluate=function(t){return t=t||{},dt(this.tokens,this,t)};Oe.prototype.toString=function(){return fi(this.tokens,!1)};Oe.prototype.symbols=function(t){t=t||{};var e=[];return pi(this.tokens,e,t),e};Oe.prototype.variables=function(t){t=t||{};var e=[];pi(this.tokens,e,t);var s=this.functions;return e.filter(function(r){return!(r in s)})};Oe.prototype.toJSFunction=function(t,e){var s=this,r=new Function(t,"with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return "+fi(this.simplify(e).tokens,!0)+"; }");return function(){return r.apply(s,arguments)}};var Fs="TEOF",j="TOP",yo="TNUMBER",qu="TSTRING",qe="TPAREN",Ht="TBRACKET",bo="TCOMMA",gi="TNAME",mi="TSEMICOLON";function zu(t,e,s){this.type=t,this.value=e,this.index=s}zu.prototype.toString=function(){return this.type+": "+this.value};function G(t,e){this.pos=0,this.current=null,this.unaryOps=t.unaryOps,this.binaryOps=t.binaryOps,this.ternaryOps=t.ternaryOps,this.consts=t.consts,this.expression=e,this.savedPosition=0,this.savedCurrent=null,this.options=t.options,this.parser=t}G.prototype.newToken=function(t,e,s){return new zu(t,e,s??this.pos)};G.prototype.save=function(){this.savedPosition=this.pos,this.savedCurrent=this.current};G.prototype.restore=function(){this.pos=this.savedPosition,this.current=this.savedCurrent};G.prototype.next=function(){if(this.pos>=this.expression.length)return this.newToken(Fs,"EOF");if(this.isWhitespace()||this.isComment())return this.next();if(this.isRadixInteger()||this.isNumber()||this.isOperator()||this.isString()||this.isParen()||this.isBracket()||this.isComma()||this.isSemicolon()||this.isNamedOp()||this.isConst()||this.isName())return this.current;this.parseError('Unknown character "'+this.expression.charAt(this.pos)+'"')};G.prototype.isString=function(){var t=!1,e=this.pos,s=this.expression.charAt(e);if(s==="'"||s==='"')for(var r=this.expression.indexOf(s,e+1);r>=0&&this.pos<this.expression.length;){if(this.pos=r+1,this.expression.charAt(r-1)!=="\\"){var o=this.expression.substring(e+1,r);this.current=this.newToken(qu,this.unescape(o),e),t=!0;break}r=this.expression.indexOf(s,r+1)}return t};G.prototype.isParen=function(){var t=this.expression.charAt(this.pos);return t==="("||t===")"?(this.current=this.newToken(qe,t),this.pos++,!0):!1};G.prototype.isBracket=function(){var t=this.expression.charAt(this.pos);return(t==="["||t==="]")&&this.isOperatorEnabled("[")?(this.current=this.newToken(Ht,t),this.pos++,!0):!1};G.prototype.isComma=function(){var t=this.expression.charAt(this.pos);return t===","?(this.current=this.newToken(bo,","),this.pos++,!0):!1};G.prototype.isSemicolon=function(){var t=this.expression.charAt(this.pos);return t===";"?(this.current=this.newToken(mi,";"),this.pos++,!0):!1};G.prototype.isConst=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&s!=="."&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(r in this.consts)return this.current=this.newToken(yo,this.consts[r]),this.pos+=r.length,!0}return!1};G.prototype.isNamedOp=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(this.isOperatorEnabled(r)&&(r in this.binaryOps||r in this.unaryOps||r in this.ternaryOps))return this.current=this.newToken(j,r),this.pos+=r.length,!0}return!1};G.prototype.isName=function(){for(var t=this.pos,e=t,s=!1;e<this.expression.length;e++){var r=this.expression.charAt(e);if(r.toUpperCase()===r.toLowerCase()){if(e===this.pos&&(r==="$"||r==="_")){r==="_"&&(s=!0);continue}else if(e===this.pos||!s||r!=="_"&&(r<"0"||r>"9"))break}else s=!0}if(s){var o=this.expression.substring(t,e);return this.current=this.newToken(gi,o),this.pos+=o.length,!0}return!1};G.prototype.isWhitespace=function(){for(var t=!1,e=this.expression.charAt(this.pos);(e===" "||e===" "||e===`
|
|
108
|
-
`||e==="\r")&&(t=!0,this.pos++,!(this.pos>=this.expression.length));)e=this.expression.charAt(this.pos);return t};var
|
|
109
|
-
`;break;case"r":s+="\r";break;case"t":s+=" ";break;case"u":var o=t.substring(e+1,e+5);
|
|
110
|
-
`,s+1);while(s>=0&&s<this.pos);return{line:t,column:e}};G.prototype.parseError=function(t){var e=this.getCoordinates();throw new Error("parse error ["+e.line+":"+e.column+"]: "+t)};function q(t,e,s){this.parser=t,this.tokens=e,this.current=null,this.nextToken=null,this.next(),this.savedCurrent=null,this.savedNextToken=null,this.allowMemberAccess=s.allowMemberAccess!==!1}q.prototype.next=function(){return this.current=this.nextToken,this.nextToken=this.tokens.next()};q.prototype.tokenMatches=function(t,e){return typeof e>"u"?!0:Array.isArray(e)?At(e,t.value):typeof e=="function"?e(t):t.value===e};q.prototype.save=function(){this.savedCurrent=this.current,this.savedNextToken=this.nextToken,this.tokens.save()};q.prototype.restore=function(){this.tokens.restore(),this.current=this.savedCurrent,this.nextToken=this.savedNextToken};q.prototype.accept=function(t,e){return this.nextToken.type===t&&this.tokenMatches(this.nextToken,e)?(this.next(),!0):!1};q.prototype.expect=function(t,e){if(!this.accept(t,e)){var s=this.tokens.getCoordinates();throw new Error("parse error ["+s.line+":"+s.column+"]: Expected "+(e||t))}};q.prototype.parseAtom=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.accept(gi)||this.accept(j,s))t.push(new F(Ke,this.current.value));else if(this.accept(yo))t.push(new F(ye,this.current.value));else if(this.accept(qu))t.push(new F(ye,this.current.value));else if(this.accept(qe,"("))this.parseExpression(t),this.expect(qe,")");else if(this.accept(Ht,"["))if(this.accept(Ht,"]"))t.push(new F(Bt,0));else{var r=this.parseArrayList(t);t.push(new F(Bt,r))}else throw new Error("unexpected "+this.nextToken)};q.prototype.parseExpression=function(t){var e=[];this.parseUntilEndStatement(t,e)||(this.parseVariableAssignmentExpression(e),!this.parseUntilEndStatement(t,e)&&this.pushExpression(t,e))};q.prototype.pushExpression=function(t,e){for(var s=0,r=e.length;s<r;s++)t.push(e[s])};q.prototype.parseUntilEndStatement=function(t,e){return this.accept(mi)?(this.nextToken&&this.nextToken.type!==Fs&&!(this.nextToken.type===qe&&this.nextToken.value===")")&&e.push(new F(go)),this.nextToken.type!==Fs&&this.parseExpression(e),t.push(new F(le,e)),!0):!1};q.prototype.parseArrayList=function(t){for(var e=0;!this.accept(Ht,"]");)for(this.parseExpression(t),++e;this.accept(bo);)this.parseExpression(t),++e;return e};q.prototype.parseVariableAssignmentExpression=function(t){for(this.parseConditionalExpression(t);this.accept(j,"=");){var e=t.pop(),s=[],r=t.length-1;if(e.type===jt){if(!this.tokens.isOperatorEnabled("()="))throw new Error("function definition is not permitted");for(var o=0,n=e.value+1;o<n;o++){var i=r-o;t[i].type===Ke&&(t[i]=new F(mt,t[i].value))}this.parseVariableAssignmentExpression(s),t.push(new F(le,s)),t.push(new F(po,e.value));continue}if(e.type!==Ke&&e.type!==Et)throw new Error("expected variable for assignment");this.parseVariableAssignmentExpression(s),t.push(new F(mt,e.value)),t.push(new F(le,s)),t.push(We("="))}};q.prototype.parseConditionalExpression=function(t){for(this.parseOrExpression(t);this.accept(j,"?");){var e=[],s=[];this.parseConditionalExpression(e),this.expect(j,":"),this.parseConditionalExpression(s),t.push(new F(le,e)),t.push(new F(le,s)),t.push(Hu("?"))}};q.prototype.parseOrExpression=function(t){for(this.parseAndExpression(t);this.accept(j,"or");){var e=[];this.parseAndExpression(e),t.push(new F(le,e)),t.push(We("or"))}};q.prototype.parseAndExpression=function(t){for(this.parseComparison(t);this.accept(j,"and");){var e=[];this.parseComparison(e),t.push(new F(le,e)),t.push(We("and"))}};var tv=["==","!=","<","<=",">=",">","in"];q.prototype.parseComparison=function(t){for(this.parseAddSub(t);this.accept(j,tv);){var e=this.current;this.parseAddSub(t),t.push(We(e.value))}};var sv=["+","-","||"];q.prototype.parseAddSub=function(t){for(this.parseTerm(t);this.accept(j,sv);){var e=this.current;this.parseTerm(t),t.push(We(e.value))}};var rv=["*","/","%"];q.prototype.parseTerm=function(t){for(this.parseFactor(t);this.accept(j,rv);){var e=this.current;this.parseFactor(t),t.push(We(e.value))}};q.prototype.parseFactor=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.save(),this.accept(j,s)){if(this.current.value!=="-"&&this.current.value!=="+"){if(this.nextToken.type===qe&&this.nextToken.value==="("){this.restore(),this.parseExponential(t);return}else if(this.nextToken.type===mi||this.nextToken.type===bo||this.nextToken.type===Fs||this.nextToken.type===qe&&this.nextToken.value===")"){this.restore(),this.parseAtom(t);return}}var r=this.current;this.parseFactor(t),t.push(mo(r.value))}else this.parseExponential(t)};q.prototype.parseExponential=function(t){for(this.parsePostfixExpression(t);this.accept(j,"^");)this.parseFactor(t),t.push(We("^"))};q.prototype.parsePostfixExpression=function(t){for(this.parseFunctionCall(t);this.accept(j,"!");)t.push(mo("!"))};q.prototype.parseFunctionCall=function(t){var e=this.tokens.unaryOps;function s(n){return n.value in e}if(this.accept(j,s)){var r=this.current;this.parseAtom(t),t.push(mo(r.value))}else for(this.parseMemberExpression(t);this.accept(qe,"(");)if(this.accept(qe,")"))t.push(new F(jt,0));else{var o=this.parseArgumentList(t);t.push(new F(jt,o))}};q.prototype.parseArgumentList=function(t){for(var e=0;!this.accept(qe,")");)for(this.parseExpression(t),++e;this.accept(bo);)this.parseExpression(t),++e;return e};q.prototype.parseMemberExpression=function(t){for(this.parseAtom(t);this.accept(j,".")||this.accept(Ht,"[");){var e=this.current;if(e.value==="."){if(!this.allowMemberAccess)throw new Error('unexpected ".", member access is not permitted');this.expect(gi),t.push(new F(Et,this.current.value))}else if(e.value==="["){if(!this.tokens.isOperatorEnabled("["))throw new Error('unexpected "[]", arrays are disabled');this.parseExpression(t),this.expect(Ht,"]"),t.push(We("["))}else throw new Error("unexpected symbol: "+e.value)}};function ov(t,e){return Number(t)+Number(e)}function nv(t,e){return t-e}function iv(t,e){return t*e}function av(t,e){return t/e}function cv(t,e){return t%e}function lv(t,e){return Array.isArray(t)&&Array.isArray(e)?t.concat(e):""+t+e}function uv(t,e){return t===e}function dv(t,e){return t!==e}function hv(t,e){return t>e}function fv(t,e){return t<e}function pv(t,e){return t>=e}function gv(t,e){return t<=e}function mv(t,e){return!!(t&&e)}function yv(t,e){return!!(t||e)}function bv(t,e){return At(e,t)}function vv(t){return(Math.exp(t)-Math.exp(-t))/2}function wv(t){return(Math.exp(t)+Math.exp(-t))/2}function Ev(t){return t===1/0?1:t===-1/0?-1:(Math.exp(t)-Math.exp(-t))/(Math.exp(t)+Math.exp(-t))}function Mv(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))}function Tv(t){return Math.log(t+Math.sqrt(t*t-1))}function _v(t){return Math.log((1+t)/(1-t))/2}function va(t){return Math.log(t)*Math.LOG10E}function Sv(t){return-t}function Ov(t){return!t}function Iv(t){return t<0?Math.ceil(t):Math.floor(t)}function $v(t){return Math.random()*(t||1)}function wa(t){return yi(t+1)}function Cv(t){return isFinite(t)&&t===Math.round(t)}var Dv=4.7421875,jo=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function yi(t){var e,s;if(Cv(t)){if(t<=0)return isFinite(t)?1/0:NaN;if(t>171)return 1/0;for(var r=t-2,o=t-1;r>1;)o*=r,r--;return o===0&&(o=1),o}if(t<.5)return Math.PI/(Math.sin(Math.PI*t)*yi(1-t));if(t>=171.35)return 1/0;if(t>85){var n=t*t,i=n*t,a=i*t,c=a*t;return Math.sqrt(2*Math.PI/t)*Math.pow(t/Math.E,t)*(1+1/(12*t)+1/(288*n)-139/(51840*i)-571/(2488320*a)+163879/(209018880*c)+5246819/(75246796800*c*t))}--t,s=jo[0];for(var u=1;u<jo.length;++u)s+=jo[u]/(t+u);return e=t+Dv+.5,Math.sqrt(2*Math.PI)*Math.pow(e,t+.5)*Math.exp(-e)*s}function Av(t){return Array.isArray(t)?t.length:String(t).length}function Ea(){for(var t=0,e=0,s=0;s<arguments.length;s++){var r=Math.abs(arguments[s]),o;e<r?(o=e/r,t=t*o*o+1,e=r):r>0?(o=r/e,t+=o*o):t+=r}return e===1/0?1/0:e*Math.sqrt(t)}function Ma(t,e,s){return t?e:s}function xv(t,e){return typeof e>"u"||+e==0?Math.round(t):(t=+t,e=-+e,isNaN(t)||!(typeof e=="number"&&e%1===0)?NaN:(t=t.toString().split("e"),t=Math.round(+(t[0]+"e"+(t[1]?+t[1]-e:-e))),t=t.toString().split("e"),+(t[0]+"e"+(t[1]?+t[1]+e:e))))}function Rv(t,e,s){return s&&(s[t]=e),e}function Pv(t,e){return t[e|0]}function kv(t){return arguments.length===1&&Array.isArray(t)?Math.max.apply(Math,t):Math.max.apply(Math,arguments)}function Lv(t){return arguments.length===1&&Array.isArray(t)?Math.min.apply(Math,t):Math.min.apply(Math,arguments)}function Fv(t,e){if(typeof t!="function")throw new Error("First argument to map is not a function");if(!Array.isArray(e))throw new Error("Second argument to map is not an array");return e.map(function(s,r){return t(s,r)})}function Nv(t,e,s){if(typeof t!="function")throw new Error("First argument to fold is not a function");if(!Array.isArray(s))throw new Error("Second argument to fold is not an array");return s.reduce(function(r,o,n){return t(r,o,n)},e)}function Uv(t,e){if(typeof t!="function")throw new Error("First argument to filter is not a function");if(!Array.isArray(e))throw new Error("Second argument to filter is not an array");return e.filter(function(s,r){return t(s,r)})}function jv(t,e){if(!(Array.isArray(e)||typeof e=="string"))throw new Error("Second argument to indexOf is not a string or array");return e.indexOf(t)}function Bv(t,e){if(!Array.isArray(e))throw new Error("Second argument to join is not an array");return e.join(t)}function Hv(t){return(t>0)-(t<0)||+t}var Ta=1/3;function Kv(t){return t<0?-Math.pow(-t,Ta):Math.pow(t,Ta)}function qv(t){return Math.exp(t)-1}function zv(t){return Math.log(1+t)}function Vv(t){return Math.log(t)/Math.LN2}function Mt(t){this.options=t||{},this.unaryOps={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:Math.sinh||vv,cosh:Math.cosh||wv,tanh:Math.tanh||Ev,asinh:Math.asinh||Mv,acosh:Math.acosh||Tv,atanh:Math.atanh||_v,sqrt:Math.sqrt,cbrt:Math.cbrt||Kv,log:Math.log,log2:Math.log2||Vv,ln:Math.log,lg:Math.log10||va,log10:Math.log10||va,expm1:Math.expm1||qv,log1p:Math.log1p||zv,abs:Math.abs,ceil:Math.ceil,floor:Math.floor,round:Math.round,trunc:Math.trunc||Iv,"-":Sv,"+":Number,exp:Math.exp,not:Ov,length:Av,"!":wa,sign:Math.sign||Hv},this.binaryOps={"+":ov,"-":nv,"*":iv,"/":av,"%":cv,"^":Math.pow,"||":lv,"==":uv,"!=":dv,">":hv,"<":fv,">=":pv,"<=":gv,and:mv,or:yv,in:bv,"=":Rv,"[":Pv},this.ternaryOps={"?":Ma},this.functions={random:$v,fac:wa,min:Lv,max:kv,hypot:Math.hypot||Ea,pyt:Math.hypot||Ea,pow:Math.pow,atan2:Math.atan2,if:Ma,gamma:yi,roundTo:xv,map:Fv,fold:Nv,filter:Uv,indexOf:jv,join:Bv},this.consts={E:Math.E,PI:Math.PI,true:!0,false:!1}}Mt.prototype.parse=function(t){var e=[],s=new q(this,new G(this,t),{allowMemberAccess:this.options.allowMemberAccess});return s.parseExpression(e),s.expect(Fs,"EOF"),new Oe(e,this)};Mt.prototype.evaluate=function(t,e){return this.parse(t).evaluate(e)};var Vu=new Mt;Mt.parse=function(t){return Vu.parse(t)};Mt.evaluate=function(t,e){return Vu.parse(t).evaluate(e)};var _a={"+":"add","-":"subtract","*":"multiply","/":"divide","%":"remainder","^":"power","!":"factorial","<":"comparison",">":"comparison","<=":"comparison",">=":"comparison","==":"comparison","!=":"comparison","||":"concatenate",and:"logical",or:"logical",not:"logical","?":"conditional",":":"conditional","=":"assignment","[":"array","()=":"fndef"};function Gv(t){return _a.hasOwnProperty(t)?_a[t]:t}Mt.prototype.isOperatorEnabled=function(t){var e=Gv(t),s=this.options.operators||{};return!(e in s)||!!s[e]};var Yv=Object.defineProperty,Wv=Object.getOwnPropertyDescriptor,Qv=(t,e,s)=>e in t?Yv(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,Zv=(t,e,s,r)=>{for(var o=r>1?void 0:r?Wv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o},Xv=(t,e,s)=>(Qv(t,e+"",s),s);const Jv="kos-expression-evaluator-model";class ew{constructor(e,s,r,o){l(this,"name");l(this,"expression");l(this,"expr");l(this,"getContextData",null);l(this,"_lastResult",{value:void 0});this.name=e,this.expression=s,this.expr=r,this.getContextData=o,this._lastResult={value:void 0,error:void 0}}get result(){return this._lastResult}updateResult(e){this._lastResult=e}evaluate(e){try{return{value:this.expr.evaluate(e),error:void 0}}catch(s){return{value:void 0,error:s instanceof Error?s.message:String(s)}}}}let Ar=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"parser");l(this,"_data");l(this,"_expressions",new Map);l(this,"_results");l(this,"_contextRevision",0);this.id=t,this.logger=s.logger,this._data=Re(),this._results=Re(),this.parser=new Mt,this.parser.functions.exists=r=>r!=null,this.parser.functions.isEmpty=r=>r==null?!0:typeof r=="string"||Array.isArray(r)?r.length===0:typeof r=="object"?Object.keys(r).length===0:!1}get data(){return this._data}get contextRevision(){return this._contextRevision}setContextData(t){this._data.setValues(t),te(()=>{this._contextRevision++,this.logger.debug("Context revision incremented to:",this._contextRevision)})}updateContextValue(t,e){this._data[t]=e}updateNestedValue(t,e){const s=t.split("."),r=s.pop();if(!r){this.logger.error(`Invalid path "${t}" - cannot be empty`);return}let o=this._data;for(const n of s)(o[n]===void 0||o[n]===null)&&(o[n]={}),o=o[n];o[r]=e,this.logger.debug(`Updated nested context value "${t}" to:`,e)}addModelToContext(t,e){this._data[t]=e}addExpression(t,e){try{const s=this.parser.parse(e),r=new ew(t,e,s,()=>this.data);this._expressions.set(t,r),this.evaluateExpression(t),this.logger.debug(`Added expression "${t}": ${e}`)}catch(s){throw this.logger.error(`Failed to parse expression "${t}"`,s),s}}removeExpression(t){const e=this._expressions.delete(t);return e?(delete this._results[t],this.logger.debug(`Removed expression "${t}"`)):this.logger.warn(`Attempted to remove non-existent expression "${t}". Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpression(t){const e=this._expressions.get(t);return e||this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpressionValue(t){const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`);return}return e.result}getCachedExpressionValue(t){const e=this._expressions.get(t);if(e)return e.result}get expressions(){return Array.from(this._expressions.values())}get expressionNames(){return Array.from(this._expressions.keys())}get results(){return this.evaluateAllExpressions(),this._results}evaluateAllExpressions(){Array.from(this._expressions.keys()).forEach(e=>{this._expressions.get(e)&&this.evaluateExpression(e)})}evaluateExpression(t){this.logger.debug(`Evaluating expression: ${String(t)}`);const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${String(t)}" not found`);return}const s=e.evaluate(this.data);this.logger.debug(`Expression "${String(t)}" evaluated to:`,s);const r=e.result;(s.value!==r.value||s.error!==r.error)&&(this.logger.debug(`Expression "${String(t)}" result changed from`,r,"to",s),e.updateResult(s),this.updateResult(t,s))}updateResult(t,e){this.logger.debug(`ExpressionEvaluator.updateResult called for "${t}":`,e),te(()=>{this._results[t]=e})}createExpression(t){const e=vt();return this.addExpression(e,t),e}};Xv(Ar,"Registration");Ar=Zv([k({modelTypeId:Jv,singleton:!1})],Ar);const Gu=Ar.Registration,tw=m.createLogger({name:"kos-log-manager-service",group:"Services"}),sw="/api/kos/logs/overrides",Yu=async()=>(tw.debug("sending GET for kos-log-manager"),await Ne.get(sw)),rw=Object.freeze(Object.defineProperty({__proto__:null,getLogOverrides:Yu},Symbol.toStringTag,{value:"Module"}));var ow=Object.defineProperty,nw=Object.getOwnPropertyDescriptor,vo=(t,e,s,r)=>{for(var o=r>1?void 0:r?nw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ow(e,s,o),o};const Wu="kos-log-manager-model",iw="/kos/logs/override/add/*",aw="/kos/logs/override/remove/*",cw=t=>{if(typeof t=="string")return t;if(typeof t=="number")switch(t){case 0:return"trace";case 1:return"debug";case 2:return"info";case 3:return"warn";case 4:return"error";default:return"info"}return"info"};let Kt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_overrides");this.id=t,this.logger=s.logger,this._overrides=new Yn}updateModel(t){}resolveLoggers(){const t=m.getLoggers(),s=Object.entries(t).map(([r,o])=>({name:r,level:cw(o.getLevel())})).reduce((r,{name:o,level:n})=>(r[o]={name:o,level:n},r),{});return this.logger.debug("Resolved loggers",s),s}async getAllLoggers(t,e){const s=Object.values(this.resolveLoggers());return e==null||e.send(s),s}setLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=m.getLoggers()[r.name];if(!o){this.logger.debug(`Logger ${r.name} not found`);return}o.setLevel(t.level)});const s=m.getLoggers()[t.name];if(!s){this.logger.debug(`Logger ${t.name} not found`);return}s.setLevel(t.level),globalThis.kos.logOverrides=this._overrides.data}resetLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=m.getLoggers()[r.name];o||this.logger.debug(`Logger ${r.name} not found`),o==null||o.resetLevel()});const s=m.getLoggers()[t.name];s||this.logger.debug(`Logger ${t.name} not found`),s==null||s.resetLevel(),globalThis.kos.logOverrides=this._overrides.data}handleOverrideAdded(t,e){var s;this.logger.debug(`Override received for node type ${((s=e.wildcardCapture)==null?void 0:s.nodeType)??"unknown"}`),this._overrides.addModel({...t,id:t.name}),this.setLogLevels(t)}handleOverrideRemoved(t){this._overrides.removeModel(t.name),this.resetLogLevels(t)}async init(){this.logger.debug(`initializing kos-log-manager ${this.id}`)}async load(){this.logger.debug(`loading kos-log-manager ${this.id}`),this.resolveLoggers();const[t,e]=await Yu();if(t){this.logger.error("Failed to load log overrides",t);return}const s=(e==null?void 0:e.filter(r=>{var o;return((o=r.type)==null?void 0:o.toUpperCase())==="UI"}).map(r=>({name:r.name??"",type:r.type??"",level:r.level??"info",id:r.name||""})))??[];this._overrides.addAll(s),s.forEach(r=>{this.setLogLevels(r)})}};vo([Rc("/api/kos/ui/loggers")],Kt.prototype,"getAllLoggers",1);vo([B({topic:iw,websocket:!0,wildcardName:"nodeType"})],Kt.prototype,"handleOverrideAdded",1);vo([B({topic:aw,websocket:!0,wildcardName:"nodeType"})],Kt.prototype,"handleOverrideRemoved",1);Kt=vo([k(Wu)],Kt);const Qu=new Ce({class:Kt,type:Wu}),{URL:Xs}=de(),{postModel:bi,getOne:lw}=ie.build({basePath:`${Xs}/api/kos-time`});m.createLogger({name:"kos-time-service",group:"Services"});const Zu=async t=>{const e=await bi({model:t,urlOverride:`${Xs}/api/kos/time/time`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},Xu=async t=>{const e=await bi({model:t,urlOverride:`${Xs}/api/kos/time/date`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},Ju=async t=>{const e=await bi({model:{},urlOverride:`${Xs}/api/kos/time/timezone?tz=${t}`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set timezone");return e.data},ed=async()=>{const t=await lw({urlOverride:`${Xs}/api/kos/time/timezone`});if((t==null?void 0:t.status)!==200)throw Error("Failed to set timezone");return t.data.timeZone},uw=Object.freeze(Object.defineProperty({__proto__:null,getTimezone:ed,setDate:Xu,setTime:Zu,setTimezone:Ju},Symbol.toStringTag,{value:"Module"}));var dw=Object.defineProperty,hw=Object.getOwnPropertyDescriptor,wo=(t,e,s,r)=>{for(var o=r>1?void 0:r?hw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&dw(e,s,o),o};const fs="kos-time-model",fw="/kos/time/time",pw="/kos/time/day",gw="/kos/time/timezone";let qt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"timezone");this.id=t,this.logger=s.logger,this.timezone=""}async updateSystemTime(t){await Zu(t)}async updateSystemDate(t){await Xu(t)}async updateSystemTimezone(t){await Ju(t)}handleTimeChange(){K($s.TIME_CHANGE,{})}handleDayChange(){K($s.DAY_CHANGE,{})}async handleTimeZoneChange(){await this.retrieveTimezone(),K($s.TIMEZONE_CHANGE,{})}async init(){this.logger.debug(`initializing kos-time ${this.id}`)}async retrieveTimezone(){const t=await ed();this.setTimezone(t)}setTimezone(t){this.timezone=t}async load(){this.logger.debug(`loading kos-time ${this.id}`),this.retrieveTimezone()}};wo([B({topic:fw,websocket:!0})],qt.prototype,"handleTimeChange",1);wo([B({topic:pw,websocket:!0})],qt.prototype,"handleDayChange",1);wo([B({topic:gw,websocket:!0})],qt.prototype,"handleTimeZoneChange",1);qt=wo([k(fs)],qt);const xr={registration:{[fs]:{class:qt,singleton:!0}},type:fs,predicate:$e(fs),factory:ue.Singleton.create(fs)};var mw=Object.defineProperty,yw=Object.getOwnPropertyDescriptor,td=(t,e,s,r)=>{for(var o=r>1?void 0:r?yw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&mw(e,s,o),o};const sd="log-block-container-model";let Rr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Fe({parentId:t,sortKey:"blockNum"})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing log-block-container container ${this.id}`)}async load(){this.logger.debug(`loading log-block-container container ${this.id}`)}};td([Le],Rr.prototype,"_models",2);Rr=td([k(sd)],Rr);const bw=m.createLogger({name:"log-stream-container-service",group:"Services"}),rd=()=>{var r;const t=ve(),s=(t==null?void 0:t.connId)||((r=window==null?void 0:window.kosBridge)==null?void 0:r.call(window,"connId"));return m.error(`getKosConnectionId: ${s}`),s},as=rd(),vw="/api/kos/logs/node/{nodeId}/streams",od=async()=>(bw.debug("sending GET for log-stream-container"),await Ne.get(vw,{path:{nodeId:"primary"}},{destinationAddress:as})),nd=async(t,e="primary")=>{await Ne.post("/api/kos/logs/node/{nodeId}/{stream}/subscribe",{path:{nodeId:e,stream:t}},void 0,{destinationAddress:as})},id=async t=>{await Ne.post("/api/kos/logs/node/{nodeId}/{stream}/unsubscribe",{path:{nodeId:"primary",stream:t}},void 0,{destinationAddress:as})},ww=async()=>{await Ne.post("/api/kos/logs/overrides",{},{level:"WARN",name:"com.example",nodeType:"java",type:"package"},{destinationAddress:as})},ad=async t=>await Ne.get("/api/kos/logs/node/{nodeId}/{stream}/blocks",{path:{nodeId:"primary",stream:t}},{destinationAddress:as}),cd=async(t,e)=>await Ne.get("/api/kos/logs/node/{nodeId}/{stream}/blocks/{blockId}",{path:{nodeId:"primary",stream:t,blockId:e}},{destinationAddress:as}),Ew=Object.freeze(Object.defineProperty({__proto__:null,createOverride:ww,getKosConnectionId:rd,getLogStreamBlock:cd,getLogStreamBlocks:ad,getLogStreams:od,subscribeToLogStream:nd,unsubscribeFromLogStream:id},Symbol.toStringTag,{value:"Module"}));var Mw=Object.getOwnPropertyDescriptor,Tw=(t,e,s,r)=>{for(var o=r>1?void 0:r?Mw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const ld="log-block-model";let on=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"stream");l(this,"blockNum");l(this,"startLineNum");l(this,"endLineNum");l(this,"startTime");l(this,"endTime");l(this,"lineCount");l(this,"lines");l(this,"inc");this.id=t,this.logger=s.logger,this.nodeId=e.nodeId,this.stream=e.stream,this.blockNum=e.blockNum,this.startLineNum=e.startLineNum,this.endLineNum=e.endLineNum,this.startTime=e.startTime,this.endTime=e.endTime,this.lineCount=e.lineCount,this.lines=[],this.inc=0}async syncLines(){const[t,e]=await cd(this.stream,this.blockNum);if(t){this.logger.error(`Failed to get log block ${this.blockNum}`);return}e&&this.addLines(e.lines,!0)}updateModel(t){this.startLineNum=t.startLineNum,this.endLineNum=t.endLineNum,this.startTime=t.startTime,this.endTime=t.endTime,this.lineCount=t.lineCount}addLines(t,e){const s=e?[]:this.lines;this.lines=[...s,...t],this.inc+=1}async init(){this.logger.debug(`initializing log-block ${this.id}`)}async load(){this.logger.debug(`loading log-block ${this.id}`)}};on=Tw([k(ld)],on);const Ns=new we({class:on,type:ld}),Eo=new we({class:Rr,type:sd});Eo.addRelatedModel(Ns);var _w=Object.defineProperty,Sw=Object.getOwnPropertyDescriptor,ud=(t,e,s,r)=>{for(var o=r>1?void 0:r?Sw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&_w(e,s,o),o};const dd="log-stream-model";let Pr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"_blocks");l(this,"name");l(this,"currentBlockId");l(this,"isResetting");l(this,"generatorInstance");l(this,"shouldStop",!1);this.id=t,this.logger=s.logger,this.currentBlockId="",this.name=e.name,this.nodeId=e.nodeId,this.isResetting=!0,this._blocks=Eo.instance(`${t}-blocks`).options({}).build()}get firstLineNum(){const t=this.populated[0];return t?t.startLineNum:0}get currentBlock(){const t=this.currentBlockId;return this._blocks.getModel(t)}get populated(){return this._blocks.data.filter(t=>t.lines.length>0)}get blocks(){return this._blocks.data}get totalLineCount(){return this.populated.reduce((t,e)=>t+e.lineCount,0)}accept(t){t.visit(this)}updateBlock(t){var r;let e=this._blocks.models.getModel(`${t.stream}-block-${t.blockNum}`);const s={nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)};e||(e=Ns.instance(`${t.stream}-block-${t.blockNum}`).options(s).build(),this._blocks.addModel(e)),e&&e.updateModel(s),(!this.currentBlock||t.blockNum>=((r=this.currentBlock)==null?void 0:r.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}addBlock(t){var s;const e=Ns.instance(`${t.stream}-block-${t.blockNum}`).options({nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)}).build();this._blocks.addModel(e),(!this.currentBlock||t.blockNum>=((s=this.currentBlock)==null?void 0:s.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}removeBlock(t){this._blocks.models.removeModel(`${this.name}-block-${t}`)}async subscribe(){await nd(this.name)}async unsubscribe(){await id(this.name)}async reset(){if(this.isResetting=!0,this.populated.length>0)return;this.logger.debug(`resetting log-stream ${this.id}`);for(const e of this._blocks.models.data)e.lines=[];const t=this._blocks.data[this._blocks.data.length-1];t&&await t.syncLines(),this.isResetting=!1}async init(){this.logger.debug(`initializing log-stream ${this.id}`)}async load(){this.logger.debug(`loading log-stream ${this.id}`);const[t,e]=await ad(this.name);if(t){this.logger.error(`Error loading log stream: ${t}`);return}if(e)for(const r of e)this.addBlock(r);const s=this._blocks.data[this._blocks.data.length-1];if(s&&await s.syncLines(),this._blocks.data.length>1){const r=this._blocks.data[this._blocks.data.length-2];r&&await r.syncLines()}}start(){return this.shouldStop=!1,this.generatorInstance=this.streamLogs(),this.generatorInstance}stop(){var t;this.shouldStop=!0,(t=this.generatorInstance)==null||t.next(),console.log("Requested generator stop.")}async*streamLogs(){const t=[];let e=null,s=0,r=this.currentBlockId;const o=lu(()=>{const n=this.currentBlock;return n?{blockId:this.currentBlockId,lineCount:n.lines.length}:null},n=>{const i=this.currentBlock;if(i)if(r!==(n==null?void 0:n.blockId))r=n==null?void 0:n.blockId,s=0,t.push(...i.lines);else{const a=i.lines.slice(s);t.push(...a),s+=a.length}e&&(e(),e=null)},{fireImmediately:!0});try{for(const n of this.populated.filter(i=>i!==this.currentBlock))for(const i of n.lines)yield i;for(;;)for(t.length===0&&await new Promise(n=>e=n);t.length>0;)yield t.shift()}finally{o()}}};ud([Le],Pr.prototype,"_blocks",2);Pr=ud([k(dd)],Pr);const Cs=new we({class:Pr,type:dd});var Ow=Object.defineProperty,Iw=Object.getOwnPropertyDescriptor,Tt=(t,e,s,r)=>{for(var o=r>1?void 0:r?Iw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Ow(e,s,o),o};const hd="log-stream-container-model",$w="/kos/logs/subscription/addBlock/*",Cw="/kos/logs/subscription/updateBlock/*",Dw="/kos/logs/subscription/removeBlock/*",Aw="/kos/logs/subscription/lines/*",fd="/kos/logs/streams/add/*";let ze=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"selectedStream");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Fe({parentId:t}),this.selectedStream=void 0}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}updateModel(t){}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}updateSelectedStream(t){this.selectedStream=t}handleStreamAdded(t){this.logger.debug(`Received topic: ${fd}`);const e=t.stream,s=Cs.instance(e).options({name:e,nodeId:"primary"}).build();this.addModel(s)}handleAddBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.addBlock(t)}handleRemoveBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.removeBlock(t.blockNum)}handleUpdateBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.updateBlock(t)}handleLogLine(t,e){var o;this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&((o=r.currentBlock)==null||o.addLines(t.lines))}async init(){this.logger.debug(`initializing log-stream-container container ${this.id}`)}async subscribeToLogStream(t){const e=Cs.instance(t).options({name:t,nodeId:"primary"}).build();this.addModel(e),await e.subscribe()}async load(){this.logger.debug(`loading log-stream-container container ${this.id}`);const[t,e]=await od();if(t){this.logger.error(`Error loading log-streams: ${t}`);return}e&&e.forEach(s=>{const r=Cs.instance(s).options({name:s,nodeId:"primary"}).build();this.addModel(r)})}};Tt([Le],ze.prototype,"_models",2);Tt([B({topic:[fd],websocket:!0})],ze.prototype,"handleStreamAdded",1);Tt([B({topic:[$w],websocket:!0})],ze.prototype,"handleAddBlock",1);Tt([B({topic:[Dw],websocket:!0})],ze.prototype,"handleRemoveBlock",1);Tt([B({topic:[Cw],websocket:!0})],ze.prototype,"handleUpdateBlock",1);Tt([B({topic:[Aw],websocket:!0})],ze.prototype,"handleLogLine",1);ze=Tt([k(hd)],ze);const Js=new Ce({class:ze,type:hd});Js.addRelatedModel(Cs);Js.addRelatedModel(Eo);Js.addRelatedModel(Ns);const xw=t=>t.rank!==void 0,Rw=t=>t.visibleRole!==void 0,Pw=t=>t.color!==void 0,kw=t=>{const e=t.info??{};return xw(e)?e.rank:0},Lw=t=>{const e=t.info??{};return Pw(e)?e.color:"orange"},Fw=t=>{const e=t.info??{};return Rw(e)?e.visibleRole:"TECHNICIAN"},{URL:Mo}=de(),{getAll:Nw,postModel:pd}=ie.build({basePath:`${Mo}/api/kos/troubles`}),gd=async t=>await Nw({urlOverride:`${Mo}${t}`}),md=async(t,e="/api/kos/troubles",s)=>{try{const r=await pd({model:{},urlOverride:`${Mo}${e}/resolve/${t}`,tracker:s});return r!=null&&r.data&>.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:et.Fail,tracker:s,reason:"Failed to resolve trouble"};return gt.initiateFuture(o),o}},Uw=async(t,e="/api/kos/troubles",s)=>{try{const r=await pd({model:t,urlOverride:`${Mo}${e}/resolve/`,tracker:s});return r!=null&&r.data&>.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:et.Fail,tracker:s,reason:"Failed to resolve troubles"};return gt.initiateFuture(o),o}},jw=Object.freeze(Object.defineProperty({__proto__:null,bulkResolveTroubles:Uw,getTroubles:gd,resolveTrouble:md},Symbol.toStringTag,{value:"Module"})),kr="troubleDataMapper",ur=new Map;Ws(kr,{register:(t,e)=>{var s;ur.has(t)||ur.set(t,[]),(s=ur.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=ur.get(t);if(!s)return{...e.data};const r=s.map(i=>i(e));return(await Promise.allSettled(r)).reduce((i,a)=>(a.status==="fulfilled"?i={...i,...a.value}:m.info(`Trouble mapper ${t} failed: ${a.reason}`),i),{...e.data})}});const er="troubleMapper",dr=new Map;Ws(er,{register:(t,e)=>{var s;dr.has(t)||dr.set(t,[]),(s=dr.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=dr.get(t);if(!s)return[];const r=s.map(i=>i(e)),n=(await Promise.allSettled(r)).map(i=>i.status==="fulfilled"?i.value:(m.info(`Trouble mapper ${t} failed: ${i.reason}`),[])).flat();return Array.from(new Set(n))}});$[er].register("nozzle",async t=>[t.data.nozzlePath]);$[er].register("path",async t=>[t.data.path]);const Bw=async t=>{const e=new Set,s=t.ifaces,r=s==null?void 0:s.map(n=>$[er].execute(n,t));return(await Promise.allSettled(r)).forEach(n=>{n.status==="fulfilled"&&n.value.forEach(i=>e.add(i))}),Array.from(e)},yd=async t=>{const e=t.ifaces,s=e==null?void 0:e.map(i=>$[kr].execute(i,t)),r=$[kr].execute(t.type,t);s.push(r);const n=(await Promise.allSettled(s)).reduce((i,a)=>(a.status==="fulfilled"&&(i={...i,...a.value}),i),{});return{...t.data,...n}};class Hw{constructor(){l(this,"type","ResolvableTrouble");l(this,"title","Resolvable Trouble");l(this,"subtitle","Trouble")}}class Kw{constructor(){l(this,"type","BlockPumpTrouble");l(this,"title","Block Pump Trouble");l(this,"subtitle","Trouble")}}class $t{static getHandler(e){switch(e){case"ResolvableTrouble":return new Hw;case"BlockPumpTrouble":return new Kw;default:return}}}var qw=Object.defineProperty,zw=Object.getOwnPropertyDescriptor,bd=(t,e,s,r)=>{for(var o=r>1?void 0:r?zw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&qw(e,s,o),o};const ps="trouble-model";function hr(t){return typeof t.shouldDefer=="boolean"}let Lr=class{constructor(t,{resolvable:e,tags:s,info:r,id:o,clientData:n,rank:i,ifaces:a,type:c,group:u,createTime:d,role:h,color:f,servicePath:p,...g},v){l(this,"id");l(this,"logger");l(this,"_troubleId");l(this,"_resolvable");l(this,"type");l(this,"futureHandler");l(this,"ifaces");l(this,"clientData");l(this,"info");l(this,"role");l(this,"color");l(this,"tags");l(this,"data");l(this,"rank");l(this,"servicePath");l(this,"group");l(this,"createTime");l(this,"_mapped",{});this.id=t,this.logger=v.logger,this.type=c,this._troubleId=o,this._resolvable=!!e,this.ifaces=a,this.rank=i,this.role=h,this.color=f,this.tags=s,this.info=r,this.group=u,this.servicePath=p??"/api/kos/troubles",this.createTime=d,this.clientData=n,this.data={},Object.assign(this.data,g),this.futureHandler=new lo(this)}getTitleWithContext(t){var s,r;const e=t?(r=(s=$t.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:$t.getHandler(this.type);return(e==null?void 0:e.title)||"Trouble"}getSubtitleWithContext(t){var s,r;const e=t?(r=(s=$t.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:$t.getHandler(this.type);return(e==null?void 0:e.subtitle)||"Trouble"}get rawId(){return this._troubleId}get title(){var t;return((t=$t.getHandler(this.type))==null?void 0:t.title)||"Trouble"}get subtitle(){var t;return((t=$t.getHandler(this.type))==null?void 0:t.subtitle)||"Trouble"}get troubleId(){return this._troubleId}get resolvable(){return this._resolvable}get future(){return this.futureHandler.future}async resolveMappedData(){return await yd(this)}get deferredCompanion(){const t=Yo(this.id,e=>hr(e));if(t&&hr(t.modelData))return t.modelData}get deferred(){return this.deferredCompanion?this.deferredCompanion.deferred:!1}get shouldDefer(){const t=Yo(this.id,e=>hr(e));return t&&hr(t.modelData)?t.modelData.shouldDefer:!1}clearDefer(){var t;(t=this.deferredCompanion)==null||t.clearDefer()}defer(){var t;(t=this.deferredCompanion)==null||t.defer()}getChildren(){return[...this.futureHandler.allFutures]}async resolve(t){var e;if(!this._resolvable)throw this.logger.error(`attempting to resolve an unresolvable trouble with id ${this._troubleId}`),new Error("Trouble is not resolvable");if(this.shouldDefer){(e=this.deferredCompanion)==null||e.defer();return}return await md(this._troubleId,this.servicePath,t)}};bd([Fi()],Lr.prototype,"resolve",1);Lr=bd([k(ps)],Lr);const Us={registration:{[ps]:{class:Lr,singleton:!1}},type:ps,predicate:$e(ps),factory:ue.Factory.create(ps)};var vd=Object.defineProperty,Vw=Object.getOwnPropertyDescriptor,Gw=(t,e,s)=>e in t?vd(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,vi=(t,e,s,r)=>{for(var o=r>1?void 0:r?Vw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&vd(e,s,o),o},Yw=(t,e,s)=>(Gw(t,e+"",s),s);function Sa(t){return $.propertyMapper.hasMapper(Se.TroubleRank)?$.propertyMapper.executeMapper(Se.TroubleRank,t):kw(t)}function Oa(t){return($.propertyMapper.hasMapper(Se.TroubleColor)?$.propertyMapper.executeMapper(Se.TroubleColor,t):Lw(t)).toLowerCase()}function Ia(t){return($.propertyMapper.hasMapper(Se.TroubleRole)?$.propertyMapper.executeMapper(Se.TroubleRole,t):Fw(t)).toLowerCase()}const Ww="trouble-container-model";class be{}l(be,"INDEX_TROUBLES_BY_IFACE","byIface"),l(be,"INDEX_TROUBLES_BY_TYPE","byType"),l(be,"INDEX_TROUBLES_BY_GROUP","byGroup"),l(be,"INDEX_TROUBLES_BY_DEFERRED","byDeferred"),l(be,"SORT_KEY_RANK","rank"),l(be,"TROUBLES_DEFERRED","true");let zt=class{constructor(t,e){l(this,"id");l(this,"servicePath","/api/kos/troubles");this.id=t,this.servicePath=e.servicePath??this.servicePath}async load(){this.logger.debug("loading trouble container");const t=await gd(this.servicePath);try{t==null||t.data.forEach(e=>{const s={...e,servicePath:this.servicePath,rank:Sa(e),color:Oa(e),role:Ia(e),id:String(e.id)},r=Us.factory(`trouble-${e.id}`)(s);this.troubles.addModel(r)})}catch(e){throw this.logger.error(e),e}}handleTroubleRemoved(t){const e=`trouble-${t}`,s=this.troubles.getModel(e);this.troubles.removeModel(e),s&&Ae(s)}handleTroubleAdded(t){const e={...t,servicePath:this.servicePath,rank:Sa(t),color:Oa(t),role:Ia(t),id:String(t.id)};if(e.role==="NONE")return;const s=Us.factory(`trouble-${t.id}`)(e);this.troubles.addModel(s)}};Yw(zt,"Registration");vi([B({topic:"/kos/trouble/remove",websocket:!0,lifecycle:D.INIT})],zt.prototype,"handleTroubleRemoved",1);vi([B({topic:"/kos/trouble/add",websocket:!0})],zt.prototype,"handleTroubleAdded",1);zt=vi([k({modelTypeId:Ww,singleton:!0}),Lc(),xc({containerProperty:"troubles",containerOptions:{indexMap:{[be.INDEX_TROUBLES_BY_IFACE]:Bw,[be.INDEX_TROUBLES_BY_TYPE]:"type",[be.INDEX_TROUBLES_BY_GROUP]:"group",[be.INDEX_TROUBLES_BY_DEFERRED]:"deferred"},sortKey:be.SORT_KEY_RANK}})],zt);const Vt=zt.Registration,{URL:wd}=de(),{getAll:Qw}=ie.build({basePath:`${wd}/api/kos/ota`}),$a=m.createLogger({name:"ota-service",group:"Services"}),Zw=async()=>{$a.debug("sending GET request to /api/kos/ota/artifacts");const t=await Qw({urlOverride:`${wd}/api/kos/ota/artifacts`});return $a.debug("getArtifacts - response:",t),t==null?void 0:t.data};var Xw=Object.defineProperty,Jw=Object.getOwnPropertyDescriptor,To=(t,e,s,r)=>{for(var o=r>1?void 0:r?Jw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Xw(e,s,o),o};const Ed="ota-model",eE=t=>{let e=null;for(const s in t){const r=t[s],o=r.lastUpdateTime;(!e||e.lastUpdateTime<o)&&(e=r)}return e},Bo=t=>{const e=t.artifactInfo,s=eE(t.requests),r=(e==null?void 0:e.identifier)||(s==null?void 0:s.kabId);if(!r)return;let o;switch(t.status){case"INSTALLED":o="ready";break;case"INVALID":o="error";break;case"MISSING":o=((s==null?void 0:s.currentSize)||0)>0?"downloading":"idle";break;case"STAGED":o="pending"}const n=e===void 0;return{id:r,manifest:n,label:e==null?void 0:e.version,name:e==null?void 0:e.name,status:o,error:o==="error"?s==null?void 0:s.lastErrorReason:void 0,errorCount:o==="error"?s==null?void 0:s.errorCount:0,progress:o==="downloading"&&s&&!n?s.currentSize/(e==null?void 0:e.size)*100:void 0,size:e==null?void 0:e.size}};let Gt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"data",new Yn);l(this,"troubleContainer");this.id=t,this.logger=s.logger}get downloadInProgressTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTADownloadInProgressTrouble"))==null?void 0:e[0]}get updatePendingTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAUpdatePendingTrouble"))==null?void 0:e[0]}get pausedDueToErrorsTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAPausedDueToErrorsTrouble"))==null?void 0:e[0]}get updates(){return this.data}get status(){return this.pausedDueToErrorsTrouble?"error":this.downloadInProgressTrouble?"downloading":this.updatePendingTrouble?"pending":"idle"}installAndReboot(){var t;this.updatePendingTrouble||this.logger.error("installAndReboot - OTAUpdatePendingTrouble not present"),this.logger.debug("installAndReboot - resolve OTAUpdatePendingTrouble"),(t=this.updatePendingTrouble)==null||t.resolve()}async init(){this.logger.debug(`initializing ota ${this.id}`)}async load(){this.logger.debug(`loading ota ${this.id}`);try{const t=await Zw();t&&t.forEach(e=>{const s=Bo(e);s&&this.data.addModel(s)})}catch(t){this.logger.error(`loading ota ${this.id} - error:`,t)}}async handleAllArtifacts(t){this.logger.debug("handleAllArtifacts:",t),await this.data.clear();try{t.forEach(e=>{const s=Bo(e);s&&this.data.addModel(s)})}catch(e){this.logger.error(`handleAllArtifacts ${this.id} - error:`,e)}}handleChangedArtifacts(t){this.logger.debug("handleChangedArtifacts:",t);try{t.forEach(e=>{const s=Bo(e);s&&this.data.updateModel(s)})}catch(e){this.logger.error(`handleChangedArtifacts ${this.id} - error:`,e)}}};To([Jt({modelType:Vt.type})],Gt.prototype,"troubleContainer",2);To([B({topic:"/kos/ota/artifacts/all",websocket:!0})],Gt.prototype,"handleAllArtifacts",1);To([B({topic:"/kos/ota/artifacts/changed",websocket:!0})],Gt.prototype,"handleChangedArtifacts",1);Gt=To([k(Ed)],Gt);const Fr=new Ce({class:Gt,type:Ed});function tE(t){let e;const s=async(...r)=>{e&&e.abort(),e=new AbortController;const o=e;try{return await t(...r,o.signal)}finally{e===o&&(e=void 0)}};return s.cancel=()=>{e&&(e.abort(),e=void 0)},s.getController=()=>e,s.isActive=()=>!!e,s}const Ho=m.createLogger({name:"software-info-service",group:"Services"}),wi=async t=>{Ho.debug("sending GET for software-info");const[e,s]=await $u.get("/api/kos/manifest/info",void 0,{signal:t});if(!s)throw t!=null&&t.aborted?(Ho.debug("Request was aborted"),new z("Request was aborted")):(Ho.error("Failed to fetch software-info",e),new z("Failed to fetch software-info"));return s},sE=tE(wi),rE=Object.freeze(Object.defineProperty({__proto__:null,getSoftwareInfos:wi,getSoftwareInfosWithCancel:sE},Symbol.toStringTag,{value:"Module"}));var oE=Object.getOwnPropertyDescriptor,nE=(t,e,s,r)=>{for(var o=r>1?void 0:r?oE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const gs="software-info-model";let nn=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodes");this.id=t,this.logger=s.logger,this.nodes=[]}async init(){this.logger.debug(`initializing software-info ${this.id}`)}groupBy(t,e){return t.reduce((s,r)=>(s[r[e]]=[...s[r[e]]||[],r],s),{})}async load(){this.logger.debug(`loading software-info ${this.id}`);try{const t=await wi(),e=(t==null?void 0:t.nodes)||{};te(()=>{const r=Object.keys(e).map(o=>e[o][0]).map(o=>({nodeName:o.nodeType,kosVersion:o.kosVersion,group:this.groupBy(o.artifacts,"group")}));this.nodes=r})}catch(t){t instanceof z&&this.logger.error("Failed to fetch software-info",t)}}};nn=nE([k(gs)],nn);const Nr={registration:{[gs]:{class:nn,singleton:!1}},type:gs,predicate:$e(gs),factory:ue.Factory.create(gs)},{URL:Md}=de(),{getOne:iE}=ie.build({basePath:`${Md}/api/kos/state`}),aE=m.createLogger({name:"state-bean-service",group:"Services"}),Td=async({path:t})=>(aE.debug("sending GET for state-bean"),await iE({urlOverride:`${Md}/api/kos/state/${t}`})),cE=Object.freeze(Object.defineProperty({__proto__:null,getStateBeanData:Td},Symbol.toStringTag,{value:"Module"}));var lE=Object.defineProperty,uE=Object.getOwnPropertyDescriptor,_d=(t,e,s,r)=>{for(var o=r>1?void 0:r?uE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&lE(e,s,o),o};const ms="state-bean-model",dE=yt("path");let Ur=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"props");l(this,"logger");this.id=t,this.logger=s.logger,this.props=Qn.map(new Map),Jo(e,this)}updateModel(t){Jo(t,this)}handleConfigBeanUpdated(t){Object.entries(t).forEach(([e,s])=>{let r=s;typeof r=="string"&&Jn(r)&&(r=r.toLowerCase()=="true"),typeof r=="string"&&uo(r)&&(r=Number(r)),this.props.set(e,r)})}async init(){this.logger.debug(`initializing state-bean ${this.id}`)}updateProps(t){Object.entries(t).forEach(([e,s])=>{this.props.set(e,s)})}async load(){this.logger.debug(`loading state-bean ${this.id}`);const t=await Td({path:this.path});t!=null&&t.data&&this.updateProps(t.data)}};_d([B({topic:`/kos/state/${dE}`,websocket:!0})],Ur.prototype,"handleConfigBeanUpdated",1);Ur=_d([k(ms)],Ur);const js={registration:{[ms]:{class:Ur,singleton:!1}},type:ms,predicate:$e(ms),factory:ue.Factory.create(ms)};var hE=Object.defineProperty,fE=Object.getOwnPropertyDescriptor,Sd=(t,e,s,r)=>{for(var o=r>1?void 0:r?fE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&hE(e,s,o),o};const ys="state-prop-model",Ca=yt("path");let jr=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"attribute");l(this,"logger");l(this,"stateBean");this.id=t,this.logger=s.logger,this.path=e.path,this.attribute=e.attribute}get value(){return this.stateBean.props.get(this.attribute)}async init(){this.logger.debug(`initializing state-prop ${this.id}`)}async load(){this.logger.debug(`loading state-prop ${this.id}`)}toString(){var t;return((t=this.value)==null?void 0:t.toString())??""}};Sd([Jt({modelType:js.type,id:`state-bean-${Ca}`,options:{path:Ca}})],jr.prototype,"stateBean",2);jr=Sd([k(ys)],jr);const Ei={registration:{[ys]:{class:jr,singleton:!1}},type:ys,predicate:$e(ys),factory:ue.Factory.create(ys)},{URL:pE}=de(),{getAll:gE}=ie.build({basePath:`${pE}/api/state-prop`}),mE=m.createLogger({name:"state-prop-service",group:"Services"}),yE=async()=>(mE.debug("sending GET for state-prop"),await gE({})),bE=Object.freeze(Object.defineProperty({__proto__:null,getStateProps:yE},Symbol.toStringTag,{value:"Module"})),{URL:Mi}=de(),{getOne:Od}=ie.build({basePath:`${Mi}/api/translation`}),Ds=m.createLogger({name:"translation-service",group:"Services"}),vE=()=>{const t=window.location.origin,e=ve();return(e==null?void 0:e.host)||t},Id=async(t,e)=>{Ds.debug(`Loading translations from: ${t}`);const s=e??vE();try{const r=await fetch(`${s}${t}`);return r.status!==200?(Ds.warn(`Failed to fetch translations at ${t}: ${r.status}`),{}):await r.json()}catch(r){throw Ds.error("Error fetching translations",r),r}},wE=async()=>{Ds.debug("Getting system localization descriptor");const t=await Od({urlOverride:`${Mi}/api/system/kos/localization`});if((t==null?void 0:t.status)!==200)throw new Error(`Failed to get localization descriptor ${t==null?void 0:t.status}`);return t.data},$d=t=>async()=>{Ds.debug(`Getting KOS localization descriptor for context: ${t}`);const e=await Od({urlOverride:`${Mi}/api/kos/localization/contexts`});if((e==null?void 0:e.status)!==200)throw new Error(`Failed to get KOS localization descriptor ${e==null?void 0:e.status}`);return e.data[t]},Cd="langResolver";var EE=Object.getOwnPropertyDescriptor,ME=(t,e,s,r)=>{for(var o=r>1?void 0:r?EE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const bs="translation-model";function TE(t){const e=typeof t=="string",s=e?!1:!!(t!=null&&t.data)&&typeof(t==null?void 0:t.data)!="string",r=e?t:t==null?void 0:t.defaultValue,o=e||t==null?void 0:t.context,n=e?void 0:s?t==null?void 0:t.data:t;return{isBasicOptions:e,defaultValue:r,context:o,data:n}}function Dd(t,e=""){return Object.keys(t).reduce((s,r)=>{const o=e?`${e}.${r}`:r;if(typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])){const n=Dd(t[r],o);return{...s,...n}}else return{...s,[o]:t[r]}},{})}function Ad(t,e){const s={...t};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(typeof e[r]=="object"&&e[r]!==null&&typeof t[r]=="object"&&t[r]!==null?s[r]=Ad(t[r],e[r]):s[r]=e[r]);return s}const an=(t,e)=>{const s=/__(.*?)__/g,r=t.replace(s,(o,n)=>Object.prototype.hasOwnProperty.call(e||{},n.trim())?e==null?void 0:e[n.trim()]:o);return r===t?r:s.test(r)?an(r,e):r},fr=(t,e,s)=>{const r=/{{(.*?)}}/g,n=an(t,e).replace(r,(a,c)=>{const u=c.trim();if(Object.prototype.hasOwnProperty.call(s||{},u))return s==null?void 0:s[u];if(u.includes(".")){const d=u.split(".");let h=s;for(const f of d)if(h&&typeof h=="object"&&Object.prototype.hasOwnProperty.call(h,f))h=h[f];else return a;return h}return a});return an(n,e)},Da=(t,e)=>{if(e.includes(":")){const[s,r]=e.split(":");return{namespace:s,key:r}}else return{namespace:t,key:e}};let cn=class{constructor(t,e,s){l(this,"id");l(this,"namespace");l(this,"descriptor");l(this,"defaultLocale");l(this,"currentLocale");l(this,"bundleResolver");l(this,"data");l(this,"logger");l(this,"resolver");l(this,"disposer");l(this,"context");l(this,"rootUrl");this.id=t,this.defaultLocale=e.defaultLocale||"en",this.currentLocale=e.currentLocale||"en",this.namespace=e.namespace,this.descriptor=e.descriptor,this.rootUrl=e.rootUrl,this.data={},this.resolver=e.resolver||s.kosContext.get(Cd),this.bundleResolver=e.bundleResolver,this.logger=s.logger,this.context=s.kosContext.parentModel}getTranslationLocales(t){const e=this.descriptor[t];if(!t||!e)return[this.defaultLocale];if(!this.defaultLocale&&!e.fallbacks)return[t];let s=e.fallbacks||[this.defaultLocale];return s.includes(t)||(s=[t,...s]),s}async loadTranslations(){const t=this.getTranslationLocales(this.currentLocale).reverse(),e=t.map(r=>{if(this.bundleResolver){const o=Q.getContext(this.id);return this.bundleResolver(this.namespace,r,o)}try{const o=this.resolver(this.namespace,r);return Id(o,this.rootUrl)}catch{return Promise.resolve({})}}),s=await Promise.allSettled(e);te(()=>{const r=s.reduce((o,n,i)=>(n.status==="fulfilled"?(this.logger.debug(`resolved ${t[i]}`,n.value),n.value&&(o=Ad(o,n.value))):this.logger.error(`failed to load translation ${this.id} for ${t[i]}`),o),{});this.data=Dd(r)})}async init(){this.logger.debug(`initializing translation ${this.id}`)}exists(t){const{namespace:e,key:s}=Da(this.namespace,t);if(e!==this.namespace){const r=this.context.getModel(e);return r?r.exists(s):!1}return!!this.data[s]}resolveKey(t,e){if(!t)return this.logger.debug("key is empty"),"";const{defaultValue:s,context:r,data:o}=TE(e),{namespace:n,key:i}=Da(this.namespace,t),a=`${i}_${r}`;if(n!==this.namespace){const c=this.context.getModel(n);return c?c.resolveKey(i,e):s??i}if(r&&this.data[a]){const c=this.data[a];return Array.isArray(c)?c.map(u=>fr(u,this.data,o)):fr(this.data[a],this.data,o)}if(this.data[i]){const c=this.data[i];return Array.isArray(c)?c.map(u=>fr(u,this.data,o)):fr(this.data[i],this.data,o)}return s??i}unload(){this.logger.debug(`unloading translation ${this.id}`),this.disposer&&this.disposer()}async load(){this.logger.debug(`loading translation ${this.id}`),await this.loadTranslations()}async ready(){this.logger.debug(`ready translation ${this.id}`),this.disposer=M.reaction(()=>this.currentLocale,(t,e)=>{this.logger.info(`translation langs for namespace ${this.id} changed from ${e} to ${t}`),this.loadTranslations()})}};cn=ME([ao(),k(bs)],cn);const Br={registration:{[bs]:{class:cn,singleton:!1}},type:bs,predicate:$e(bs),factory:ue.Factory.create(bs)};var _E=Object.defineProperty,SE=Object.getOwnPropertyDescriptor,xd=(t,e,s,r)=>{for(var o=r>1?void 0:r?SE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&_E(e,s,o),o};const vs="translation-container-model",OE=(t,e="/")=>t.join(e).replace(new RegExp(e+"{1,}","g"),e);function IE(t,e){const s=this.descriptor.namespaces[t];if(!s)throw new Error("namespace "+t+" not found in descriptor");const r=s.basePath,o=s.locales[e].file;return OE([r,o])}let Hr=class{constructor(t,e,s){l(this,"id");l(this,"lang");l(this,"rootUrl");l(this,"descriptor");l(this,"_defaultNamespace");l(this,"resolver");l(this,"logger");l(this,"descriptorUrl");l(this,"namespaces",[]);l(this,"_models");this.id=t,this.lang=e.lang||"en",this.descriptor=e.descriptor,this._defaultNamespace=e.defaultNamespace,this.descriptorUrl=e.descriptorUrl,this.rootUrl=e.rootUrl,this.resolver=e.resolver||IE.bind(this),s.kosContext.set(Cd,this.resolver),this.logger=s.logger,this._models=new Fe({parentId:t})}set currentLocale(t){this.lang=t,this.models.data.forEach(e=>{e.currentLocale=t})}get defaultNamespace(){return this._defaultNamespace?this.getModel("translation-"+this._defaultNamespace):void 0}getModel(t){return this.logger.debug("getting model "+t),this._models.getModel("translation-"+t)}get models(){return this._models}get data(){return this._models.data}async reload(){for(const t of this.namespaces){const e=this.resolveNamespace(t);await ge(e)}}resolveNamespace(t){var s;if((s=this.descriptor.namespaces)==null?void 0:s[t]){const r=Object.keys(this.descriptor.namespaces[t].locales)[0],o=this.descriptor.namespaces[t].locales[r].defaultLocale,n=Br.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:o,descriptor:this.descriptor.namespaces[t].locales,resolver:this.resolver});return this.addModel(n),this.namespaces.includes(t)||te(()=>{this.namespaces.push(t)}),n}else{this.logger.warn("namespace "+t+" not found in descriptor");const r=Br.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:this.lang,descriptor:{},resolver:this.resolver});return this.addModel(r),r}}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug("initializing translation-container container "+this.id)}async load(){this.logger.debug("loading translation-container container "+this.id)}};xd([Le],Hr.prototype,"_models",2);Hr=xd([k(vs)],Hr);const Ve={registration:{[vs]:{class:Hr,singleton:!0}},type:vs,predicate:$e(vs),factory:ue.Singleton.create(vs)},$E={set(t,e){const s=Q.getContext(Ve.type);s&&s.set(t,e)},get(t){const e=Q.getContext(Ve.type);return e==null?void 0:e.get(t)}},Rd={async init(t){const e=Ve.factory(t);return await ge(e),{translations:e}}};function CE(t){return(t==null?void 0:t.troubles)!==void 0&&(t==null?void 0:t.troubles)instanceof Array&&(t==null?void 0:t.troublesByType)!==void 0&&typeof(t==null?void 0:t.troublesByType)=="object"}const Pd="kos-ws-event",Ti=es(Pd);var DE=Object.defineProperty,AE=Object.getOwnPropertyDescriptor,_i=(t,e,s,r)=>{for(var o=r>1?void 0:r?AE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&DE(e,s,o),o};const xE=({headers:t,body:e})=>Object.entries(t).map(([r,o])=>`${r}:${o}`).join("\\n")+"\\n\\n"+e;exports.WsEventModel=class{constructor(e){l(this,"id");l(this,"events");l(this,"_topicMap");this.id=e,this.events=M.observable.map(new Map),this._topicMap=new Map}get websocketEvents(){return Array.from(this.events.values())}handleSendEvent(e,s){this.processEvent(s,!0)}handleReceiveEvent(e,s){this.processEvent(s)}processEvent(e,s=!1){m.debug("kos event received");const{body:r,headers:o}=e.body,n=o["request-id"]||o["response-id"],i=o["request-id"]||o["response-id"]||o.topic||o.type;if(i){let a=i;if(n)a=`${a}-${s?"send":"receive"}`;else{const u=this._topicMap.get(i)||0;a=`${a}-${u+1}`,this._topicMap.set(i,u+1)}const c={msgId:a,content:r,headers:o,timestamp:Date.now(),raw:xE({headers:o,body:r}),direction:s?"send":"receive",mocked:!!o.mocked};this.events.set(a,c),m.debug(`logged ${this.events.size} events`)}}};_i([B({topic:[zs.SEND]})],exports.WsEventModel.prototype,"handleSendEvent",1);_i([B({topic:[zs.RECEIVED]})],exports.WsEventModel.prototype,"handleReceiveEvent",1);exports.WsEventModel=_i([k(Ti.type)],exports.WsEventModel);const Aa=ve(),RE=Aa.debug==="true"||Aa.debug===!0,PE="/api/system/canvas",kd=async(t,e)=>{const s=e||PE,r=`${exports.BASE_URL}${s}`;await exports.kosFetch(r,{method:"POST",headers:{hide:RE?"false":"true"},body:t})},kE=Object.freeze(Object.defineProperty({__proto__:null,sendCanvasData:kd},Symbol.toStringTag,{value:"Module"}));function xa(t,e,s){{const r=t.filter((o,n)=>n%4!==3);return btoa(String.fromCharCode(...r))}}var LE=Object.defineProperty,FE=Object.getOwnPropertyDescriptor,Ld=(t,e,s,r)=>{for(var o=r>1?void 0:r?FE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&LE(e,s,o),o};const Fd="canvas-renderer-model";function Ko(t){return typeof t.onDone=="function"}let Kr=class{constructor(t,e,s){l(this,"id");l(this,"router");l(this,"logger");l(this,"_renderer",null);l(this,"_clearOnComplete");l(this,"isStreaming",!1);l(this,"renderLoopId",null);l(this,"sendIntervalId",null);l(this,"timeoutId",null);l(this,"apiPath");l(this,"endpointName");l(this,"width",50);l(this,"height",30);l(this,"fps",10);l(this,"durationMs",null);l(this,"_onFrame",null);this.id=t,this.logger=s.logger,this.width=e.width??50,this.height=e.height??30,this.fps=e.fps??10,this.durationMs=e.durationMs??null,this.apiPath=e.apiPath??"/api/system/canvas",this.endpointName=e.endpoint}set onFrame(t){this._onFrame=t}set renderer(t){var e,s;this._renderer&&(this.stopStreaming(),(s=(e=this._renderer).dispose)==null||s.call(e)),this._renderer=t,this.isStreaming&&this.startStreaming()}setClearOnComplete(t){this._clearOnComplete=t}sendDataFrame(t,e){kd(t,e)}checkStreaming(){if(this.isOneShotDone()||!this.isStreaming){requestAnimationFrame(()=>{const t=this.isOneShotDone();this.stopStreaming(!t)});return}}handleFrame(t){var s;const e=xa(t);this.sendDataFrame(e,this.apiPath),(s=this._onFrame)==null||s.call(this,e)}stopStreaming(t=!0){var e,s;this.logger.debug(`stopStreaming called with clearCanvas=${t}`),this.isStreaming=!1,this.renderLoopId&&cancelAnimationFrame(this.renderLoopId),this.sendIntervalId&&clearInterval(this.sendIntervalId),this.timeoutId&&clearTimeout(this.timeoutId),(s=(e=this._renderer)==null?void 0:e.pause)==null||s.call(e),t&&(this.logger.debug("Clearing canvas..."),this.clearCanvas())}clearCanvas(){var s;const t=this.width>0?this.width:50,e=this.height>0?this.height:30;if(t>0&&e>0){const r=t*e*4,o=new Uint8ClampedArray(r);for(let i=3;i<r;i+=4)o[i]=255;const n=xa(o);this.logger.debug(`Sending clear frame: ${t}x${e}, apiPath: ${this.apiPath}`),this.sendDataFrame(n,this.apiPath),(s=this._onFrame)==null||s.call(this,n)}}isOneShotDone(){var t,e;return Ko(this._renderer)&&((e=(t=this._renderer).isOneShot)==null?void 0:e.call(t))===!0&&this._renderer.isOneShotDone}startStreaming(){var t,e,s,r;{if(!this._renderer)return;if(!this.apiPath){this.logger.error(`No endpoint configured for canvas renderer ${this.id}`);return}this.isStreaming=!0,this._renderer.reset(),(e=(t=this._renderer).play)==null||e.call(t);const o=Ko(this._renderer);Ko(this._renderer)&&this._renderer.onDone(()=>{var c,u,d;this.logger.debug(`Renderer completed for ${this.id}`),K("/canvas/renderer/completed",{endpoint:this.endpointName,rendererId:this.id,rendererType:(c=this._renderer)==null?void 0:c.constructor.name,timestamp:Date.now()});let a=!0;this._clearOnComplete!==void 0?a=this._clearOnComplete:a=!(((d=(u=this._renderer)==null?void 0:u.isOneShot)==null?void 0:d.call(u))??!1),this.stopStreaming(a)}),this._renderer.renderFrame(this.width,this.height);const n=(r=(s=this._renderer).readPixels)==null?void 0:r.call(s,this.width,this.height);if(n&&this._onFrame&&this.handleFrame(n),this.isOneShotDone()){requestAnimationFrame(()=>{this.stopStreaming(!1)});return}const i=()=>{var a;(a=this._renderer)==null||a.renderFrame(this.width,this.height),this.renderLoopId=requestAnimationFrame(i)};this.renderLoopId=requestAnimationFrame(i),this.sendIntervalId=setInterval(()=>{var c,u;const a=(u=(c=this._renderer)==null?void 0:c.readPixels)==null?void 0:u.call(c,this.width,this.height);a&&this._onFrame&&(this.handleFrame(a),this.checkStreaming())},1e3/this.fps),!o&&this.durationMs!=null&&(this.timeoutId=setTimeout(()=>{this.stopStreaming()},this.durationMs))}}async init(){this.logger.debug(`initializing canvas-renderer ${this.id}`)}async load(){this.logger.debug(`loading canvas-renderer ${this.id}`),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/stop`,async(t,e)=>{this.logger.debug(`HTTP stop endpoint called for ${this.endpointName}`),this.stopStreaming(),e.send({status:"OK"})}),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/start`,async(t,e)=>{this.startStreaming(),e.send({status:"OK"})})}};Ld([Jt({modelType:ai.type})],Kr.prototype,"router",2);Kr=Ld([k(Fd)],Kr);const Si=new we({class:Kr,type:Fd});class Nd{constructor({src:e}){l(this,"video");l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);l(this,"doneCallback",null);this.video=document.createElement("video"),this.video.src=e,this.video.crossOrigin="anonymous",this.video.muted=!0,this.video.loop=!1,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");this.ctx=s,this.handleEnded=this.handleEnded.bind(this),this.video.addEventListener("ended",this.handleEnded)}handleEnded(){this.doneCallback&&this.doneCallback()}reset(){this.video.pause(),this.video.currentTime=0,this.lastUpdate=performance.now()}play(){this.video.play().catch(console.warn)}pause(){this.video.pause()}renderFrame(e,s){this.canvas.width=e,this.canvas.height=s,this.video.readyState>=2&&this.ctx.drawImage(this.video,0,0,e,s)}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}onDone(e){this.doneCallback=e}dispose(){this.video.pause(),this.video.removeAttribute("src"),this.video.load(),this.video.remove(),this.video.removeEventListener("ended",this.handleEnded),this.doneCallback=null}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}}class NE{constructor(){l(this,"canvas");l(this,"gl");l(this,"lastWidth",0);l(this,"lastHeight",0);l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("webgl");if(!e)throw new Error("WebGL not supported");this.gl=e}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e=this.lastWidth,s=this.lastHeight){const r=new Uint8Array(e*s*4);this.gl.readPixels(0,0,e,s,this.gl.RGBA,this.gl.UNSIGNED_BYTE,r);const o=new Uint8ClampedArray(r.length);for(let n=0;n<s;n++){const i=n*e*4,a=(s-1-n)*e*4;o.set(r.subarray(i,i+e*4),a)}return o}}class UE extends NE{constructor({speedPx:s=1}={}){super();l(this,"program");l(this,"posBuffer");l(this,"aPosition");l(this,"uMinHue");l(this,"uMaxHue");l(this,"uHueOffset");l(this,"uGridHeight");l(this,"minHue",0);l(this,"maxHue",80);l(this,"hueOffset",0);l(this,"speedPx",1);this.speedPx=s;const r=this.gl,o=`
|
|
107
|
+
["${e}"]`;if(r?(p=this.fosSocket)==null?void 0:p.connectionEstablished:(y=this.socket)==null?void 0:y.connectionEstablished){const M=r?this.fosSocket:this.socket;(w=M==null?void 0:M.socket)==null||w.send(d)}else{nt.debug("no connection adding to offline messages");const M=r?this.fosSocket:this.socket;M==null||M.addOfflineMessage(d)}}subscribeTopic({topic:e,callback:s,fos:r,bridge:o,destinationAddress:n}){const{unsubscribe:i,count:a}=$(e,s);return nt.debug(`Topic ${e} currently has ${a} subscribers`),this._sendSubscriptionMessage(e,"subscribe",r,o,n),()=>{const{count:c}=i();nt.debug(`Topic ${e} currently has ${c} subscribers`),c===0&&this._sendSubscriptionMessage(e,"unsubscribe",r,o,n)}}async whenReady(){const e=this;return this.webSocketSupported?(await E.when(()=>{var s,r;return!!((s=e.socket)!=null&&s.connectionEstablished)&&(!e.useFosTransport||!!((r=e.fosSocket)!=null&&r.connectionEstablished))&&e.authorized}),{status:"success"}):{status:"not supported"}}get token(){return this._token}set token(e){this._token=e,this.init()}static host(e="localhost"){return this.getInstance().host=e,this}static port(e=8080){return this.getInstance().port=e,this}static alias(e){this.getInstance().alias=e}static getInstance(e=8080,s){if(!this._instance){const r=window.kosUseFos?{port:window.kosFosPort||8081}:void 0;this._instance=new this({port:e,token:s,fos:r})}return this._instance}}l(Pt,"_instance");class ym{constructor(e,s,r,o,n){l(this,"disposers",[]);l(this,"activatableDisposers",[]);l(this,"flowControllers",new Map);l(this,"baselineDependencies",new Map);l(this,"registeredTopics",new Set);l(this,"onceTopics",new Set);this.model=e,this.modelData=s,this.modelId=r,this.offlineQueue=o,this.log=n}registerAll(e){var o;const s=((o=this.modelData)==null?void 0:o[X])||{},r=Object.keys(s);this.log.debug(`Found ${r.length} subscriptions in ${this.modelId} (lifecycle: ${e??"any"})`),r.forEach(n=>{const i=s[n],a=i.lifecycle;if(e&&e!==a)return;const c=this.resolvePropKey(n);if(this.onceTopics.has(c)){this.log.debug(`Skipping once topic (already fired): ${c}`);return}if(this.registeredTopics.has(c)){this.log.debug(`Skipping duplicate subscription for ${c}`);return}if(this.registeredTopics.add(c),i.once&&this.onceTopics.add(c),this.log.debug(`Resolved topic: ${n} → ${c}`),i.requiresBaseline&&(this.baselineDependencies.set(c,i.requiresBaseline),this.log.debug(`Registered baseline dependency for ${c}: ${i.requiresBaseline.path}`)),i.flow)this.subscribeWithFlowControl(i,c,a);else{const u=this.createHandler(c,i);this.subscribe(i,c,u,a===C.ACTIVATE)}})}deactivate(){var s;this.log.debug(`Deactivating subscriptions for ${this.modelId}`);for(const r of this.activatableDisposers)try{r()}catch(o){this.log.error("Error during subscription disposal",o)}this.activatableDisposers=[];const e=((s=this.modelData)==null?void 0:s[X])||{};for(const[r,o]of Object.entries(e))if(o.lifecycle===C.ACTIVATE){const n=this.resolvePropKey(r);this.registeredTopics.delete(n)}}disposeAll(){const e=[...this.disposers,...this.activatableDisposers];this.log.debug(`Disposing ${e.length} subscriptions for ${this.modelId}`);for(const[s,r]of this.flowControllers)this.log.debug(`Disposing flow controller for ${s}`);this.flowControllers.clear();for(const s of e)try{s()}catch(r){this.log.error("Error during subscription disposal",r)}this.disposers=[],this.activatableDisposers=[],this.registeredTopics.clear()}subscribe(e,s,r,o){const n=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;if(e.websocket){this.log.debug(`Subscribing to WebSocket topic: ${s}`);const i=Pt.getInstance().subscribeTopic({topic:s,callback:r,fos:e.fos,bridge:e.bridge,destinationAddress:n});o?this.activatableDisposers.push(i):this.disposers.push(i)}else{this.log.debug(`Subscribing to EventBus topic: ${s}`);const{unsubscribe:i}=$(s,r);o?this.activatableDisposers.push(i):this.disposers.push(i)}}createHandler(e,s){return async r=>{var o;try{const n=(o=r==null?void 0:r.headers)==null?void 0:o["src-addr"],i=s.destinationAddress&&this.resolvePropKey(s.destinationAddress),a=i?n===i:!0,c=this.extractWildcardCapture(e,r,s),u=this.isBaselineReady(e);if(!this.model.isReady()||!u){u?this.log.warn(`Model ${this.modelId} not ready. Queuing message for ${e}`):this.log.warn(`Baseline not ready for ${e}. Queuing message.`);const d=()=>{const h=Ko(r,s.skipParse),f=s.transform(h);if(a&&s.condition(f,this.modelData,r))return this.callHandlerWithWildcard(s,f,c,r)};this.offlineQueue.enqueue(d,e,r)}else{const d=Ko(r,s.skipParse),h=s.transform(d);if(a&&s.condition(h,this.modelData,r))return this.callHandlerWithWildcard(s,h,c,r)}}catch(n){this.log.error(`Error handling subscription for ${e}`,n)}}}extractWildcardCapture(e,s,r){var n;if(!r.wildcardName||!Gc(e))return null;const o=((n=s==null?void 0:s.headers)==null?void 0:n.topic)||"";return Vc(e,o,r.wildcardName)}callHandlerWithWildcard(e,s,r,o){if(r&&Object.keys(r).length>0){const n={...o,wildcardCapture:r};return e.handler.call(this.modelData,s,n,this.modelData)}else return e.handler.call(this.modelData,s,o,this.modelData)}resolvePropKey(e){const s=/.*({PROP_(.+)})/;let r=e.includes("{MODEL_ID}")?e.replace("{MODEL_ID}",this.modelId):e;const o=r.match(s);return o&&o[2]in this.modelData&&(r=r.replace(o[1],this.modelData[o[2]])),r}async subscribeWithFlowControl(e,s,r){this.log.debug(`Setting up flow control for topic: ${s}`);const o=new lm(e.flow);this.flowControllers.set(s,o);const n=this.createFlowControlHandler(s,e),i=this.startFlowProcessing(e,s,n,o),a=()=>{this.flowControllers.delete(s),i.then(c=>c==null?void 0:c.abort())};r===C.ACTIVATE?this.activatableDisposers.push(a):this.disposers.push(a)}async startFlowProcessing(e,s,r,o){const n=new AbortController;try{let i;if(e.websocket){const a=e.destinationAddress?this.resolvePropKey(e.destinationAddress):null;Pt.getInstance().subscribeTopic({topic:s,callback:()=>{},fos:e.fos,bridge:e.bridge,destinationAddress:a}),i=Qi(s)}else i=Qi(s);return(async()=>{try{for await(const a of o.processEvents(i)){if(n.signal.aborted)break;const c=r(a);c instanceof Promise&&await o.trackPromise(c)}}catch(a){this.log.error(`Flow control error for ${s}:`,a)}})(),n}catch(i){return this.log.error(`Failed to start flow processing for ${s}:`,i),null}}createFlowControlHandler(e,s){return async r=>{var o,n,i,a;try{if(s.condition&&!s.condition(r,this.modelData,r))return;if(this.model.isReady())return s.handler.call(this.modelData,r,r,this.modelData);{this.log.warn(`Model ${this.modelId} not ready. Queuing flow-controlled message for ${e}`);const c=()=>s.handler.call(this.modelData,r,r,this.modelData);this.offlineQueue.enqueue(c,e,r)}}catch(c){if(this.log.error(`Error in flow control handler for ${e}:`,c),(n=(o=s.flow)==null?void 0:o.errorHandling)!=null&&n.retry)await this.retryHandler(s,r,c);else if(!((a=(i=s.flow)==null?void 0:i.errorHandling)!=null&&a.continueOnError))throw c}}}async retryHandler(e,s,r){const o=e.flow.errorHandling.retry;let n=r;for(let i=1;i<=o.attempts;i++)try{return this.log.debug(`Retry attempt ${i}/${o.attempts} for handler`),await new Promise(a=>setTimeout(a,o.backoffMs*i)),e.handler.call(this.modelData,s,s,this.modelData)}catch(a){n=a,this.log.warn(`Retry attempt ${i} failed:`,a)}throw this.log.error("All retry attempts failed, throwing last error:",n),n}getFlowControlStats(){const e={};for(const[s,r]of this.flowControllers)e[s]=r.getStats();return e}getResponseStore(){return this.modelData.serviceResponses}isBaselineReady(e){const s=this.baselineDependencies.get(e);if(!s)return!0;const r=this.getResponseStore();if(!r)return this.log.warn(`ServiceResponseStore not found for baseline check on topic: ${e}`),!1;const n=`${(s.method||"get").toUpperCase()}:${s.path}`;return r.has(n)}flushQueueForBaseline(e){const s=this.baselineDependencies.get(e);if(!s){this.log.debug(`No baseline dependency for topic: ${e}`);return}const r=this.getResponseStore();if(!r){this.log.warn("ServiceResponseStore not found, falling back to standard flush"),this.offlineQueue.flush();return}const o=s.method||"get",n=r.getTemporalMetadataByPath(s.path,o);if(!n){this.log.warn(`Baseline temporal metadata not found for ${s.path}, falling back to standard flush`),this.offlineQueue.flush();return}const i=s.replayStrategy||ht.AFTER_REQUEST;this.log.info(`Flushing queue with strategy ${i} for topic: ${e}`),this.log.debug(`Baseline timing - requested: ${n.requestedAt}, received: ${n.receivedAt}`),this.offlineQueue.flushWithStrategy(i,n.requestedAt,n.receivedAt)}}function _t(t,e){const s=`[Model:${e}]`;return{debug:(...r)=>t.debug(s,...r),info:(...r)=>t.info(s,...r),warn:(...r)=>t.warn(s,...r),error:(...r)=>t.error(s,...r)}}function bm(t){return!!(t!=null&&t[Ue])&&Object.keys(t[Ue]).length>0}function vm(t){return!!(t!=null&&t[X])&&Object.keys(t[X]).length>0}function wm(t){return!!(t!=null&&t[je])&&t[je].length>0}function Em(t){const e=Object.getPrototypeOf(t);return!!(e!=null&&e[ft])&&Object.keys(e[ft]).length>0}function Mm(t){return t.retention===oe.TTL&&t.extendOnRefresh===!0&&t.ttl!==void 0}function Tm(t,e){return t.has(e)}function _m(t){return!t.expiresAt||Date.now()<t.expiresAt}function Ji(t,e,s,r){const o=setTimeout(()=>r(t),e);s.set(t,o)}class Sm{constructor(){l(this,"responses",new Map);l(this,"retentionPolicies",new Map);l(this,"cleanupTimers",new Map)}set(e,s,r={retention:oe.SINGLE},o=Date.now(),n=Date.now()){if(this.shouldExtendTTL(e,r))return this.extendExistingTTL(e,r.ttl),!1;const i=this.createCachedResponse(s,e,r,o,n);return this.storeResponse(e,i,r),!0}get(e){const s=this.responses.get(e);if(s){if(s.expiresAt&&Date.now()>s.expiresAt){this.delete(e);return}return s.data}}getByPath(e,s="get"){return this.get(this.makeKey(e,s))}has(e){return this.get(e)!==void 0}delete(e){this.responses.delete(e),this.retentionPolicies.delete(e);const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}clearPath(e){Array.from(this.responses.keys()).filter(r=>this.extractPath(r)===e).forEach(r=>this.delete(r))}clear(){this.cleanupTimers.forEach(e=>clearTimeout(e)),this.responses.clear(),this.retentionPolicies.clear(),this.cleanupTimers.clear()}get size(){return this.responses.size}shouldCleanupAfterHandler(e){const s=this.retentionPolicies.get(e);return(s==null?void 0:s.retention)===oe.IMMEDIATE}shouldExtendTTL(e,s){if(!Mm(s)||!Tm(this.responses,e))return!1;const r=this.responses.get(e);return _m(r)}extendExistingTTL(e,s){const r=this.responses.get(e);r.expiresAt=Date.now()+s,this.resetCleanupTimer(e,s)}resetCleanupTimer(e,s){this.clearTimerIfExists(e),Ji(e,s,this.cleanupTimers,r=>this.delete(r))}clearTimerIfExists(e){const s=this.cleanupTimers.get(e);s&&(clearTimeout(s),this.cleanupTimers.delete(e))}createCachedResponse(e,s,r,o,n){return{data:e,timestamp:n,requestedAt:o,receivedAt:n,path:this.extractPath(s),method:this.extractMethod(s),expiresAt:this.calculateExpiresAt(r)}}calculateExpiresAt(e){return e.retention===oe.TTL&&e.ttl?Date.now()+e.ttl:void 0}storeResponse(e,s,r){this.responses.set(e,s),this.retentionPolicies.set(e,r),this.applyRetentionPolicy(e,r)}applyRetentionPolicy(e,s){switch(s.retention){case oe.IMMEDIATE:break;case oe.TTL:s.ttl&&Ji(e,s.ttl,this.cleanupTimers,r=>this.delete(r));break;case oe.SINGLE:break;case oe.PERMANENT:case oe.MANUAL:break}}makeKey(e,s){return`${s.toUpperCase()}:${e}`}extractPath(e){return e.split(":",2)[1]||e}extractMethod(e){return e.split(":",2)[0]||"get"}getTemporalMetadata(e){const s=this.responses.get(e);if(s)return{requestedAt:s.requestedAt,receivedAt:s.receivedAt}}getTemporalMetadataByPath(e,s="get"){return this.getTemporalMetadata(this.makeKey(e,s))}cleanup(){const e=Date.now();Array.from(this.responses.entries()).filter(([r,o])=>o.expiresAt&&e>o.expiresAt).map(([r])=>r).forEach(r=>this.delete(r))}}class Om{static createAll(e){const{modelId:s,modelTypeName:r,modelData:o}=e,n=Cn.create({modelId:s,modelTypeName:r}),i=new Ag(e,_t(n,"fsm")),a=new Pg(_t(n,"offline-queue")),c=new _g(e),u=new Tg(e),d=new Sm;o.serviceResponses=d;const h={fsm:i,offlineQueue:a,serviceResponseStore:d,companionManager:c,childResolver:u};if(bm(o)&&(h.effectManager=new Sg(r,s,o,_t(n,"effect"))),vm(o)){const f=_t(n,"subscription");h.subscriptionManager=new ym(e,o,s,a,f),h.onlineLifecycleManager=new kg(e,_t(n,"online"))}return wm(o)&&(h.httpRouteManager=new Pn(o,_t(n,"http-routes"))),Em(o)&&(h.serviceRequestManager=new am(o,d)),h}}const N=D.getLogger("kos-model"),Im="kos.extension.model.loader";class Sl{constructor({modelTypeName:e,id:s,modelData:r}){l(this,"_id");l(this,"_status");l(this,"_activeStatus");l(this,"_onlineStatus");l(this,"modelData");l(this,"modelTypeName");l(this,"initialized");l(this,"loaded");l(this,"_isLoadExecuting");l(this,"offlineQueue");l(this,"subscriptionManager");l(this,"effectManager");l(this,"httpRouteManager");l(this,"onlineLifecycleManager");l(this,"serviceResponses");l(this,"serviceRequestManager");l(this,"companionManager");l(this,"childResolver");l(this,"fsm");this._id=typeof s<"u"?`${s}`:e,this.modelTypeName=e,this.initialized=!1,this.loaded=!1,this._isLoadExecuting=!1,this.modelData=r,this._status=v.CREATED,this._activeStatus=v.INACTIVE,this._onlineStatus=v.OFFLINE;const o=Om.createAll(this);this.fsm=o.fsm,this.offlineQueue=o.offlineQueue,this.companionManager=o.companionManager,this.childResolver=o.childResolver,this.serviceResponses=o.serviceResponseStore,o.effectManager&&(this.effectManager=o.effectManager),o.subscriptionManager&&(this.subscriptionManager=o.subscriptionManager),o.httpRouteManager&&(this.httpRouteManager=o.httpRouteManager),o.onlineLifecycleManager&&(this.onlineLifecycleManager=o.onlineLifecycleManager),o.serviceRequestManager&&(this.serviceRequestManager=o.serviceRequestManager),E.makeAutoObservable(this,{fsm:!1,effectManager:!1,subscriptionManager:!1,onlineLifecycleManager:!1,serviceRequestManager:!1,serviceResponses:!1,companionManager:!1,childResolver:!1,offlineQueue:!1}),Eg(this)}get companionModels(){return this.companionManager}set status(e){this._status=e}get status(){return this._status}get modelId(){return this._id}get id(){return this._id}get activeStatus(){return this._activeStatus}set activeStatus(e){this._activeStatus=e}get onlineStatus(){return this._onlineStatus}set onlineStatus(e){this._onlineStatus=e}get modelManager(){return globalThis.kos.modelManager}isActive(){return this._status===v.ACTIVE}isOnline(){return this._onlineStatus===v.ONLINE}isReady(){return this._status===v.READY}async deactivate(){var e,s,r;N.debug(`deactivating model ${this.modelTypeName} with id ${this.modelId}`);try{const o=W.getContext(this.modelId);await((s=(e=this.modelData)==null?void 0:e.deactivate)==null?void 0:s.call(e,o)),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} deactivated`),(r=this.subscriptionManager)==null||r.deactivate()}catch(o){throw N.debug(`Model ${this.modelId} failed to deactivated`),o}}async activate(){var e,s,r,o;N.debug(`activating model ${this.modelTypeName} with id ${this.modelId}`),await as(this,C.ACTIVATE);try{await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(C.ACTIVATE));const n=W.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.activate)==null?void 0:r.call(s,n)),this.initializeStateMachineForLifecycle(C.ACTIVATE),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} subscribing to all topics`),(o=this.subscriptionManager)==null||o.registerAll(C.ACTIVATE),this.createLifecycleCompanions(C.ACTIVATE),N.debug(`Model ${this.modelTypeName} with id ${this.modelId} activated`)}catch(n){throw N.debug(`Model ${this.modelId} failed to activate`),n}}async whenLoaded(){await Co([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.loaded,onMatch:()=>{N.debug(`Model ${this.modelId} is loaded`)}}])}async whenInitialized(){await Co([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to initialize model ${this.modelId}`)}},{condition:()=>this.initialized,onMatch:()=>{N.debug(`Model ${this.modelId} is initialized`)}}])}async whenReady(){await Co([{condition:()=>this.status===v.FAILED,onMatch:()=>{throw new Error(`Failed to ready model ${this.modelId}`)}},{condition:()=>this.status===v.READY,onMatch:()=>{N.debug(`Model ${this.modelId} is ready`)}}])}async ready(){var e,s,r,o;if(this.fsm.current===v.READY){N.debug(`already readying model ${this.modelTypeName} with id ${this.modelId} returning`);return}try{N.debug(`readying model ${this.modelTypeName} with id ${this.modelId}`),await as(this,C.READY),await al(this,An.READY,C.READY),await((e=this.serviceRequestManager)==null?void 0:e.executeForLifecycle(C.READY));const n=W.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.ready)==null?void 0:r.call(s,n)),this.offlineQueue.flush(),this.initializeStateMachineForLifecycle(C.READY),(o=this.subscriptionManager)==null||o.registerAll(C.READY),this.createLifecycleCompanions(C.READY),N.debug(`Model ${this.modelId} is ready`);const i={modelId:this.modelId,modelType:this.modelTypeName};K(Zc(this.modelTypeName,this.modelId),i),K(Jc(this.modelTypeName),i)}catch(n){throw N.error(n),Error(n)}}async load(){var o,n,i,a,c,u;const e=this[Ze];e&&await e.whenLoaded();const{modelTypeName:s,modelId:r}=this;if(this.fsm.current===v.LOADED){N.debug(`Model ${s} with id ${r} already loaded`);return}if(this._isLoadExecuting){N.debug(`Model ${s} with id ${r} is currently executing load`);return}this._isLoadExecuting=!0;try{N.debug(`Loading model ${s} with id ${r}`),await as(this,C.LOAD);const d=W.getContext(r),h=`${Im}.${s}`,f=await I.loader.executeLoader(h,{});f&&(N.info(`Setting loaded context for ${r}, type: ${s}`),d==null||d.set(h,f)),await((o=this.serviceRequestManager)==null?void 0:o.executeForLifecycle(C.LOAD)),await((i=(n=this.modelData)==null?void 0:n.load)==null?void 0:i.call(n,d)),ee(()=>{this.loaded=!0}),N.debug(`Model ${s} with id ${r} successfully loaded`),this.initializeStateMachineForLifecycle(C.LOAD),(a=this.subscriptionManager)==null||a.registerAll(C.LOAD),(c=this.httpRouteManager)==null||c.registerAll(),(u=this.effectManager)==null||u.setup(),this.createLifecycleCompanions(C.LOAD)}catch(d){throw N.error(`Model ${r} failed to load`,d),d}finally{this._isLoadExecuting=!1}}async unload(){var e,s,r,o,n,i,a;N.debug(`unloading model ${this.modelTypeName} with id ${this.modelId}`);try{const c=this.getChildren().map(d=>{var h;return(h=d.unload)==null?void 0:h.call(d)}).filter(d=>!!d);await Promise.allSettled(c);const u=W.getContext(this.modelId);if(await((s=(e=this.modelData)==null?void 0:e.unload)==null?void 0:s.call(e,u)),this.loaded=!1,(r=this.onlineLifecycleManager)==null||r.dispose(),this.modelData){const d=this.modelData;if(d._fsmInitialized=!1,d._fsmConfig){const h=((o=d._fsmOptions)==null?void 0:o.stateProperty)||"currentState";d[h]=void 0}d.stateHistory&&(d.stateHistory=[])}N.debug(`Model ${this.modelTypeName} with id ${this.modelId} unloaded`),(n=this.effectManager)==null||n.disposeAll(),(i=this.subscriptionManager)==null||i.disposeAll(),(a=this.httpRouteManager)==null||a.dispose()}catch(c){throw N.debug(`Model ${this.modelId} failed to unload`),c}}async init(){var n,i,a,c;const e=this[Ze];e&&await e.whenInitialized();const{modelId:s,modelTypeName:r}=this,o=W.getContext(s);N.debug(`Initializing model ${r} with id ${s}`),await as(this,C.INIT);try{await((n=this.serviceRequestManager)==null?void 0:n.executeForLifecycle(C.INIT)),await((a=(i=this.modelData)==null?void 0:i.init)==null?void 0:a.call(i,o)),this.initialized=!0,N.debug(`Model ${r} with id ${s} initialized`),(c=this.onlineLifecycleManager)==null||c.register(),this.initializeStateMachineForLifecycle(C.INIT),this.registerSubscribers(C.INIT),this.createLifecycleCompanions(C.INIT)}catch(u){throw N.error(`Model ${s} failed to initialize`,u),u}}async registerSubscribers(e){var s;N.debug(`registering subscribers in ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.registerAll(e)}initializeStateMachineForLifecycle(e){this.modelData&&Mc(this.modelData,e)}createLifecycleCompanions(e){this.modelManager.createLifecycleCompanions(this,{},e)}async online(){var s,r;N.debug(`online model ${this.modelTypeName} with id ${this.modelId}`),this.registerSubscribers();const e=W.getContext(this.modelId);await((r=(s=this.modelData)==null?void 0:s.online)==null?void 0:r.call(s,e)),this.createLifecycleCompanions(C.ONLINE)}async offline(){var s,r,o;N.debug(`offline model ${this.modelTypeName} with id ${this.modelId}`),(s=this.subscriptionManager)==null||s.disposeAll();const e=W.getContext(this.modelId);await((o=(r=this.modelData)==null?void 0:r.offline)==null?void 0:o.call(r,e))}accept(e){e.visit(this)}getChildren(){return this.childResolver.resolve()}addCompanionModel(e){this.companionManager.add(e)}clearCompanionModels(){this.companionManager.clear()}}const Do=g.createLogger({name:"kos-model-instantiator"});class $m{constructor(e,s){l(this,"companionInstantiator");this.registry=e,this.cache=s,this.companionInstantiator=new pg(e,s,this.createModelInstance.bind(this))}createModelInstance(e,s,r={}){var a;const o=this.registry.models[e];if(!o){const c=`No model registered for type ${e}`;throw Do.error(c,{modelType:e,requestedId:s,providedOptions:r,availableModelTypes:Object.keys(this.registry.models)}),At(new Error(c),{modelType:e,modelId:s,operation:"model instantiation - registry lookup",options:r,metadata:{availableModelTypes:Object.keys(this.registry.models)}})}const n=o.singleton?e:s;if(this.cache.restoreFromDeleteCache(n),!this.cache.hasModel(n)){Do.debug(`Creating model instance: ${e} [${n}]`);const c=r&&Object.keys(r).length>0,u=o.class||o.create;if(((a=u==null?void 0:u.prototype)==null?void 0:a[qs])===!0&&!c){const h=new Error(`Model ${e} requires options but none were provided`);throw Gi(h,{modelType:e,options:r,registryId:this.registry.alias||"unknown"}),At(h,{modelType:e,modelId:n,operation:"model instantiation - options validation",options:r,metadata:{requiresOptions:!0,hasOptions:!1}})}try{const h=o.create?o.create({modelTypeId:e,id:n,options:r}):new o.class(n,r),f=new Sl({modelTypeName:e,id:n,modelData:h});this.cache.addModel(f),this._createCompanionModels(f,r)}catch(h){throw Gi(h,{modelType:e,options:r,registryId:this.registry.alias||"unknown"}),At(h,{modelType:e,modelId:n,operation:"model instantiation",options:r})}}const i=this.cache.getModelById(n);if(!i)throw Do.error(`Model ${e} [${n}] not found in cache`),new Error(`Model ${e} [${n}] not found in cache`);return{model:i,data:i.modelData}}createCompanionModels(e,s,r){this.companionInstantiator.createCompanionModels(e,s,r)}_createCompanionModels(e,s){this.createCompanionModels(e,s)}}let Cm=class{constructor(e){this._registry=e}get registry(){return this._registry}getModelTypeRegistry(e){const s=this.registry.models[e];if(!s)throw new Error(`No registration for model type ${e}`);return s}registerModel(e){const s=e.type;this.registry.models[s]||(this.registry.models={...this.registry.models,...e.registration})}registerCompanionModel(e,s){var r,o;(r=this.registry).companionModels??(r.companionModels={}),(o=this.registry.companionModels)[e]??(o[e]=[]),this.registry.companionModels[e].some(n=>n.type===s)||this.registry.companionModels[e].push({type:s})}getModelSubscriptions(e){var s;return((s=this.getModelTypeRegistry(e))==null?void 0:s.subscriptions)||{}}getDataModelBuilder(e){var r;const s=(r=this.getModelTypeRegistry(e))==null?void 0:r.builder;if(!s)throw new Error(`No builder found for model type ${e}`);return s}getModelFactory(e){return Xt(e)}};const Ol=10,ea=g.createLogger({name:"kos-model-manager"});class Il{constructor(){l(this,"cache");l(this,"instantiator");l(this,"dependencies");l(this,"_registry");globalThis.kos=globalThis.kos||{},this.dependencies=new dg,globalThis.kos.modelManager=this,globalThis.kos.resolveKosModel=e=>{const s=this.getModelById(e);if(s)return s.modelData||{}},globalThis.kos.kosModelJson=e=>{var r,o;const s=this.getModelById(e);if(s)return((o=(r=s.modelData).toJSON)==null?void 0:o.call(r))||{}},globalThis.kos.kosModelDebug=e=>{var r;const s=this.getModelById(e);if(s)return((r=s.modelData)==null?void 0:r.debugState)||{}},globalThis.kos.kmd=globalThis.kos.kosModelDebug,globalThis.kos.kmj=globalThis.kos.kosModelJson}static create(e,s){const r=this.getInstance(s);return r._registry=new Cm(e),r.cache=new hg(e.preloadModels),r.instantiator=new $m(e,r.cache),r}static getInstance(e){var s,r;return(!((s=globalThis.kos)!=null&&s.modelManager)||e)&&(ea.debug("Creating new instance of KosModelManager"),new this),(r=globalThis.kos)==null?void 0:r.modelManager}get registry(){return this._registry.registry}get preloadedModels(){return this.cache.preload(e=>(ea.debug(`preloading ${e}`),typeof e=="string"?this.createModelInstance(e).model:this.createModelInstance(e.modelType,e.modelId,e.options).model))}get models(){return this.cache.models}getModelById(e){return this.cache.getModelById(e)}addModel(e){return this.cache.addModel(e)}removeModel(e){this.cache.removeModel(e.modelId)}hasModel(e){return this.cache.hasModel(e)}getModelsByType(e,s){return Array.from(this.models).filter(r=>r.modelTypeName===e).filter(r=>s?s(r.modelData):!0).map(r=>r.modelData)}getModelSubscriptions(e){return this._registry.getModelSubscriptions(e)}getDataModelBuilder(e){return this._registry.getDataModelBuilder(e)}getModelFactory(e){return Xt(e)}addDependency(e,s){this.cache.restoreFromDeleteCache(s),this.dependencies.add(e,s)}removeDependency(e,s){this.dependencies.remove(e,s)}async reloadModel(e){if(e.id){const s=this.getModelById(e.id);s&&await s.fsm.transitionTo(k.RESET,v.RESETTING)}}async initiateDestroyModel(e){if(!e.id)throw new Error("Model ID is required");if(!this.dependencies.canDestroy(e.id))return;const s=this.getModelById(e.id);s&&(this.cache.markForDeletion(s),Qc.addToDeletionQueue(e.id,setTimeout(()=>this.destroyModel(s),Ol)))}async destroyModel(e){var s;e!=null&&e.modelId&&this.dependencies.canDestroy(e.modelId)&&(await((s=e.unload)==null?void 0:s.call(e)),this.removeModel(e))}createModelInstance(e,s,r={}){return this.instantiator.createModelInstance(e,s,r)}createLifecycleCompanions(e,s,r){this.instantiator.createCompanionModels(e,s,r)}registerCompanionModel(e,s){this._registry.registerCompanionModel(e,s)}registerModel(e){this._registry.registerModel(e)}}var gr=(t=>(t.CREATING="creating",t.CREATED="created",t.INITIALIZING="initializing",t.INITIALIZED="initialized",t.LOADING="loading",t.LOADED="loaded",t.ONLINE="online",t.READYING="readying",t.READY="ready",t.OFFLINE="offline",t.UNLOADING="unloading",t.UNLOADED="unloaded",t.RELOADING="reloading",t))(gr||{}),ct=(t=>(t.CREATE="create",t.INITIALIZE="init",t.READY="ready",t.GO_ONLINE="go_online",t.GO_OFFLINE="go_offline",t.UNLOAD="unload",t.RELOAD="reload",t))(ct||{});const Dm=t=>{const e=b.createMachine("offline",{online:b.state(b.transition("go_offline","offline",b.action(()=>{t.offline(),E.runInAction(()=>{t.isOnline=!1})}))),offline:b.state(b.transition("go_online","online",b.action(()=>{t.online(),E.runInAction(()=>{t.isOnline=!0})})))}),s=b.interpret(e,n=>D.debug(n.machine.current)),r=b.createMachine({creating:b.state(b.transition("create","created")),created:b.state(b.immediate("initializing")),initializing:b.invoke(()=>t.init(),b.transition("done","initialized")),initialized:b.state(b.immediate("loading")),loading:b.invoke(()=>t.load(),b.transition("done","loaded")),loaded:b.state(b.immediate("readying"),b.transition("unload","unloading")),readying:b.invoke(()=>t.ready(),b.transition("done","ready",b.action(()=>{E.runInAction(()=>{t.status="ready"})}))),reloading:b.invoke(()=>t.reload(),b.transition("done","loading")),ready:b.state(b.transition("reload","reloading"),b.transition("unload","unloaded",b.action(t.unload.bind(t))),b.transition("go_online","ready",b.action(()=>{s.send("go_online")})),b.transition("go_offline","ready",b.action(()=>{s.send("go_offline")}))),unloaded:b.state()});return{service:b.interpret(r,n=>D.debug(n.machine.current)),online:s}},Y=g.createLogger({name:"kos-core"}),xm=()=>{const t=be(),e=t==null?void 0:t.alias,s=process.env.KOS_CONNECTION_ALIAS;return e||s||void 0},Am=()=>{const t=window.location.protocol,e=be(),s=e==null?void 0:e.host;let r;try{r=new URL(s).protocol==="https:"?"wss://":"ws://"}catch{}return r||(t==="https:"?"wss://":"ws://")},Rm=()=>{const t=window.location.hostname,e=process.env.KOS_HOST,s=be(),r=s==null?void 0:s.host;let o;try{o=new URL(r).hostname}catch{}return o??e??t},Pm=()=>{const t=window.location.port,e=process.env.KOS_PORT,s=be(),r=s==null?void 0:s.host;let o;try{o=new URL(r).port}catch{}return o??e??t},km=(t,e)=>{let s;return{promise:new Promise((n,i)=>{s=setTimeout(()=>{e?g.error(`Model ${e.modelId} - ${e.modelTypeName} preloading - timed out after ${t}ms`):g.error(`KOS Core preloading timed out after ${t}ms`),i(new Error(`Model ${e==null?void 0:e.modelId} - ${e==null?void 0:e.modelTypeName} - timed out after ${t}ms`))},t)}),cancel:()=>{s&&clearTimeout(s)}}},ta=t=>typeof t.reload=="function",Lm=t=>typeof t.unload=="function";var $l=(t=>(t.LOGGED_IN="logged_in",t.LOGGED_OUT="logged_out",t))($l||{});class _{constructor(e){l(this,"fsmService");l(this,"status");l(this,"initialized");l(this,"loaded");l(this,"_transport");l(this,"modelManager");l(this,"authState");l(this,"isOnline");l(this,"_reloading");l(this,"_unloading");l(this,"connectionAlias");this.initialized=!1,this.connectionAlias=e,this.loaded=!1,this.isOnline=!1,this.status=gr.CREATED,this.authState="logged_out",this._reloading=!1,this._unloading=!1,E.makeAutoObservable(this),$("token",a=>{a&&(this.transport.token=a.body)}),$(Te.CONNECTED,async()=>{await this.whenReady(),this.fsmService.service.send(ct.GO_ONLINE)}),$(Te.DISCONNECTED,async()=>{this.fsmService.service.send(ct.GO_OFFLINE)}),$("/studioServer/auth/LOGGED_IN",()=>{this.authState="logged_in",this.transport.authorized=!0,this.fsmService.service.send(ct.RELOAD)}),$("/studioServer/auth/LOGIN_REQUIRED",()=>{this.authState="logged_out",this.transport.authorized=!1}),$(Te.RELOAD,()=>{Y.warn("WebSocket requested reload"),this.fsmService.service.send(ct.RELOAD)}),$("/studio/project/reload",()=>{Y.warn("Project requested reload"),this.fsmService.service.send(ct.RELOAD)});const s=Pt.getInstance(),r=Rm(),o=Pm(),n=Am();s.host=r,s.port=Number.parseInt(o),s.protocol=n,process.env.KOS_ALLOW_ANONYMOUS==="true"&&(s.authorized=!0);const i=xm()??e;i&&(s.alias=i.replace("{{TIMESTAMP}}",Date.now().toString())),this._transport=s.init(),this.fsmService=Dm(this),this.fsmService.service.send(ct.CREATE)}get onlineStatus(){return this.isOnline&&!this._reloading&&!this._unloading}get reloading(){return this._reloading}get unloading(){return this._unloading}async reload(){var o,n,i,a;const e=Date.now();if(this._reloading){Y.info("reload already in progress");return}this._reloading=!0,Y.warn("reloading KOS Core"),Y.warn("reloading preloaded models");const s=this.modelManager;for(const c of s.preloadedModels)ta(c.modelData)&&(Y.info(`reloading model ${c.modelId}`),(o=c.unload)==null||o.call(c),await c.modelData.reload(),(n=c.registerSubscribers)==null||n.call(c),Y.info(`reloading model ${c.modelId} complete`));for(const c of s.models)!s.preloadedModels.includes(c)&&ta(c.modelData)&&(Y.warn(`reloading model ${c.modelId}`),(i=c.unload)==null||i.call(c),await c.modelData.reload(),(a=c.registerSubscribers)==null||a.call(c));const r=Date.now()-e;setTimeout(()=>{E.runInAction(()=>{Y.warn("reloading KOS Core complete"),this._reloading=!1})},1e3-r)}async online(){Y.debug("KOS Core going online"),await this._transport.whenReady(),Y.debug("KOS Transport Ready. Calling online() for models"),K("/kosCore/online","/kosCore/online"),console.timeEnd("kosCore:startup")}async offline(){Y.debug("KOS Core going offline"),K("/kosCore/offline","/kosCore/offline")}async unload(){var o;Y.debug("Unloading KOS Core");const e=Date.now();this._unloading=!0,Y.debug("unloading KOS Core");const s=this.modelManager;for(const n of s.models)Lm(n.modelData)&&((o=n.unload)==null||o.call(n));const r=Date.now()-e;setTimeout(()=>{E.runInAction(()=>{this._unloading=!1})},1e3-r)}async whenReady(){await E.when(()=>this.status===gr.READY)}async ready(){Y.debug("Readying KOS Core"),await this._transport.whenReady();const e=this.modelManager.preloadedModels.map(o=>({modelId:o.modelId,model:o,promise:o.whenReady()})),r=(await Promise.allSettled(e.map(o=>{const{promise:n,cancel:i}=km(5e3,o.model);Promise.race([o.promise.then(()=>{i()}),n])}))).filter(o=>o.status==="rejected");if(r.length)throw Y.error(`There were ${r.length} failed models on model preloading`),Error(`There were ${r.length} failed models on model preloading`);Y.debug("leaving kos-core ready() ")}get isReady(){return this.status===gr.READY}set transport(e){this._transport=e}get transport(){return this._transport}get coreInitialized(){return this.initialized}get modelsLoaded(){return this.loaded}async init(){Y.debug("entering kos-core init()"),console.time("kosCore:startup"),console.time("kosCore:init"),await this._transport.whenReady(),this.initialized=!0,Y.debug("initialized - leaving kos-core init()"),console.timeEnd("kosCore:init")}async load(){Y.debug("entering kos-core load()"),console.time("kosCore:load"),this.loaded=!0,Y.debug("loaded - leaving kos-core load()"),console.timeEnd("kosCore:load")}static create(e,s,r){var i,a,c;const o=this.getInstance({reset:s,connectionAlias:r});(i=e.extensions)!=null&&i.dataMapper&&Object.keys(e.extensions.dataMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.dataMapper)==null?void 0:f[u];d&&(Array.isArray(d)?d.forEach(p=>{I.dataMapper.registerDataMapper(u,p)}):I.dataMapper.registerDataMapper(u,d))}),(a=e.extensions)!=null&&a.propertyMapper&&Object.keys(e.extensions.propertyMapper).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.propertyMapper)==null?void 0:f[u];d&&I.propertyMapper.registerPropertyMapper(u,d)}),(c=e.extensions)!=null&&c.contextLoader&&Object.keys(e.extensions.contextLoader).forEach(u=>{var h,f;const d=(f=(h=e.extensions)==null?void 0:h.contextLoader)==null?void 0:f[u];d&&I.loader.registerLoader(u,d)}),A.model.getAll().forEach(([,u])=>{e.models={...e.models,...u.registration}}),e.models={...e.models,...A.model.getLegacyModels()},A.companion.getAll().forEach(([u,d])=>{e.companionModels={...e.companionModels},e.companionModels[u]=e.companionModels[u]||[];for(const h of d){let f;if(typeof h=="string"){const p=e.models[h];if(p!=null&&p.class){const y=p.class.prototype[Ze];f=y==null?void 0:y.lifecycle}}e.companionModels[u].push({type:h,lifecycle:f})}}),A.model.getPreloadModels().forEach(u=>{e.preloadModels.includes(u)||e.preloadModels.push(u)});const n=Il.create(e,s);return o.modelManager=n,o}static getInstance(e){return this._instance=window.KosCore,(!this._instance||e!=null&&e.reset)&&(window.KosCore=new this(e==null?void 0:e.connectionAlias),this._instance=window.KosCore),this._instance}}l(_,"_instance");const Fm=g.createLogger({name:"kos-model-visitor",group:"kos-ui-core"});class Cl{constructor(){l(this,"visitedModels",new Set);this.visitedModels=new Set}start(e){var r;if(e.id===void 0)throw new Error("rootModel must have an id");const s=_.getInstance().modelManager.getModelById(e.id);if(!s)throw new Error(`Could not find rootModel with id: ${e.id}`);this.visitedModels.clear(),(r=s.accept)==null||r.call(s,this)}visit(e){var r;if(this.visitedModels.has(e.modelId)){Fm.info(`model ${e.modelId} already visited`);return}const s=!!this.visitModel(e.modelData,this);this.visitedModels.add(e.modelId),!s&&((r=e.getChildren)==null||r.call(e).forEach(o=>{var n;(n=o.accept)==null||n.call(o,this)}))}}class Nm extends Cl{constructor(s){super();l(this,"targetId");l(this,"currentPath",[]);l(this,"foundPath",null);this.targetId=s}visit(s){var o;if(this.visitedModels.has(s.modelId))return;this.currentPath.push(s.modelId),this.visitedModels.add(s.modelId),!!this.visitModel(s.modelData)||(o=s.getChildren)==null||o.call(s).forEach(n=>{var i;this.foundPath||(i=n.accept)==null||i.call(n,this)}),this.foundPath||this.currentPath.pop()}visitModel(s){return s.id===this.targetId?(this.foundPath=this.currentPath.slice(0,-1),!0):!1}getAncestorPath(){return this.foundPath??[]}wasFound(){return this.foundPath!==null}}function Um(t,e){e.forEach(s=>{Object.getOwnPropertyNames(s.prototype).forEach(r=>{const o=Object.getOwnPropertyDescriptor(s.prototype,r);Object.defineProperty(t.prototype,r,o)})})}function jm(t,e){const s=t??[],r=e??[];return s.length!==r.length?!1:s.every((o,n)=>o===r[n])}const Ln=(t,e)=>{const s=t.map(n=>n.id);return e.map(n=>n.id).filter(n=>!s.includes(n))},Dl=t=>t,Fn=t=>t,Bm=({container:t,onAddItem:e,onUpdateItem:s,onRemoveItem:r=Dl,idMapper:o=Fn})=>n=>{const i=n.map(o),c=Ln(i,t.data).map(r).filter(Boolean);t.removeAll(c);const u=i.map(d=>{const h=t.getModel(d.id);return h&&s?s(d,h):e(d)}).filter(Boolean);t.addAll(u)},Hm=({container:t,onAddItem:e,onRemoveItem:s=Dl,idMapper:r=Fn})=>o=>{const n=o.map(r);Ln(n,t.models).forEach(s),n.forEach(e)},Km=({items:t,onAddItem:e,onRemoveItem:s,idMapper:r=Fn})=>o=>{const n=o.map(r);Ln(n,t).forEach(s),n.forEach(e)},qm=(t,e="parent-")=>{let s=t;return s.startsWith(e)&&(s=s.replace(e,"")),s},sa=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),ra=[{amount:60,name:"seconds"},{amount:60,name:"minutes"},{amount:24,name:"hours"},{amount:7,name:"days"},{amount:4.34524,name:"weeks"},{amount:12,name:"months"},{amount:Number.POSITIVE_INFINITY,name:"years"}];function xl(t){let e=(t.getTime()-Date.now())/1e3;for(let s=0;s<=ra.length;s++){const r=ra[s];if(Math.abs(e)<r.amount)return sa.format(Math.round(e),r.name);e/=r.amount}return sa.format(Math.round(e),"years")}const Nn=t=>t%4===0&&t%100!==0||t%400===0,Un=(t,e)=>[31,Nn(t)?29:28,31,30,31,30,31,31,30,31,30,31][e],Al=(t,e)=>{const s=new Date(t),r=t.getDate();return s.setDate(1),s.setMonth(s.getMonth()+e),s.setDate(Math.min(r,Un(s.getFullYear(),s.getMonth()))),s},Rl=(t,e)=>{const s=new Date(t);return s.setDate(s.getDate()+e),s},kt="en-US",Pl={short:{year:"numeric",month:"2-digit",day:"2-digit"},medium:{year:"numeric",month:"short",day:"2-digit"},long:{year:"numeric",month:"long",day:"numeric"},full:{year:"numeric",month:"long",day:"numeric",weekday:"long"}},kl={short:{hour:"2-digit",minute:"2-digit",hour12:!0},medium:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0},long:{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0,timeZoneName:"short"},full:{hour:"2-digit",minute:"2-digit",hour12:!0,timeZoneName:"long"}},Ll=(t,{dateStyle:e="short",locales:s=kt}={dateStyle:"short",locales:kt})=>{const r=e==="short"?Pl.short:{dateStyle:e};return new Intl.DateTimeFormat(s,r).format(t)},Fl=(t,{locales:e=kt,timeStyle:s="short"}={locales:kt,timeStyle:"short"})=>{const r=kl[s];return new Intl.DateTimeFormat(e,r).format(t)},Nl=(t,{dateStyle:e="short",locales:s=kt,timeStyle:r="short"}={dateStyle:"short",locales:kt,timeStyle:"short"})=>{const o={...e&&Pl[e],...r&&kl[r]};return new Intl.DateTimeFormat(s,o).format(t)},zm=Object.freeze(Object.defineProperty({__proto__:null,addDaysToDate:Rl,addMonthsToDate:Al,formatDate:Ll,formatDateSince:xl,formatDateTime:Nl,formatTime:Fl,getDaysInMonth:Un,isLeapYear:Nn},Symbol.toStringTag,{value:"Module"})),Ul="featureFlagResolver",rr=new Map;Qt(Ul,{register:(t,e)=>{var s;rr.has(t)||rr.set(t,[]),(s=rr.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=rr.get(t);if(!s)return[];const r=s.map(a=>a(e)),n=(await Promise.allSettled(r)).map(a=>a.status==="fulfilled"?a.value:(g.info(`Feature flag resolver ${t} failed: ${a.reason}`),[])).flat(),i=Array.from(new Set(n)).reduce((a,c)=>(a[c]=!0,a),{});return Bl.updateFlags(i),Object.keys(i)}});const Vm="kos.loader.featureFlag";class jl{constructor(e={}){l(this,"flags",{});this.flags=e}isFeatureEnabled(e){return!!this.flags[e]}enableFeature(e){this.flags[e]=!0}disableFeature(e){this.flags[e]=!1}toggleFeature(e){this.flags[e]=!this.flags[e]}updateFlags(e){this.flags={...this.flags,...e}}}window.KosFeatureFlags=window.KosFeatureFlags??new jl;const Bl=window.KosFeatureFlags,Hl=(t,e,s)=>{s/=100;const r=e*Math.min(s,1-s)/100,o=n=>{const i=(n+t/30)%12,a=s-r*Math.max(Math.min(i-3,9-i,1),-1);return Math.round(255*a).toString(16).padStart(2,"0")};return`#${o(0)}${o(8)}${o(4)}`},Kl=t=>{const s=new RegExp("hsl\\((\\d+),\\s+(\\d+)\\%,\\s+(\\d+)\\%\\)").exec(t);if(!s)throw Error("Invalid HSL string");return Hl(parseInt(s[1]),parseInt(s[2]),parseInt(s[3]))},ql=(t,e)=>getComputedStyle(t).getPropertyValue(e),Gm=(t,e)=>Kl(ql(t,e)),Ym=(t,e)=>{const s={...t};return s.id&&delete s.id,s},zo=(t,e,s=Ym)=>{const r=s(t,e);E.runInAction(()=>{Object.assign(e,r)})};class zl{constructor(){l(this,"middlewares",[])}use(e){this.middlewares.push(e)}async execute(e){let s=0;const r=async()=>{s++,s<this.middlewares.length&&await this.middlewares[s](e,r)};await this.middlewares[s](e,r)}}const Wm=async(t,e)=>{const s=new zl;e.forEach(o=>s.use(o));const r={data:t,result:{}};return await s.execute(r),r.result},Xt=t=>({type:t,build:(e,s)=>_.getInstance().modelManager.createModelInstance(t,e,s).data,buildAsync:async(e,s)=>{const r=_.getInstance().modelManager.createModelInstance(t,e,s);return await r.model.whenInitialized(),r.data}}),Qm=t=>{_.getInstance().modelManager.registerModel(t)},Xm=(t,e)=>{_.getInstance().modelManager.registerCompanionModel(t,e)},oa="/kos/ui/internal/heartbeat/",Zm=({relationshipId:t,destinationAddress:e,onAbort:s,waitTime:r,beatTime:o})=>{const n=_.getInstance().transport,i=new AbortController;let a=performance.now();const c=n.subscribeTopic({topic:`${oa}${t}`,callback:()=>{a=performance.now()}}),u=r??3e3,d=window.setInterval(()=>{let w=performance.now()-a;w=w/1e3,w>u/1e3&&i.abort()},u),h=o??2e3,f=window.setInterval(()=>{wl({msg:{},options:{topic:`${oa}${t}`,destinationAddress:e}})},h),p=()=>{window.clearInterval(f),window.clearInterval(d),c()},y=()=>{p(),s&&s(),i.signal.removeEventListener("abort",y)};return i.signal.addEventListener("abort",y),{cleanUpHeartbeat:p}},Vl=(...t)=>e=>t.reduce((s,r)=>r(s),e),Jm={maxAttempts:5,baseDelayMs:100,backoffFactor:1.5};async function ey(t,e){let s=1;const r={...Jm,...e},{maxAttempts:o,baseDelayMs:n,backoffFactor:i}=r;let a=n;for(;s<=o;)try{return await t()}catch(c){if(g.error(`Attempt ${s} failed: ${c}`),s<o)a=n*Math.pow(i,s),await new Promise(u=>setTimeout(u,a)),s++;else throw c}throw new Error("All attempts failed")}const ty=g.createLogger({name:"kos-service-request"}),ue=t=>({isMock:!1,URL:exports.BASE_URL}),sy=(t,e,s)=>async({id:r,tracker:o,urlOverride:n,ordered:i,studio:a,fos:c,bridge:u,timeout:d,signal:h,destinationAddress:f})=>{const p={method:"DELETE"};t&&(p.destinationAddress=t),o&&(p.tracker=o),Zt(p,{ordered:i,studio:a,fos:c,bridge:u,timeout:d,signal:h,destinationAddress:f});try{const y=await s(n||`${e}/${r}`,p);if(!y.ok)throw Error(`There was a problem deleting the model; returned status ${y.status}`);return await y.json()??void 0}catch(y){if(y instanceof DOMException){if(y.name==="TimeoutError")throw new z("Request timed out while deleting model");if(y.name==="AbortError")throw new z("Request was cancelled while deleting model")}throw y}},Zt=(t,{ordered:e,studio:s,fos:r,destinationAddress:o,bridge:n,timeout:i,signal:a})=>(i&&(t.timeout=i),a&&(t.signal=a),e&&(t.ordered=e),s&&(t.studio=s),r&&(t.fos=r),n&&(t.bridge=n),(o||o==="")&&(t.destinationAddress=o),t),ry=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,timeout:c,signal:u,destinationAddress:d})=>{const h={method:"GET"};t&&(h.destinationAddress=t),Zt(h,{timeout:c,ordered:o,studio:n,fos:i,bridge:a,signal:u,destinationAddress:d});const f=r||e;try{const p=await s(f,h);if(!p.ok){let w;try{w=await p.json()}catch{}throw new z(`There was a problem retrieving the model; returned status ${p.status}`,w??void 0)}return await p.json()??void 0}catch(p){if(p instanceof DOMException){if(p.name==="TimeoutError")throw new z("Request timed out while retrieving models");if(p.name==="AbortError")throw new z("Request was cancelled while retrieving models")}throw p}},oy=(t,e,s)=>async({urlOverride:r,ordered:o,studio:n,fos:i,bridge:a,tracker:c,timeout:u,signal:d,destinationAddress:h})=>{const f={method:"GET"};t&&(f.destinationAddress=t),c&&(f.tracker=c),Zt(f,{timeout:u,ordered:o,studio:n,fos:i,bridge:a,signal:d,destinationAddress:h});const p=r||e;ty.debug(`resolvedUrl: ${p}`);try{const y=await s(p,f);if(!y.ok){let M;try{M=await y.json()}catch{}throw new z(`There was a problem retrieving the model; returned status ${y.status}`,M??void 0)}return await y.json()??void 0}catch(y){if(y instanceof DOMException){if(y.name==="TimeoutError")throw new z("Request timed out while retrieving model");if(y.name==="AbortError")throw new z("Request was cancelled while retrieving model")}throw y}},ny=(t,e,s)=>async({urlOverride:r,id:o,ordered:n,studio:i,fos:a,bridge:c,timeout:u,signal:d,destinationAddress:h})=>{const f={method:"GET"};t&&(f.destinationAddress=t),Zt(f,{timeout:u,ordered:n,studio:i,fos:a,bridge:c,signal:d,destinationAddress:h});const p=r||`${e}/${o}`;try{const y=await s(p,f);if(!y.ok){let M;try{M=await y.json()}catch{}throw new z(`There was a problem retrieving the model; returned status ${y.status}`,M??void 0)}return await y.json()??void 0}catch(y){if(y instanceof DOMException){if(y.name==="TimeoutError")throw new z("Request timed out while retrieving model by ID");if(y.name==="AbortError")throw new z("Request was cancelled while retrieving model by ID")}throw y}};class z extends Error{constructor(s,r){super(s);l(this,"payload");this.name="FetchException",this.payload=r}}const na=(t,e,s)=>async({model:r,urlOverride:o,ordered:n,tracker:i,studio:a,fos:c,bridge:u,timeout:d,signal:h,destinationAddress:f})=>{const p={method:"POST",body:typeof r=="string"?r:JSON.stringify(r)};t&&(p.destinationAddress=t),i&&(p.tracker=i),Zt(p,{timeout:d,ordered:n,studio:a,fos:c,bridge:u,signal:h,destinationAddress:f});try{const y=await s(o||e,p);if(!y.ok){let M;try{M=await y.json()}catch{}throw new z(`There was a problem sending the POST data; returned status ${y.status}`,M??void 0)}return await y.json()??void 0}catch(y){if(y instanceof DOMException){if(y.name==="TimeoutError")throw new z("Request timed out while adding model");if(y.name==="AbortError")throw new z("Request was cancelled while adding model")}throw y}},ia=(t="POST",e,s,r)=>async({model:o,id:n,urlOverride:i,ordered:a,studio:c,fos:u,bridge:d,timeout:h,signal:f,destinationAddress:p})=>{const y={method:t};o&&(y.body=JSON.stringify(o)),e&&(y.destinationAddress=e),Zt(y,{timeout:h,ordered:a,studio:c,fos:u,bridge:d,signal:f,destinationAddress:p});try{const w=await r(i||`${s}/${n}`,y);if(!w.ok){let S;try{S=await w.json()}catch{}throw new z(`There was a problem modifying the model; returned status ${w.status}`,S??void 0)}return await w.json()??void 0}catch(w){if(w instanceof DOMException){if(w.name==="TimeoutError")throw new z("Request timed out while modifying model");if(w.name==="AbortError")throw new z("Request was cancelled while modifying model")}throw w}},ie={build:({destinationAddress:t="",basePath:e,getAllPath:s,getOnePath:r,deleteModelPath:o,addModelPath:n,modifyModelPath:i,mock:a=!1})=>{const c=a?fetch:exports.kosFetch;return{getAll:ry(t,s||e,c),getModelById:ny(t,r||e,c),getOne:oy(t,r||e,c),addModel:na(t,n||e,c),deleteModel:sy(t,o||e,c),modifyModel:ia("POST",t,i||e,c),putModel:ia("PUT",t,i||e,c),postModel:na(t,n||e,c)}}};function iy(t,e,s="get"){const r=t.serviceResponses;if(r)return r.getByPath(e,s)}function ay(t,e,s="get"){const r=t.serviceResponses;return r?r.has(`${s.toUpperCase()}:${e}`):!1}function cy(t,e,s="get"){const r=t.serviceResponses;r&&r.delete(`${s.toUpperCase()}:${e}`)}function ly(t,e){const s=t.serviceResponses;s&&s.clearPath(e)}function uy(t){const e=t.serviceResponses;e&&e.clear()}const dy=bt(),Gl=()=>`kos-${dy}`,hy=t=>!!t&&!t.includes("VM_SERVICE")&&t.startsWith(Gl()),jn=async(t,e=6e4)=>new Promise((s,r)=>{const{unsubscribe:o}=$(t,i=>{D.debug(`recieved response for refId ${t}: ${i}`),o(),clearTimeout(n);try{const a=i!=null&&i.body?JSON.parse(i.body):{};s(a)}catch{const a=(i==null?void 0:i.body)||{};s(a)}}),n=setTimeout(()=>{o(),r(Error(`Request with ID ${t} timed out. Cancelling.`))},e)}),fy=async(t,e,s)=>{const r=jn(s),o=await Promise.allSettled([t(e),r]);if(o[0].status==="fulfilled"){if(o[1].status==="rejected")throw Error(o[1].reason);if(o[0].value){if(o[1].value.error)throw Error(o[1].value.error);return o[0].value.data=o[1].value,o[0].value}}else throw Error(o[0].reason)},py=async({topic:t,msg:e,requestId:s})=>{const r=s??bt(),o=jn(r);K(t,e,{sync:r});const n=await o;if(n.error)throw Error(n.error);return n},ge=new Map;class Yl{constructor(e){l(this,"_context");l(this,"_parent");l(this,"_id");this._id=e,this._context=new E.ObservableMap({}),this._parent="",E.makeAutoObservable(this)}setParent(e){ee(()=>{this._parent=e})}get id(){return this._id}get context(){return this._context}get parentModel(){var e;if(this._parent)return(e=Ae(this._parent))==null?void 0:e.model}get companionModels(){const e=Ae(this._id);return e!=null&&e.model?Bc(e.model):[]}get(e){var s,r;if(this._context.has(e))return this._context.get(e);if(this.companionModels.length>0){const o=this.companionModels.find(n=>{var i;return!n.id||!ge.has(n.id)?!1:(i=ge.get(n.id))==null?void 0:i.context.has(e)});if(o)return(s=ge.get(o.id))==null?void 0:s.get(e)}if(this._parent)return(r=ge.get(this._parent))==null?void 0:r.get(e)}set(e,s){this._context.set(e,s)}remove(e){this._context.delete(e)}clear(){this._context.clear()}}const W={createContext:(t,e)=>{const s=ge.get(t)??new Yl(t);if(e){if(!ge.has(e))throw new Error(`Parent context ${e} does not exist`);s.setParent(e)}else t!=="root"&&s.setParent("root");return ge.set(t,s),s},getContext:t=>ge.get(t),deleteContext:t=>{ge.delete(t)},setParentContext:(t,e)=>{var s;if(!ge.has(e))throw new Error(`Parent context ${e} does not exist`);(s=ge.get(t))==null||s.setParent(e)},rootContext:()=>ge.get("root")};W.createContext("root");const gy=t=>W.getContext(t.id),it=g.createLogger({name:"kos-data-container"});class Bn{constructor(e){l(this,"_data");l(this,"_sortKey");l(this,"_revision");l(this,"_index");l(this,"_optionsMap");l(this,"_disposerMap",new Map);l(this,"idx");l(this,"_maxCapacity");l(this,"_evictionStrategy");l(this,"_evictionBatchSize");l(this,"_insertionOrder",[]);l(this,"_accessTimes");l(this,"_customEvictionFilter");this._data=E.observable.map(new Map),this._sortKey=e==null?void 0:e.sortKey,this._revision=1,this._optionsMap=(e==null?void 0:e.indexMap)||{};const s=e!=null&&e.indexMap?Object.keys(e.indexMap).reduce((r,o)=>(r[o]=void 0,r),{}):{};this._index=E.observable.map(s),this.idx=xe(),this._maxCapacity=e==null?void 0:e.maxCapacity,this._evictionStrategy=(e==null?void 0:e.evictionStrategy)||"fifo",this._evictionBatchSize=(e==null?void 0:e.evictionBatchSize)??Math.max(10,Math.ceil(((e==null?void 0:e.maxCapacity)??100)*.1)),this._customEvictionFilter=e==null?void 0:e.customEvictionFilter,this._evictionStrategy==="lru"&&this._maxCapacity&&(this._accessTimes=E.observable.map(new Map)),E.makeAutoObservable(this,{}),this.init()}init(){Object.keys(this._optionsMap).forEach(e=>{const s=this._optionsMap[e],r=new Dn({container:this,key:s});this._index.set(e,r),this.idx[e]=r.data})}[Symbol.iterator](){return this.data[Symbol.iterator]()}get index(){return this._index}get indexKeys(){return Array.from(this.index.keys()).reduce((e,s)=>{var r;return e[s]=(r=this.index.get(s))==null?void 0:r.keys,e},{})}get revision(){return this._revision}addAll(e){E.runInAction(()=>{e.forEach(s=>this.addModel(s))})}removeAll(e){E.runInAction(()=>{e.forEach(s=>this.removeModel(s))})}sortFn(e,s){const r=this._sortKey;return r?String(e[r]).localeCompare(String(s[r]),void 0,{numeric:!0}):0}get data(){const e=Array.from(this._data.values());return this._sortKey&&e.sort(this.sortFn.bind(this)),e}increment(){E.runInAction(()=>{this._revision=this._revision+1})}addModel(e,s){const r=this._ensureObservable(e);this._cleanupExistingDisposer(e.id),this._persistData(r),this._trackDataMetadata(r),this._enforceCapacityLimits(),this._configureDataMonitoring(r),s||this.increment()}_ensureObservable(e){return E.isObservable(e)?e:E.observable.object(e)}_cleanupExistingDisposer(e){if(!e)return;const s=this._disposerMap.get(e);s&&(s(),this._disposerMap.delete(e))}_persistData(e){this._data.set(e.id||"",e)}_trackDataMetadata(e){this._maxCapacity&&(this._insertionOrder.push(e.id||""),this._accessTimes&&this._accessTimes.set(e.id||"",Date.now()))}_enforceCapacityLimits(){this._maxCapacity&&this._data.size>this._maxCapacity&&this._evictModels()}_configureDataMonitoring(e){const s=E.observe(e,r=>{Object.values(this._optionsMap||{}).includes(r.name)&&this.increment()});this._disposerMap.set(e.id||"",s)}removeModel(e){this._data.delete(e);const s=this._insertionOrder.indexOf(e);s!==-1&&this._insertionOrder.splice(s,1),this._accessTimes&&this._accessTimes.delete(e),this.increment();const r=this._disposerMap.get(e);r&&(r(),this._disposerMap.delete(e))}updateModel(e){const s=E.observable.object(e);this._data.set(s.id||"",s),this.increment()}getModel(e){const s=this._data.get(e);return s&&this._accessTimes&&this._accessTimes.set(e,Date.now()),s}getIndexKeys(e){return this.index.has(e)?this.index.get(e).keys??[]:(it.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[])}getIndexByKey(e,s){if(this.index.has(e)){const r=this.index.get(e);return r.index.has(s)?r.getByKey(s):(it.info(`key ${s} not found in ${e} index: ${Array.from(r.index.keys())}`),[])}else return it.info(`index ${e} not found in ${Array.from(this.index.keys())}`),[]}_evictModels(){if(!this._maxCapacity)return;const e=this._data.size-this._maxCapacity;if(e<=0)return;const s=Math.min(this._evictionBatchSize,e);this._logDataCapacityWarning(s);const r=this._selectDataForEviction(s);this._removeEvictedData(r),this._logDataEvictionComplete(r.length)}_logDataCapacityWarning(e){it.info(`Data container capacity exceeded (${this._data.size}/${this._maxCapacity}). Evicting ${e} items using ${this._evictionStrategy} strategy. This may indicate missing cleanup handlers or data inconsistency.`)}_selectDataForEviction(e){switch(this._evictionStrategy){case"fifo":return this._selectFifoData(e);case"lru":return this._selectLruData(e);case"custom":return this._selectCustomData(e);default:return this._selectFifoData(e)}}_selectFifoData(e){const s=[];for(let r=0;r<e&&this._insertionOrder.length>0;r++){const o=this._insertionOrder.shift();o&&this._data.has(o)&&s.push(o)}return s}_selectLruData(e){const s=[];return this._accessTimes&&Array.from(this._accessTimes.entries()).sort((o,n)=>o[1]-n[1]).slice(0,e).forEach(([o])=>{this._data.has(o)&&s.push(o)}),s}_selectCustomData(e){return this._customEvictionFilter?this._customEvictionFilter(this.data).slice(0,e).map(r=>r.id):(it.error("Custom eviction strategy specified but no customEvictionFilter provided. Falling back to FIFO."),this._selectFifoData(e))}_removeEvictedData(e){e.forEach(s=>{var o;const r=this._data.get(s);it.info(`Evicting data item: ${s}`,{itemId:s,itemType:r?(o=r.constructor)==null?void 0:o.name:"unknown",strategy:this._evictionStrategy}),this.removeModel(s)})}_logDataEvictionComplete(e){it.info(`Evicted ${e} data items. Current size: ${this._data.size}/${this._maxCapacity}`)}async clear(){this._data.clear(),this.increment()}filter(e,s){return this.data.filter(e,s)}sort(e){return this.data.sort(e)}map(e,s){return this.data.map(e,s)}forEach(e,s){this.data.forEach(e,s)}toJSON(){return{indexes:this.indexKeys,data:this.data.map(s=>({id:s.id}))}}}class my{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"childRegistration");l(this,"model");this.type=e,this.model=s,this.childRegistration=r}get factory(){return le.Factory.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!1,factory:this.factory},...this.childRegistration}}get predicate(){return Ie(this.type)}}class yy{constructor({type:e,model:s,childRegistration:r}){l(this,"type");l(this,"model");l(this,"childRegistration");this.type=e,this.model=s,this.childRegistration=r}get factory(){return le.Singleton.create(this.type)}get registration(){return{[this.type]:{class:this.model,singleton:!0,factory:this.factory},...this.childRegistration}}get predicate(){return Ie(this.type)}}class Wl{constructor(){l(this,"_token");E.makeAutoObservable(this),$("token",e=>{this.token=e==null?void 0:e.body})}get token(){return this._token}set token(e){this._token=e}}class Ql{constructor(){l(this,"routes",[]);l(this,"openApiRoutes",[])}use(e,s,...r){this.routes.push({method:e,path:s,middlewares:r});const o=this.extractOpenApiParams(s);this.openApiRoutes.push({method:e,path:s,parameters:o})}remove(e,s){const r=this.routes.length;return this.routes=this.routes.filter(o=>!(o.method===e&&o.path===s)),this.openApiRoutes=this.openApiRoutes.filter(o=>!(o.method===e&&o.path===s)),r-this.routes.length}removeAllForPath(e){const s=this.routes.length;return this.routes=this.routes.filter(r=>r.path!==e),this.openApiRoutes=this.openApiRoutes.filter(r=>r.path!==e),s-this.routes.length}getRoutes(){return this.routes.map(e=>({method:e.method,path:e.path}))}async handle(e,s){var a;const{path:r,query:o,params:n}=this.extractPathParams(e.path),i={...e,params:n,query:o};for(const c of this.routes){const u=this.matchRoute(c.path,r);if(c.method===e.method&&u){i.params=u;let d=0;const h=async()=>{if(d<c.middlewares.length){const f=c.middlewares[d++];await f(i,s,h)}};await h();return}}(a=s.status)==null||a.call(s,404).send({error:"Route not found"})}extractOpenApiParams(e){return e.split("/").filter(s=>s.startsWith(":")).map(s=>({name:s.slice(1),in:"path",required:!0,schema:{type:"string"}}))}generateOpenApiSpec(){const e={};for(const s of this.openApiRoutes)e[s.path]||(e[s.path]={}),e[s.path][s.method.toLowerCase()]={summary:s.description||`Handles ${s.method} ${s.path}`,parameters:s.parameters||[],responses:{200:{description:"Successful response"}}};return{openapi:"3.0.0",info:{title:"Kos Router API",version:"1.0.0",description:"Dynamically generated OpenAPI documentation"},paths:e}}extractPathParams(e){const[s,r]=e.split("?"),o=this.parseQueryParams(r);for(const n of this.routes){const i=this.matchRoute(n.path,s);if(i)return{path:s,query:o,params:i}}return{path:s,query:o,params:{}}}matchRoute(e,s){const r=e.split("/").filter(Boolean),o=s.split("/").filter(Boolean);if(r.length!==o.length)return null;const n={};for(let i=0;i<r.length;i++)if(r[i].startsWith(":"))n[r[i].slice(1)]=decodeURIComponent(o[i]);else if(r[i]!==o[i])return null;return n}parseQueryParams(e){return e?e.split("&").reduce((s,r)=>{const[o,n]=r.split("=").map(decodeURIComponent);return s[o]=n??"",s},{}):{}}}const Xl=g.createLogger({name:"intent-service"}),by=t=>{fn(`/kos/intent/${t.type}`)?K(`/kos/intent/${t.type}`,t.options,{"kos.intent.type":t.type}):Xl.info(`No subscribers for intent ${t.type}. Intent not sent.`)},vy=async t=>new Promise(e=>{const{type:s,options:r}=t;if(fn(`/kos/intent/${t.type}`)){const o=bt(),{unsubscribe:n}=$(o,a=>{clearTimeout(i),n(),a&&(a.headers=a.headers||{},a.headers["kos.intent.type"]=s,a.headers.responseId=o),e([null,{body:a==null?void 0:a.body,payload:a}])}),i=setTimeout(()=>{n(),e([`Intent ${s} timed out after 1 second`,null]),console.warn(`Intent ${s} timed out after 1 second`)},1e3);K(`/kos/intent/${s}`,r,{"kos.intent.type":s,sync:o})}else Xl.info(`No subscribers for intent ${t.type}. Intent not sent.`),e([null,{body:void 0,payload:void 0}])}),Ne=g.createLogger({name:"app-startup-service"});async function Zl(t,e={}){const{timeout:s=3e4,throwOnTimeout:r=!0,requirePostStarted:o=!1}=e;if(t.length===0)return Ne.warn("No app IDs provided to waitForAppsToStart"),!0;Ne.debug(`Waiting for apps to start: ${t.join(", ")}`);try{const n=t.map(c=>`/kos/app/started/${c}`),i=await mn(n,{getCurrentState:async()=>{try{const{default:c}=await Promise.resolve().then(()=>kn),[u,d]=await c.get("/api/kos/apps/started");return u?(Ne.error("Error fetching started apps:",u),[]):d}catch(c){Ne.error("Failed to fetch app startup status:",c)}return[]},shouldUseFetchedState:c=>t.every(u=>{const d=c.find(h=>h.appId===u);return!(!d||!d.started||o&&!d.postStarted)}),timeout:s}),a=t.filter(c=>{const u=i.find(d=>d.appId===c);return!!(!u||!u.started||o&&!u.postStarted)});if(a.length>0){const c=`Apps not started: ${a.join(", ")}`;if(Ne.error(c),r)throw new Error(`App startup timeout: ${c}`);return!1}return Ne.info(`All apps started successfully: ${t.join(", ")}`),!0}catch(n){const i=`Failed to wait for apps to start: ${t.join(", ")}`;if(Ne.error(i,n),r)throw new Error(`${i} - ${n instanceof Error?n.message:String(n)}`);return!1}}async function wy(t,e={}){return Zl([t],e)}async function Ey(t,e=!1){const s={};try{const r=await exports.kosFetch("kos:///api/kos/apps/started");if(!r.ok)return t.forEach(i=>s[i]=!1),s;const o=await r.json(),n=(o==null?void 0:o.data)??[];t.forEach(i=>{const a=n.find(c=>c.appId===i);s[i]=(a==null?void 0:a.started)===!0&&(!e||(a==null?void 0:a.postStarted)===!0)})}catch(r){Ne.error("Failed to check app startup status:",r),t.forEach(o=>s[o]=!1)}return s}async function My(){try{const t=await exports.kosFetch("kos:///api/kos/apps/started");if(!t.ok)return[];const e=await t.json();return(e==null?void 0:e.data)??[]}catch(t){return Ne.error("Failed to fetch started apps:",t),[]}}const Vo=E.when,Hn=E.computed,ee=E.runInAction,Q=E.autorun,Jl=E.reaction,Kn=E.observable,qn="Not Assigned",Ty="kos.trouble.added",_y="kos.trouble.removed";var _e=(t=>(t.TroubleRank="kos.trouble.rank.mapper",t.TroubleColor="kos.trouble.color.mapper",t.TroubleRole="kos.trouble.role.mapper",t))(_e||{}),Os=(t=>(t.TIME_CHANGE="/kos/internal/time/time",t.DAY_CHANGE="/kos/internal/time/day",t.TIMEZONE_CHANGE="/kos/internal/time/timezone",t))(Os||{});const eu=g.createLogger({name:"config-bean-service",group:"Services"}),zn=exports.BASE_URL,tu=t=>(t==null?void 0:t.decimals)!==void 0,{postModel:Sy,getOne:Oy}=ie.build({destinationAddress:"",basePath:`${zn}/kos/config/`}),su=async(t,e,s="/api/kos/config")=>(eu.debug(`sending modify request for ConfigBean: ${t}`),Sy({model:e,urlOverride:`${zn}${s}/${t}`})),ru=async(t,e="/api/kos/config")=>(eu.debug(`sending get request for ConfigBean: ${t}`),await Oy({urlOverride:`${zn}${e}/details/${t}/15`})),Vn=t=>t.toLowerCase()==="true"||t.toLowerCase()==="false",ro=t=>{try{const e=Number(t);return!isNaN(e)}catch{return!1}};function ou(t=[]){return t.reverse().reduce((e,s)=>{const{overrides:r}=s;return r&&(e={...e,...r}),e},{})}function nu(t,e="",s={}){for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){const o=e?`${e}.${r}`:r;typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])?nu(t[r],o,s):s[o]=t[r]}return s}const iu=(t,e)=>{const s=t.details[0].bean||ou(t.details[0].scopes),r=nu(s);E.runInAction(()=>{const o={...r};e.props.setValues(o)})},au=(t,e)=>{E.runInAction(()=>{const s=t.changes.reduce((n,i)=>(n[i.attr]=i,n),{}),r=t.scopedChanges.reduce((n,i)=>{const a=n[i.attr];return a&&(n[i.attr]={...a,currentValue:i.currentValue??a.currentValue,previousValue:i.previousValue??a.previousValue}),n},s);Object.values(r).forEach(n=>{const i=n.attr;let a=n.currentValue,c=n.previousValue;typeof a=="string"&&Vn(a)&&(a=a.toLowerCase()=="true",c=(c==null?void 0:c.toLowerCase())=="true"),typeof a=="string"&&ro(a)&&(a=Number(a),c=Number(c)),e.props[i]=a,e.prevProps[i]=c})})},cu=t=>Object.fromEntries(t.props.entries),Iy=t=>e=>s=>t.build(e,s);var $y=Object.defineProperty,Cy=Object.getOwnPropertyDescriptor,lu=(t,e,s,r)=>{for(var o=r>1?void 0:r?Cy(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&$y(e,s,o),o};function Dy(t,e){for(const s of t)if(new RegExp(`^${s}$`).test(e))return s}const Gn="config-bean-model",or=g.getLogger(Gn),xy=mt("path");let Tr=class{constructor(t,e){l(this,"_modifyConfigBean");l(this,"_getConfigBean");l(this,"_schema");l(this,"id");l(this,"path");l(this,"props");l(this,"prevProps");l(this,"serviceBasePath");Object.assign(this,e),this.id=t,this.path=e.path,this.serviceBasePath=e.serviceBasePath;const{modifyConfigBean:s=su,getConfigBean:r=ru}=e;this._modifyConfigBean=s,this._getConfigBean=r,this.props=xe(),this.prevProps=xe()}get values(){return this.props.values}async ready(){or.debug(`readying config bean ${this.path}`),or.debug(`complete readying config bean ${this.path}`)}async load(){or.debug(`loading config bean ${this.path}`);const t=await this._getConfigBean(this.path,this.serviceBasePath);if(t!=null&&t.data){const e=t.data;iu(e,this),or.debug(this.values);const s=t==null?void 0:t.data.details[0].schema;ee(()=>{s&&(this._schema=s)})}}get schemaKeys(){var t;return Object.keys(((t=this._schema)==null?void 0:t.schema)||{})}getSchemaForProperty(t){var s,r;if(this.schemaKeys.includes(t))return(s=this._schema)==null?void 0:s.schema[t];const e=Dy(this.schemaKeys,t);if(e)return(r=this._schema)==null?void 0:r.schema[e]}async updateProperty(t,e){this.props[t]=e,await this.updateConfigBean()}async updateConfigBean(){const t=cu(this);await this._modifyConfigBean(this.path,t,this.serviceBasePath)}handleConfigBeanUpdated(t){au(t,this)}};lu([B({topic:`/kos/config/${xy}`,websocket:!0})],Tr.prototype,"handleConfigBeanUpdated",1);Tr=lu([R(Gn)],Tr);const Ds=new ve({class:Tr,type:Gn}),oo=({path:t,lazy:e,serviceBasePath:s})=>(r,o)=>{r[F]=r[F]||{},r[F][o]={modelType:Ds.type,id:`${Ds.type}-${t}`,options:{path:t,serviceBasePath:s},lifecycle:C.INIT,lazy:e}},{URL:uu}=ue(),{getOne:Ay,getAll:Ry}=ie.build({basePath:`${uu}/api/kos/regions/info`}),du=async()=>{try{return await Ay({})}catch{return}},hu=async()=>{try{return await Ry({urlOverride:`${uu}/api/kos/regions`})}catch{return}},Py=Object.freeze(Object.defineProperty({__proto__:null,getRegionInfo:du,getRegions:hu},Symbol.toStringTag,{value:"Module"}));var he=(t=>(t[t.family=0]="family",t[t.scale=1]="scale",t[t.offset=2]="offset",t[t.decimals=3]="decimals",t[t.alias=4]="alias",t[t.system=5]="system",t))(he||{});const fu={s:["time",1,0,0],second:["time",1,0,0],m:["time",1/60,0,0],minute:["time",1/60,0,0],h:["time",1/3600,0,0],hour:["time",1/3600,0,0],day:["time",1/86400,0,0],week:["time",1/604800,0,0],month:["time",1/2628e3,0,0],year:["time",1/31536e3,0,0],default:["time",1/.001,0,0],ms:["time",1/.001,0,0],millisecond:["time",1/.001,0,0],microsecond:["time",1/1e-6,0,0],nanosecond:["time",1/1e-9,0,0],picosecond:["time",1/1e-12,0,0]};function ky(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return o[n.name]=i,n.alias&&(o[n.alias]=i),o},{...fu});return{...t,...r}}function Ly(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{},a=i[s]||{};i[s]=a;const c=[n.measure,n.scale,n.offset,n.decimals,n.alias,s];return a[n.name]=c,n.alias&&(a[n.alias]=c),Object.hasOwn(n,"default")&&Object.defineProperty(a,"default",{value:c,writable:!0,enumerable:!0,configurable:!0}),o[n.measure]=i,o},{time:{[s]:{...fu}}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}function Fy(t,e){const s=e.id,r=e.units.reduce((o,n)=>{const i=o[n.measure]||{};return Object.hasOwn(n,"default")&&(i[s]=n.name),o[n.measure]=i,o},{time:{[s]:"millisecond"}});return Object.keys(r).forEach(o=>{t[o]={...t[o],...r[o]}}),t}var Ny=Object.defineProperty,Uy=Object.getOwnPropertyDescriptor,Yn=(t,e,s,r)=>{for(var o=r>1?void 0:r?Uy(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Ny(e,s,o),o};const mr="region-info-model",is=g.createLogger({name:"region-info-model"});let xs=class{constructor(t){l(this,"id");l(this,"unitSystemMap");l(this,"measureMap");l(this,"defaultMeasureMap");l(this,"regionMap");l(this,"timeFormats");l(this,"dateFormats");l(this,"unitSystems");l(this,"regionSource");l(this,"region");l(this,"regions",[]);l(this,"timeZoneMap",{});this.id=t,this.unitSystems={},this.unitSystemMap={},this.measureMap={},this.defaultMeasureMap={},this.timeFormats={},this.regions=[],this.dateFormats={},this.timeZoneMap={},this.regionMap={}}get availableRegions(){return this.regions}get defaultUnitSystem(){return String(this.regionSource.props.unitSystemId).toLowerCase()||""}get unitSystemId(){return this.defaultUnitSystem}get timeFormatId(){const t=this.regionSource.props.timeFormatId;if(!t)return"";const e=String(t),s=this.timeFormats[e];return s?String(s.id):""}get selectedTimeFormat(){const t=this.timeFormatId;return t?String(this.timeFormats[t].format):"HH:mm:ss"}get is12HourTimeFormat(){const t=this.timeFormatId;return t?this.timeFormats[t].ampm:!0}get dateFormatId(){const t=this.regionSource.props.dateFormatId;if(!t)return"";const e=String(t);return e?this.dateFormats[e].id:""}get selectedDateFormat(){const t=this.dateFormatId;return t?this.dateFormats[t].format:""}get selectedDateOrder(){const t=this.dateFormatId;return t?this.dateFormats[t].order.toLowerCase():"dmy"}get selectedCountry(){return this.regionSource.props.country||"en"}get selectedTimeZone(){return this.regionSource.props.timeZone||""}get timeZones(){return this.regionId?this.timeZoneMap[this.regionId]||[]:[]}get allTimeZones(){return Intl.supportedValuesOf("timeZone")}get regionId(){return this.region.props.regionId||""}get selectedRegion(){return this.regionMap[this.regionId]}get selectedUnitSystem(){return String(this.regionSource.props.unitSystemId)||""}get timeFormatOptions(){return Object.keys(this.timeFormats).map(t=>({id:t,format:this.timeFormats[t].format,ampm:this.timeFormats[t].ampm}))}get dateFormatOptions(){return Object.keys(this.dateFormats).map(t=>({id:t,format:this.dateFormats[t].format,order:this.dateFormats[t].order}))}get unitSystemOptions(){return Object.keys(this.unitSystems).map(t=>({id:t,name:t}))}setSelectedTimeFormat(t){if(!this.timeFormatOptions.find(e=>e.id===t))throw Error(`Invalid time format id. Must be one of ${this.timeFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("timeFormatId",t)}setSelectedDateFormat(t){if(!this.dateFormatOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.dateFormatOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("dateFormatId",t)}setSelectedUnitSystem(t){if(!this.unitSystemOptions.find(e=>e.id===t))throw Error(`Invalid date format id. Must be one of ${this.unitSystemOptions.map(e=>e.id).join(", ")}`);this.regionSource.updateProperty("unitSystemId",t)}getUnitSystem(t){if(!t)return this.defaultUnitSystem;const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[he.system]}getUnitMeasure(t){const e=t==="drt"?"second":t,s=this.unitSystemMap[e];if(!s)throw Error(`No unit found with name: ${e}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return s[he.family]}getDefaultUnitDecimalPlaces(t,e,s){if(!t||!e)throw Error("Measure and unit system are required");const r=s==="drt"?"second":s,o=this.measureMap[t];if(!o)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const n=o[e.toLowerCase()];if(!n)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(o).join(", ")}`);const i=n[r||"default"];if(!i)throw Error(`No unit "${r||"default"}" found for measure: ${t} and unit system: ${e}. Unit should come from list of units: ${Object.keys(n).join(", ")}`);return i[he.decimals]}getDefaultUnitForMeasure(t,e){if(!t||!e)throw Error("Measure and unit system are required");const s=this.defaultMeasureMap[t];if(!s)throw Error(`No unit systems found for measure: ${t}. Measure should come from list of measures: ${Object.keys(this.measureMap).join(", ")}`);const r=s[e.toLowerCase()];if(!r)throw Error(`No unit system found for measure: ${t} and unit system: ${e}. Unit system should come form list of unit systems: ${Object.keys(s).join(", ")}`);return r}convertByUnit(t,e,s){if(e[he.family]!==s[he.family])throw new Error(`Cannot convert between units of different families: ${e[he.family]} and ${s[he.family]}`);const r=e[he.offset],o=e[he.scale],n=s[he.scale],i=s[he.offset],a=s[he.decimals];return((t-r)/(o/n)+i).toFixed(a)}convertByUnitName(t,e,s){const r=this.unitSystemMap[e],o=this.unitSystemMap[s];if(!r||!o)throw new Error(`No unit found with name: ${e} or ${s}. Unit should be one of ${Object.keys(this.unitSystemMap).join(", ")}`);return this.convertByUnit(t,r,o)}convert(t,e,s){var a,c;if(e.unit&&s.unit)return this.convertByUnitName(t,e.unit,s.unit);const r=e.unit||"",o=s.unit||"";let n=this.unitSystemMap[r],i=this.unitSystemMap[o];if(!i&&s.measure&&s.system){const u=this.measureMap[s.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);i=(a=u[s.system])==null?void 0:a.default,i||is.info("Could not find default unit for measure",s.measure)}if(!n&&e.measure&&e.system){const u=this.measureMap[e.measure];if(!u)throw Error(`Could not find measure ${s.measure}. Measure should be one of ${Object.keys(this.measureMap).join(", ")}`);n=(c=u[e.system])==null?void 0:c.default,n||is.info("Could not find default unit for measure",e.measure)}return!n||!i?(is.warn("Could not find unit to convert to or from. Return value as is"),String(t)):this.convertByUnit(t,n,i)}async init(){is.debug("initializing region info")}async load(){is.debug("loading region info");const t=await hu();t&&(this.regions=t.data.map(s=>s.id),this.timeZoneMap=t.data.reduce((s,r)=>({...s,[r.id]:r.timeZones}),this.timeZoneMap),this.regionMap=t.data.reduce((s,r)=>({...s,[r.id]:r}),{}));const e=await du();e&&(this.unitSystems=e.data.unitSystems.reduce((s,r)=>{const o={id:r.id,name:r.id};return s[r.id]=o,s},this.unitSystems),this.unitSystemMap=e.data.unitSystems.reduce(ky,{}),this.measureMap=e.data.unitSystems.reduce(Ly,{}),this.defaultMeasureMap=e.data.unitSystems.reduce(Fy,{}),this.timeFormats=e.data.timeFormats.reduce((s,r)=>({...s,[r.id]:r}),{}),this.dateFormats=e.data.dateFormats.reduce((s,r)=>({...s,[r.id]:r}),{}))}async ready(){var t,e;await((e=(t=this.regionSource).ready)==null?void 0:e.call(t))}};Yn([oo({path:"kos:service:region:settings"})],xs.prototype,"regionSource",2);Yn([oo({path:"kos:service:region"})],xs.prototype,"region",2);xs=Yn([R(mr)],xs);const ne={registration:{[mr]:{class:xs,singleton:!0}},type:mr,factory:le.Singleton.create(mr)},_r=({source:t,defaultSystem:e="si",defaultMeasure:s})=>{let r={system:e,measure:s};return typeof t=="string"?r={...r,unit:t}:r={...r,...t},r},Wn=(t,e,s)=>{const{model:r}=Ae(ne.type);if(!r)throw new Error("RegionInfo model not found");if(!Mr(r))throw new Error("RegionInfo model not ready");const o={system:r.defaultUnitSystem},n=_r({source:e}),i=_r({source:s||o,defaultMeasure:r.getUnitMeasure(n.unit||"")});return r.convert(t,n,i)};function aa(t,e,s){const r=e.toLowerCase().replace(/_/g,"-").replace(/s$/,""),o=new Intl.NumberFormat().resolvedOptions().locale??"en-US";try{const n=(s==null?void 0:s.mode)||"long",i=(s==null?void 0:s.maxDecimals)??2,a=(s==null?void 0:s.minDecimals)??0;return new Intl.NumberFormat(o,{style:"unit",unit:r,unitDisplay:n,minimumFractionDigits:a,maximumFractionDigits:i}).format(t)}catch{return e}}const jy=(t,e,s,r)=>{const o=Wn(t,e,s),n=_r({source:e}),{model:i}=Ae(ne.type);if(!i)throw new Error("RegionInfo model not found");const a=i.getUnitMeasure(n.unit||""),c={system:i.defaultUnitSystem},u=_r({source:s||c,defaultMeasure:i.getUnitMeasure(n.unit||"")}),d=i.getDefaultUnitForMeasure(a,u.system),h=i.getDefaultUnitDecimalPlaces(a,u.system),f={...r,minDecimals:(r==null?void 0:r.minDecimals)??h,maxDecimals:(r==null?void 0:r.maxDecimals)??h};return{value:o,unit:d||n.unit||"",display:aa(o,d||n.unit||"",{...f,mode:"long"}),shortDisplay:aa(o,d||n.unit||"",{...f,mode:"short"})}};function ca({start:t,end:e,count:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<2)throw new Error("Count should be at least 2 for distribution.");if(t>=e)throw new Error("Start should be less than end.");const o=(e-t)/(s-1),n=[];for(let i=0;i<s;i++){const a=Math.round(t+i*o);n.push(a.toFixed(r))}return n}function la({start:t,end:e,interval:s,decimals:r=0}){if(typeof t!="number"||typeof e!="number"||typeof s!="number")throw new Error("All input values should be numbers.");if(s<=0)throw new Error("Interval should be a positive number.");if(t>=e)throw new Error("Start should be less than end.");const o=[];let n=t;for(;n<=e;)o.push(n.toFixed(r)),n+=s;return o[o.length-1]!==e.toString()&&o.push(e.toString()),o}const St=(t,e)=>s=>!t||!e?s:ro(s)?Wn(Number(s),t,e):s,By=(t,e,s,r)=>{if((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options))return[];if(t.options.type==="rangeCount")return ca(t.options).map(St(s,r));if(t.options.type==="rangeInterval")return la(t.options).map(St(s,r));if(t.options.type==="list"){const{list:o}=t.options;return o.map(St(s,r))}else{if(t.options.type==="unitSystemRangeCount"&&e)return ca(t.options.unitSystems[e]).map(St(s,r));if(t.options.type==="unitSystemRangeInterval"&&e)return la(t.options.unitSystems[e]).map(St(s,r));if(t.options.type==="unitSystemList"&&e){const{list:o}=t.options.unitSystems[e];return o.map(St(s,r))}}return[]},Hy=(t,e)=>{if(!((t==null?void 0:t.type)==="enum"||!(t!=null&&t.options)))return t.options.type==="unitSystemRangeCount"&&e?{type:"rangeCount",...t.options.unitSystems[e]}:t.options.type==="unitSystemRangeInterval"&&e?{type:"rangeInterval",...t.options.unitSystems[e]}:t.options.type==="unitSystemList"&&e?{type:"list",...t.options.unitSystems[e]}:t.options.type==="unitSystemKeypad"&&e?{type:"keypad",...t.options.unitSystems[e]}:t.options};var Ky=Object.defineProperty,qy=Object.getOwnPropertyDescriptor,Qn=(t,e,s,r)=>{for(var o=r>1?void 0:r?qy(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Ky(e,s,o),o};function zy(t){return(t==null?void 0:t.type)==="enum"}function Vy(t){switch(t){case"s":return"second";case"ms":return"millisecond";case"min":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"m":return"month";case"y":return"year";case"ml":return"milliliter";default:return t}}function Gy(t,e){const s=new Date;s.setHours(0,0,0,0);const r=new Date(s.getTime()+t*1e3);return We.format(r,e)}const yr="config-bean-prop-model",Ot=g.createLogger({name:"config-bean-prop-model"}),Yy=mt("path"),Wy=mt("serviceBasePath");let As=class{constructor(t,e){l(this,"id");l(this,"path");l(this,"attribute");l(this,"converter");l(this,"formatter");l(this,"optionsExpander");l(this,"serviceBasePath");l(this,"regionInfo");l(this,"bean");this.id=t,this.path=e.path,this.attribute=e.attribute,this.converter=e.converter,this.formatter=e.formatter,this.serviceBasePath=e.serviceBasePath,this.optionsExpander=e.optionsExpander}getDefaultUnitDecimalPlaces(t,e,s){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return tu(this.displayOptions)?this.displayOptions.decimals:this.regionInfo.getDefaultUnitDecimalPlaces(t,e,s)}getDefaultUnitForMeasure(t,e){if(!t)throw new Error("measure is required");if(!e)throw new Error("unitSystem is required");return this.regionInfo.getDefaultUnitForMeasure(t,e)}get schemaType(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.type?t.type:"String"}get schemaFormat(){const t=this.bean.getSchemaForProperty(this.attribute);return t!=null&&t.format?Vy(t.format):""}get options(){var i;const t=this.regionInfo.defaultUnitSystem,e=this.getConverter(),s=((i=e==null?void 0:e.to)==null?void 0:i.system)??t,r=this.bean.getSchemaForProperty(this.attribute),o=zy(r)?r.values:By(r,s,e==null?void 0:e.from,e==null?void 0:e.to),n=o.length>0?o.map(a=>({label:a,value:a})):[];return this.optionsExpander?typeof this.optionsExpander=="function"?this.optionsExpander(s,o):this.optionsExpander:n}convertUnit(t,e,s){const r=(t==null?void 0:t.measure)||s,o=(t==null?void 0:t.system)||e,n=t==null?void 0:t.unit;return{measure:r,system:o,unit:n}}getConverterUnits(){const t=this.regionInfo.defaultUnitSystem,e=this.getConverter();if(!e)throw Error("No converter defined");const s=e.measure,r=this.convertUnit(e.from,"si",s),o=this.convertUnit(e.to,t,s);return{backend:r,display:o}}set value(t){this.updateProperty(t)}get value(){return this.getValue(!0)}get rawValue(){return this.bean.props[this.attribute]}get significantValue(){var o,n;const t=this.value,e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=(s==null?void 0:s.measure)||((o=s==null?void 0:s.to)==null?void 0:o.measure);if(!isNaN(t)&&s&&r){const i=this.getDefaultUnitDecimalPlaces(r,e,(n=s==null?void 0:s.to)==null?void 0:n.unit);try{const c=this.getFormatterOptions(s);if(c){let u=String(t);return u=c.formatToParts(Number(t))[0].value,Number(u)}}catch(c){Ot.info(`error formatting value ${t}`,c)}return Number(t).toFixed(i)}return t}get previousValue(){return this.getValue(!1)}getValue(t){const e=this.bean[t?"props":"prevProps"][this.attribute];if(typeof e=="boolean")return e;if(this.getConverter()&&!isNaN(e)){const{backend:r,display:o}=this.getConverterUnits();return this.regionInfo.convert(Number(e),r,o)}return e||""}async activate(){Ot.debug(`activating config bean ${this.id}`)}get displayValue(){const t=this.value;if(typeof t=="boolean")return String(t);if(this.schemaFormat==="drt"){const s=this.regionInfo.is12HourTimeFormat?"h:mm:ss a":"HH:mm:ss";return Gy(t,s)}if(!isNaN(t))try{const e=this.getConverter(),s=this.getFormatterOptions(e);if(s){let r=String(t);return r=s.format(Number(t)),r}}catch(e){Ot.error(`error formatting value ${t}`,e)}return String(t)}get unit(){const t=this.getConverter();if(!isNaN(this.value)){const e=this.getFormatterOptions(t);if(e){const r=e.formatToParts(Number(this.value)).find(o=>o.type==="unit");return(r==null?void 0:r.value)??this.getDefaultUnit(t)}}return this.getDefaultUnit(t)}get displayOptions(){var o;const t=this.bean.getSchemaForProperty(this.attribute),e=this.regionInfo.defaultUnitSystem,s=this.getConverter(),r=((o=s==null?void 0:s.to)==null?void 0:o.system)??e;return Hy(t,r)}getMeasureFromFormat(){const t=this.schemaFormat;return t?this.regionInfo.getUnitMeasure(t):""}getConverterFromFormat(){const t=this.getMeasureFromFormat();if(t){const e=this.regionInfo.selectedUnitSystem;return{unit:this.schemaFormat||this.regionInfo.getDefaultUnitForMeasure(t,e),measure:t}}return{}}getDefaultUnit(t){var r,o;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure;return s?((r=t==null?void 0:t.to)==null?void 0:r.unit)||this.getDefaultUnitForMeasure(s,((o=t==null?void 0:t.to)==null?void 0:o.system)||e):this.getConverterFromFormat().unit}getFormatterOptions(t){var n,i,a;const e=this.regionInfo.defaultUnitSystem,s=t==null?void 0:t.measure,r=new Intl.NumberFormat().resolvedOptions().locale;let o=null;if(s||this.formatter){const c=s?{style:"unit",unit:this.getDefaultUnit(t)}:null,u=this.formatter||c;if(u){let d=typeof u=="function"?u(((n=t==null?void 0:t.to)==null?void 0:n.system)||e):u;s&&(d={unit:this.getDefaultUnit(t),...d},d.style==="unit"&&(d.maximumFractionDigits=d.maximumFractionDigits??this.getDefaultUnitDecimalPlaces(s,((i=t==null?void 0:t.to)==null?void 0:i.system)||e,(a=t==null?void 0:t.to)==null?void 0:a.unit)));try{o=new Intl.NumberFormat(r,{...d})}catch(h){Ot.error(`error creating formatter ${d}. Returning the raw value`,h)}}else Ot.debug(`no formatter found for config bean prop ${this.id}. Returning the raw value`)}return o}getConverter(){var r,o,n,i,a,c,u,d,h,f,p;const{unit:t,measure:e}=this.getConverterFromFormat(),s=t==="drt"?"second":t;if(this.converter){const y=(r=this.converter)==null?void 0:r.measure,w=(n=(o=this.converter)==null?void 0:o.to)==null?void 0:n.measure,M=(a=(i=this.converter)==null?void 0:i.from)==null?void 0:a.measure,S=y||w||M||e,U=((u=(c=this.converter)==null?void 0:c.to)==null?void 0:u.unit)||this.regionInfo.getDefaultUnitForMeasure(S,((h=(d=this.converter)==null?void 0:d.to)==null?void 0:h.system)??this.regionInfo.defaultUnitSystem),x=((p=(f=this.converter)==null?void 0:f.to)==null?void 0:p.system)??this.regionInfo.getUnitSystem(U),O=this.schemaFormat==="drt"?"second":this.schemaFormat||s;return{...this.converter,from:{unit:O,...this.converter.from},to:{...this.converter.to,unit:U,system:x},measure:S}}if(s&&e){const y=this.regionInfo.getDefaultUnitForMeasure(e,this.regionInfo.defaultUnitSystem),w=this.regionInfo.getUnitSystem(s),M=this.regionInfo.getUnitSystem(y);return{measure:e,to:{unit:w===M?s:y}}}}async updateProperty(t){Ot.debug(`updating property ${this.attribute} with value ${t}`);let e=t;if(this.getConverter()&&!isNaN(e)){const{backend:o,display:n}=this.getConverterUnits();e=this.regionInfo.convert(Number(e),n,o)}const r=Array.isArray(e)?JSON.stringify(e):String(e);await this.bean.updateProperty(this.attribute,r)}};Qn([Wt({modelType:ne.type})],As.prototype,"regionInfo",2);Qn([oo({path:Yy,serviceBasePath:Wy})],As.prototype,"bean",2);As=Qn([R(yr)],As);const vt={registration:{[yr]:{class:As,singleton:!1}},type:yr,factory:le.Factory.create(yr)};function Qy(t){const{path:e,attribute:s,converter:r,formatter:o,lazy:n,optionsExpander:i,serviceBasePath:a}=t,c=r;return c&&(typeof c!="function"&&typeof c.from=="string"&&(c.from={unit:c.from}),typeof c!="function"&&typeof c.to=="string"&&(c.to={unit:c.to})),(u,d)=>{u[F]=u[F]||{},u[F][d]={modelType:vt.type,id:`${e}-${s}`,options:{path:e,attribute:s,serviceBasePath:a,converter:c,formatter:o,optionsExpander:i},lifecycle:C.INIT,lazy:n}}}const Xn=t=>({id:String(t.id),progress:t.progress,remainingTimeMs:t.remainingTimeMs,endState:t.endState,reason:t.reason,clientData:t.clientData,reasonData:t.reasonData,note:t.note,tracker:t.tracker}),Zn=(t,e)=>{g.debug(`future dto ${t.id} end state ${t.endState}`),g.debug(`future model ${e.id} end state ${e.endState}`),e.endState?g.debug(`future model ${e.id} is already complete`):(g.debug(`updating future model ${e.id}`),E.runInAction(()=>{const s=Xn(t);ee(()=>{Object.keys(s).forEach(r=>{r==="id"?(e.futureId=s.id,s.tracker||(e.id=s.id)):r==="tracker"?e.id=s.tracker:e[r]=s[r]})})}))},pu=t=>e=>s=>t.build(String(e),s),Jn=t=>e=>Vl(Xn,pu(t)(e.tracker||e.id))(e),no=g.createLogger({name:"future-service",group:"Services"}),{isMock:Xy,URL:Vs}=ue();var Je=(t=>(t.Success="SUCCESS",t.Fail="FAIL",t.Aborted="ABORT",t.Canceled="CANCEL",t))(Je||{});const{getAll:Zy,modifyModel:Jy,addModel:eb,deleteModel:tb,postModel:sb}=ie.build({destinationAddress:"",basePath:`${Vs}/api/future`,mock:Xy}),rb=async()=>await Zy({}),gu=async(t,e="/api/kos/future")=>(no.info(`sending delete request for Future: ${t}`),await tb({id:t,urlOverride:`${Vs}${e}/${t}`})),mu=async(t,e="/api/kos/future")=>(no.info("sending add request for Future"),await eb({model:t,urlOverride:`${Vs}${e}`})),ob=async(t,e,s="/api/kos/future")=>(no.info(`sending modify request for Future: ${t}`),Jy({model:e,id:t,urlOverride:`${Vs}${s}/${t}`})),yu=async(t,e="/api/kos/future")=>(no.info(`sending cancel request for Future: ${t}`),sb({urlOverride:`${Vs}${e}/${t}/cancel`,ordered:!0,model:{}})),bu=Ve();var nb=Object.defineProperty,ib=Object.getOwnPropertyDescriptor,vu=(t,e,s,r)=>{for(var o=r>1?void 0:r?ib(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&nb(e,s,o),o};const wu="browser-router-model",ab="kos.http.request",cb="kos.http.response";let Sr=class{constructor(t,e,s){l(this,"_id");l(this,"logger");l(this,"router");this._id=t,this.logger=s.logger,this.router=new Ql}get id(){return this._id}async handleRequest(t,e){const s=e.headers["src-addr"],r=e.headers["dst-addr"],o=e.headers.url,n=e.headers.method,i=e.headers["request-id"],a={id:i,method:n,path:o,body:t};let c=200;const u={send:d=>{this.logger.debug(`sending response to ${r}`),this.logger.debug(d),El({msg:d,options:{responseId:i,destinationAddress:s,type:cb,sourceAddress:r,status:c}})},status:function(d){return c=d,this}};if(a.path==="/openapi.json"){u.send(this.router.generateOpenApiSpec());return}await this.router.handle(a,u)}use(t,e,...s){this.router.use(t,e,...s)}remove(t,e){return this.router.remove(t,e)}removeAllForPath(t){return this.router.removeAllForPath(t)}getRoutes(){return this.router.getRoutes()}async init(){this.logger.debug(`initializing browser-router ${this.id}`)}async load(){this.logger.debug(`loading browser-router ${this.id}`)}};vu([B({topic:ab})],Sr.prototype,"handleRequest",1);Sr=vu([R(wu)],Sr);const ei=new $e({class:Sr,type:wu}),Eu="future-model",Jt=Xt(Eu);var lb=Object.defineProperty,ub=Object.getOwnPropertyDescriptor,Mu=(t,e,s,r)=>{for(var o=r>1?void 0:r?ub(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&lb(e,s,o),o};const xo=g.getLogger(Jt.type);let Or=class{constructor(t,e,s){l(this,"logger");l(this,"_cancelFuture");l(this,"futureId");Object.assign(this,e),this.logger=s.logger,this.id=t,this.futureId=e.id,this.namespace=e.namespace||"kos",this._cancelFuture=yu,Vo(()=>this.status===Je.Success||this.status===Je.Fail,()=>{xo.info(`Future ${this.id} has completed with status ${this.status}`),De(this)})}async load(){xo.debug(`loading Future ${this.id}`)}unload(){xo.info(`unloading Future ${this.id}`)}async cancelFuture(){const t=this.namespace==="studio"?"/api/future":`/api/${this.namespace}/future`;await Vo(()=>this.futureId!==qn),await this._cancelFuture(this.futureId,t)}get status(){return this.endState?this.endState:this.progress>-1?"IN_PROGRESS":"NOT_ACTIVE"}get timeRemaining(){var a,c;const t=this.remainingTimeMs||-1;if(t<0)return"";const e={year:1e3*60*60*24*365,month:1e3*60*60*24*30,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60,second:1e3};let s="second",r=0;for(const[u,d]of Object.entries(e))if(Math.abs(t)>=d){s=u,r=Math.round(t/d);break}const n=new Intl.RelativeTimeFormat("en",{numeric:"auto"}).formatToParts(r,s);return n.length===3?`${((a=n[1])==null?void 0:a.value)??0} ${((c=n[2])==null?void 0:c.value)??""}`:"0 seconds"}handleFutureUpdated(t){this.logger.debug(`Future ${this.id} updated. future: ${t.id} endState: ${t.endState} progress: ${t.progress} remainingTimeMs: ${t.remainingTimeMs}`),Zn(t,this)}};Mu([B({topic:`kos.future/${vr}`})],Or.prototype,"handleFutureUpdated",1);Or=Mu([R(Jt.type)],Or);const Tu=Or,_u="future-container-model",et=Xt(_u),Su=t=>Jn(Jt)(t),db=t=>{const e=Su(t);return et.build(et.type,{}).addFutureModel(e),e},hb=t=>et.build(et.type,{}).getFuture(String(t)),pt={buildFutureModel:Su,initiateFuture:db,getFuture:hb};var fb=Object.defineProperty,pb=Object.getOwnPropertyDescriptor,ti=(t,e,s,r)=>{for(var o=r>1?void 0:r?pb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&fb(e,s,o),o};const nr=g.getLogger(et.type);let Rs=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_deleteFuture");l(this,"_addFuture");l(this,"_futures");l(this,"createModel");l(this,"deleteModel");const{deleteFuture:r=gu,addFuture:o=mu}=e;this.logger=s.logger,this._deleteFuture=r,this._addFuture=o,this.id=t,this._futures=new ke,this.createModel=this.createFuture,this.deleteModel=this.removeFuture}get futures(){return this._futures.data}get models(){return this.futures}getFuture(t){return this._futures.getModel(t)}addFutureModel(t){this._futures.addModel(t)}removeFutureModel(t){this._futures.removeModel(t)}async removeFuture(t){try{await this._deleteFuture(t)}catch(e){nr.error("error deleting a Future"),nr.error(e)}}async createFuture(t){try{const e=await this._addFuture(t),s=e==null?void 0:e.data;if(s){const r=Jn(Jt)(s);return this.addFutureModel(r),r}}catch(e){throw nr.error("error creating a Future"),nr.error(e),e}}handleFutureUpdated(t,e){const s=pt.buildFutureModel(t);this.addFutureModel(s);const r=`kos.future/${t.tracker||t.id}`;this.logger.debug(`publishing future update to ${r}`),K(r,e.body,e.headers)}};ti([Pe],Rs.prototype,"_futures",2);ti([B({topic:"kos.future"})],Rs.prototype,"handleFutureUpdated",1);Rs=ti([R(et.type)],Rs);const Ou=Rs,{URL:Gs}=ue(),{getOne:gb,postModel:mb,deleteModel:Iu}=ie.build({basePath:`${Gs}/api/keyVal`}),Go=g.createLogger({name:"key-value-service",group:"Services"}),$u=async(t,e)=>{await Iu({urlOverride:`${Gs}/api/keyVal/${t}/${e}`,id:e})},Cu=async(t,e,s)=>{const r=await mb({urlOverride:`${Gs}/api/keyVal/${t}/${e}`,model:s.toString()});if((r==null?void 0:r.status)!==200)throw Go.error("Failed to update key-value data",r),new Error(`Failed to update key-value data for namespace ${t}`);return r.data},Du=async(t="studio")=>{Go.debug(`Retrieving all key-value data for namespace: ${t}`);const e=await gb({urlOverride:`${Gs}/api/keyVal/${t}`});if((e==null?void 0:e.status)!==200)throw Go.error("Failed to retrieve key-value data",e),new Error(`Failed to retrieve key-value data for namespace ${t}`);return e.data},yb=async t=>{await Iu({urlOverride:`${Gs}/api/keyVal/${t}`,id:""})},bb=Object.freeze(Object.defineProperty({__proto__:null,deleteKeyValue:$u,deleteKeyValueNamespace:yb,getKeyValue:Du,updateKeyValue:Cu},Symbol.toStringTag,{value:"Module"}));var vb=Object.defineProperty,wb=Object.getOwnPropertyDescriptor,si=(t,e,s,r)=>{for(var o=r>1?void 0:r?wb(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&vb(e,s,o),o};const xu="key-value-model";let Ps=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"namespace");l(this,"data");this.id=t,this.logger=s.logger,this.data=xe(),this.namespace=e.namespace||"studio"}async init(){this.logger.debug(`initializing studio-state ${this.id}`)}async updateState(t,e){this.logger.debug(`updating studio-state ${t} with value ${e}`),e!==void 0?(await Cu(this.namespace,t,e),this.data[t]=e):(await $u(this.namespace,t),this.data[t]=void 0)}async load(){this.logger.debug(`loading studio-state ${this.id}`);const t=await Du(this.namespace);this.data.setValues(t)}handleStateUpdate(t){t.namespace===this.namespace&&(this.data[t.key]=t.value)}handleStateDelete(t){t.namespace===this.namespace&&(this.data[t.key]=void 0)}};si([B({topic:"/keyVal/set"})],Ps.prototype,"handleStateUpdate",1);si([B({topic:"/keyVal/remove"})],Ps.prototype,"handleStateDelete",1);Ps=si([R(xu)],Ps);const ri=new ve({class:Ps,type:xu});var me="INUMBER",es="IOP1",ts="IOP2",ss="IOP3",Be="IVAR",gt="IVARNAME",Lt="IFUNCALL",io="IFUNDEF",ce="IEXPR",oi="IEXPREVAL",wt="IMEMBER",ao="IENDSTATEMENT",Ft="IARRAY";function P(t,e){this.type=t,this.value=e??0}P.prototype.toString=function(){switch(this.type){case me:case es:case ts:case ss:case Be:case gt:case ao:return this.value;case Lt:return"CALL "+this.value;case io:return"DEF "+this.value;case Ft:return"ARRAY "+this.value;case wt:return"."+this.value;default:return"Invalid Instruction"}};function co(t){return new P(es,t)}function Ge(t){return new P(ts,t)}function Au(t){return new P(ss,t)}function Yo(t,e,s,r,o){for(var n=[],i=[],a,c,u,d,h=0;h<t.length;h++){var f=t[h],p=f.type;if(p===me||p===gt)Array.isArray(f.value)?n.push.apply(n,Yo(f.value.map(function(y){return new P(me,y)}).concat(new P(Ft,f.value.length)),e,s,r,o)):n.push(f);else if(p===Be&&o.hasOwnProperty(f.value))f=new P(me,o[f.value]),n.push(f);else if(p===ts&&n.length>1)c=n.pop(),a=n.pop(),d=s[f.value],f=new P(me,d(a.value,c.value)),n.push(f);else if(p===ss&&n.length>2)u=n.pop(),c=n.pop(),a=n.pop(),f.value==="?"?n.push(a.value?c.value:u.value):(d=r[f.value],f=new P(me,d(a.value,c.value,u.value)),n.push(f));else if(p===es&&n.length>0)a=n.pop(),d=e[f.value],f=new P(me,d(a.value)),n.push(f);else if(p===ce){for(;n.length>0;)i.push(n.shift());i.push(new P(ce,Yo(f.value,e,s,r,o)))}else if(p===wt&&n.length>0)a=n.pop(),n.push(new P(me,a.value[f.value]));else{for(;n.length>0;)i.push(n.shift());i.push(f)}}for(;n.length>0;)i.push(n.shift());return i}function Ru(t,e,s){for(var r=[],o=0;o<t.length;o++){var n=t[o],i=n.type;if(i===Be&&n.value===e)for(var a=0;a<s.tokens.length;a++){var c=s.tokens[a],u;c.type===es?u=co(c.value):c.type===ts?u=Ge(c.value):c.type===ss?u=Au(c.value):u=new P(c.type,c.value),r.push(u)}else i===ce?r.push(new P(ce,Ru(n.value,e,s))):r.push(n)}return r}function ut(t,e,s){var r=[],o,n,i,a,c,u;if(ni(t))return Fe(t,s);for(var d=t.length,h=0;h<d;h++){var f=t[h],p=f.type;if(p===me||p===gt)r.push(f.value);else if(p===ts)n=r.pop(),o=r.pop(),f.value==="and"?r.push(o?!!ut(n,e,s):!1):f.value==="or"?r.push(o?!0:!!ut(n,e,s)):f.value==="="?(a=e.binaryOps[f.value],r.push(a(o,ut(n,e,s),s))):(a=e.binaryOps[f.value],r.push(a(Fe(o,s),Fe(n,s))));else if(p===ss)i=r.pop(),n=r.pop(),o=r.pop(),f.value==="?"?r.push(ut(o?n:i,e,s)):(a=e.ternaryOps[f.value],r.push(a(Fe(o,s),Fe(n,s),Fe(i,s))));else if(p===Be)if(f.value in e.functions)r.push(e.functions[f.value]);else if(f.value in e.unaryOps&&e.parser.isOperatorEnabled(f.value))r.push(e.unaryOps[f.value]);else{var y=s[f.value];if(y!==void 0)r.push(y);else throw new Error("undefined variable: "+f.value)}else if(p===es)o=r.pop(),a=e.unaryOps[f.value],r.push(a(Fe(o,s)));else if(p===Lt){for(u=f.value,c=[];u-- >0;)c.unshift(Fe(r.pop(),s));if(a=r.pop(),a.apply&&a.call)r.push(a.apply(void 0,c));else throw new Error(a+" is not a function")}else if(p===io)r.push(function(){for(var w=r.pop(),M=[],S=f.value;S-- >0;)M.unshift(r.pop());var U=r.pop(),x=function(){for(var O=Object.assign({},s),L=0,J=M.length;L<J;L++)O[M[L]]=arguments[L];return ut(w,e,O)};return Object.defineProperty(x,"name",{value:U,writable:!1}),s[U]=x,x}());else if(p===ce)r.push(Eb(f,e));else if(p===oi)r.push(f);else if(p===wt)o=r.pop(),r.push(o[f.value]);else if(p===ao)r.pop();else if(p===Ft){for(u=f.value,c=[];u-- >0;)c.unshift(r.pop());r.push(c)}else throw new Error("invalid Expression")}if(r.length>1)throw new Error("invalid Expression (parity)");return r[0]===0?0:Fe(r[0],s)}function Eb(t,e,s){return ni(t)?t:{type:oi,value:function(r){return ut(t.value,e,r)}}}function ni(t){return t&&t.type===oi}function Fe(t,e){return ni(t)?t.value(e):t}function ii(t,e){for(var s=[],r,o,n,i,a,c,u=0;u<t.length;u++){var d=t[u],h=d.type;if(h===me)typeof d.value=="number"&&d.value<0?s.push("("+d.value+")"):Array.isArray(d.value)?s.push("["+d.value.map(ua).join(", ")+"]"):s.push(ua(d.value));else if(h===ts)o=s.pop(),r=s.pop(),i=d.value,e?i==="^"?s.push("Math.pow("+r+", "+o+")"):i==="and"?s.push("(!!"+r+" && !!"+o+")"):i==="or"?s.push("(!!"+r+" || !!"+o+")"):i==="||"?s.push("(function(a,b){ return Array.isArray(a) && Array.isArray(b) ? a.concat(b) : String(a) + String(b); }(("+r+"),("+o+")))"):i==="=="?s.push("("+r+" === "+o+")"):i==="!="?s.push("("+r+" !== "+o+")"):i==="["?s.push(r+"[("+o+") | 0]"):s.push("("+r+" "+i+" "+o+")"):i==="["?s.push(r+"["+o+"]"):s.push("("+r+" "+i+" "+o+")");else if(h===ss)if(n=s.pop(),o=s.pop(),r=s.pop(),i=d.value,i==="?")s.push("("+r+" ? "+o+" : "+n+")");else throw new Error("invalid Expression");else if(h===Be||h===gt)s.push(d.value);else if(h===es)r=s.pop(),i=d.value,i==="-"||i==="+"?s.push("("+i+r+")"):e?i==="not"?s.push("(!"+r+")"):i==="!"?s.push("fac("+r+")"):s.push(i+"("+r+")"):i==="!"?s.push("("+r+"!)"):s.push("("+i+" "+r+")");else if(h===Lt){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());i=s.pop(),s.push(i+"("+a.join(", ")+")")}else if(h===io){for(o=s.pop(),c=d.value,a=[];c-- >0;)a.unshift(s.pop());r=s.pop(),e?s.push("("+r+" = function("+a.join(", ")+") { return "+o+" })"):s.push("("+r+"("+a.join(", ")+") = "+o+")")}else if(h===wt)r=s.pop(),s.push(r+"."+d.value);else if(h===Ft){for(c=d.value,a=[];c-- >0;)a.unshift(s.pop());s.push("["+a.join(", ")+"]")}else if(h===ce)s.push("("+ii(d.value,e)+")");else if(h!==ao)throw new Error("invalid Expression")}return s.length>1&&(e?s=[s.join(",")]:s=[s.join(";")]),String(s[0])}function ua(t){return typeof t=="string"?JSON.stringify(t).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"):t}function Dt(t,e){for(var s=0;s<t.length;s++)if(t[s]===e)return!0;return!1}function ai(t,e,s){s=s||{};for(var r=!!s.withMembers,o=null,n=0;n<t.length;n++){var i=t[n];i.type===Be||i.type===gt?!r&&!Dt(e,i.value)?e.push(i.value):(o!==null&&(Dt(e,o)||e.push(o)),o=i.value):i.type===wt&&r&&o!==null?o+="."+i.value:i.type===ce?ai(i.value,e,s):o!==null&&(Dt(e,o)||e.push(o),o=null)}o!==null&&!Dt(e,o)&&e.push(o)}function Se(t,e){this.tokens=t,this.parser=e,this.unaryOps=e.unaryOps,this.binaryOps=e.binaryOps,this.ternaryOps=e.ternaryOps,this.functions=e.functions}Se.prototype.simplify=function(t){return t=t||{},new Se(Yo(this.tokens,this.unaryOps,this.binaryOps,this.ternaryOps,t),this.parser)};Se.prototype.substitute=function(t,e){return e instanceof Se||(e=this.parser.parse(String(e))),new Se(Ru(this.tokens,t,e),this.parser)};Se.prototype.evaluate=function(t){return t=t||{},ut(this.tokens,this,t)};Se.prototype.toString=function(){return ii(this.tokens,!1)};Se.prototype.symbols=function(t){t=t||{};var e=[];return ai(this.tokens,e,t),e};Se.prototype.variables=function(t){t=t||{};var e=[];ai(this.tokens,e,t);var s=this.functions;return e.filter(function(r){return!(r in s)})};Se.prototype.toJSFunction=function(t,e){var s=this,r=new Function(t,"with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return "+ii(this.simplify(e).tokens,!0)+"; }");return function(){return r.apply(s,arguments)}};var ks="TEOF",j="TOP",lo="TNUMBER",Pu="TSTRING",He="TPAREN",Nt="TBRACKET",uo="TCOMMA",ci="TNAME",li="TSEMICOLON";function ku(t,e,s){this.type=t,this.value=e,this.index=s}ku.prototype.toString=function(){return this.type+": "+this.value};function G(t,e){this.pos=0,this.current=null,this.unaryOps=t.unaryOps,this.binaryOps=t.binaryOps,this.ternaryOps=t.ternaryOps,this.consts=t.consts,this.expression=e,this.savedPosition=0,this.savedCurrent=null,this.options=t.options,this.parser=t}G.prototype.newToken=function(t,e,s){return new ku(t,e,s??this.pos)};G.prototype.save=function(){this.savedPosition=this.pos,this.savedCurrent=this.current};G.prototype.restore=function(){this.pos=this.savedPosition,this.current=this.savedCurrent};G.prototype.next=function(){if(this.pos>=this.expression.length)return this.newToken(ks,"EOF");if(this.isWhitespace()||this.isComment())return this.next();if(this.isRadixInteger()||this.isNumber()||this.isOperator()||this.isString()||this.isParen()||this.isBracket()||this.isComma()||this.isSemicolon()||this.isNamedOp()||this.isConst()||this.isName())return this.current;this.parseError('Unknown character "'+this.expression.charAt(this.pos)+'"')};G.prototype.isString=function(){var t=!1,e=this.pos,s=this.expression.charAt(e);if(s==="'"||s==='"')for(var r=this.expression.indexOf(s,e+1);r>=0&&this.pos<this.expression.length;){if(this.pos=r+1,this.expression.charAt(r-1)!=="\\"){var o=this.expression.substring(e+1,r);this.current=this.newToken(Pu,this.unescape(o),e),t=!0;break}r=this.expression.indexOf(s,r+1)}return t};G.prototype.isParen=function(){var t=this.expression.charAt(this.pos);return t==="("||t===")"?(this.current=this.newToken(He,t),this.pos++,!0):!1};G.prototype.isBracket=function(){var t=this.expression.charAt(this.pos);return(t==="["||t==="]")&&this.isOperatorEnabled("[")?(this.current=this.newToken(Nt,t),this.pos++,!0):!1};G.prototype.isComma=function(){var t=this.expression.charAt(this.pos);return t===","?(this.current=this.newToken(uo,","),this.pos++,!0):!1};G.prototype.isSemicolon=function(){var t=this.expression.charAt(this.pos);return t===";"?(this.current=this.newToken(li,";"),this.pos++,!0):!1};G.prototype.isConst=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&s!=="."&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(r in this.consts)return this.current=this.newToken(lo,this.consts[r]),this.pos+=r.length,!0}return!1};G.prototype.isNamedOp=function(){for(var t=this.pos,e=t;e<this.expression.length;e++){var s=this.expression.charAt(e);if(s.toUpperCase()===s.toLowerCase()&&(e===this.pos||s!=="_"&&(s<"0"||s>"9")))break}if(e>t){var r=this.expression.substring(t,e);if(this.isOperatorEnabled(r)&&(r in this.binaryOps||r in this.unaryOps||r in this.ternaryOps))return this.current=this.newToken(j,r),this.pos+=r.length,!0}return!1};G.prototype.isName=function(){for(var t=this.pos,e=t,s=!1;e<this.expression.length;e++){var r=this.expression.charAt(e);if(r.toUpperCase()===r.toLowerCase()){if(e===this.pos&&(r==="$"||r==="_")){r==="_"&&(s=!0);continue}else if(e===this.pos||!s||r!=="_"&&(r<"0"||r>"9"))break}else s=!0}if(s){var o=this.expression.substring(t,e);return this.current=this.newToken(ci,o),this.pos+=o.length,!0}return!1};G.prototype.isWhitespace=function(){for(var t=!1,e=this.expression.charAt(this.pos);(e===" "||e===" "||e===`
|
|
108
|
+
`||e==="\r")&&(t=!0,this.pos++,!(this.pos>=this.expression.length));)e=this.expression.charAt(this.pos);return t};var Mb=/^[0-9a-f]{4}$/i;G.prototype.unescape=function(t){var e=t.indexOf("\\");if(e<0)return t;for(var s=t.substring(0,e);e>=0;){var r=t.charAt(++e);switch(r){case"'":s+="'";break;case'"':s+='"';break;case"\\":s+="\\";break;case"/":s+="/";break;case"b":s+="\b";break;case"f":s+="\f";break;case"n":s+=`
|
|
109
|
+
`;break;case"r":s+="\r";break;case"t":s+=" ";break;case"u":var o=t.substring(e+1,e+5);Mb.test(o)||this.parseError("Illegal escape sequence: \\u"+o),s+=String.fromCharCode(parseInt(o,16)),e+=4;break;default:throw this.parseError('Illegal escape sequence: "\\'+r+'"')}++e;var n=t.indexOf("\\",e);s+=t.substring(e,n<0?t.length:n),e=n}return s};G.prototype.isComment=function(){var t=this.expression.charAt(this.pos);return t==="/"&&this.expression.charAt(this.pos+1)==="*"?(this.pos=this.expression.indexOf("*/",this.pos)+2,this.pos===1&&(this.pos=this.expression.length),!0):!1};G.prototype.isRadixInteger=function(){var t=this.pos;if(t>=this.expression.length-2||this.expression.charAt(t)!=="0")return!1;++t;var e,s;if(this.expression.charAt(t)==="x")e=16,s=/^[0-9a-f]$/i,++t;else if(this.expression.charAt(t)==="b")e=2,s=/^[01]$/i,++t;else return!1;for(var r=!1,o=t;t<this.expression.length;){var n=this.expression.charAt(t);if(s.test(n))t++,r=!0;else break}return r&&(this.current=this.newToken(lo,parseInt(this.expression.substring(o,t),e)),this.pos=t),r};G.prototype.isNumber=function(){for(var t=!1,e=this.pos,s=e,r=e,o=!1,n=!1,i;e<this.expression.length&&(i=this.expression.charAt(e),i>="0"&&i<="9"||!o&&i===".");)i==="."?o=!0:n=!0,e++,t=n;if(t&&(r=e),i==="e"||i==="E"){e++;for(var a=!0,c=!1;e<this.expression.length;){if(i=this.expression.charAt(e),a&&(i==="+"||i==="-"))a=!1;else if(i>="0"&&i<="9")c=!0,a=!1;else break;e++}c||(e=r)}return t?(this.current=this.newToken(lo,parseFloat(this.expression.substring(s,e))),this.pos=e):this.pos=r,t};G.prototype.isOperator=function(){var t=this.pos,e=this.expression.charAt(this.pos);if(e==="+"||e==="-"||e==="*"||e==="/"||e==="%"||e==="^"||e==="?"||e===":"||e===".")this.current=this.newToken(j,e);else if(e==="∙"||e==="•")this.current=this.newToken(j,"*");else if(e===">")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,">="),this.pos++):this.current=this.newToken(j,">");else if(e==="<")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,"<="),this.pos++):this.current=this.newToken(j,"<");else if(e==="|")if(this.expression.charAt(this.pos+1)==="|")this.current=this.newToken(j,"||"),this.pos++;else return!1;else if(e==="=")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,"=="),this.pos++):this.current=this.newToken(j,e);else if(e==="!")this.expression.charAt(this.pos+1)==="="?(this.current=this.newToken(j,"!="),this.pos++):this.current=this.newToken(j,e);else return!1;return this.pos++,this.isOperatorEnabled(this.current.value)?!0:(this.pos=t,!1)};G.prototype.isOperatorEnabled=function(t){return this.parser.isOperatorEnabled(t)};G.prototype.getCoordinates=function(){var t=0,e,s=-1;do t++,e=this.pos-s,s=this.expression.indexOf(`
|
|
110
|
+
`,s+1);while(s>=0&&s<this.pos);return{line:t,column:e}};G.prototype.parseError=function(t){var e=this.getCoordinates();throw new Error("parse error ["+e.line+":"+e.column+"]: "+t)};function q(t,e,s){this.parser=t,this.tokens=e,this.current=null,this.nextToken=null,this.next(),this.savedCurrent=null,this.savedNextToken=null,this.allowMemberAccess=s.allowMemberAccess!==!1}q.prototype.next=function(){return this.current=this.nextToken,this.nextToken=this.tokens.next()};q.prototype.tokenMatches=function(t,e){return typeof e>"u"?!0:Array.isArray(e)?Dt(e,t.value):typeof e=="function"?e(t):t.value===e};q.prototype.save=function(){this.savedCurrent=this.current,this.savedNextToken=this.nextToken,this.tokens.save()};q.prototype.restore=function(){this.tokens.restore(),this.current=this.savedCurrent,this.nextToken=this.savedNextToken};q.prototype.accept=function(t,e){return this.nextToken.type===t&&this.tokenMatches(this.nextToken,e)?(this.next(),!0):!1};q.prototype.expect=function(t,e){if(!this.accept(t,e)){var s=this.tokens.getCoordinates();throw new Error("parse error ["+s.line+":"+s.column+"]: Expected "+(e||t))}};q.prototype.parseAtom=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.accept(ci)||this.accept(j,s))t.push(new P(Be,this.current.value));else if(this.accept(lo))t.push(new P(me,this.current.value));else if(this.accept(Pu))t.push(new P(me,this.current.value));else if(this.accept(He,"("))this.parseExpression(t),this.expect(He,")");else if(this.accept(Nt,"["))if(this.accept(Nt,"]"))t.push(new P(Ft,0));else{var r=this.parseArrayList(t);t.push(new P(Ft,r))}else throw new Error("unexpected "+this.nextToken)};q.prototype.parseExpression=function(t){var e=[];this.parseUntilEndStatement(t,e)||(this.parseVariableAssignmentExpression(e),!this.parseUntilEndStatement(t,e)&&this.pushExpression(t,e))};q.prototype.pushExpression=function(t,e){for(var s=0,r=e.length;s<r;s++)t.push(e[s])};q.prototype.parseUntilEndStatement=function(t,e){return this.accept(li)?(this.nextToken&&this.nextToken.type!==ks&&!(this.nextToken.type===He&&this.nextToken.value===")")&&e.push(new P(ao)),this.nextToken.type!==ks&&this.parseExpression(e),t.push(new P(ce,e)),!0):!1};q.prototype.parseArrayList=function(t){for(var e=0;!this.accept(Nt,"]");)for(this.parseExpression(t),++e;this.accept(uo);)this.parseExpression(t),++e;return e};q.prototype.parseVariableAssignmentExpression=function(t){for(this.parseConditionalExpression(t);this.accept(j,"=");){var e=t.pop(),s=[],r=t.length-1;if(e.type===Lt){if(!this.tokens.isOperatorEnabled("()="))throw new Error("function definition is not permitted");for(var o=0,n=e.value+1;o<n;o++){var i=r-o;t[i].type===Be&&(t[i]=new P(gt,t[i].value))}this.parseVariableAssignmentExpression(s),t.push(new P(ce,s)),t.push(new P(io,e.value));continue}if(e.type!==Be&&e.type!==wt)throw new Error("expected variable for assignment");this.parseVariableAssignmentExpression(s),t.push(new P(gt,e.value)),t.push(new P(ce,s)),t.push(Ge("="))}};q.prototype.parseConditionalExpression=function(t){for(this.parseOrExpression(t);this.accept(j,"?");){var e=[],s=[];this.parseConditionalExpression(e),this.expect(j,":"),this.parseConditionalExpression(s),t.push(new P(ce,e)),t.push(new P(ce,s)),t.push(Au("?"))}};q.prototype.parseOrExpression=function(t){for(this.parseAndExpression(t);this.accept(j,"or");){var e=[];this.parseAndExpression(e),t.push(new P(ce,e)),t.push(Ge("or"))}};q.prototype.parseAndExpression=function(t){for(this.parseComparison(t);this.accept(j,"and");){var e=[];this.parseComparison(e),t.push(new P(ce,e)),t.push(Ge("and"))}};var Tb=["==","!=","<","<=",">=",">","in"];q.prototype.parseComparison=function(t){for(this.parseAddSub(t);this.accept(j,Tb);){var e=this.current;this.parseAddSub(t),t.push(Ge(e.value))}};var _b=["+","-","||"];q.prototype.parseAddSub=function(t){for(this.parseTerm(t);this.accept(j,_b);){var e=this.current;this.parseTerm(t),t.push(Ge(e.value))}};var Sb=["*","/","%"];q.prototype.parseTerm=function(t){for(this.parseFactor(t);this.accept(j,Sb);){var e=this.current;this.parseFactor(t),t.push(Ge(e.value))}};q.prototype.parseFactor=function(t){var e=this.tokens.unaryOps;function s(o){return o.value in e}if(this.save(),this.accept(j,s)){if(this.current.value!=="-"&&this.current.value!=="+"){if(this.nextToken.type===He&&this.nextToken.value==="("){this.restore(),this.parseExponential(t);return}else if(this.nextToken.type===li||this.nextToken.type===uo||this.nextToken.type===ks||this.nextToken.type===He&&this.nextToken.value===")"){this.restore(),this.parseAtom(t);return}}var r=this.current;this.parseFactor(t),t.push(co(r.value))}else this.parseExponential(t)};q.prototype.parseExponential=function(t){for(this.parsePostfixExpression(t);this.accept(j,"^");)this.parseFactor(t),t.push(Ge("^"))};q.prototype.parsePostfixExpression=function(t){for(this.parseFunctionCall(t);this.accept(j,"!");)t.push(co("!"))};q.prototype.parseFunctionCall=function(t){var e=this.tokens.unaryOps;function s(n){return n.value in e}if(this.accept(j,s)){var r=this.current;this.parseAtom(t),t.push(co(r.value))}else for(this.parseMemberExpression(t);this.accept(He,"(");)if(this.accept(He,")"))t.push(new P(Lt,0));else{var o=this.parseArgumentList(t);t.push(new P(Lt,o))}};q.prototype.parseArgumentList=function(t){for(var e=0;!this.accept(He,")");)for(this.parseExpression(t),++e;this.accept(uo);)this.parseExpression(t),++e;return e};q.prototype.parseMemberExpression=function(t){for(this.parseAtom(t);this.accept(j,".")||this.accept(Nt,"[");){var e=this.current;if(e.value==="."){if(!this.allowMemberAccess)throw new Error('unexpected ".", member access is not permitted');this.expect(ci),t.push(new P(wt,this.current.value))}else if(e.value==="["){if(!this.tokens.isOperatorEnabled("["))throw new Error('unexpected "[]", arrays are disabled');this.parseExpression(t),this.expect(Nt,"]"),t.push(Ge("["))}else throw new Error("unexpected symbol: "+e.value)}};function Ob(t,e){return Number(t)+Number(e)}function Ib(t,e){return t-e}function $b(t,e){return t*e}function Cb(t,e){return t/e}function Db(t,e){return t%e}function xb(t,e){return Array.isArray(t)&&Array.isArray(e)?t.concat(e):""+t+e}function Ab(t,e){return t===e}function Rb(t,e){return t!==e}function Pb(t,e){return t>e}function kb(t,e){return t<e}function Lb(t,e){return t>=e}function Fb(t,e){return t<=e}function Nb(t,e){return!!(t&&e)}function Ub(t,e){return!!(t||e)}function jb(t,e){return Dt(e,t)}function Bb(t){return(Math.exp(t)-Math.exp(-t))/2}function Hb(t){return(Math.exp(t)+Math.exp(-t))/2}function Kb(t){return t===1/0?1:t===-1/0?-1:(Math.exp(t)-Math.exp(-t))/(Math.exp(t)+Math.exp(-t))}function qb(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))}function zb(t){return Math.log(t+Math.sqrt(t*t-1))}function Vb(t){return Math.log((1+t)/(1-t))/2}function da(t){return Math.log(t)*Math.LOG10E}function Gb(t){return-t}function Yb(t){return!t}function Wb(t){return t<0?Math.ceil(t):Math.floor(t)}function Qb(t){return Math.random()*(t||1)}function ha(t){return ui(t+1)}function Xb(t){return isFinite(t)&&t===Math.round(t)}var Zb=4.7421875,Ao=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function ui(t){var e,s;if(Xb(t)){if(t<=0)return isFinite(t)?1/0:NaN;if(t>171)return 1/0;for(var r=t-2,o=t-1;r>1;)o*=r,r--;return o===0&&(o=1),o}if(t<.5)return Math.PI/(Math.sin(Math.PI*t)*ui(1-t));if(t>=171.35)return 1/0;if(t>85){var n=t*t,i=n*t,a=i*t,c=a*t;return Math.sqrt(2*Math.PI/t)*Math.pow(t/Math.E,t)*(1+1/(12*t)+1/(288*n)-139/(51840*i)-571/(2488320*a)+163879/(209018880*c)+5246819/(75246796800*c*t))}--t,s=Ao[0];for(var u=1;u<Ao.length;++u)s+=Ao[u]/(t+u);return e=t+Zb+.5,Math.sqrt(2*Math.PI)*Math.pow(e,t+.5)*Math.exp(-e)*s}function Jb(t){return Array.isArray(t)?t.length:String(t).length}function fa(){for(var t=0,e=0,s=0;s<arguments.length;s++){var r=Math.abs(arguments[s]),o;e<r?(o=e/r,t=t*o*o+1,e=r):r>0?(o=r/e,t+=o*o):t+=r}return e===1/0?1/0:e*Math.sqrt(t)}function pa(t,e,s){return t?e:s}function ev(t,e){return typeof e>"u"||+e==0?Math.round(t):(t=+t,e=-+e,isNaN(t)||!(typeof e=="number"&&e%1===0)?NaN:(t=t.toString().split("e"),t=Math.round(+(t[0]+"e"+(t[1]?+t[1]-e:-e))),t=t.toString().split("e"),+(t[0]+"e"+(t[1]?+t[1]+e:e))))}function tv(t,e,s){return s&&(s[t]=e),e}function sv(t,e){return t[e|0]}function rv(t){return arguments.length===1&&Array.isArray(t)?Math.max.apply(Math,t):Math.max.apply(Math,arguments)}function ov(t){return arguments.length===1&&Array.isArray(t)?Math.min.apply(Math,t):Math.min.apply(Math,arguments)}function nv(t,e){if(typeof t!="function")throw new Error("First argument to map is not a function");if(!Array.isArray(e))throw new Error("Second argument to map is not an array");return e.map(function(s,r){return t(s,r)})}function iv(t,e,s){if(typeof t!="function")throw new Error("First argument to fold is not a function");if(!Array.isArray(s))throw new Error("Second argument to fold is not an array");return s.reduce(function(r,o,n){return t(r,o,n)},e)}function av(t,e){if(typeof t!="function")throw new Error("First argument to filter is not a function");if(!Array.isArray(e))throw new Error("Second argument to filter is not an array");return e.filter(function(s,r){return t(s,r)})}function cv(t,e){if(!(Array.isArray(e)||typeof e=="string"))throw new Error("Second argument to indexOf is not a string or array");return e.indexOf(t)}function lv(t,e){if(!Array.isArray(e))throw new Error("Second argument to join is not an array");return e.join(t)}function uv(t){return(t>0)-(t<0)||+t}var ga=1/3;function dv(t){return t<0?-Math.pow(-t,ga):Math.pow(t,ga)}function hv(t){return Math.exp(t)-1}function fv(t){return Math.log(1+t)}function pv(t){return Math.log(t)/Math.LN2}function Et(t){this.options=t||{},this.unaryOps={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:Math.sinh||Bb,cosh:Math.cosh||Hb,tanh:Math.tanh||Kb,asinh:Math.asinh||qb,acosh:Math.acosh||zb,atanh:Math.atanh||Vb,sqrt:Math.sqrt,cbrt:Math.cbrt||dv,log:Math.log,log2:Math.log2||pv,ln:Math.log,lg:Math.log10||da,log10:Math.log10||da,expm1:Math.expm1||hv,log1p:Math.log1p||fv,abs:Math.abs,ceil:Math.ceil,floor:Math.floor,round:Math.round,trunc:Math.trunc||Wb,"-":Gb,"+":Number,exp:Math.exp,not:Yb,length:Jb,"!":ha,sign:Math.sign||uv},this.binaryOps={"+":Ob,"-":Ib,"*":$b,"/":Cb,"%":Db,"^":Math.pow,"||":xb,"==":Ab,"!=":Rb,">":Pb,"<":kb,">=":Lb,"<=":Fb,and:Nb,or:Ub,in:jb,"=":tv,"[":sv},this.ternaryOps={"?":pa},this.functions={random:Qb,fac:ha,min:ov,max:rv,hypot:Math.hypot||fa,pyt:Math.hypot||fa,pow:Math.pow,atan2:Math.atan2,if:pa,gamma:ui,roundTo:ev,map:nv,fold:iv,filter:av,indexOf:cv,join:lv},this.consts={E:Math.E,PI:Math.PI,true:!0,false:!1}}Et.prototype.parse=function(t){var e=[],s=new q(this,new G(this,t),{allowMemberAccess:this.options.allowMemberAccess});return s.parseExpression(e),s.expect(ks,"EOF"),new Se(e,this)};Et.prototype.evaluate=function(t,e){return this.parse(t).evaluate(e)};var Lu=new Et;Et.parse=function(t){return Lu.parse(t)};Et.evaluate=function(t,e){return Lu.parse(t).evaluate(e)};var ma={"+":"add","-":"subtract","*":"multiply","/":"divide","%":"remainder","^":"power","!":"factorial","<":"comparison",">":"comparison","<=":"comparison",">=":"comparison","==":"comparison","!=":"comparison","||":"concatenate",and:"logical",or:"logical",not:"logical","?":"conditional",":":"conditional","=":"assignment","[":"array","()=":"fndef"};function gv(t){return ma.hasOwnProperty(t)?ma[t]:t}Et.prototype.isOperatorEnabled=function(t){var e=gv(t),s=this.options.operators||{};return!(e in s)||!!s[e]};var mv=Object.defineProperty,yv=Object.getOwnPropertyDescriptor,bv=(t,e,s)=>e in t?mv(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,vv=(t,e,s,r)=>{for(var o=r>1?void 0:r?yv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o},wv=(t,e,s)=>(bv(t,e+"",s),s);const Ev="kos-expression-evaluator-model";class Mv{constructor(e,s,r,o){l(this,"name");l(this,"expression");l(this,"expr");l(this,"getContextData",null);l(this,"_lastResult",{value:void 0});this.name=e,this.expression=s,this.expr=r,this.getContextData=o,this._lastResult={value:void 0,error:void 0}}get result(){return this._lastResult}updateResult(e){this._lastResult=e}evaluate(e){try{return{value:this.expr.evaluate(e),error:void 0}}catch(s){return{value:void 0,error:s instanceof Error?s.message:String(s)}}}}let Ir=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"parser");l(this,"_data");l(this,"_expressions",new Map);l(this,"_results");l(this,"_contextRevision",0);this.id=t,this.logger=s.logger,this._data=xe(),this._results=xe(),this.parser=new Et,this.parser.functions.exists=r=>r!=null,this.parser.functions.isEmpty=r=>r==null?!0:typeof r=="string"||Array.isArray(r)?r.length===0:typeof r=="object"?Object.keys(r).length===0:!1}get data(){return this._data}get contextRevision(){return this._contextRevision}setContextData(t){this._data.setValues(t),ee(()=>{this._contextRevision++,this.logger.debug("Context revision incremented to:",this._contextRevision)})}updateContextValue(t,e){this._data[t]=e}updateNestedValue(t,e){const s=t.split("."),r=s.pop();if(!r){this.logger.error(`Invalid path "${t}" - cannot be empty`);return}let o=this._data;for(const n of s)(o[n]===void 0||o[n]===null)&&(o[n]={}),o=o[n];o[r]=e,this.logger.debug(`Updated nested context value "${t}" to:`,e)}addModelToContext(t,e){this._data[t]=e}addExpression(t,e){try{const s=this.parser.parse(e),r=new Mv(t,e,s,()=>this.data);this._expressions.set(t,r),this.evaluateExpression(t),this.logger.debug(`Added expression "${t}": ${e}`)}catch(s){throw this.logger.error(`Failed to parse expression "${t}"`,s),s}}removeExpression(t){const e=this._expressions.delete(t);return e?(delete this._results[t],this.logger.debug(`Removed expression "${t}"`)):this.logger.warn(`Attempted to remove non-existent expression "${t}". Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpression(t){const e=this._expressions.get(t);return e||this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`),e}getExpressionValue(t){const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${t}" not found. Available expressions: [${this.expressionNames.join(", ")}]`);return}return e.result}getCachedExpressionValue(t){const e=this._expressions.get(t);if(e)return e.result}get expressions(){return Array.from(this._expressions.values())}get expressionNames(){return Array.from(this._expressions.keys())}get results(){return this.evaluateAllExpressions(),this._results}evaluateAllExpressions(){Array.from(this._expressions.keys()).forEach(e=>{this._expressions.get(e)&&this.evaluateExpression(e)})}evaluateExpression(t){this.logger.debug(`Evaluating expression: ${String(t)}`);const e=this._expressions.get(t);if(!e){this.logger.warn(`Expression "${String(t)}" not found`);return}const s=e.evaluate(this.data);this.logger.debug(`Expression "${String(t)}" evaluated to:`,s);const r=e.result;(s.value!==r.value||s.error!==r.error)&&(this.logger.debug(`Expression "${String(t)}" result changed from`,r,"to",s),e.updateResult(s),this.updateResult(t,s))}updateResult(t,e){this.logger.debug(`ExpressionEvaluator.updateResult called for "${t}":`,e),ee(()=>{this._results[t]=e})}createExpression(t){const e=bt();return this.addExpression(e,t),e}};wv(Ir,"Registration");Ir=vv([R({modelTypeId:Ev,singleton:!1})],Ir);const Fu=Ir.Registration,Tv=g.createLogger({name:"kos-log-manager-service",group:"Services"}),_v="/api/kos/logs/overrides",Nu=async()=>(Tv.debug("sending GET for kos-log-manager"),await Le.get(_v)),Sv=Object.freeze(Object.defineProperty({__proto__:null,getLogOverrides:Nu},Symbol.toStringTag,{value:"Module"}));var Ov=Object.defineProperty,Iv=Object.getOwnPropertyDescriptor,ho=(t,e,s,r)=>{for(var o=r>1?void 0:r?Iv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Ov(e,s,o),o};const Uu="kos-log-manager-model",$v="/kos/logs/override/add/*",Cv="/kos/logs/override/remove/*",Dv=t=>{if(typeof t=="string")return t;if(typeof t=="number")switch(t){case 0:return"trace";case 1:return"debug";case 2:return"info";case 3:return"warn";case 4:return"error";default:return"info"}return"info"};let Ut=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_overrides");this.id=t,this.logger=s.logger,this._overrides=new Bn}updateModel(t){}resolveLoggers(){const t=g.getLoggers(),s=Object.entries(t).map(([r,o])=>({name:r,level:Dv(o.getLevel())})).reduce((r,{name:o,level:n})=>(r[o]={name:o,level:n},r),{});return this.logger.debug("Resolved loggers",s),s}async getAllLoggers(t,e){const s=Object.values(this.resolveLoggers());return e==null||e.send(s),s}setLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=g.getLoggers()[r.name];if(!o){this.logger.debug(`Logger ${r.name} not found`);return}o.setLevel(t.level)});const s=g.getLoggers()[t.name];if(!s){this.logger.debug(`Logger ${t.name} not found`);return}s.setLevel(t.level),globalThis.kos.logOverrides=this._overrides.data}resetLogLevels(t){Object.values(this.resolveLoggers()).filter(r=>r.name.startsWith(t.name)).forEach(r=>{const o=g.getLoggers()[r.name];o||this.logger.debug(`Logger ${r.name} not found`),o==null||o.resetLevel()});const s=g.getLoggers()[t.name];s||this.logger.debug(`Logger ${t.name} not found`),s==null||s.resetLevel(),globalThis.kos.logOverrides=this._overrides.data}handleOverrideAdded(t,e){var s;this.logger.debug(`Override received for node type ${((s=e.wildcardCapture)==null?void 0:s.nodeType)??"unknown"}`),this._overrides.addModel({...t,id:t.name}),this.setLogLevels(t)}handleOverrideRemoved(t){this._overrides.removeModel(t.name),this.resetLogLevels(t)}async init(){this.logger.debug(`initializing kos-log-manager ${this.id}`)}async load(){this.logger.debug(`loading kos-log-manager ${this.id}`),this.resolveLoggers();const[t,e]=await Nu();if(t){this.logger.error("Failed to load log overrides",t);return}const s=(e==null?void 0:e.filter(r=>{var o;return((o=r.type)==null?void 0:o.toUpperCase())==="UI"}).map(r=>({name:r.name??"",type:r.type??"",level:r.level??"info",id:r.name||""})))??[];this._overrides.addAll(s),s.forEach(r=>{this.setLogLevels(r)})}};ho([_c("/api/kos/ui/loggers")],Ut.prototype,"getAllLoggers",1);ho([B({topic:$v,websocket:!0,wildcardName:"nodeType"})],Ut.prototype,"handleOverrideAdded",1);ho([B({topic:Cv,websocket:!0,wildcardName:"nodeType"})],Ut.prototype,"handleOverrideRemoved",1);Ut=ho([R(Uu)],Ut);const ju=new $e({class:Ut,type:Uu}),{URL:Ys}=ue(),{postModel:di,getOne:xv}=ie.build({basePath:`${Ys}/api/kos-time`});g.createLogger({name:"kos-time-service",group:"Services"});const Bu=async t=>{const e=await di({model:t,urlOverride:`${Ys}/api/kos/time/time`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},Hu=async t=>{const e=await di({model:t,urlOverride:`${Ys}/api/kos/time/date`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set time");return e.data},Ku=async t=>{const e=await di({model:{},urlOverride:`${Ys}/api/kos/time/timezone?tz=${t}`});if((e==null?void 0:e.status)!==200)throw Error("Failed to set timezone");return e.data},qu=async()=>{const t=await xv({urlOverride:`${Ys}/api/kos/time/timezone`});if((t==null?void 0:t.status)!==200)throw Error("Failed to set timezone");return t.data.timeZone},Av=Object.freeze(Object.defineProperty({__proto__:null,getTimezone:qu,setDate:Hu,setTime:Bu,setTimezone:Ku},Symbol.toStringTag,{value:"Module"}));var Rv=Object.defineProperty,Pv=Object.getOwnPropertyDescriptor,fo=(t,e,s,r)=>{for(var o=r>1?void 0:r?Pv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Rv(e,s,o),o};const cs="kos-time-model",kv="/kos/time/time",Lv="/kos/time/day",Fv="/kos/time/timezone";let jt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"timezone");this.id=t,this.logger=s.logger,this.timezone=""}async updateSystemTime(t){await Bu(t)}async updateSystemDate(t){await Hu(t)}async updateSystemTimezone(t){await Ku(t)}handleTimeChange(){K(Os.TIME_CHANGE,{})}handleDayChange(){K(Os.DAY_CHANGE,{})}async handleTimeZoneChange(){await this.retrieveTimezone(),K(Os.TIMEZONE_CHANGE,{})}async init(){this.logger.debug(`initializing kos-time ${this.id}`)}async retrieveTimezone(){const t=await qu();this.setTimezone(t)}setTimezone(t){this.timezone=t}async load(){this.logger.debug(`loading kos-time ${this.id}`),this.retrieveTimezone()}};fo([B({topic:kv,websocket:!0})],jt.prototype,"handleTimeChange",1);fo([B({topic:Lv,websocket:!0})],jt.prototype,"handleDayChange",1);fo([B({topic:Fv,websocket:!0})],jt.prototype,"handleTimeZoneChange",1);jt=fo([R(cs)],jt);const $r={registration:{[cs]:{class:jt,singleton:!0}},type:cs,predicate:Ie(cs),factory:le.Singleton.create(cs)};var Nv=Object.defineProperty,Uv=Object.getOwnPropertyDescriptor,zu=(t,e,s,r)=>{for(var o=r>1?void 0:r?Uv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Nv(e,s,o),o};const Vu="log-block-container-model";let Cr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new ke({parentId:t,sortKey:"blockNum"})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing log-block-container container ${this.id}`)}async load(){this.logger.debug(`loading log-block-container container ${this.id}`)}};zu([Pe],Cr.prototype,"_models",2);Cr=zu([R(Vu)],Cr);const jv=g.createLogger({name:"log-stream-container-service",group:"Services"}),Gu=()=>{var r;const t=be(),s=(t==null?void 0:t.connId)||((r=window==null?void 0:window.kosBridge)==null?void 0:r.call(window,"connId"));return g.error(`getKosConnectionId: ${s}`),s},rs=Gu(),Bv="/api/kos/logs/node/{nodeId}/streams",Yu=async()=>(jv.debug("sending GET for log-stream-container"),await Le.get(Bv,{path:{nodeId:"primary"}},{destinationAddress:rs})),Wu=async(t,e="primary")=>{await Le.post("/api/kos/logs/node/{nodeId}/{stream}/subscribe",{path:{nodeId:e,stream:t}},void 0,{destinationAddress:rs})},Qu=async t=>{await Le.post("/api/kos/logs/node/{nodeId}/{stream}/unsubscribe",{path:{nodeId:"primary",stream:t}},void 0,{destinationAddress:rs})},Hv=async()=>{await Le.post("/api/kos/logs/overrides",{},{level:"WARN",name:"com.example",nodeType:"java",type:"package"},{destinationAddress:rs})},Xu=async t=>await Le.get("/api/kos/logs/node/{nodeId}/{stream}/blocks",{path:{nodeId:"primary",stream:t}},{destinationAddress:rs}),Zu=async(t,e)=>await Le.get("/api/kos/logs/node/{nodeId}/{stream}/blocks/{blockId}",{path:{nodeId:"primary",stream:t,blockId:e}},{destinationAddress:rs}),Kv=Object.freeze(Object.defineProperty({__proto__:null,createOverride:Hv,getKosConnectionId:Gu,getLogStreamBlock:Zu,getLogStreamBlocks:Xu,getLogStreams:Yu,subscribeToLogStream:Wu,unsubscribeFromLogStream:Qu},Symbol.toStringTag,{value:"Module"}));var qv=Object.getOwnPropertyDescriptor,zv=(t,e,s,r)=>{for(var o=r>1?void 0:r?qv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Ju="log-block-model";let Wo=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"stream");l(this,"blockNum");l(this,"startLineNum");l(this,"endLineNum");l(this,"startTime");l(this,"endTime");l(this,"lineCount");l(this,"lines");l(this,"inc");this.id=t,this.logger=s.logger,this.nodeId=e.nodeId,this.stream=e.stream,this.blockNum=e.blockNum,this.startLineNum=e.startLineNum,this.endLineNum=e.endLineNum,this.startTime=e.startTime,this.endTime=e.endTime,this.lineCount=e.lineCount,this.lines=[],this.inc=0}async syncLines(){const[t,e]=await Zu(this.stream,this.blockNum);if(t){this.logger.error(`Failed to get log block ${this.blockNum}`);return}e&&this.addLines(e.lines,!0)}updateModel(t){this.startLineNum=t.startLineNum,this.endLineNum=t.endLineNum,this.startTime=t.startTime,this.endTime=t.endTime,this.lineCount=t.lineCount}addLines(t,e){const s=e?[]:this.lines;this.lines=[...s,...t],this.inc+=1}async init(){this.logger.debug(`initializing log-block ${this.id}`)}async load(){this.logger.debug(`loading log-block ${this.id}`)}};Wo=zv([R(Ju)],Wo);const Ls=new ve({class:Wo,type:Ju}),po=new ve({class:Cr,type:Vu});po.addRelatedModel(Ls);var Vv=Object.defineProperty,Gv=Object.getOwnPropertyDescriptor,ed=(t,e,s,r)=>{for(var o=r>1?void 0:r?Gv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Vv(e,s,o),o};const td="log-stream-model";let Dr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodeId");l(this,"_blocks");l(this,"name");l(this,"currentBlockId");l(this,"isResetting");l(this,"generatorInstance");l(this,"shouldStop",!1);this.id=t,this.logger=s.logger,this.currentBlockId="",this.name=e.name,this.nodeId=e.nodeId,this.isResetting=!0,this._blocks=po.instance(`${t}-blocks`).options({}).build()}get firstLineNum(){const t=this.populated[0];return t?t.startLineNum:0}get currentBlock(){const t=this.currentBlockId;return this._blocks.getModel(t)}get populated(){return this._blocks.data.filter(t=>t.lines.length>0)}get blocks(){return this._blocks.data}get totalLineCount(){return this.populated.reduce((t,e)=>t+e.lineCount,0)}accept(t){t.visit(this)}updateBlock(t){var r;let e=this._blocks.models.getModel(`${t.stream}-block-${t.blockNum}`);const s={nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)};e||(e=Ls.instance(`${t.stream}-block-${t.blockNum}`).options(s).build(),this._blocks.addModel(e)),e&&e.updateModel(s),(!this.currentBlock||t.blockNum>=((r=this.currentBlock)==null?void 0:r.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}addBlock(t){var s;const e=Ls.instance(`${t.stream}-block-${t.blockNum}`).options({nodeId:t.nodeId,blockNum:t.blockNum,endLineNum:t.endLineNum,lineCount:t.lineCount,startLineNum:t.startLineNum,stream:this.name,endTime:new Date(t.endTime),startTime:new Date(t.startTime)}).build();this._blocks.addModel(e),(!this.currentBlock||t.blockNum>=((s=this.currentBlock)==null?void 0:s.blockNum))&&(this.currentBlockId=`${t.stream}-block-${t.blockNum}`)}removeBlock(t){this._blocks.models.removeModel(`${this.name}-block-${t}`)}async subscribe(){await Wu(this.name)}async unsubscribe(){await Qu(this.name)}async reset(){if(this.isResetting=!0,this.populated.length>0)return;this.logger.debug(`resetting log-stream ${this.id}`);for(const e of this._blocks.models.data)e.lines=[];const t=this._blocks.data[this._blocks.data.length-1];t&&await t.syncLines(),this.isResetting=!1}async init(){this.logger.debug(`initializing log-stream ${this.id}`)}async load(){this.logger.debug(`loading log-stream ${this.id}`);const[t,e]=await Xu(this.name);if(t){this.logger.error(`Error loading log stream: ${t}`);return}if(e)for(const r of e)this.addBlock(r);const s=this._blocks.data[this._blocks.data.length-1];if(s&&await s.syncLines(),this._blocks.data.length>1){const r=this._blocks.data[this._blocks.data.length-2];r&&await r.syncLines()}}start(){return this.shouldStop=!1,this.generatorInstance=this.streamLogs(),this.generatorInstance}stop(){var t;this.shouldStop=!0,(t=this.generatorInstance)==null||t.next(),console.log("Requested generator stop.")}async*streamLogs(){const t=[];let e=null,s=0,r=this.currentBlockId;const o=Jl(()=>{const n=this.currentBlock;return n?{blockId:this.currentBlockId,lineCount:n.lines.length}:null},n=>{const i=this.currentBlock;if(i)if(r!==(n==null?void 0:n.blockId))r=n==null?void 0:n.blockId,s=0,t.push(...i.lines);else{const a=i.lines.slice(s);t.push(...a),s+=a.length}e&&(e(),e=null)},{fireImmediately:!0});try{for(const n of this.populated.filter(i=>i!==this.currentBlock))for(const i of n.lines)yield i;for(;;)for(t.length===0&&await new Promise(n=>e=n);t.length>0;)yield t.shift()}finally{o()}}};ed([Pe],Dr.prototype,"_blocks",2);Dr=ed([R(td)],Dr);const Is=new ve({class:Dr,type:td});var Yv=Object.defineProperty,Wv=Object.getOwnPropertyDescriptor,Mt=(t,e,s,r)=>{for(var o=r>1?void 0:r?Wv(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Yv(e,s,o),o};const sd="log-stream-container-model",Qv="/kos/logs/subscription/addBlock/*",Xv="/kos/logs/subscription/updateBlock/*",Zv="/kos/logs/subscription/removeBlock/*",Jv="/kos/logs/subscription/lines/*",rd="/kos/logs/streams/add/*";let Ke=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"selectedStream");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new ke({parentId:t}),this.selectedStream=void 0}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}updateModel(t){}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}updateSelectedStream(t){this.selectedStream=t}handleStreamAdded(t){this.logger.debug(`Received topic: ${rd}`);const e=t.stream,s=Is.instance(e).options({name:e,nodeId:"primary"}).build();this.addModel(s)}handleAddBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.addBlock(t)}handleRemoveBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.removeBlock(t.blockNum)}handleUpdateBlock(t,e){this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&r.updateBlock(t)}handleLogLine(t,e){var o;this.logger.debug(`Received topic: ${e.headers.topic}`);const s=t.stream,r=this.models.getModel(s);r&&((o=r.currentBlock)==null||o.addLines(t.lines))}async init(){this.logger.debug(`initializing log-stream-container container ${this.id}`)}async subscribeToLogStream(t){const e=Is.instance(t).options({name:t,nodeId:"primary"}).build();this.addModel(e),await e.subscribe()}async load(){this.logger.debug(`loading log-stream-container container ${this.id}`);const[t,e]=await Yu();if(t){this.logger.error(`Error loading log-streams: ${t}`);return}e&&e.forEach(s=>{const r=Is.instance(s).options({name:s,nodeId:"primary"}).build();this.addModel(r)})}};Mt([Pe],Ke.prototype,"_models",2);Mt([B({topic:[rd],websocket:!0})],Ke.prototype,"handleStreamAdded",1);Mt([B({topic:[Qv],websocket:!0})],Ke.prototype,"handleAddBlock",1);Mt([B({topic:[Zv],websocket:!0})],Ke.prototype,"handleRemoveBlock",1);Mt([B({topic:[Xv],websocket:!0})],Ke.prototype,"handleUpdateBlock",1);Mt([B({topic:[Jv],websocket:!0})],Ke.prototype,"handleLogLine",1);Ke=Mt([R(sd)],Ke);const Ws=new $e({class:Ke,type:sd});Ws.addRelatedModel(Is);Ws.addRelatedModel(po);Ws.addRelatedModel(Ls);const ew=t=>t.rank!==void 0,tw=t=>t.visibleRole!==void 0,sw=t=>t.color!==void 0,rw=t=>{const e=t.info??{};return ew(e)?e.rank:0},ow=t=>{const e=t.info??{};return sw(e)?e.color:"orange"},nw=t=>{const e=t.info??{};return tw(e)?e.visibleRole:"TECHNICIAN"},{URL:go}=ue(),{getAll:iw,postModel:od}=ie.build({basePath:`${go}/api/kos/troubles`}),nd=async t=>await iw({urlOverride:`${go}${t}`}),id=async(t,e="/api/kos/troubles",s)=>{try{const r=await od({model:{},urlOverride:`${go}${e}/resolve/${t}`,tracker:s});return r!=null&&r.data&&pt.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:Je.Fail,tracker:s,reason:"Failed to resolve trouble"};return pt.initiateFuture(o),o}},aw=async(t,e="/api/kos/troubles",s)=>{try{const r=await od({model:t,urlOverride:`${go}${e}/resolve/`,tracker:s});return r!=null&&r.data&&pt.initiateFuture(r.data),r.data}catch{const o={id:s||"",endState:Je.Fail,tracker:s,reason:"Failed to resolve troubles"};return pt.initiateFuture(o),o}},cw=Object.freeze(Object.defineProperty({__proto__:null,bulkResolveTroubles:aw,getTroubles:nd,resolveTrouble:id},Symbol.toStringTag,{value:"Module"})),xr="troubleDataMapper",ir=new Map;Qt(xr,{register:(t,e)=>{var s;ir.has(t)||ir.set(t,[]),(s=ir.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=ir.get(t);if(!s)return{...e.data};const r=s.map(i=>i(e));return(await Promise.allSettled(r)).reduce((i,a)=>(a.status==="fulfilled"?i={...i,...a.value}:g.info(`Trouble mapper ${t} failed: ${a.reason}`),i),{...e.data})}});const Qs="troubleMapper",ar=new Map;Qt(Qs,{register:(t,e)=>{var s;ar.has(t)||ar.set(t,[]),(s=ar.get(t))==null||s.push(e)},execute:async(t,e)=>{const s=ar.get(t);if(!s)return[];const r=s.map(i=>i(e)),n=(await Promise.allSettled(r)).map(i=>i.status==="fulfilled"?i.value:(g.info(`Trouble mapper ${t} failed: ${i.reason}`),[])).flat();return Array.from(new Set(n))}});I[Qs].register("nozzle",async t=>[t.data.nozzlePath]);I[Qs].register("path",async t=>[t.data.path]);const lw=async t=>{const e=new Set,s=t.ifaces,r=s==null?void 0:s.map(n=>I[Qs].execute(n,t));return(await Promise.allSettled(r)).forEach(n=>{n.status==="fulfilled"&&n.value.forEach(i=>e.add(i))}),Array.from(e)},ad=async t=>{const e=t.ifaces,s=e==null?void 0:e.map(i=>I[xr].execute(i,t)),r=I[xr].execute(t.type,t);s.push(r);const n=(await Promise.allSettled(s)).reduce((i,a)=>(a.status==="fulfilled"&&(i={...i,...a.value}),i),{});return{...t.data,...n}};class uw{constructor(){l(this,"type","ResolvableTrouble");l(this,"title","Resolvable Trouble");l(this,"subtitle","Trouble")}}class dw{constructor(){l(this,"type","BlockPumpTrouble");l(this,"title","Block Pump Trouble");l(this,"subtitle","Trouble")}}class It{static getHandler(e){switch(e){case"ResolvableTrouble":return new uw;case"BlockPumpTrouble":return new dw;default:return}}}var hw=Object.defineProperty,fw=Object.getOwnPropertyDescriptor,cd=(t,e,s,r)=>{for(var o=r>1?void 0:r?fw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&hw(e,s,o),o};const ls="trouble-model";function cr(t){return typeof t.shouldDefer=="boolean"}let Ar=class{constructor(t,{resolvable:e,tags:s,info:r,id:o,clientData:n,rank:i,ifaces:a,type:c,group:u,createTime:d,role:h,color:f,servicePath:p,...y},w){l(this,"id");l(this,"logger");l(this,"_troubleId");l(this,"_resolvable");l(this,"type");l(this,"futureHandler");l(this,"ifaces");l(this,"clientData");l(this,"info");l(this,"role");l(this,"color");l(this,"tags");l(this,"data");l(this,"rank");l(this,"servicePath");l(this,"group");l(this,"createTime");l(this,"_mapped",{});this.id=t,this.logger=w.logger,this.type=c,this._troubleId=o,this._resolvable=!!e,this.ifaces=a,this.rank=i,this.role=h,this.color=f,this.tags=s,this.info=r,this.group=u,this.servicePath=p??"/api/kos/troubles",this.createTime=d,this.clientData=n,this.data={},Object.assign(this.data,y),this.futureHandler=new so(this)}getTitleWithContext(t){var s,r;const e=t?(r=(s=It.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:It.getHandler(this.type);return(e==null?void 0:e.title)||"Trouble"}getSubtitleWithContext(t){var s,r;const e=t?(r=(s=It.getHandler(this.type))==null?void 0:s.context)==null?void 0:r[t]:It.getHandler(this.type);return(e==null?void 0:e.subtitle)||"Trouble"}get rawId(){return this._troubleId}get title(){var t;return((t=It.getHandler(this.type))==null?void 0:t.title)||"Trouble"}get subtitle(){var t;return((t=It.getHandler(this.type))==null?void 0:t.subtitle)||"Trouble"}get troubleId(){return this._troubleId}get resolvable(){return this._resolvable}get future(){return this.futureHandler.future}async resolveMappedData(){return await ad(this)}get deferredCompanion(){const t=jo(this.id,e=>cr(e));if(t&&cr(t.modelData))return t.modelData}get deferred(){return this.deferredCompanion?this.deferredCompanion.deferred:!1}get shouldDefer(){const t=jo(this.id,e=>cr(e));return t&&cr(t.modelData)?t.modelData.shouldDefer:!1}clearDefer(){var t;(t=this.deferredCompanion)==null||t.clearDefer()}defer(){var t;(t=this.deferredCompanion)==null||t.defer()}getChildren(){return[...this.futureHandler.allFutures]}async resolve(t){var e;if(!this._resolvable)throw this.logger.error(`attempting to resolve an unresolvable trouble with id ${this._troubleId}`),new Error("Trouble is not resolvable");if(this.shouldDefer){(e=this.deferredCompanion)==null||e.defer();return}return await id(this._troubleId,this.servicePath,t)}};cd([Di()],Ar.prototype,"resolve",1);Ar=cd([R(ls)],Ar);const Fs={registration:{[ls]:{class:Ar,singleton:!1}},type:ls,predicate:Ie(ls),factory:le.Factory.create(ls)};var ld=Object.defineProperty,pw=Object.getOwnPropertyDescriptor,gw=(t,e,s)=>e in t?ld(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,hi=(t,e,s,r)=>{for(var o=r>1?void 0:r?pw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ld(e,s,o),o},mw=(t,e,s)=>(gw(t,e+"",s),s);function ya(t){return I.propertyMapper.hasMapper(_e.TroubleRank)?I.propertyMapper.executeMapper(_e.TroubleRank,t):rw(t)}function ba(t){return(I.propertyMapper.hasMapper(_e.TroubleColor)?I.propertyMapper.executeMapper(_e.TroubleColor,t):ow(t)).toLowerCase()}function va(t){return(I.propertyMapper.hasMapper(_e.TroubleRole)?I.propertyMapper.executeMapper(_e.TroubleRole,t):nw(t)).toLowerCase()}const yw="trouble-container-model";class ye{}l(ye,"INDEX_TROUBLES_BY_IFACE","byIface"),l(ye,"INDEX_TROUBLES_BY_TYPE","byType"),l(ye,"INDEX_TROUBLES_BY_GROUP","byGroup"),l(ye,"INDEX_TROUBLES_BY_DEFERRED","byDeferred"),l(ye,"SORT_KEY_RANK","rank"),l(ye,"TROUBLES_DEFERRED","true");let Bt=class{constructor(t,e){l(this,"id");l(this,"servicePath","/api/kos/troubles");this.id=t,this.servicePath=e.servicePath??this.servicePath}async load(){this.logger.debug("loading trouble container");const t=await nd(this.servicePath);try{t==null||t.data.forEach(e=>{const s={...e,servicePath:this.servicePath,rank:ya(e),color:ba(e),role:va(e),id:String(e.id)},r=Fs.factory(`trouble-${e.id}`)(s);this.troubles.addModel(r)})}catch(e){throw this.logger.error(e),e}}handleTroubleRemoved(t){const e=`trouble-${t}`,s=this.troubles.getModel(e);this.troubles.removeModel(e),s&&De(s)}handleTroubleAdded(t){const e={...t,servicePath:this.servicePath,rank:ya(t),color:ba(t),role:va(t),id:String(t.id)};if(e.role==="NONE")return;const s=Fs.factory(`trouble-${t.id}`)(e);this.troubles.addModel(s)}};mw(Bt,"Registration");hi([B({topic:"/kos/trouble/remove",websocket:!0,lifecycle:C.INIT})],Bt.prototype,"handleTroubleRemoved",1);hi([B({topic:"/kos/trouble/add",websocket:!0})],Bt.prototype,"handleTroubleAdded",1);Bt=hi([R({modelTypeId:yw,singleton:!0}),Ic(),Tc({containerProperty:"troubles",containerOptions:{indexMap:{[ye.INDEX_TROUBLES_BY_IFACE]:lw,[ye.INDEX_TROUBLES_BY_TYPE]:"type",[ye.INDEX_TROUBLES_BY_GROUP]:"group",[ye.INDEX_TROUBLES_BY_DEFERRED]:"deferred"},sortKey:ye.SORT_KEY_RANK}})],Bt);const Ht=Bt.Registration,{URL:ud}=ue(),{getAll:bw}=ie.build({basePath:`${ud}/api/kos/ota`}),wa=g.createLogger({name:"ota-service",group:"Services"}),vw=async()=>{wa.debug("sending GET request to /api/kos/ota/artifacts");const t=await bw({urlOverride:`${ud}/api/kos/ota/artifacts`});return wa.debug("getArtifacts - response:",t),t==null?void 0:t.data};var ww=Object.defineProperty,Ew=Object.getOwnPropertyDescriptor,mo=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ew(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ww(e,s,o),o};const dd="ota-model",Mw=t=>{let e=null;for(const s in t){const r=t[s],o=r.lastUpdateTime;(!e||e.lastUpdateTime<o)&&(e=r)}return e},Ro=t=>{const e=t.artifactInfo,s=Mw(t.requests),r=(e==null?void 0:e.identifier)||(s==null?void 0:s.kabId);if(!r)return;let o;switch(t.status){case"INSTALLED":o="ready";break;case"INVALID":o="error";break;case"MISSING":o=((s==null?void 0:s.currentSize)||0)>0?"downloading":"idle";break;case"STAGED":o="pending"}const n=e===void 0;return{id:r,manifest:n,label:e==null?void 0:e.version,name:e==null?void 0:e.name,status:o,error:o==="error"?s==null?void 0:s.lastErrorReason:void 0,errorCount:o==="error"?s==null?void 0:s.errorCount:0,progress:o==="downloading"&&s&&!n?s.currentSize/(e==null?void 0:e.size)*100:void 0,size:e==null?void 0:e.size}};let Kt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"data",new Bn);l(this,"troubleContainer");this.id=t,this.logger=s.logger}get downloadInProgressTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTADownloadInProgressTrouble"))==null?void 0:e[0]}get updatePendingTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAUpdatePendingTrouble"))==null?void 0:e[0]}get pausedDueToErrorsTrouble(){var e;return(e=this.troubleContainer.troubles.getIndexByKey("byType","OTAPausedDueToErrorsTrouble"))==null?void 0:e[0]}get updates(){return this.data}get status(){return this.pausedDueToErrorsTrouble?"error":this.downloadInProgressTrouble?"downloading":this.updatePendingTrouble?"pending":"idle"}installAndReboot(){var t;this.updatePendingTrouble||this.logger.error("installAndReboot - OTAUpdatePendingTrouble not present"),this.logger.debug("installAndReboot - resolve OTAUpdatePendingTrouble"),(t=this.updatePendingTrouble)==null||t.resolve()}async init(){this.logger.debug(`initializing ota ${this.id}`)}async load(){this.logger.debug(`loading ota ${this.id}`);try{const t=await vw();t&&t.forEach(e=>{const s=Ro(e);s&&this.data.addModel(s)})}catch(t){this.logger.error(`loading ota ${this.id} - error:`,t)}}async handleAllArtifacts(t){this.logger.debug("handleAllArtifacts:",t),await this.data.clear();try{t.forEach(e=>{const s=Ro(e);s&&this.data.addModel(s)})}catch(e){this.logger.error(`handleAllArtifacts ${this.id} - error:`,e)}}handleChangedArtifacts(t){this.logger.debug("handleChangedArtifacts:",t);try{t.forEach(e=>{const s=Ro(e);s&&this.data.updateModel(s)})}catch(e){this.logger.error(`handleChangedArtifacts ${this.id} - error:`,e)}}};mo([Wt({modelType:Ht.type})],Kt.prototype,"troubleContainer",2);mo([B({topic:"/kos/ota/artifacts/all",websocket:!0})],Kt.prototype,"handleAllArtifacts",1);mo([B({topic:"/kos/ota/artifacts/changed",websocket:!0})],Kt.prototype,"handleChangedArtifacts",1);Kt=mo([R(dd)],Kt);const Rr=new $e({class:Kt,type:dd});function Tw(t){let e;const s=async(...r)=>{e&&e.abort(),e=new AbortController;const o=e;try{return await t(...r,o.signal)}finally{e===o&&(e=void 0)}};return s.cancel=()=>{e&&(e.abort(),e=void 0)},s.getController=()=>e,s.isActive=()=>!!e,s}const Po=g.createLogger({name:"software-info-service",group:"Services"}),fi=async t=>{Po.debug("sending GET for software-info");const[e,s]=await bu.get("/api/kos/manifest/info",void 0,{signal:t});if(!s)throw t!=null&&t.aborted?(Po.debug("Request was aborted"),new z("Request was aborted")):(Po.error("Failed to fetch software-info",e),new z("Failed to fetch software-info"));return s},_w=Tw(fi),Sw=Object.freeze(Object.defineProperty({__proto__:null,getSoftwareInfos:fi,getSoftwareInfosWithCancel:_w},Symbol.toStringTag,{value:"Module"}));var Ow=Object.getOwnPropertyDescriptor,Iw=(t,e,s,r)=>{for(var o=r>1?void 0:r?Ow(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const us="software-info-model";let Qo=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"nodes");this.id=t,this.logger=s.logger,this.nodes=[]}async init(){this.logger.debug(`initializing software-info ${this.id}`)}groupBy(t,e){return t.reduce((s,r)=>(s[r[e]]=[...s[r[e]]||[],r],s),{})}async load(){this.logger.debug(`loading software-info ${this.id}`);try{const t=await fi(),e=(t==null?void 0:t.nodes)||{};ee(()=>{const r=Object.keys(e).map(o=>e[o][0]).map(o=>({nodeName:o.nodeType,kosVersion:o.kosVersion,group:this.groupBy(o.artifacts,"group")}));this.nodes=r})}catch(t){t instanceof z&&this.logger.error("Failed to fetch software-info",t)}}};Qo=Iw([R(us)],Qo);const Pr={registration:{[us]:{class:Qo,singleton:!1}},type:us,predicate:Ie(us),factory:le.Factory.create(us)},{URL:hd}=ue(),{getOne:$w}=ie.build({basePath:`${hd}/api/kos/state`}),Cw=g.createLogger({name:"state-bean-service",group:"Services"}),fd=async({path:t})=>(Cw.debug("sending GET for state-bean"),await $w({urlOverride:`${hd}/api/kos/state/${t}`})),Dw=Object.freeze(Object.defineProperty({__proto__:null,getStateBeanData:fd},Symbol.toStringTag,{value:"Module"}));var xw=Object.defineProperty,Aw=Object.getOwnPropertyDescriptor,pd=(t,e,s,r)=>{for(var o=r>1?void 0:r?Aw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&xw(e,s,o),o};const ds="state-bean-model",Rw=mt("path");let kr=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"props");l(this,"logger");this.id=t,this.logger=s.logger,this.props=Kn.map(new Map),zo(e,this)}updateModel(t){zo(t,this)}handleConfigBeanUpdated(t){Object.entries(t).forEach(([e,s])=>{let r=s;typeof r=="string"&&Vn(r)&&(r=r.toLowerCase()=="true"),typeof r=="string"&&ro(r)&&(r=Number(r)),this.props.set(e,r)})}async init(){this.logger.debug(`initializing state-bean ${this.id}`)}updateProps(t){Object.entries(t).forEach(([e,s])=>{this.props.set(e,s)})}async load(){this.logger.debug(`loading state-bean ${this.id}`);const t=await fd({path:this.path});t!=null&&t.data&&this.updateProps(t.data)}};pd([B({topic:`/kos/state/${Rw}`,websocket:!0})],kr.prototype,"handleConfigBeanUpdated",1);kr=pd([R(ds)],kr);const Ns={registration:{[ds]:{class:kr,singleton:!1}},type:ds,predicate:Ie(ds),factory:le.Factory.create(ds)};var Pw=Object.defineProperty,kw=Object.getOwnPropertyDescriptor,gd=(t,e,s,r)=>{for(var o=r>1?void 0:r?kw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Pw(e,s,o),o};const hs="state-prop-model",Ea=mt("path");let Lr=class{constructor(t,e,s){l(this,"id");l(this,"path");l(this,"attribute");l(this,"logger");l(this,"stateBean");this.id=t,this.logger=s.logger,this.path=e.path,this.attribute=e.attribute}get value(){return this.stateBean.props.get(this.attribute)}async init(){this.logger.debug(`initializing state-prop ${this.id}`)}async load(){this.logger.debug(`loading state-prop ${this.id}`)}toString(){var t;return((t=this.value)==null?void 0:t.toString())??""}};gd([Wt({modelType:Ns.type,id:`state-bean-${Ea}`,options:{path:Ea}})],Lr.prototype,"stateBean",2);Lr=gd([R(hs)],Lr);const pi={registration:{[hs]:{class:Lr,singleton:!1}},type:hs,predicate:Ie(hs),factory:le.Factory.create(hs)},{URL:Lw}=ue(),{getAll:Fw}=ie.build({basePath:`${Lw}/api/state-prop`}),Nw=g.createLogger({name:"state-prop-service",group:"Services"}),Uw=async()=>(Nw.debug("sending GET for state-prop"),await Fw({})),jw=Object.freeze(Object.defineProperty({__proto__:null,getStateProps:Uw},Symbol.toStringTag,{value:"Module"})),{URL:gi}=ue(),{getOne:md}=ie.build({basePath:`${gi}/api/translation`}),$s=g.createLogger({name:"translation-service",group:"Services"}),Bw=()=>{const t=window.location.origin,e=be();return(e==null?void 0:e.host)||t},yd=async(t,e)=>{$s.debug(`Loading translations from: ${t}`);const s=e??Bw();try{const r=await fetch(`${s}${t}`);return r.status!==200?($s.warn(`Failed to fetch translations at ${t}: ${r.status}`),{}):await r.json()}catch(r){throw $s.error("Error fetching translations",r),r}},Hw=async()=>{$s.debug("Getting system localization descriptor");const t=await md({urlOverride:`${gi}/api/system/kos/localization`});if((t==null?void 0:t.status)!==200)throw new Error(`Failed to get localization descriptor ${t==null?void 0:t.status}`);return t.data},bd=t=>async()=>{$s.debug(`Getting KOS localization descriptor for context: ${t}`);const e=await md({urlOverride:`${gi}/api/kos/localization/contexts`});if((e==null?void 0:e.status)!==200)throw new Error(`Failed to get KOS localization descriptor ${e==null?void 0:e.status}`);return e.data[t]},vd="langResolver";var Kw=Object.getOwnPropertyDescriptor,qw=(t,e,s,r)=>{for(var o=r>1?void 0:r?Kw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const fs="translation-model";function zw(t){const e=typeof t=="string",s=e?!1:!!(t!=null&&t.data)&&typeof(t==null?void 0:t.data)!="string",r=e?t:t==null?void 0:t.defaultValue,o=e||t==null?void 0:t.context,n=e?void 0:s?t==null?void 0:t.data:t;return{isBasicOptions:e,defaultValue:r,context:o,data:n}}function wd(t,e=""){return Object.keys(t).reduce((s,r)=>{const o=e?`${e}.${r}`:r;if(typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])){const n=wd(t[r],o);return{...s,...n}}else return{...s,[o]:t[r]}},{})}function Ed(t,e){const s={...t};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(typeof e[r]=="object"&&e[r]!==null&&typeof t[r]=="object"&&t[r]!==null?s[r]=Ed(t[r],e[r]):s[r]=e[r]);return s}const Xo=(t,e)=>{const s=/__(.*?)__/g,r=t.replace(s,(o,n)=>Object.prototype.hasOwnProperty.call(e||{},n.trim())?e==null?void 0:e[n.trim()]:o);return r===t?r:s.test(r)?Xo(r,e):r},lr=(t,e,s)=>{const r=/{{(.*?)}}/g,n=Xo(t,e).replace(r,(a,c)=>{const u=c.trim();if(Object.prototype.hasOwnProperty.call(s||{},u))return s==null?void 0:s[u];if(u.includes(".")){const d=u.split(".");let h=s;for(const f of d)if(h&&typeof h=="object"&&Object.prototype.hasOwnProperty.call(h,f))h=h[f];else return a;return h}return a});return Xo(n,e)},Ma=(t,e)=>{if(e.includes(":")){const[s,r]=e.split(":");return{namespace:s,key:r}}else return{namespace:t,key:e}};let Zo=class{constructor(t,e,s){l(this,"id");l(this,"namespace");l(this,"descriptor");l(this,"defaultLocale");l(this,"currentLocale");l(this,"bundleResolver");l(this,"data");l(this,"logger");l(this,"resolver");l(this,"disposer");l(this,"context");l(this,"rootUrl");this.id=t,this.defaultLocale=e.defaultLocale||"en",this.currentLocale=e.currentLocale||"en",this.namespace=e.namespace,this.descriptor=e.descriptor,this.rootUrl=e.rootUrl,this.data={},this.resolver=e.resolver||s.kosContext.get(vd),this.bundleResolver=e.bundleResolver,this.logger=s.logger,this.context=s.kosContext.parentModel}getTranslationLocales(t){const e=this.descriptor[t];if(!t||!e)return[this.defaultLocale];if(!this.defaultLocale&&!e.fallbacks)return[t];let s=e.fallbacks||[this.defaultLocale];return s.includes(t)||(s=[t,...s]),s}async loadTranslations(){const t=this.getTranslationLocales(this.currentLocale).reverse(),e=t.map(r=>{if(this.bundleResolver){const o=W.getContext(this.id);return this.bundleResolver(this.namespace,r,o)}try{const o=this.resolver(this.namespace,r);return yd(o,this.rootUrl)}catch{return Promise.resolve({})}}),s=await Promise.allSettled(e);ee(()=>{const r=s.reduce((o,n,i)=>(n.status==="fulfilled"?(this.logger.debug(`resolved ${t[i]}`,n.value),n.value&&(o=Ed(o,n.value))):this.logger.error(`failed to load translation ${this.id} for ${t[i]}`),o),{});this.data=wd(r)})}async init(){this.logger.debug(`initializing translation ${this.id}`)}exists(t){const{namespace:e,key:s}=Ma(this.namespace,t);if(e!==this.namespace){const r=this.context.getModel(e);return r?r.exists(s):!1}return!!this.data[s]}resolveKey(t,e){if(!t)return this.logger.debug("key is empty"),"";const{defaultValue:s,context:r,data:o}=zw(e),{namespace:n,key:i}=Ma(this.namespace,t),a=`${i}_${r}`;if(n!==this.namespace){const c=this.context.getModel(n);return c?c.resolveKey(i,e):s??i}if(r&&this.data[a]){const c=this.data[a];return Array.isArray(c)?c.map(u=>lr(u,this.data,o)):lr(this.data[a],this.data,o)}if(this.data[i]){const c=this.data[i];return Array.isArray(c)?c.map(u=>lr(u,this.data,o)):lr(this.data[i],this.data,o)}return s??i}unload(){this.logger.debug(`unloading translation ${this.id}`),this.disposer&&this.disposer()}async load(){this.logger.debug(`loading translation ${this.id}`),await this.loadTranslations()}async ready(){this.logger.debug(`ready translation ${this.id}`),this.disposer=E.reaction(()=>this.currentLocale,(t,e)=>{this.logger.info(`translation langs for namespace ${this.id} changed from ${e} to ${t}`),this.loadTranslations()})}};Zo=qw([Jr(),R(fs)],Zo);const Fr={registration:{[fs]:{class:Zo,singleton:!1}},type:fs,predicate:Ie(fs),factory:le.Factory.create(fs)};var Vw=Object.defineProperty,Gw=Object.getOwnPropertyDescriptor,Md=(t,e,s,r)=>{for(var o=r>1?void 0:r?Gw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Vw(e,s,o),o};const ps="translation-container-model",Yw=(t,e="/")=>t.join(e).replace(new RegExp(e+"{1,}","g"),e);function Ww(t,e){const s=this.descriptor.namespaces[t];if(!s)throw new Error("namespace "+t+" not found in descriptor");const r=s.basePath,o=s.locales[e].file;return Yw([r,o])}let Nr=class{constructor(t,e,s){l(this,"id");l(this,"lang");l(this,"rootUrl");l(this,"descriptor");l(this,"_defaultNamespace");l(this,"resolver");l(this,"logger");l(this,"descriptorUrl");l(this,"namespaces",[]);l(this,"_models");this.id=t,this.lang=e.lang||"en",this.descriptor=e.descriptor,this._defaultNamespace=e.defaultNamespace,this.descriptorUrl=e.descriptorUrl,this.rootUrl=e.rootUrl,this.resolver=e.resolver||Ww.bind(this),s.kosContext.set(vd,this.resolver),this.logger=s.logger,this._models=new ke({parentId:t})}set currentLocale(t){this.lang=t,this.models.data.forEach(e=>{e.currentLocale=t})}get defaultNamespace(){return this._defaultNamespace?this.getModel("translation-"+this._defaultNamespace):void 0}getModel(t){return this.logger.debug("getting model "+t),this._models.getModel("translation-"+t)}get models(){return this._models}get data(){return this._models.data}async reload(){for(const t of this.namespaces){const e=this.resolveNamespace(t);await pe(e)}}resolveNamespace(t){var s;if((s=this.descriptor.namespaces)==null?void 0:s[t]){const r=Object.keys(this.descriptor.namespaces[t].locales)[0],o=this.descriptor.namespaces[t].locales[r].defaultLocale,n=Fr.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:o,descriptor:this.descriptor.namespaces[t].locales,resolver:this.resolver});return this.addModel(n),this.namespaces.includes(t)||ee(()=>{this.namespaces.push(t)}),n}else{this.logger.warn("namespace "+t+" not found in descriptor");const r=Fr.factory("translation-"+t)({kosParentId:this.id,namespace:t,rootUrl:this.rootUrl,currentLocale:this.lang,defaultLocale:this.lang,descriptor:{},resolver:this.resolver});return this.addModel(r),r}}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug("initializing translation-container container "+this.id)}async load(){this.logger.debug("loading translation-container container "+this.id)}};Md([Pe],Nr.prototype,"_models",2);Nr=Md([R(ps)],Nr);const qe={registration:{[ps]:{class:Nr,singleton:!0}},type:ps,predicate:Ie(ps),factory:le.Singleton.create(ps)},Qw={set(t,e){const s=W.getContext(qe.type);s&&s.set(t,e)},get(t){const e=W.getContext(qe.type);return e==null?void 0:e.get(t)}},Td={async init(t){const e=qe.factory(t);return await pe(e),{translations:e}}};function Xw(t){return(t==null?void 0:t.troubles)!==void 0&&(t==null?void 0:t.troubles)instanceof Array&&(t==null?void 0:t.troublesByType)!==void 0&&typeof(t==null?void 0:t.troublesByType)=="object"}const _d="kos-ws-event",mi=Xt(_d);var Zw=Object.defineProperty,Jw=Object.getOwnPropertyDescriptor,yi=(t,e,s,r)=>{for(var o=r>1?void 0:r?Jw(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&Zw(e,s,o),o};const eE=({headers:t,body:e})=>Object.entries(t).map(([r,o])=>`${r}:${o}`).join("\\n")+"\\n\\n"+e;exports.WsEventModel=class{constructor(e){l(this,"id");l(this,"events");l(this,"_topicMap");this.id=e,this.events=E.observable.map(new Map),this._topicMap=new Map}get websocketEvents(){return Array.from(this.events.values())}handleSendEvent(e,s){this.processEvent(s,!0)}handleReceiveEvent(e,s){this.processEvent(s)}processEvent(e,s=!1){g.debug("kos event received");const{body:r,headers:o}=e.body,n=o["request-id"]||o["response-id"],i=o["request-id"]||o["response-id"]||o.topic||o.type;if(i){let a=i;if(n)a=`${a}-${s?"send":"receive"}`;else{const u=this._topicMap.get(i)||0;a=`${a}-${u+1}`,this._topicMap.set(i,u+1)}const c={msgId:a,content:r,headers:o,timestamp:Date.now(),raw:eE({headers:o,body:r}),direction:s?"send":"receive",mocked:!!o.mocked};this.events.set(a,c),g.debug(`logged ${this.events.size} events`)}}};yi([B({topic:[Ks.SEND]})],exports.WsEventModel.prototype,"handleSendEvent",1);yi([B({topic:[Ks.RECEIVED]})],exports.WsEventModel.prototype,"handleReceiveEvent",1);exports.WsEventModel=yi([R(mi.type)],exports.WsEventModel);const Ta=be(),tE=Ta.debug==="true"||Ta.debug===!0,sE="/api/system/canvas",Sd=async(t,e)=>{const s=e||sE,r=`${exports.BASE_URL}${s}`;await exports.kosFetch(r,{method:"POST",headers:{hide:tE?"false":"true"},body:t})},rE=Object.freeze(Object.defineProperty({__proto__:null,sendCanvasData:Sd},Symbol.toStringTag,{value:"Module"}));function _a(t,e,s){{const r=t.filter((o,n)=>n%4!==3);return btoa(String.fromCharCode(...r))}}var oE=Object.defineProperty,nE=Object.getOwnPropertyDescriptor,Od=(t,e,s,r)=>{for(var o=r>1?void 0:r?nE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&oE(e,s,o),o};const Id="canvas-renderer-model";function ko(t){return typeof t.onDone=="function"}let Ur=class{constructor(t,e,s){l(this,"id");l(this,"router");l(this,"logger");l(this,"_renderer",null);l(this,"_clearOnComplete");l(this,"isStreaming",!1);l(this,"renderLoopId",null);l(this,"sendIntervalId",null);l(this,"timeoutId",null);l(this,"apiPath");l(this,"endpointName");l(this,"width",50);l(this,"height",30);l(this,"fps",10);l(this,"durationMs",null);l(this,"_onFrame",null);this.id=t,this.logger=s.logger,this.width=e.width??50,this.height=e.height??30,this.fps=e.fps??10,this.durationMs=e.durationMs??null,this.apiPath=e.apiPath??"/api/system/canvas",this.endpointName=e.endpoint}set onFrame(t){this._onFrame=t}set renderer(t){var e,s;this._renderer&&(this.stopStreaming(),(s=(e=this._renderer).dispose)==null||s.call(e)),this._renderer=t,this.isStreaming&&this.startStreaming()}setClearOnComplete(t){this._clearOnComplete=t}sendDataFrame(t,e){Sd(t,e)}checkStreaming(){if(this.isOneShotDone()||!this.isStreaming){requestAnimationFrame(()=>{const t=this.isOneShotDone();this.stopStreaming(!t)});return}}handleFrame(t){var s;const e=_a(t);this.sendDataFrame(e,this.apiPath),(s=this._onFrame)==null||s.call(this,e)}stopStreaming(t=!0){var e,s;this.logger.debug(`stopStreaming called with clearCanvas=${t}`),this.isStreaming=!1,this.renderLoopId&&cancelAnimationFrame(this.renderLoopId),this.sendIntervalId&&clearInterval(this.sendIntervalId),this.timeoutId&&clearTimeout(this.timeoutId),(s=(e=this._renderer)==null?void 0:e.pause)==null||s.call(e),t&&(this.logger.debug("Clearing canvas..."),this.clearCanvas())}clearCanvas(){var s;const t=this.width>0?this.width:50,e=this.height>0?this.height:30;if(t>0&&e>0){const r=t*e*4,o=new Uint8ClampedArray(r);for(let i=3;i<r;i+=4)o[i]=255;const n=_a(o);this.logger.debug(`Sending clear frame: ${t}x${e}, apiPath: ${this.apiPath}`),this.sendDataFrame(n,this.apiPath),(s=this._onFrame)==null||s.call(this,n)}}isOneShotDone(){var t,e;return ko(this._renderer)&&((e=(t=this._renderer).isOneShot)==null?void 0:e.call(t))===!0&&this._renderer.isOneShotDone}startStreaming(){var t,e,s,r;{if(!this._renderer)return;if(!this.apiPath){this.logger.error(`No endpoint configured for canvas renderer ${this.id}`);return}this.isStreaming=!0,this._renderer.reset(),(e=(t=this._renderer).play)==null||e.call(t);const o=ko(this._renderer);ko(this._renderer)&&this._renderer.onDone(()=>{var c,u,d;this.logger.debug(`Renderer completed for ${this.id}`),K("/canvas/renderer/completed",{endpoint:this.endpointName,rendererId:this.id,rendererType:(c=this._renderer)==null?void 0:c.constructor.name,timestamp:Date.now()});let a=!0;this._clearOnComplete!==void 0?a=this._clearOnComplete:a=!(((d=(u=this._renderer)==null?void 0:u.isOneShot)==null?void 0:d.call(u))??!1),this.stopStreaming(a)}),this._renderer.renderFrame(this.width,this.height);const n=(r=(s=this._renderer).readPixels)==null?void 0:r.call(s,this.width,this.height);if(n&&this._onFrame&&this.handleFrame(n),this.isOneShotDone()){requestAnimationFrame(()=>{this.stopStreaming(!1)});return}const i=()=>{var a;(a=this._renderer)==null||a.renderFrame(this.width,this.height),this.renderLoopId=requestAnimationFrame(i)};this.renderLoopId=requestAnimationFrame(i),this.sendIntervalId=setInterval(()=>{var c,u;const a=(u=(c=this._renderer)==null?void 0:c.readPixels)==null?void 0:u.call(c,this.width,this.height);a&&this._onFrame&&(this.handleFrame(a),this.checkStreaming())},1e3/this.fps),!o&&this.durationMs!=null&&(this.timeoutId=setTimeout(()=>{this.stopStreaming()},this.durationMs))}}async init(){this.logger.debug(`initializing canvas-renderer ${this.id}`)}async load(){this.logger.debug(`loading canvas-renderer ${this.id}`),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/stop`,async(t,e)=>{this.logger.debug(`HTTP stop endpoint called for ${this.endpointName}`),this.stopStreaming(),e.send({status:"OK"})}),this.router.use("POST",`/api/ui/canvas/${this.endpointName}/start`,async(t,e)=>{this.startStreaming(),e.send({status:"OK"})})}};Od([Wt({modelType:ei.type})],Ur.prototype,"router",2);Ur=Od([R(Id)],Ur);const bi=new ve({class:Ur,type:Id});class $d{constructor({src:e}){l(this,"video");l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);l(this,"doneCallback",null);this.video=document.createElement("video"),this.video.src=e,this.video.crossOrigin="anonymous",this.video.muted=!0,this.video.loop=!1,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");this.ctx=s,this.handleEnded=this.handleEnded.bind(this),this.video.addEventListener("ended",this.handleEnded)}handleEnded(){this.doneCallback&&this.doneCallback()}reset(){this.video.pause(),this.video.currentTime=0,this.lastUpdate=performance.now()}play(){this.video.play().catch(console.warn)}pause(){this.video.pause()}renderFrame(e,s){this.canvas.width=e,this.canvas.height=s,this.video.readyState>=2&&this.ctx.drawImage(this.video,0,0,e,s)}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}onDone(e){this.doneCallback=e}dispose(){this.video.pause(),this.video.removeAttribute("src"),this.video.load(),this.video.remove(),this.video.removeEventListener("ended",this.handleEnded),this.doneCallback=null}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}}class iE{constructor(){l(this,"canvas");l(this,"gl");l(this,"lastWidth",0);l(this,"lastHeight",0);l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("webgl");if(!e)throw new Error("WebGL not supported");this.gl=e}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e=this.lastWidth,s=this.lastHeight){const r=new Uint8Array(e*s*4);this.gl.readPixels(0,0,e,s,this.gl.RGBA,this.gl.UNSIGNED_BYTE,r);const o=new Uint8ClampedArray(r.length);for(let n=0;n<s;n++){const i=n*e*4,a=(s-1-n)*e*4;o.set(r.subarray(i,i+e*4),a)}return o}}class aE extends iE{constructor({speedPx:s=1}={}){super();l(this,"program");l(this,"posBuffer");l(this,"aPosition");l(this,"uMinHue");l(this,"uMaxHue");l(this,"uHueOffset");l(this,"uGridHeight");l(this,"minHue",0);l(this,"maxHue",80);l(this,"hueOffset",0);l(this,"speedPx",1);this.speedPx=s;const r=this.gl,o=`
|
|
111
111
|
attribute vec2 a_position;
|
|
112
112
|
void main() {
|
|
113
113
|
gl_Position = vec4(a_position, 0, 1);
|
|
@@ -141,8 +141,8 @@ ${u}topics:${e}
|
|
|
141
141
|
vec3 rgb = hslToRgb(hue, 1.0, 0.5);
|
|
142
142
|
gl_FragColor = vec4(rgb, 1.0);
|
|
143
143
|
}
|
|
144
|
-
`,i=this.compileShader(r.VERTEX_SHADER,o),a=this.compileShader(r.FRAGMENT_SHADER,n);this.program=this.createProgram(i,a),this.posBuffer=r.createBuffer(),r.bindBuffer(r.ARRAY_BUFFER,this.posBuffer),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),r.STATIC_DRAW),this.aPosition=r.getAttribLocation(this.program,"a_position"),this.uMinHue=r.getUniformLocation(this.program,"minHue"),this.uMaxHue=r.getUniformLocation(this.program,"maxHue"),this.uHueOffset=r.getUniformLocation(this.program,"hueOffset"),this.uGridHeight=r.getUniformLocation(this.program,"gridHeight")}reset(){this.hueOffset=0,this.lastUpdate=performance.now()}renderFrame(s,r){const o=this.gl;if(this.canvas.width=s,this.canvas.height=r,this.shouldStep(50)){const n=this.speedPx/r;this.hueOffset=(this.hueOffset+n)%1}o.viewport(0,0,s,r),o.clear(o.COLOR_BUFFER_BIT),o.useProgram(this.program),o.enableVertexAttribArray(this.aPosition),o.bindBuffer(o.ARRAY_BUFFER,this.posBuffer),o.vertexAttribPointer(this.aPosition,2,o.FLOAT,!1,0,0),o.uniform1f(this.uMinHue,this.minHue/360),o.uniform1f(this.uMaxHue,this.maxHue/360),o.uniform1f(this.uHueOffset,this.hueOffset),o.uniform1f(this.uGridHeight,r),o.drawArrays(o.TRIANGLES,0,6)}compileShader(s,r){const o=this.gl.createShader(s);if(this.gl.shaderSource(o,r),this.gl.compileShader(o),!this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS))throw new Error(this.gl.getShaderInfoLog(o)||"Shader compile failed");return o}createProgram(s,r){const o=this.gl.createProgram();if(this.gl.attachShader(o,s),this.gl.attachShader(o,r),this.gl.linkProgram(o),!this.gl.getProgramParameter(o,this.gl.LINK_STATUS))throw new Error("Program linking failed");return o}}class _t{constructor(){l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("2d");if(!e)throw new Error("2D canvas not supported");this.ctx=e}dispose(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove()}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}}function Oi(t){class e extends t{constructor(){super(...arguments);l(this,"doneCallback",null);l(this,"oneShotDone",!1)}isOneShot(){return!0}onDone(o){this.doneCallback=o}signalDoneIfNeeded(){var o;this.oneShotDone||((o=this.doneCallback)==null||o.call(this),this.oneShotDone=!0)}resetOneShot(){this.doneCallback=null,this.oneShotDone=!1}get isOneShotDone(){return this.oneShotDone}}return e}const jE=Oi(_t);class BE extends jE{constructor({colors:s=["red","yellow","green"],direction:r="horizontal",speed:o=2,loop:n=!0}={}){super();l(this,"offset",0);l(this,"speed");l(this,"colors");l(this,"direction");l(this,"loop");this.colors=s,this.direction=r,this.speed=o,this.loop=n}reset(){this.offset=0,this.lastUpdate=performance.now(),this.loop||this.resetOneShot()}renderFrame(s,r){if(!this.loop&&this.isOneShotDone)return;this.loop&&this.shouldStep(50)&&(this.offset+=this.speed);const o=this.loop?-this.offset:0,n=this.loop?s*2-this.offset:s,i=this.ctx.createLinearGradient(o,0,n,0),a=1/(this.colors.length-1);this.colors.forEach((c,u)=>{i.addColorStop(u*a,c)}),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,s,r),!this.loop&&!this.isOneShotDone&&this.signalDoneIfNeeded()}}const HE=Oi(_t);class Ud extends HE{constructor({src:s}){super();l(this,"img");l(this,"loaded",!1);this.img=new Image,this.img.src=s,this.img.crossOrigin="anonymous",this.img.onload=()=>{this.loaded=!0}}reset(){this.resetOneShot()}renderFrame(s,r){!this.loaded||this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.drawImage(this.img,0,0,s,r),this.signalDoneIfNeeded())}}class KE extends Nd{constructor(s){super(s);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"startTime");l(this,"endTime");l(this,"completionCallback",null);this.loopConfig=s.loop??!1,this.startTime=s.startTime??0,this.endTime=s.endTime??null,this.video.removeEventListener("ended",this.handleEnded),this.video.addEventListener("ended",this.handleVideoEnd.bind(this)),this.startTime>0&&(this.video.currentTime=this.startTime),this.endTime!==null&&this.video.addEventListener("timeupdate",this.handleTimeUpdate.bind(this))}handleTimeUpdate(){this.endTime!==null&&this.video.currentTime>=this.endTime&&this.handleVideoEnd()}handleVideoEnd(){this.loopConfig===!0?(this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):(this.video.pause(),this.completionCallback&&this.completionCallback())}reset(){super.reset(),this.currentLoopCount=0,this.video.currentTime=this.startTime}onDone(s){this.completionCallback=s}isOneShot(){return this.loopConfig===!1||this.loopConfig===1}dispose(){this.video.removeEventListener("ended",this.handleVideoEnd),this.video.removeEventListener("timeupdate",this.handleTimeUpdate),this.completionCallback=null,super.dispose()}}function qE(t){const e=t.replace("#","");if(!/^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(e))throw new Error(`Invalid hex color: ${t}`);let s,r,o;return e.length===3?(s=parseInt(e[0]+e[0],16),r=parseInt(e[1]+e[1],16),o=parseInt(e[2]+e[2],16)):(s=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),o=parseInt(e.substring(4,6),16)),{r:s,g:r,b:o}}function jd(t){return typeof t=="string"?qE(t):t}function qr(t){const e=jd(t);return`rgb(${e.r},${e.g},${e.b})`}class zE extends _t{constructor(s={}){super();l(this,"columns",[]);l(this,"fallChance");l(this,"speed");l(this,"baseColor");l(this,"trailColors");this.speed=s.speed??1,this.fallChance=s.fallChance??.7,s.baseColor?this.baseColor=jd(s.baseColor):this.baseColor={r:0,g:255,b:255},this.trailColors=this.calculateTrailColors()}calculateTrailColors(){const r=[];for(let o=0;o<=5;o++){const n=1-o/5*.6;r.push({r:Math.floor(this.baseColor.r*n),g:Math.floor(this.baseColor.g*n),b:Math.floor(this.baseColor.b*n)})}return r}reset(){this.columns=[],this.lastUpdate=performance.now()}renderFrame(s,r){this.columns.length!==s&&(this.columns=Array(s).fill(0).map(()=>Math.floor(Math.random()*r))),this.shouldStep(50)&&(this.columns=this.columns.map(i=>i>r+5?0:i+(Math.random()<this.fallChance?this.speed:0)));const o=this.ctx.createImageData(s,r),n=o.data;n.fill(0);for(let i=0;i<r;i++)for(let a=0;a<s;a++){const c=this.columns[a];let u=0,d=0,h=0;if(i===c)u=this.baseColor.r,d=this.baseColor.g,h=this.baseColor.b;else if(i<c&&i>c-this.trailColors.length){const p=c-i;if(p<this.trailColors.length){const g=this.trailColors[p];u=g.r,d=g.g,h=g.b}}const f=(i*s+a)*4;n[f]=u,n[f+1]=d,n[f+2]=h,n[f+3]=255}this.ctx.putImageData(o,0,0)}}class VE{constructor(e,s){l(this,"baseRenderer");l(this,"overlayIcons",new Map);l(this,"overlayConfigs");l(this,"loadedIcons",new Set);l(this,"canvas");l(this,"ctx");l(this,"persistOverlaysOnComplete");l(this,"baseRendererCompleted",!1);l(this,"completionCallback",null);l(this,"hasSignaledCompletion",!1);this.baseRenderer=s(e.baseRenderer.type,e.baseRenderer.data),this.overlayConfigs=e.overlays,this.persistOverlaysOnComplete=e.persistOverlaysOnComplete!==!1,this.canvas=document.createElement("canvas");const r=this.canvas.getContext("2d");if(!r)throw new Error("2D canvas not supported");this.ctx=r,this.loadOverlayImages(),"onDone"in this.baseRenderer&&typeof this.baseRenderer.onDone=="function"&&this.baseRenderer.onDone(()=>{this.baseRendererCompleted=!0,!this.persistOverlaysOnComplete&&this.completionCallback&&this.completionCallback()})}async loadOverlayImages(){for(const e of this.overlayConfigs){const s=new Image;s.crossOrigin="anonymous",s.onload=()=>{this.loadedIcons.add(e.src)},s.onerror=r=>{console.error(`Failed to load overlay image: ${e.src}`,r)},s.src=e.src,this.overlayIcons.set(e.src,s)}}calculateOverlayPosition(e,s,r){let o,n;if(typeof e.position=="string")switch(e.position){case"top-left":o=0,n=0;break;case"top-center":o=(s-e.size)/2,n=0;break;case"top-right":o=s-e.size,n=0;break;case"center-left":o=0,n=(r-e.size)/2;break;case"center":o=(s-e.size)/2,n=(r-e.size)/2;break;case"center-right":o=s-e.size,n=(r-e.size)/2;break;case"bottom-left":o=0,n=r-e.size;break;case"bottom-center":o=(s-e.size)/2,n=r-e.size;break;case"bottom-right":o=s-e.size,n=r-e.size;break;default:o=0,n=0}else o=e.position.x,n=e.position.y;return e.offset&&(o+=e.offset.x||0,n+=e.offset.y||0),{x:o,y:n}}reset(){this.baseRenderer.reset(),this.baseRendererCompleted=!1,this.hasSignaledCompletion=!1}renderFrame(e,s){if(this.canvas.width=e,this.canvas.height=s,this.ctx.clearRect(0,0,e,s),this.baseRendererCompleted&&this.persistOverlaysOnComplete)this.renderOverlays(e,s);else{this.baseRenderer.renderFrame(e,s);const r=this.baseRenderer.readPixels(e,s);if(r&&r.length>0){const o=new ImageData(r,e,s);this.ctx.putImageData(o,0,0)}this.renderOverlays(e,s)}}renderOverlays(e,s){for(const r of this.overlayConfigs){if(!r.persistent&&r.persistent!==void 0)continue;const o=this.overlayIcons.get(r.src);if(!o||!this.loadedIcons.has(r.src))continue;const n=this.calculateOverlayPosition(r,e,s);this.ctx.save(),r.opacity!==void 0&&(this.ctx.globalAlpha=Math.max(0,Math.min(1,r.opacity))),this.ctx.drawImage(o,n.x,n.y,r.size,r.size),this.ctx.restore()}}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}play(){this.baseRenderer.play&&this.baseRenderer.play()}pause(){this.baseRenderer.pause&&this.baseRenderer.pause()}dispose(){this.overlayIcons.clear(),this.loadedIcons.clear(),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove(),this.baseRenderer.dispose&&this.baseRenderer.dispose()}onDone(e){this.completionCallback=e,this.hasSignaledCompletion&&e()}isOneShot(){return this.persistOverlaysOnComplete?!1:"isOneShot"in this.baseRenderer&&typeof this.baseRenderer.isOneShot=="function"?this.baseRenderer.isOneShot():!1}}class Bd extends _t{constructor(s){super();l(this,"img");l(this,"loaded",!1);l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"colorOverride");l(this,"originalSvgData",null);l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);this.img=new Image,this.img.crossOrigin="anonymous",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,this.colorOverride=s.colorOverride,this.colorOverride&&s.src.toLowerCase().includes(".svg")?this.loadAndProcessSvg(s.src):this.img.src=s.src,this.img.onload=()=>{this.loaded=!0},this.img.onerror=r=>{console.error("Failed to load image:",r)}}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(!this.loaded||this.completed)return;if(this.isPaused){this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.ctx.drawImage(this.img,0,0,s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":this.position+=d;break;case"right":this.position+=d;break;case"up":this.position+=d;break;case"down":this.position+=d;break}}this.drawScrollingImage(s,r,o,i),this.checkScrollCompletion(s,r,o,i)}drawScrollingImage(s,r,o,n){var h,f,p,g,v,E,_,R,S;const i=this.img.width/this.img.height;let a,c;((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((g=this.scrollConfig)==null?void 0:g.width)||s,c=((v=this.scrollConfig)==null?void 0:v.height)||r);let u,d;switch(o==="left"||o==="right"?(u=0,((E=this.scrollConfig)==null?void 0:E.offsetY)==="center"||((_=this.scrollConfig)==null?void 0:_.offsetY)===void 0?d=(r-c)/2:d=this.scrollConfig.offsetY):(((R=this.scrollConfig)==null?void 0:R.offsetX)==="center"||((S=this.scrollConfig)==null?void 0:S.offsetX)===void 0?u=(s-a)/2:u=this.scrollConfig.offsetX,d=0),o){case"left":{const O=s-this.position;if(O<s&&O>-a&&this.ctx.drawImage(this.img,O,d,a,c),this.loopConfig&&this.pauseDuration===0&&this.position>n){const L=O+a+n;L<s&&this.ctx.drawImage(this.img,L,d,a,c)}break}case"right":{const O=-a+this.position;if(O>-a&&O<s&&this.ctx.drawImage(this.img,O,d,a,c),this.loopConfig&&this.pauseDuration===0&&O-n-a>-a){const L=O-a-n;L<s&&this.ctx.drawImage(this.img,L,d,a,c)}break}case"up":{const O=r-this.position;if(O>-c&&O<r&&this.ctx.drawImage(this.img,u,O,a,c),this.loopConfig&&this.pauseDuration===0&&O+c+n<r){const L=O+c+n;L>-c&&this.ctx.drawImage(this.img,u,L,a,c)}break}case"down":{const O=-c+this.position;if(O>-c&&O<r&&this.ctx.drawImage(this.img,u,O,a,c),this.loopConfig&&this.pauseDuration===0&&O-n-c>-c){const L=O-c-n;L<r&&this.ctx.drawImage(this.img,u,L,a,c)}break}}}checkScrollCompletion(s,r,o,n){var h,f,p,g,v;if(!this.isPlaying)return;const i=this.img.width/this.img.height;let a,c;switch(((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((g=this.scrollConfig)==null?void 0:g.width)||s,c=((v=this.scrollConfig)==null?void 0:v.height)||r),o){case"left":case"right":this.loopConfig;break;case"up":case"down":this.loopConfig;break}let u=!1;const d=1;switch(o){case"left":u=s-this.position<-a-d;break;case"right":u=-a+this.position>s+d;break;case"up":u=r-this.position<-c-d;break;case"down":u=-c+this.position>r+d;break}u&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}async loadAndProcessSvg(s){try{const o=await(await fetch(s)).text();this.originalSvgData=o;const n=this.applySvgColorOverride(o),i=`data:image/svg+xml;base64,${btoa(n)}`;this.img.src=i}catch(r){console.error("Failed to load and process SVG:",r),this.img.src=s}}applySvgColorOverride(s){if(!this.colorOverride)return s;const r=qr(this.colorOverride);return s.replace(/fill\s*=\s*["'][^"']*["']/gi,`fill="${r}"`).replace(/fill\s*:\s*[^;"]*/gi,`fill:${r}`).replace(/stroke\s*=\s*["'][^"']*["']/gi,`stroke="${r}"`).replace(/stroke\s*:\s*[^;"]*/gi,`stroke:${r}`)}dispose(){this.img.removeAttribute("src"),this.completionCallback=null,this.originalSvgData=null}}class GE extends _t{constructor(s){super();l(this,"text");l(this,"lines");l(this,"fontSize");l(this,"fontFamily");l(this,"lineHeight");l(this,"textColor");l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);l(this,"textWidth",0);l(this,"textHeight",0);l(this,"lineWidths",[]);l(this,"textMeasured",!1);this.text=s.text,this.lines=s.text.split(`
|
|
145
|
-
`),this.fontSize=s.fontSize??8,this.lineHeight=s.lineHeight??this.fontSize+2,this.fontFamily=s.fontFamily??"monospace, 'Lucida Console', 'Courier New', Courier",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,s.color?this.textColor=qr(s.color):this.textColor="rgb(255,255,255)"}measureText(){if(this.textMeasured)return;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.lineWidths=[];let s=0;for(const r of this.lines){const n=this.ctx.measureText(r).width;this.lineWidths.push(n),s=Math.max(s,n)}this.textWidth=s,this.textHeight=this.lines.length*this.lineHeight,this.textMeasured=!0}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0,this.textMeasured=!1,this.lineWidths=[]}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(this.canvas.width=s,this.canvas.height=r,this.measureText(),this.completed)return;if(this.isPaused){this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.drawStaticText(s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":case"right":case"up":case"down":this.position+=d;break}}this.drawScrollingText(s,r,o,i),this.checkScrollCompletion(s,r,o)}drawStaticText(s,r){this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";const o=this.textHeight;let n=(r-o)/2;for(let i=0;i<this.lines.length;i++){const a=this.lines[i],c=this.lineWidths[i],u=(s-c)/2,d=n+i*this.lineHeight;this.ctx.fillText(a,u,d)}}drawScrollingText(s,r,o,n){var c,u,d,h;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";let i,a;o==="left"||o==="right"?(i=0,((c=this.scrollConfig)==null?void 0:c.offsetY)==="center"||((u=this.scrollConfig)==null?void 0:u.offsetY)===void 0?a=(r-this.textHeight)/2:a=this.scrollConfig.offsetY):(((d=this.scrollConfig)==null?void 0:d.offsetX)==="center"||((h=this.scrollConfig)==null?void 0:h.offsetX)===void 0?(i=s/2,this.ctx.textAlign="center"):(i=this.scrollConfig.offsetX,this.ctx.textAlign="left"),a=0),this.drawMultiLineScrollText(o,s,r,n,i,a)}drawMultiLineScrollText(s,r,o,n,i,a){switch(s){case"left":{const c=r-this.position;if(c<r&&c>-this.textWidth&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&this.position>n){const u=c+this.textWidth+n;u<r&&this.drawTextBlock(u,a,"left")}break}case"right":{const c=-this.textWidth+this.position;if(c>-this.textWidth&&c<r&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textWidth>-this.textWidth){const u=c-this.textWidth-n;u<r&&this.drawTextBlock(u,a,"left")}break}case"up":{const c=o-this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c+this.textHeight+n<o){const u=c+this.textHeight+n;u>-this.textHeight&&this.drawTextBlock(i,u,"center")}break}case"down":{const c=-this.textHeight+this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textHeight>-this.textHeight){const u=c-this.textHeight-n;u<o&&this.drawTextBlock(i,u,"center")}break}}}drawTextBlock(s,r,o){for(let n=0;n<this.lines.length;n++){const i=this.lines[n],a=this.lineWidths[n];let c;o==="center"?c=s-a/2:c=s;const u=r+n*this.lineHeight;this.ctx.fillText(i,c,u)}}checkScrollCompletion(s,r,o){if(!this.isPlaying)return;let n=!1;const i=1;switch(o){case"left":n=s-this.position<-this.textWidth-i;break;case"right":n=-this.textWidth+this.position>s+i;break;case"up":n=r-this.position<-this.textHeight-i;break;case"down":n=-this.textHeight+this.position>r+i;break}n&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}dispose(){this.completionCallback=null}}class YE{constructor(e){l(this,"patterns");l(this,"currentPatternIndex",0);l(this,"currentRenderer",null);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"transitionDuration");l(this,"patternOverrides");l(this,"completionCallback",null);l(this,"patternStore");l(this,"canvas");l(this,"ctx");l(this,"width",0);l(this,"height",0);this.patterns=e.patterns,this.loopConfig=e.loop??!1,this.transitionDuration=e.transitionDuration??0,this.patternOverrides=e.patternOverrides??{},this.patternStore=e.patternStore??new Map,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");if(this.ctx=s,this.patterns.length===0)throw new Error("SequenceRenderer requires at least one pattern");this.loadCurrentPattern()}loadCurrentPattern(){var n,i,a,c;const e=this.patterns[this.currentPatternIndex],s=this.patternStore.get(e);if(!s){console.warn(`Pattern "${e}" not found in store, skipping`),this.moveToNextPattern();return}this.currentRenderer&&((i=(n=this.currentRenderer).dispose)==null||i.call(n));const r=this.patternOverrides[e]??{},o={...s.data,...r};try{this.currentRenderer=zr({mode:s.type,data:o}),this.currentRenderer&&this.isDoneAware(this.currentRenderer)&&this.currentRenderer.onDone(()=>{this.handlePatternComplete()}),this.currentRenderer&&(this.currentRenderer.reset(),(c=(a=this.currentRenderer).play)==null||c.call(a),this.width>0&&this.height>0&&this.currentRenderer.renderFrame(this.width,this.height))}catch(u){console.error(`Failed to create renderer for pattern "${e}":`,u),this.moveToNextPattern()}}isDoneAware(e){return typeof(e==null?void 0:e.onDone)=="function"}handlePatternComplete(){this.transitionDuration>0?setTimeout(()=>{this.moveToNextPattern()},this.transitionDuration):this.moveToNextPattern()}moveToNextPattern(){this.currentPatternIndex++,this.currentPatternIndex>=this.patterns.length?this.loopConfig===!0?(this.currentPatternIndex=0,this.loadCurrentPattern()):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.currentPatternIndex=0,this.loadCurrentPattern()):this.completionCallback&&this.completionCallback():this.loadCurrentPattern()}reset(){this.currentPatternIndex=0,this.currentLoopCount=0,this.loadCurrentPattern()}play(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.play)==null||s.call(e)}pause(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.pause)==null||s.call(e)}renderFrame(e,s){this.width=e,this.height=s,this.canvas.width=e,this.canvas.height=s,this.currentRenderer&&this.currentRenderer.renderFrame(e,s)}readPixels(e,s){return this.currentRenderer?this.currentRenderer.readPixels(e,s):this.ctx.getImageData(0,0,e,s).data}onDone(e){this.completionCallback=e}isOneShot(){var e,s;return this.loopConfig===!1||this.loopConfig===1?this.patterns.length===1&&this.currentRenderer?((s=(e=this.currentRenderer).isOneShot)==null?void 0:s.call(e))??!1:!0:!1}dispose(){var e,s;this.currentRenderer&&((s=(e=this.currentRenderer).dispose)==null||s.call(e)),this.completionCallback=null}setPatternStore(e){this.patternStore=e,this.patterns.length>0&&this.loadCurrentPattern()}}const WE=Oi(_t);class QE extends WE{constructor(s={r:0,g:0,b:0}){super();l(this,"color");let r;s.color!==void 0?r=s.color:s.r!==void 0&&s.g!==void 0&&s.b!==void 0?r={r:s.r,g:s.g,b:s.b}:r={r:0,g:0,b:0},this.color=qr(r)}setColor(s){this.color=qr(s),this.resetOneShot()}reset(){this.resetOneShot()}renderFrame(s,r){this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.fillStyle=this.color,this.ctx.fillRect(0,0,s,r),this.signalDoneIfNeeded())}}class ZE extends _t{constructor({minHue:s=0,maxHue:r=360,speed:o=1}={}){super();l(this,"offset",0);l(this,"minHue");l(this,"maxHue");l(this,"speed");this.minHue=s,this.maxHue=r,this.speed=o}reset(){this.offset=0,this.lastUpdate=performance.now()}hslToRgb(s,r,o){let n,i,a;if(r===0)n=i=a=o;else{const c=(h,f,p)=>(p<0&&(p+=1),p>1&&(p-=1),p<.16666666666666666?h+(f-h)*6*p:p<.5?f:p<.6666666666666666?h+(f-h)*(.6666666666666666-p)*6:h),u=o<.5?o*(1+r):o+r-o*r,d=2*o-u;n=c(d,u,s+1/3),i=c(d,u,s),a=c(d,u,s-1/3)}return[Math.round(n*255),Math.round(i*255),Math.round(a*255)]}renderFrame(s,r){this.shouldStep(50)&&(this.offset=(this.offset+this.speed)%s);const o=this.ctx.createImageData(s,r),n=o.data;let i=0;for(let a=0;a<r;a++)for(let c=0;c<s;c++){const u=(c+this.offset)%s/s,d=this.minHue/360+u*((this.maxHue-this.minHue)/360),[h,f,p]=this.hslToRgb(d,1,.5);n[i++]=h,n[i++]=f,n[i++]=p,n[i++]=255}this.ctx.putImageData(o,0,0)}}const Ra=new Map;Ws(re,{register(t,e){Ra.set(t,e)},execute(t,e){const s=Ra.get(t);return s?new s(e):null}});$.canvas.registerRenderer("video",KE);$.canvas.registerRenderer("video-basic",Nd);$[re].register("image-static",Ud);$[re].register("image-scrolling",Bd);const XE=class{constructor(t){var e;return(e=t.scroll)!=null&&e.enabled?new Bd(t):new Ud(t)}};$[re].register("image",XE);$[re].register("color",QE);$[re].register("matrix",zE);$[re].register("sweep",ZE);$[re].register("gradient",BE);$[re].register("drop",UE);$[re].register("sequence",YE);$[re].register("text",GE);const JE=class{constructor(t){const e=(s,r)=>{const o=zr({mode:s,data:r});if(!o)throw new Error(`Failed to create renderer of type: ${s}`);return o};return new VE(t,e)}};$[re].register("overlay",JE);const zr=({mode:t,data:e})=>{const s=$[re].execute(t,e);if(s)return s;throw new Error(`Unknown mode: ${t}`)};var eM=Object.defineProperty,tM=Object.getOwnPropertyDescriptor,cs=(t,e,s,r)=>{for(var o=r>1?void 0:r?tM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&eM(e,s,o),o};const Hd="canvas-dispatcher-model";function sM(t){if(t=t.replace(/^#/,""),t.length===3&&(t=t.split("").map(s=>s+s).join("")),t.length!==6)return null;const e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:e&255}}let st=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_content",new Map);l(this,"_patterns",new Map);l(this,"_endpointRenderers");l(this,"pattern");l(this,"data");this.id=t,this.logger=s.logger,this._endpointRenderers=new Fe}addNamedEndpoint(t,e){this._endpointRenderers.getModel(t)&&this.logger.warn(`Endpoint "${t}" already exists. Overwriting.`);const s=Si.instance(t).options({apiPath:e.apiPath,width:e.width,height:e.height,fps:e.fps,durationMs:e.durationMs??null,endpoint:t}).build();return this._endpointRenderers.addModel(s),s}addContent(t,e){this._content.has(t)&&this.logger.warn(`Content "${t}" already exists. Overwriting.`),this._content.set(t,e)}addPattern(t,e){this._patterns.has(t)&&this.logger.warn(`Pattern "${t}" already exists. Overwriting.`),this._patterns.set(t,e)}async handlePatternsPost(t,e){var o,n;const s=t.body,r=Array.isArray(s)?s:[s];if(r.some(i=>!i.id||!i.type||!i.data)){(o=e.status)==null||o.call(e,400).send({error:"Invalid pattern data"});return}for(const i of r)this._patterns.has(i.id)&&this.logger.warn(`Pattern "${i.id}" already exists. Overwriting.`),this.addPattern(i.id,i);(n=e.status)==null||n.call(e,200).send({status:"OK"})}async handlePatternApplication(t,e){var u,d,h;const s=t.params.pattern,r=t.params.endpoint,o=this._endpointRenderers.getModel(r);if(!o){(u=e.status)==null||u.call(e,404).send({error:`Endpoint "${r}" not found`});return}if(!this._patterns.has(s)){(d=e.status)==null||d.call(e,404).send({error:`Pattern "${s}" not found`});return}const n=this._patterns.get(s),i=n.type,a=t.body||{};this.data={...n.data,...a};const c=i==="sequence"?{...this.data,patternStore:this._patterns}:this.data;o.renderer=zr({mode:i,data:c}),o.setClearOnComplete(n.clearOnComplete),o.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleColorApplication(t,e){var u,d,h;const s=t.params.color,r=sM(s);if(!r){(u=e.status)==null||u.call(e,400).send({error:"Invalid color format"});return}const o=t.params.endpoint,n=this._endpointRenderers.getModel(o);if(!n){(d=e.status)==null||d.call(e,404).send({error:`Endpoint "${o}" not found`});return}const{r:i,b:a,g:c}=r;n.renderer=zr({mode:"color",data:{r:i,g:c,b:a}}),n.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleEndpointCreation(t,e){var r,o;const s=t.body;if(!s.apiPath||!s.id){(r=e.status)==null||r.call(e,400).send({error:"Name and path are required"});return}this.addNamedEndpoint(s.id,s),(o=e.status)==null||o.call(e,200).send({status:"OK"})}async load(t){var s;const e=t==null?void 0:t.get(Yt.loader);e&&((s=e.patterns)==null||s.forEach(r=>{if(!r.id||!r.type||!r.data){this.logger.warn(`Invalid pattern data: ${JSON.stringify(r)}`);return}this.addPattern(r.id,r)}))}};cs([Le],st.prototype,"_endpointRenderers",2);cs([Ys("/api/ui/canvas/patterns")],st.prototype,"handlePatternsPost",1);cs([Ys("/api/ui/canvas/pattern/:endpoint/:pattern")],st.prototype,"handlePatternApplication",1);cs([Ys("/api/ui/canvas/color/:endpoint/:color")],st.prototype,"handleColorApplication",1);cs([Ys("/api/ui/canvas/endpoint")],st.prototype,"handleEndpointCreation",1);st=cs([k(Hd)],st);const Yt=new Ce({class:st,type:Hd}),{URL:Ii}=de(),{getOne:Kd}=ie.build({basePath:`${Ii}/api/device`}),Vr=m.createLogger({name:"device-service",group:"Services"}),qd=async()=>{Vr.debug("sending GET for device serial number");try{const t=await Kd({urlOverride:`${Ii}/api/kos/device/serialNumber`});return[void 0,t==null?void 0:t.data.serialNumber]}catch(t){if(t instanceof z)return Vr.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},zd=async()=>{Vr.debug("sending GET for device details");try{const t=await Kd({urlOverride:`${Ii}/api/kos/device`});return t?[void 0,t.data]:["unknownError",void 0]}catch(t){if(t instanceof z)return Vr.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},rM=Object.freeze(Object.defineProperty({__proto__:null,getDeviceDetails:zd,getSerialNumber:qd},Symbol.toStringTag,{value:"Module"}));var oM=Object.defineProperty,nM=Object.getOwnPropertyDescriptor,Vd=(t,e,s,r)=>{for(var o=r>1?void 0:r?nM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&oM(e,s,o),o};const Gd="device-model",iM="/kos/criticalData/changed",aM="/kos/criticalData/available";let Gr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_serialNumber");l(this,"_name");l(this,"_nodeId");this.id=t,this.logger=s.logger,this._serialNumber="unassigned",this._name="unassigned",this._nodeId="unassigned"}get serialNumber(){return this._serialNumber}get name(){return this._name}get nodeId(){return this._nodeId}get nodeType(){const[t]=this.nodeId.split("-");return t}get nodeName(){const[,t]=this.nodeId.split("-");return t}updateModel(t){this._serialNumber=t.serialNumber??"unassigned",this._name=t.name??"unassigned",this._nodeId=t.nodeId??"unassigned"}async loadDeviceData(){const[t,e]=await zd();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}if(e){const{name:s,nodeId:r}=e;this.updateModel({name:s,nodeId:r,serialNumber:this.serialNumber})}}async loadSerialNumber(){const[t,e]=await qd();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}this.updateModel({serialNumber:e,name:this.name,nodeId:this.nodeId})}async handleCriticalDataChanged(){this.logger.debug(`Critical data changed for device ${this.id}`),await this.loadSerialNumber()}async init(){this.logger.debug(`initializing device ${this.id}`)}async load(){this.logger.debug(`loading device ${this.id}`),await this.loadDeviceData(),await this.loadSerialNumber()}};Vd([B({topic:[iM,aM],websocket:!0})],Gr.prototype,"handleCriticalDataChanged",1);Gr=Vd([k(Gd)],Gr);const Yr=new Ce({class:Gr,type:Gd});var cM=Object.getOwnPropertyDescriptor,lM=(t,e,s,r)=>{for(var o=r>1?void 0:r?cM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Yd="network-interface-model";let ln=class{constructor(t,e,s){l(this,"id");l(this,"name");l(this,"type");l(this,"nmdevicestate");l(this,"hwaddress");l(this,"mtu");l(this,"configured");l(this,"wifi");l(this,"ethernet");l(this,"ip4settings");l(this,"category");l(this,"logger");this.id=t,this.logger=s.logger,this.name=e.name,this.type=e.type,this.nmdevicestate=e.nmdevicestate,this.hwaddress=e.hwaddress,this.mtu=e.mtu,this.configured=e.configured,this.wifi=e.wifi,this.ethernet=e.ethernet,this.ip4settings=e.ip4settings,this.category=e.category}updateModel(t){this.name=t.name,this.type=t.type,this.nmdevicestate=t.nmdevicestate,this.hwaddress=t.hwaddress,this.mtu=t.mtu,this.configured=t.configured,this.wifi=t.wifi,this.ethernet=t.ethernet,this.ip4settings=t.ip4settings,this.category=t.category}async init(){this.logger.debug(`initializing network-interface ${this.id}`)}async load(){this.logger.debug(`loading network-interface ${this.id}`)}};ln=lM([k(Yd)],ln);const $i=new we({class:ln,type:Yd}),{URL:uM}=de(),{getAll:dM}=ie.build({basePath:`${uM}/api/kos/network/interfaces`}),Pa=m.createLogger({name:"network-interface-service",group:"Services"}),Wd=async()=>{Pa.debug("sending GET for copy-logs");try{const t=await dM({});return[void 0,t==null?void 0:t.data]}catch(t){if(t instanceof z)return Pa.error(`Error fetching log file size: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},hM=Object.freeze(Object.defineProperty({__proto__:null,getNetworkInterfaces:Wd},Symbol.toStringTag,{value:"Module"}));var fM=Object.defineProperty,pM=Object.getOwnPropertyDescriptor,Qd=(t,e,s,r)=>{for(var o=r>1?void 0:r?pM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&fM(e,s,o),o};const Zd="network-interface-container-model";let Wr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Fe({parentId:t,indexMap:{byCategory:"category"}})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing network-interface-container container ${this.id}`)}async refreshInterfaces(){this.logger.debug("refreshing interfaces");const[t,e]=await Wd();if(t){this.logger.error(`Error loading network interfaces: ${t}`);return}e&&e.forEach(s=>{const r=$i.instance(s.name).forceUpdate.options(s).build();this.addModel(r)})}async load(){this.logger.debug(`loading network-interface-container container ${this.id}`),this.refreshInterfaces()}};Qd([Le],Wr.prototype,"_models",2);Wr=Qd([k(Zd)],Wr);const Bs=new Ce({class:Wr,type:Zd});Bs.addRelatedModel($i);const{URL:gM}=de(),{getAll:mM}=ie.build({basePath:`${gM}/api/kos/storage/devices`}),ka=m.createLogger({name:"storage-device-service",group:"Services"}),Xd=async()=>{ka.debug("sending GET for storage-device");const t=await mM({});return!(t!=null&&t.data)||t.status!==200?(ka.error("Failed to retrieve storage-device data",t),[]):t.data},yM=Object.freeze(Object.defineProperty({__proto__:null,getStorageDevices:Xd},Symbol.toStringTag,{value:"Module"}));var bM=Object.getOwnPropertyDescriptor,vM=(t,e,s,r)=>{for(var o=r>1?void 0:r?bM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Jd="storage-device-model";let un=class{constructor(t,e,s){l(this,"id");l(this,"mountDir");l(this,"removed");l(this,"vendor");l(this,"runTimeMs");l(this,"model");l(this,"nodeId");l(this,"local");l(this,"label");l(this,"syspath");l(this,"logger");this.id=t,this.logger=s.logger,this.mountDir=e.mountDir,this.removed=e.removed,this.vendor=e.vendor,this.runTimeMs=e.runTimeMs,this.model=e.model,this.nodeId=e.nodeId,this.local=e.local,this.label=e.label,this.syspath=e.syspath}updateModel(t){this.mountDir=t.mountDir,this.removed=t.removed,this.vendor=t.vendor,this.runTimeMs=t.runTimeMs,this.model=t.model,this.nodeId=t.nodeId,this.local=t.local,this.label=t.label,this.syspath=t.syspath}async init(){this.logger.debug(`initializing storage-device ${this.id}`)}async load(){this.logger.debug(`loading storage-device ${this.id}`)}};un=vM([ao(),k(Jd)],un);const Qr=new we({class:un,type:Jd});var wM=Object.defineProperty,EM=Object.getOwnPropertyDescriptor,Ci=(t,e,s,r)=>{for(var o=r>1?void 0:r?EM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&wM(e,s,o),o};const eh="storage-device-container-model",MM="/kos/storage";let Hs=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Fe({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing storage-device-container container ${this.id}`)}get isStorageInserted(){return this.data.length>0}get volumes(){return this.data}handleStorageAvailability(t){this._models.data.filter(s=>!t.find(r=>r.id===s.id)).forEach(s=>{this.removeModel(s.id)}),t.forEach(s=>{const r=this.getModel(s.id);if(r){const o={...s,kosParentId:this.id};r.updateModel(o)}else{const o={...s,kosParentId:this.id},n=Qr.instance(s.id).options(o).build();this.addModel(n)}})}async load(){this.logger.debug(`loading storage-device-container container ${this.id}`),(await Xd()).forEach(e=>{if(e.deviceType!=="disk"){const s={...e,kosParentId:this.id},r=Qr.instance(e.id).options(s).build();this.addModel(r)}})}};Ci([Le],Hs.prototype,"_models",2);Ci([B({topic:MM,websocket:!0})],Hs.prototype,"handleStorageAvailability",1);Hs=Ci([k(eh)],Hs);const Wt=new Ce({class:Hs,type:eh});Wt.addRelatedModel(Qr);const{URL:Di}=de(),{getAll:TM,postModel:_M}=ie.build({basePath:`${Di}/api/kos/update/available`}),La=m.createLogger({name:"usb-update-service",group:"Services"}),th=async()=>{La.debug("sending GET for usb-update");const t=await TM({urlOverride:`${Di}/api/kos/update/available`});return!(t!=null&&t.data)||(t==null?void 0:t.status)!==200?(La.error("Failed to retrieve usb-update data",t),[]):t.data},sh=async(t,e,s)=>{const r=await _M({model:{manifestId:t,deviceId:e},tracker:s,urlOverride:`${Di}/api/kos/update/install`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},SM=Object.freeze(Object.defineProperty({__proto__:null,getAvailableUpdates:th,installUpdate:sh},Symbol.toStringTag,{value:"Module"}));var OM=Object.defineProperty,IM=Object.getOwnPropertyDescriptor,rh=(t,e,s,r)=>{for(var o=r>1?void 0:r?IM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&OM(e,s,o),o};const oh="usb-update-model";let Zr=class{constructor(t,e,s){l(this,"id");l(this,"active");l(this,"blocked");l(this,"createTime");l(this,"deviceId");l(this,"manifestId");l(this,"notes");l(this,"futureHandler");l(this,"logger");this.id=t,this.logger=s.logger,this.active=e.active,this.blocked=e.blocked,this.createTime=e.createTime,this.deviceId=e.deviceId,this.manifestId=e.manifestId,this.notes=e.notes,this.futureHandler=new lo(this)}updateModel(t){this.active=t.active,this.blocked=t.blocked,this.createTime=t.createTime,this.deviceId=t.deviceId,this.manifestId=t.manifestId,this.notes=t.notes}reset(){this.futureHandler.removeFuture()}get future(){return this.futureHandler.future}async install(t){if(!t)throw new Error("No tracker provided");return this.logger.info(`Installing update for manifest ${this.manifestId} from device ${this.deviceId}`),sh(this.manifestId,this.deviceId,t)}async init(){this.logger.debug(`initializing usb-update ${this.id}`)}async load(){this.logger.debug(`loading usb-update ${this.id}`)}};rh([Fi()],Zr.prototype,"install",1);Zr=rh([k(oh)],Zr);const Ai=new we({class:Zr,type:oh});var $M=Object.defineProperty,CM=Object.getOwnPropertyDescriptor,_o=(t,e,s,r)=>{for(var o=r>1?void 0:r?CM(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&$M(e,s,o),o};const nh="usb-update-container-model";let Qt=class{constructor(t,e,s){l(this,"id");l(this,"disposer");l(this,"storageService");l(this,"_activeUpdate");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new Fe({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}get activeUpdate(){return this._activeUpdate}reset(){this.clearActiveUpdate()}clearActiveUpdate(){this._activeUpdate=void 0}updateActiveUpdate(t){this._activeUpdate=t}get isUsbInserted(){return this.storageService.isStorageInserted}get hasAvailableUpdates(){return this._models.data.length>0}async syncAvailableUpdates(){const t=await th();te(()=>{const e=t.map(s=>`${s.deviceId}-${s.manifestId}`);this._models.data.filter(s=>!e.includes(s.id)).forEach(s=>this.removeModel(s.id)),t.forEach(s=>{const r=`${s.deviceId}-${s.manifestId}`,o=Ai.instance(r).forceUpdate.options({...s,createTime:new Date(s.createTime)}).build();this.addModel(o)}),this.data.length===1?this.updateActiveUpdate(this.data[0]):this.clearActiveUpdate()})}usbInsertedEffect(){this.isUsbInserted?this.syncAvailableUpdates():(this._models.clear(),this.clearActiveUpdate())}async init(){this.logger.debug(`initializing usb-update-container container ${this.id}`)}unload(){var t;(t=this.disposer)==null||t.call(this)}async activate(){this.logger.debug(`activating usb-update-container container ${this.id}`),await this.syncAvailableUpdates()}async load(){this.logger.debug(`loading usb-update-container container ${this.id}`)}};_o([Jt({modelType:Wt.type})],Qt.prototype,"storageService",2);_o([Le],Qt.prototype,"_models",2);_o([Fc({dependencies:t=>[t.isUsbInserted]})],Qt.prototype,"usbInsertedEffect",1);Qt=_o([k(nh)],Qt);const Ks=new Ce({class:Qt,type:nh});Ks.addRelatedModel(Ai);const DM=()=>({...{[rs.type]:{class:Ru},[tt.type]:{class:Lu,singleton:!0},...ne.registration,...wt.registration,...Vt.registration,...Br.registration,...Ve.registration,[Ti.type]:{class:exports.WsEventModel,singleton:!0},...js.registration,...Ei.registration,...xr.registration}}),xi=DM(),AM={models:xi,preloadModels:[]},Fa=!0,ih=t=>()=>{const e=xi;return Zc(dn)(Us).model(Vt).model(Wt).model(Ks).model(Yr).model(Fr).model(xs).model(Nr).model(ui).model(Bs).model(Yt).model(Si).model(Gu).model(ai,Fa).model(Js).model(Qu,Fa),Object.keys(e).forEach(s=>{const r=e[s];Qc(dn)(s,r)}),{preload:P.model.preloadModel(t),model:P.model.register(t),companion:P.companion.register(t),legacy:P.model.registerLegacyModel(t)}},Ie={};Ie.core={models:ih(Ie)};Ie.preload=P.model.preloadModel(Ie);Ie.model=P.model.register(Ie);Ie.companion=P.companion.register(Ie);Ie.legacy=P.model.registerLegacyModel(Ie);const dn=Ie;class xM{registerTroubleRankMapper(e,s){return $.propertyMapper.registerPropertyMapper(Se.TroubleRank,e,s),this}registerTroubleRoleMapper(e,s){return $.propertyMapper.registerPropertyMapper(Se.TroubleRole,e,s),this}registerTroubleColorMapper(e,s){return $.propertyMapper.registerPropertyMapper(Se.TroubleColor,e,s),this}registerModelLoader(e,s,r){$.loader.registerLoader(e,s,r)}registerCanvasPatternLoader(e,s){$.loader.registerLoader(Yt.loader,e,s)}}const RM=async(t,e)=>{const s=ui.instance(t).options({}).build(),r=e?`${e}-`:"";return await ge(s),{getState:o=>s.data[`${r}${o}`],updateState:async(o,n)=>{await s.updateState(`${r}${o}`,n)},clean:async()=>{for(const o of s.data.keys)await s.updateState(`${r}${o}`,void 0)},unsubscribe:()=>{Ae(s)}}},ah="kos:service:region",ch="regionId",PM=`${ah}-${ch}`,lh=async t=>{const e=wt.factory(PM)({path:ah,attribute:ch});await ge(e),e.updateProperty(t)};function kM(t){return bt(t)}const Na=Ye(),LM=Object.freeze(Object.defineProperty({__proto__:null,api:Na,default:Na,kosServiceRequest:kM},Symbol.toStringTag,{value:"Module"}));function FM(t){return bt(t)}const Ua=Ye(),NM=Object.freeze(Object.defineProperty({__proto__:null,api:Ua,default:Ua,kosServiceRequest:FM},Symbol.toStringTag,{value:"Module"}));function UM(t){return bt(t)}const ja=Ye(),jM=Object.freeze(Object.defineProperty({__proto__:null,api:ja,default:ja,kosServiceRequest:UM},Symbol.toStringTag,{value:"Module"}));function BM(t){return bt(t)}const Ba=Ye(),HM=Object.freeze(Object.defineProperty({__proto__:null,api:Ba,default:Ba,kosServiceRequest:BM},Symbol.toStringTag,{value:"Module"}));function KM(t){return bt(t)}const Ha=Ye(),qM=Object.freeze(Object.defineProperty({__proto__:null,api:Ha,default:Ha,kosServiceRequest:KM},Symbol.toStringTag,{value:"Module"}));function zM(t){return bt(t)}const Ka=Ye(),VM=Object.freeze(Object.defineProperty({__proto__:null,api:Ka,default:Ka,kosServiceRequest:zM},Symbol.toStringTag,{value:"Module"})),Ri="/kos-timer-event",Pi="/kos-timer-event/tick",ki="defaultTimerEnd",ws=m.createLogger({name:"timer-manager"}),GM=t=>t.updateProperty!==void 0;class uh{constructor(e,s,r){l(this,"name");l(this,"timeout");l(this,"timer");l(this,"state","inactive");l(this,"decrementValue",1);l(this,"remainingTime");l(this,"timeoutActions",new Map);this.name=e;const o=typeof s=="number"?s:s.value||60;this.timeout=o,this.state="inactive",this.remainingTime=o,GM(s)&&Z(()=>{m.info(`Updating config value timer ${e} with new timeout value ${s.value}`);const n=s.value||60;this.updateTimeout(n)}),this.addTimeoutAction({name:ki}),r&&r.forEach(n=>{this.addTimeoutAction(n)})}get id(){return this.name}start(){if(this.state==="active"){ws.debug(`Timer ${this.name} already started`);return}(this.state==="inactive"||this.state==="paused")&&(this.state="active",this.timer=setInterval(()=>this.updateTimer(),1e3))}pause(){this.timer&&(ws.debug(`Pausing timer ${this.name}`),this.state="paused",clearInterval(this.timer))}restart(){this.pause(),this.remainingTime=this.timeout,this.start()}reset(){this.pause(),this.remainingTime=this.timeout,this.state="inactive"}updateTimeout(e){this.timeout=e,this.restart()}addTimeoutAction(e){const s=e.remainingTime??0;this.timeoutActions.has(s)||this.timeoutActions.set(s,[]);const r=e.name,o=this.timeoutActions.get(s).find(n=>n.name===r);o?o.action=e.action:this.timeoutActions.get(s).push(e)}removeTimeoutAction(e){for(const[s,r]of this.timeoutActions.entries()){const o=r.filter(n=>n.name!==e);o.length===0?this.timeoutActions.delete(s):this.timeoutActions.set(s,o)}}updateTimer(){if(this.remainingTime=Math.round((this.remainingTime-this.decrementValue)*100)/100,this.remainingTime<=0){this.state==="active"&&this.executeActions(0),this.pause();return}this.state==="active"&&this.executeActions(this.remainingTime)}executeActions(e){this.timeoutActions.has(e)&&this.timeoutActions.get(e).forEach(s=>{var r;ws.debug(`Executing timer action ${s.name} at ${e}`),(r=s.action)==null||r.call(s,s.name,e),this.notifyTimeoutAction(s),s.singleUse&&(ws.info(`${this.name} Removing single-use action ${s.name}`),this.removeTimeoutAction(s.name))}),this.notifyTick()}notifyTick(){K(`${Pi}/${this.name}`,{name:this.name,remainingTime:this.remainingTime})}notifyTimeoutAction(e){K(Ri,{name:this.name,action:e.name,remainingTime:this.remainingTime})}}const Es=new Map,Ct=(t,e)=>{const s=Es.get(t);if(!s){ws.error(`Timer ${t} not found`);return}e(s)},dh={createRelativeTimer(t,e,s){const r=new Date,o=Math.round((e.getTime()-r.getTime())/1e3);return this.createTimer(t,o,s)},createTimer(t,e=60,s){if(Es.has(t))return Es.get(t);const r=new uh(t,e,s);return Es.set(t,r),r},getTimer(t){return Es.get(t)},clearTimer(t){Ct(t,e=>e.pause())},restartTimer(t){Ct(t,e=>e.restart())},resetTimer(t){Ct(t,e=>e.reset())},addTimeoutAction(t,e){Ct(t,s=>s.addTimeoutAction(e))},removeTimeoutAction(t,e){Ct(t,s=>s.removeTimeoutAction(e))},startTimer(t){Ct(t,e=>e.start())}},hh="kos:service:region:settings",fh="timeZone",YM=`${hh}-${fh}`,hn=async t=>{const e=wt.factory(YM)({path:hh,attribute:fh});await ge(e),e.updateProperty(t)},WM=t=>!t||!t.data;function Li(t,e,s={}){const{alias:r,namespace:o,abortController:n=!1,trackerPolicy:i="id"}=s;return async function(...a){const c=vt();m.debug(`Calling future service ${e} with tracker ${c}`);let u,d;n&&(u=new AbortController);const h=gt.initiateFuture({tracker:c,id:Zn});o&&(h.namespace=o),m.debug(`waiting for future ${h.id} to be ready`),await ge(h),m.debug(`future ${h.id} is ready`),te(()=>{m.debug(`Adding future ${h.id} to futureHandler`),this.futureHandler.addFuture(h,r)}),n&&u&&(d=Z(()=>{(h.status==="CANCELLED"||h.endState===et.Canceled)&&(m.debug(`Future ${h.id} cancelled, aborting request`),u==null||u.abort())}),u.signal.addEventListener("abort",async()=>{if(h.status!=="CANCELLED"&&h.endState!==et.Canceled&&!h.endState){m.debug(`AbortController aborted, cancelling future ${h.id}`);try{await h.cancelFuture()}catch(p){m.error(`Failed to cancel future ${h.id}:`,p)}}},{once:!0}));const f=()=>{d&&(d(),d=void 0)};try{const p=[...a];if(n&&u){const E=p[p.length-1];E&&typeof E=="object"&&"aborted"in E?p[p.length-1]=u.signal:p.push(u.signal)}if(i==="context"){const E=p[p.length-1];if(Rn(E))E.$tracker=c;else{const _={[Gs]:!0,$tracker:c};p.push(_)}}else p.push(c);const g=await t.apply(this,p);m.debug(`received future response for ${c}`,g);const v=WM(g)?g:g==null?void 0:g.data;return v?(v.progress=1,m.debug("mapping future response to future model"),h.endState?m.debug(`future ${h.id} has already completed. Not updating the model`):ni(v,h)):this.futureHandler.removeFuture(r),f(),v}catch(p){if(f(),n&&(u!=null&&u.signal.aborted)){const g=new Error("Operation cancelled");throw m.debug(`Operation ${e} was cancelled`),g}throw m.error(p),p}}}ru(Li);function Fi(t={}){const{alias:e}=t;return(s,r,o)=>{s[xt]=s[xt]||{},e&&(s[Pt]=s[Pt]||new Map,s[Pt].set(r,e));const n=o.value,i=Li(n,r,t);s[xt][r]={handler:i}}}const QM=({path:t})=>(e,s)=>{e[x]=e[x]||{},e[x][s]={modelType:js.type,id:`${js.type}-${t}`,options:{path:t},lifecycle:D.INIT}};function ZM(t){const{path:e,attribute:s}=t;return(r,o)=>{r[x]=r[x]||{},r[x][o]={modelType:Ei.type,id:`${e}-${s}`,options:{path:e,attribute:s},lifecycle:D.INIT}}}const Ft=m.createLogger({name:"services",group:"Services"}),XM=async(t,e)=>ph(t,e,`${exports.BASE_URL}/api/server/login`),ph=async(t,e,s=`${exports.BASE_URL}/api/login`)=>{const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({email:t,password:e})});if(!r.ok){const n=await r.json();throw Error(`${n==null?void 0:n.error}`)}return await r.json()},JM=async t=>gh(t,`${exports.BASE_URL}/api/server/startPasswordReset`,""),gh=async(t,e=`${exports.BASE_URL}/api/startPasswordReset`,s="server")=>{const r=await exports.kosFetch(`${e}?email=${t}`,{method:"POST",destinationAddress:s});if(!r.ok)throw Error(`There was a problem reseting config; returned status ${r.status}`);return await r.json()},eT=async(t,e)=>mh(t,e,`${exports.BASE_URL}/api/server/resetPassword`),mh=async(t,e,s=`${exports.BASE_URL}/api/resetPassword`)=>{Ft.debug(`resetting password with token ${t} and password ${e.replace(/./g,"*")}`);const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e})});if(Ft.debug(`password reset returned status ${r.status}`),!r.ok){Ft.error(`password reset failed with message ${r.statusText}`);const n=await r.json();throw Error(`${n==null?void 0:n.error}:There was a problem resetting the password.`)}return await r.json()},tT=async(t,e,s)=>yh(t,e,s,`${exports.BASE_URL}/api/server/acceptInvite`),yh=async(t,e,s,r=`${exports.BASE_URL}/api/server/acceptInvite`)=>{Ft.debug(`accepting invite with token ${t} and password ${e.replace(/./g,"*")}`);const o=await exports.kosFetch(`${r}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e,name:s})});if(Ft.debug(`invitation accept returned status ${o.status}`),!o.ok){Ft.error(`invite failed with message ${o.statusText}`);const i=await o.json();throw Error(`${i==null?void 0:i.error}:There was a problem accepting the invite.`)}return await o.json()};function sT(t,e,s,r){const o=t instanceof Promise?{promise:t,abortController:e,cancelFuture:s,future:r}:t,{promise:n,abortController:i,cancelFuture:a,future:c}=o,u=n;let d=0,h="PENDING",f=!0;const p=new Set;let g;return c&&typeof c=="object"&&(g=M.autorun(()=>{const v=c.progress||0,E=c.status||"PENDING",_=!c.endState;(v!==d||E!==h||_!==f)&&(d=v,h=E,f=_,p.forEach(R=>{try{R(d,h)}catch(S){console.warn("Progress callback error:",S)}}))})),n.finally(()=>{f=!1,i!=null&&i.signal.aborted||(h="COMPLETED",p.forEach(v=>{try{v(d,h)}catch(E){console.warn("Progress callback error:",E)}})),g&&g(),p.clear()}),u.cancel=async()=>{i&&!i.signal.aborted&&i.abort(),a&&await a(),f=!1,h="CANCELLED",p.forEach(v=>{try{v(d,h)}catch(E){console.warn("Progress callback error:",E)}}),g&&g()},u.getController=()=>i,u.isCancelled=()=>(i==null?void 0:i.signal.aborted)??!1,Object.defineProperty(u,"progress",{get:()=>d,enumerable:!0}),Object.defineProperty(u,"status",{get:()=>h,enumerable:!0}),Object.defineProperty(u,"isRunning",{get:()=>f,enumerable:!0}),u.onProgressUpdate=v=>(p.add(v),v(d,h),()=>p.delete(v)),u}const rT=ut.keyframes`
|
|
144
|
+
`,i=this.compileShader(r.VERTEX_SHADER,o),a=this.compileShader(r.FRAGMENT_SHADER,n);this.program=this.createProgram(i,a),this.posBuffer=r.createBuffer(),r.bindBuffer(r.ARRAY_BUFFER,this.posBuffer),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),r.STATIC_DRAW),this.aPosition=r.getAttribLocation(this.program,"a_position"),this.uMinHue=r.getUniformLocation(this.program,"minHue"),this.uMaxHue=r.getUniformLocation(this.program,"maxHue"),this.uHueOffset=r.getUniformLocation(this.program,"hueOffset"),this.uGridHeight=r.getUniformLocation(this.program,"gridHeight")}reset(){this.hueOffset=0,this.lastUpdate=performance.now()}renderFrame(s,r){const o=this.gl;if(this.canvas.width=s,this.canvas.height=r,this.shouldStep(50)){const n=this.speedPx/r;this.hueOffset=(this.hueOffset+n)%1}o.viewport(0,0,s,r),o.clear(o.COLOR_BUFFER_BIT),o.useProgram(this.program),o.enableVertexAttribArray(this.aPosition),o.bindBuffer(o.ARRAY_BUFFER,this.posBuffer),o.vertexAttribPointer(this.aPosition,2,o.FLOAT,!1,0,0),o.uniform1f(this.uMinHue,this.minHue/360),o.uniform1f(this.uMaxHue,this.maxHue/360),o.uniform1f(this.uHueOffset,this.hueOffset),o.uniform1f(this.uGridHeight,r),o.drawArrays(o.TRIANGLES,0,6)}compileShader(s,r){const o=this.gl.createShader(s);if(this.gl.shaderSource(o,r),this.gl.compileShader(o),!this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS))throw new Error(this.gl.getShaderInfoLog(o)||"Shader compile failed");return o}createProgram(s,r){const o=this.gl.createProgram();if(this.gl.attachShader(o,s),this.gl.attachShader(o,r),this.gl.linkProgram(o),!this.gl.getProgramParameter(o,this.gl.LINK_STATUS))throw new Error("Program linking failed");return o}}class Tt{constructor(){l(this,"canvas");l(this,"ctx");l(this,"lastUpdate",0);this.canvas=document.createElement("canvas");const e=this.canvas.getContext("2d");if(!e)throw new Error("2D canvas not supported");this.ctx=e}dispose(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove()}shouldStep(e){const s=performance.now();return s-this.lastUpdate>=e?(this.lastUpdate=s,!0):!1}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}}function vi(t){class e extends t{constructor(){super(...arguments);l(this,"doneCallback",null);l(this,"oneShotDone",!1)}isOneShot(){return!0}onDone(o){this.doneCallback=o}signalDoneIfNeeded(){var o;this.oneShotDone||((o=this.doneCallback)==null||o.call(this),this.oneShotDone=!0)}resetOneShot(){this.doneCallback=null,this.oneShotDone=!1}get isOneShotDone(){return this.oneShotDone}}return e}const cE=vi(Tt);class lE extends cE{constructor({colors:s=["red","yellow","green"],direction:r="horizontal",speed:o=2,loop:n=!0}={}){super();l(this,"offset",0);l(this,"speed");l(this,"colors");l(this,"direction");l(this,"loop");this.colors=s,this.direction=r,this.speed=o,this.loop=n}reset(){this.offset=0,this.lastUpdate=performance.now(),this.loop||this.resetOneShot()}renderFrame(s,r){if(!this.loop&&this.isOneShotDone)return;this.loop&&this.shouldStep(50)&&(this.offset+=this.speed);const o=this.loop?-this.offset:0,n=this.loop?s*2-this.offset:s,i=this.ctx.createLinearGradient(o,0,n,0),a=1/(this.colors.length-1);this.colors.forEach((c,u)=>{i.addColorStop(u*a,c)}),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,s,r),!this.loop&&!this.isOneShotDone&&this.signalDoneIfNeeded()}}const uE=vi(Tt);class Cd extends uE{constructor({src:s}){super();l(this,"img");l(this,"loaded",!1);this.img=new Image,this.img.src=s,this.img.crossOrigin="anonymous",this.img.onload=()=>{this.loaded=!0}}reset(){this.resetOneShot()}renderFrame(s,r){!this.loaded||this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.drawImage(this.img,0,0,s,r),this.signalDoneIfNeeded())}}class dE extends $d{constructor(s){super(s);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"startTime");l(this,"endTime");l(this,"completionCallback",null);this.loopConfig=s.loop??!1,this.startTime=s.startTime??0,this.endTime=s.endTime??null,this.video.removeEventListener("ended",this.handleEnded),this.video.addEventListener("ended",this.handleVideoEnd.bind(this)),this.startTime>0&&(this.video.currentTime=this.startTime),this.endTime!==null&&this.video.addEventListener("timeupdate",this.handleTimeUpdate.bind(this))}handleTimeUpdate(){this.endTime!==null&&this.video.currentTime>=this.endTime&&this.handleVideoEnd()}handleVideoEnd(){this.loopConfig===!0?(this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.video.currentTime=this.startTime,this.video.play().catch(console.warn)):(this.video.pause(),this.completionCallback&&this.completionCallback())}reset(){super.reset(),this.currentLoopCount=0,this.video.currentTime=this.startTime}onDone(s){this.completionCallback=s}isOneShot(){return this.loopConfig===!1||this.loopConfig===1}dispose(){this.video.removeEventListener("ended",this.handleVideoEnd),this.video.removeEventListener("timeupdate",this.handleTimeUpdate),this.completionCallback=null,super.dispose()}}function hE(t){const e=t.replace("#","");if(!/^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(e))throw new Error(`Invalid hex color: ${t}`);let s,r,o;return e.length===3?(s=parseInt(e[0]+e[0],16),r=parseInt(e[1]+e[1],16),o=parseInt(e[2]+e[2],16)):(s=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),o=parseInt(e.substring(4,6),16)),{r:s,g:r,b:o}}function Dd(t){return typeof t=="string"?hE(t):t}function jr(t){const e=Dd(t);return`rgb(${e.r},${e.g},${e.b})`}class fE extends Tt{constructor(s={}){super();l(this,"columns",[]);l(this,"fallChance");l(this,"speed");l(this,"baseColor");l(this,"trailColors");this.speed=s.speed??1,this.fallChance=s.fallChance??.7,s.baseColor?this.baseColor=Dd(s.baseColor):this.baseColor={r:0,g:255,b:255},this.trailColors=this.calculateTrailColors()}calculateTrailColors(){const r=[];for(let o=0;o<=5;o++){const n=1-o/5*.6;r.push({r:Math.floor(this.baseColor.r*n),g:Math.floor(this.baseColor.g*n),b:Math.floor(this.baseColor.b*n)})}return r}reset(){this.columns=[],this.lastUpdate=performance.now()}renderFrame(s,r){this.columns.length!==s&&(this.columns=Array(s).fill(0).map(()=>Math.floor(Math.random()*r))),this.shouldStep(50)&&(this.columns=this.columns.map(i=>i>r+5?0:i+(Math.random()<this.fallChance?this.speed:0)));const o=this.ctx.createImageData(s,r),n=o.data;n.fill(0);for(let i=0;i<r;i++)for(let a=0;a<s;a++){const c=this.columns[a];let u=0,d=0,h=0;if(i===c)u=this.baseColor.r,d=this.baseColor.g,h=this.baseColor.b;else if(i<c&&i>c-this.trailColors.length){const p=c-i;if(p<this.trailColors.length){const y=this.trailColors[p];u=y.r,d=y.g,h=y.b}}const f=(i*s+a)*4;n[f]=u,n[f+1]=d,n[f+2]=h,n[f+3]=255}this.ctx.putImageData(o,0,0)}}class pE{constructor(e,s){l(this,"baseRenderer");l(this,"overlayIcons",new Map);l(this,"overlayConfigs");l(this,"loadedIcons",new Set);l(this,"canvas");l(this,"ctx");l(this,"persistOverlaysOnComplete");l(this,"baseRendererCompleted",!1);l(this,"completionCallback",null);l(this,"hasSignaledCompletion",!1);this.baseRenderer=s(e.baseRenderer.type,e.baseRenderer.data),this.overlayConfigs=e.overlays,this.persistOverlaysOnComplete=e.persistOverlaysOnComplete!==!1,this.canvas=document.createElement("canvas");const r=this.canvas.getContext("2d");if(!r)throw new Error("2D canvas not supported");this.ctx=r,this.loadOverlayImages(),"onDone"in this.baseRenderer&&typeof this.baseRenderer.onDone=="function"&&this.baseRenderer.onDone(()=>{this.baseRendererCompleted=!0,!this.persistOverlaysOnComplete&&this.completionCallback&&this.completionCallback()})}async loadOverlayImages(){for(const e of this.overlayConfigs){const s=new Image;s.crossOrigin="anonymous",s.onload=()=>{this.loadedIcons.add(e.src)},s.onerror=r=>{console.error(`Failed to load overlay image: ${e.src}`,r)},s.src=e.src,this.overlayIcons.set(e.src,s)}}calculateOverlayPosition(e,s,r){let o,n;if(typeof e.position=="string")switch(e.position){case"top-left":o=0,n=0;break;case"top-center":o=(s-e.size)/2,n=0;break;case"top-right":o=s-e.size,n=0;break;case"center-left":o=0,n=(r-e.size)/2;break;case"center":o=(s-e.size)/2,n=(r-e.size)/2;break;case"center-right":o=s-e.size,n=(r-e.size)/2;break;case"bottom-left":o=0,n=r-e.size;break;case"bottom-center":o=(s-e.size)/2,n=r-e.size;break;case"bottom-right":o=s-e.size,n=r-e.size;break;default:o=0,n=0}else o=e.position.x,n=e.position.y;return e.offset&&(o+=e.offset.x||0,n+=e.offset.y||0),{x:o,y:n}}reset(){this.baseRenderer.reset(),this.baseRendererCompleted=!1,this.hasSignaledCompletion=!1}renderFrame(e,s){if(this.canvas.width=e,this.canvas.height=s,this.ctx.clearRect(0,0,e,s),this.baseRendererCompleted&&this.persistOverlaysOnComplete)this.renderOverlays(e,s);else{this.baseRenderer.renderFrame(e,s);const r=this.baseRenderer.readPixels(e,s);if(r&&r.length>0){const o=new ImageData(r,e,s);this.ctx.putImageData(o,0,0)}this.renderOverlays(e,s)}}renderOverlays(e,s){for(const r of this.overlayConfigs){if(!r.persistent&&r.persistent!==void 0)continue;const o=this.overlayIcons.get(r.src);if(!o||!this.loadedIcons.has(r.src))continue;const n=this.calculateOverlayPosition(r,e,s);this.ctx.save(),r.opacity!==void 0&&(this.ctx.globalAlpha=Math.max(0,Math.min(1,r.opacity))),this.ctx.drawImage(o,n.x,n.y,r.size,r.size),this.ctx.restore()}}readPixels(e,s){return this.ctx.getImageData(0,0,e,s).data}play(){this.baseRenderer.play&&this.baseRenderer.play()}pause(){this.baseRenderer.pause&&this.baseRenderer.pause()}dispose(){this.overlayIcons.clear(),this.loadedIcons.clear(),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.remove(),this.baseRenderer.dispose&&this.baseRenderer.dispose()}onDone(e){this.completionCallback=e,this.hasSignaledCompletion&&e()}isOneShot(){return this.persistOverlaysOnComplete?!1:"isOneShot"in this.baseRenderer&&typeof this.baseRenderer.isOneShot=="function"?this.baseRenderer.isOneShot():!1}}class xd extends Tt{constructor(s){super();l(this,"img");l(this,"loaded",!1);l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"colorOverride");l(this,"originalSvgData",null);l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);this.img=new Image,this.img.crossOrigin="anonymous",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,this.colorOverride=s.colorOverride,this.colorOverride&&s.src.toLowerCase().includes(".svg")?this.loadAndProcessSvg(s.src):this.img.src=s.src,this.img.onload=()=>{this.loaded=!0},this.img.onerror=r=>{console.error("Failed to load image:",r)}}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(!this.loaded||this.completed)return;if(this.isPaused){this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.canvas.width=s,this.canvas.height=r,this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.ctx.drawImage(this.img,0,0,s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":this.position+=d;break;case"right":this.position+=d;break;case"up":this.position+=d;break;case"down":this.position+=d;break}}this.drawScrollingImage(s,r,o,i),this.checkScrollCompletion(s,r,o,i)}drawScrollingImage(s,r,o,n){var h,f,p,y,w,M,S,U,x;const i=this.img.width/this.img.height;let a,c;((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((y=this.scrollConfig)==null?void 0:y.width)||s,c=((w=this.scrollConfig)==null?void 0:w.height)||r);let u,d;switch(o==="left"||o==="right"?(u=0,((M=this.scrollConfig)==null?void 0:M.offsetY)==="center"||((S=this.scrollConfig)==null?void 0:S.offsetY)===void 0?d=(r-c)/2:d=this.scrollConfig.offsetY):(((U=this.scrollConfig)==null?void 0:U.offsetX)==="center"||((x=this.scrollConfig)==null?void 0:x.offsetX)===void 0?u=(s-a)/2:u=this.scrollConfig.offsetX,d=0),o){case"left":{const O=s-this.position;if(O<s&&O>-a&&this.ctx.drawImage(this.img,O,d,a,c),this.loopConfig&&this.pauseDuration===0&&this.position>n){const L=O+a+n;L<s&&this.ctx.drawImage(this.img,L,d,a,c)}break}case"right":{const O=-a+this.position;if(O>-a&&O<s&&this.ctx.drawImage(this.img,O,d,a,c),this.loopConfig&&this.pauseDuration===0&&O-n-a>-a){const L=O-a-n;L<s&&this.ctx.drawImage(this.img,L,d,a,c)}break}case"up":{const O=r-this.position;if(O>-c&&O<r&&this.ctx.drawImage(this.img,u,O,a,c),this.loopConfig&&this.pauseDuration===0&&O+c+n<r){const L=O+c+n;L>-c&&this.ctx.drawImage(this.img,u,L,a,c)}break}case"down":{const O=-c+this.position;if(O>-c&&O<r&&this.ctx.drawImage(this.img,u,O,a,c),this.loopConfig&&this.pauseDuration===0&&O-n-c>-c){const L=O-c-n;L<r&&this.ctx.drawImage(this.img,u,L,a,c)}break}}}checkScrollCompletion(s,r,o,n){var h,f,p,y,w;if(!this.isPlaying)return;const i=this.img.width/this.img.height;let a,c;switch(((h=this.scrollConfig)==null?void 0:h.maintainAspectRatio)!==!1?(f=this.scrollConfig)!=null&&f.height?(c=this.scrollConfig.height,a=c*i):(p=this.scrollConfig)!=null&&p.width?(a=this.scrollConfig.width,c=a/i):o==="left"||o==="right"?(c=r,a=c*i):(a=s,c=a/i):(a=((y=this.scrollConfig)==null?void 0:y.width)||s,c=((w=this.scrollConfig)==null?void 0:w.height)||r),o){case"left":case"right":this.loopConfig;break;case"up":case"down":this.loopConfig;break}let u=!1;const d=1;switch(o){case"left":u=s-this.position<-a-d;break;case"right":u=-a+this.position>s+d;break;case"up":u=r-this.position<-c-d;break;case"down":u=-c+this.position>r+d;break}u&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}async loadAndProcessSvg(s){try{const o=await(await fetch(s)).text();this.originalSvgData=o;const n=this.applySvgColorOverride(o),i=`data:image/svg+xml;base64,${btoa(n)}`;this.img.src=i}catch(r){console.error("Failed to load and process SVG:",r),this.img.src=s}}applySvgColorOverride(s){if(!this.colorOverride)return s;const r=jr(this.colorOverride);return s.replace(/fill\s*=\s*["'][^"']*["']/gi,`fill="${r}"`).replace(/fill\s*:\s*[^;"]*/gi,`fill:${r}`).replace(/stroke\s*=\s*["'][^"']*["']/gi,`stroke="${r}"`).replace(/stroke\s*:\s*[^;"]*/gi,`stroke:${r}`)}dispose(){this.img.removeAttribute("src"),this.completionCallback=null,this.originalSvgData=null}}class gE extends Tt{constructor(s){super();l(this,"text");l(this,"lines");l(this,"fontSize");l(this,"fontFamily");l(this,"lineHeight");l(this,"textColor");l(this,"scrollConfig");l(this,"loopConfig");l(this,"duration");l(this,"pauseDuration");l(this,"position",0);l(this,"startTime",0);l(this,"lastFrameTime",0);l(this,"currentLoopCount",0);l(this,"completionCallback",null);l(this,"isPlaying",!1);l(this,"completed",!1);l(this,"isPaused",!1);l(this,"pauseStartTime",0);l(this,"textWidth",0);l(this,"textHeight",0);l(this,"lineWidths",[]);l(this,"textMeasured",!1);this.text=s.text,this.lines=s.text.split(`
|
|
145
|
+
`),this.fontSize=s.fontSize??8,this.lineHeight=s.lineHeight??this.fontSize+2,this.fontFamily=s.fontFamily??"monospace, 'Lucida Console', 'Courier New', Courier",this.scrollConfig=s.scroll,this.loopConfig=s.loop??!1,this.duration=s.duration,this.pauseDuration=s.pauseBetweenLoops??0,s.color?this.textColor=jr(s.color):this.textColor="rgb(255,255,255)"}measureText(){if(this.textMeasured)return;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.lineWidths=[];let s=0;for(const r of this.lines){const n=this.ctx.measureText(r).width;this.lineWidths.push(n),s=Math.max(s,n)}this.textWidth=s,this.textHeight=this.lines.length*this.lineHeight,this.textMeasured=!0}reset(){this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime,this.currentLoopCount=0,this.completed=!1,this.isPlaying=!1,this.isPaused=!1,this.pauseStartTime=0,this.textMeasured=!1,this.lineWidths=[]}play(){this.isPlaying||(this.isPlaying=!0,this.startTime=performance.now(),this.lastFrameTime=this.startTime)}pause(){this.isPlaying=!1}renderFrame(s,r){var a;if(this.canvas.width=s,this.canvas.height=r,this.measureText(),this.completed)return;if(this.isPaused){this.ctx.clearRect(0,0,s,r),this.pauseDuration>0&&performance.now()-this.pauseStartTime>=this.pauseDuration&&(this.isPaused=!1,this.position=0,this.startTime=performance.now(),this.lastFrameTime=this.startTime);return}if(this.ctx.clearRect(0,0,s,r),!((a=this.scrollConfig)!=null&&a.enabled)){this.drawStaticText(s,r),this.duration&&this.isPlaying&&performance.now()-this.startTime>=this.duration&&this.handleCompletion();return}const o=this.scrollConfig.direction||"left",n=this.scrollConfig.speed||50,i=this.scrollConfig.gap||0;if(this.isPlaying){const c=performance.now(),u=(c-this.lastFrameTime)/1e3;this.lastFrameTime=c;const d=n*u;switch(o){case"left":case"right":case"up":case"down":this.position+=d;break}}this.drawScrollingText(s,r,o,i),this.checkScrollCompletion(s,r,o)}drawStaticText(s,r){this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";const o=this.textHeight;let n=(r-o)/2;for(let i=0;i<this.lines.length;i++){const a=this.lines[i],c=this.lineWidths[i],u=(s-c)/2,d=n+i*this.lineHeight;this.ctx.fillText(a,u,d)}}drawScrollingText(s,r,o,n){var c,u,d,h;this.ctx.font=`${this.fontSize}px ${this.fontFamily}`,this.ctx.fillStyle=this.textColor,this.ctx.textBaseline="top";let i,a;o==="left"||o==="right"?(i=0,((c=this.scrollConfig)==null?void 0:c.offsetY)==="center"||((u=this.scrollConfig)==null?void 0:u.offsetY)===void 0?a=(r-this.textHeight)/2:a=this.scrollConfig.offsetY):(((d=this.scrollConfig)==null?void 0:d.offsetX)==="center"||((h=this.scrollConfig)==null?void 0:h.offsetX)===void 0?(i=s/2,this.ctx.textAlign="center"):(i=this.scrollConfig.offsetX,this.ctx.textAlign="left"),a=0),this.drawMultiLineScrollText(o,s,r,n,i,a)}drawMultiLineScrollText(s,r,o,n,i,a){switch(s){case"left":{const c=r-this.position;if(c<r&&c>-this.textWidth&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&this.position>n){const u=c+this.textWidth+n;u<r&&this.drawTextBlock(u,a,"left")}break}case"right":{const c=-this.textWidth+this.position;if(c>-this.textWidth&&c<r&&this.drawTextBlock(c,a,"left"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textWidth>-this.textWidth){const u=c-this.textWidth-n;u<r&&this.drawTextBlock(u,a,"left")}break}case"up":{const c=o-this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c+this.textHeight+n<o){const u=c+this.textHeight+n;u>-this.textHeight&&this.drawTextBlock(i,u,"center")}break}case"down":{const c=-this.textHeight+this.position;if(c>-this.textHeight&&c<o&&this.drawTextBlock(i,c,"center"),this.loopConfig&&this.pauseDuration===0&&c-n-this.textHeight>-this.textHeight){const u=c-this.textHeight-n;u<o&&this.drawTextBlock(i,u,"center")}break}}}drawTextBlock(s,r,o){for(let n=0;n<this.lines.length;n++){const i=this.lines[n],a=this.lineWidths[n];let c;o==="center"?c=s-a/2:c=s;const u=r+n*this.lineHeight;this.ctx.fillText(i,c,u)}}checkScrollCompletion(s,r,o){if(!this.isPlaying)return;let n=!1;const i=1;switch(o){case"left":n=s-this.position<-this.textWidth-i;break;case"right":n=-this.textWidth+this.position>s+i;break;case"up":n=r-this.position<-this.textHeight-i;break;case"down":n=-this.textHeight+this.position>r+i;break}n&&(this.loopConfig===!1||typeof this.loopConfig=="number"&&this.loopConfig===1?this.handleCompletion():typeof this.loopConfig=="number"&&this.loopConfig>1?(this.currentLoopCount++,this.currentLoopCount>=this.loopConfig?this.handleCompletion():this.startPauseOrNextLoop()):this.loopConfig===!0&&this.startPauseOrNextLoop())}startPauseOrNextLoop(){this.pauseDuration>0?(this.isPaused=!0,this.pauseStartTime=performance.now()):this.position=0}handleCompletion(){this.completed=!0,this.isPlaying=!1,this.completionCallback&&this.completionCallback()}onDone(s){this.completionCallback=s}isOneShot(){var s;return!((s=this.scrollConfig)!=null&&s.enabled)&&!this.loopConfig}dispose(){this.completionCallback=null}}class mE{constructor(e){l(this,"patterns");l(this,"currentPatternIndex",0);l(this,"currentRenderer",null);l(this,"loopConfig");l(this,"currentLoopCount",0);l(this,"transitionDuration");l(this,"patternOverrides");l(this,"completionCallback",null);l(this,"patternStore");l(this,"canvas");l(this,"ctx");l(this,"width",0);l(this,"height",0);this.patterns=e.patterns,this.loopConfig=e.loop??!1,this.transitionDuration=e.transitionDuration??0,this.patternOverrides=e.patternOverrides??{},this.patternStore=e.patternStore??new Map,this.canvas=document.createElement("canvas");const s=this.canvas.getContext("2d");if(!s)throw new Error("2D canvas not supported");if(this.ctx=s,this.patterns.length===0)throw new Error("SequenceRenderer requires at least one pattern");this.loadCurrentPattern()}loadCurrentPattern(){var n,i,a,c;const e=this.patterns[this.currentPatternIndex],s=this.patternStore.get(e);if(!s){console.warn(`Pattern "${e}" not found in store, skipping`),this.moveToNextPattern();return}this.currentRenderer&&((i=(n=this.currentRenderer).dispose)==null||i.call(n));const r=this.patternOverrides[e]??{},o={...s.data,...r};try{this.currentRenderer=Br({mode:s.type,data:o}),this.currentRenderer&&this.isDoneAware(this.currentRenderer)&&this.currentRenderer.onDone(()=>{this.handlePatternComplete()}),this.currentRenderer&&(this.currentRenderer.reset(),(c=(a=this.currentRenderer).play)==null||c.call(a),this.width>0&&this.height>0&&this.currentRenderer.renderFrame(this.width,this.height))}catch(u){console.error(`Failed to create renderer for pattern "${e}":`,u),this.moveToNextPattern()}}isDoneAware(e){return typeof(e==null?void 0:e.onDone)=="function"}handlePatternComplete(){this.transitionDuration>0?setTimeout(()=>{this.moveToNextPattern()},this.transitionDuration):this.moveToNextPattern()}moveToNextPattern(){this.currentPatternIndex++,this.currentPatternIndex>=this.patterns.length?this.loopConfig===!0?(this.currentPatternIndex=0,this.loadCurrentPattern()):typeof this.loopConfig=="number"&&this.currentLoopCount<this.loopConfig-1?(this.currentLoopCount++,this.currentPatternIndex=0,this.loadCurrentPattern()):this.completionCallback&&this.completionCallback():this.loadCurrentPattern()}reset(){this.currentPatternIndex=0,this.currentLoopCount=0,this.loadCurrentPattern()}play(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.play)==null||s.call(e)}pause(){var e,s;(s=(e=this.currentRenderer)==null?void 0:e.pause)==null||s.call(e)}renderFrame(e,s){this.width=e,this.height=s,this.canvas.width=e,this.canvas.height=s,this.currentRenderer&&this.currentRenderer.renderFrame(e,s)}readPixels(e,s){return this.currentRenderer?this.currentRenderer.readPixels(e,s):this.ctx.getImageData(0,0,e,s).data}onDone(e){this.completionCallback=e}isOneShot(){var e,s;return this.loopConfig===!1||this.loopConfig===1?this.patterns.length===1&&this.currentRenderer?((s=(e=this.currentRenderer).isOneShot)==null?void 0:s.call(e))??!1:!0:!1}dispose(){var e,s;this.currentRenderer&&((s=(e=this.currentRenderer).dispose)==null||s.call(e)),this.completionCallback=null}setPatternStore(e){this.patternStore=e,this.patterns.length>0&&this.loadCurrentPattern()}}const yE=vi(Tt);class bE extends yE{constructor(s={r:0,g:0,b:0}){super();l(this,"color");let r;s.color!==void 0?r=s.color:s.r!==void 0&&s.g!==void 0&&s.b!==void 0?r={r:s.r,g:s.g,b:s.b}:r={r:0,g:0,b:0},this.color=jr(r)}setColor(s){this.color=jr(s),this.resetOneShot()}reset(){this.resetOneShot()}renderFrame(s,r){this.isOneShotDone||(this.canvas.width=s,this.canvas.height=r,this.ctx.fillStyle=this.color,this.ctx.fillRect(0,0,s,r),this.signalDoneIfNeeded())}}class vE extends Tt{constructor({minHue:s=0,maxHue:r=360,speed:o=1}={}){super();l(this,"offset",0);l(this,"minHue");l(this,"maxHue");l(this,"speed");this.minHue=s,this.maxHue=r,this.speed=o}reset(){this.offset=0,this.lastUpdate=performance.now()}hslToRgb(s,r,o){let n,i,a;if(r===0)n=i=a=o;else{const c=(h,f,p)=>(p<0&&(p+=1),p>1&&(p-=1),p<.16666666666666666?h+(f-h)*6*p:p<.5?f:p<.6666666666666666?h+(f-h)*(.6666666666666666-p)*6:h),u=o<.5?o*(1+r):o+r-o*r,d=2*o-u;n=c(d,u,s+1/3),i=c(d,u,s),a=c(d,u,s-1/3)}return[Math.round(n*255),Math.round(i*255),Math.round(a*255)]}renderFrame(s,r){this.shouldStep(50)&&(this.offset=(this.offset+this.speed)%s);const o=this.ctx.createImageData(s,r),n=o.data;let i=0;for(let a=0;a<r;a++)for(let c=0;c<s;c++){const u=(c+this.offset)%s/s,d=this.minHue/360+u*((this.maxHue-this.minHue)/360),[h,f,p]=this.hslToRgb(d,1,.5);n[i++]=h,n[i++]=f,n[i++]=p,n[i++]=255}this.ctx.putImageData(o,0,0)}}const Sa=new Map;Qt(se,{register(t,e){Sa.set(t,e)},execute(t,e){const s=Sa.get(t);return s?new s(e):null}});I.canvas.registerRenderer("video",dE);I.canvas.registerRenderer("video-basic",$d);I[se].register("image-static",Cd);I[se].register("image-scrolling",xd);const wE=class{constructor(t){var e;return(e=t.scroll)!=null&&e.enabled?new xd(t):new Cd(t)}};I[se].register("image",wE);I[se].register("color",bE);I[se].register("matrix",fE);I[se].register("sweep",vE);I[se].register("gradient",lE);I[se].register("drop",aE);I[se].register("sequence",mE);I[se].register("text",gE);const EE=class{constructor(t){const e=(s,r)=>{const o=Br({mode:s,data:r});if(!o)throw new Error(`Failed to create renderer of type: ${s}`);return o};return new pE(t,e)}};I[se].register("overlay",EE);const Br=({mode:t,data:e})=>{const s=I[se].execute(t,e);if(s)return s;throw new Error(`Unknown mode: ${t}`)};var ME=Object.defineProperty,TE=Object.getOwnPropertyDescriptor,os=(t,e,s,r)=>{for(var o=r>1?void 0:r?TE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&ME(e,s,o),o};const Ad="canvas-dispatcher-model";function _E(t){if(t=t.replace(/^#/,""),t.length===3&&(t=t.split("").map(s=>s+s).join("")),t.length!==6)return null;const e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:e&255}}let tt=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_content",new Map);l(this,"_patterns",new Map);l(this,"_endpointRenderers");l(this,"pattern");l(this,"data");this.id=t,this.logger=s.logger,this._endpointRenderers=new ke}addNamedEndpoint(t,e){this._endpointRenderers.getModel(t)&&this.logger.warn(`Endpoint "${t}" already exists. Overwriting.`);const s=bi.instance(t).options({apiPath:e.apiPath,width:e.width,height:e.height,fps:e.fps,durationMs:e.durationMs??null,endpoint:t}).build();return this._endpointRenderers.addModel(s),s}addContent(t,e){this._content.has(t)&&this.logger.warn(`Content "${t}" already exists. Overwriting.`),this._content.set(t,e)}addPattern(t,e){this._patterns.has(t)&&this.logger.warn(`Pattern "${t}" already exists. Overwriting.`),this._patterns.set(t,e)}async handlePatternsPost(t,e){var o,n;const s=t.body,r=Array.isArray(s)?s:[s];if(r.some(i=>!i.id||!i.type||!i.data)){(o=e.status)==null||o.call(e,400).send({error:"Invalid pattern data"});return}for(const i of r)this._patterns.has(i.id)&&this.logger.warn(`Pattern "${i.id}" already exists. Overwriting.`),this.addPattern(i.id,i);(n=e.status)==null||n.call(e,200).send({status:"OK"})}async handlePatternApplication(t,e){var u,d,h;const s=t.params.pattern,r=t.params.endpoint,o=this._endpointRenderers.getModel(r);if(!o){(u=e.status)==null||u.call(e,404).send({error:`Endpoint "${r}" not found`});return}if(!this._patterns.has(s)){(d=e.status)==null||d.call(e,404).send({error:`Pattern "${s}" not found`});return}const n=this._patterns.get(s),i=n.type,a=t.body||{};this.data={...n.data,...a};const c=i==="sequence"?{...this.data,patternStore:this._patterns}:this.data;o.renderer=Br({mode:i,data:c}),o.setClearOnComplete(n.clearOnComplete),o.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleColorApplication(t,e){var u,d,h;const s=t.params.color,r=_E(s);if(!r){(u=e.status)==null||u.call(e,400).send({error:"Invalid color format"});return}const o=t.params.endpoint,n=this._endpointRenderers.getModel(o);if(!n){(d=e.status)==null||d.call(e,404).send({error:`Endpoint "${o}" not found`});return}const{r:i,b:a,g:c}=r;n.renderer=Br({mode:"color",data:{r:i,g:c,b:a}}),n.startStreaming(),(h=e.status)==null||h.call(e,200).send({status:"OK"})}async handleEndpointCreation(t,e){var r,o;const s=t.body;if(!s.apiPath||!s.id){(r=e.status)==null||r.call(e,400).send({error:"Name and path are required"});return}this.addNamedEndpoint(s.id,s),(o=e.status)==null||o.call(e,200).send({status:"OK"})}async load(t){var s;const e=t==null?void 0:t.get(qt.loader);e&&((s=e.patterns)==null||s.forEach(r=>{if(!r.id||!r.type||!r.data){this.logger.warn(`Invalid pattern data: ${JSON.stringify(r)}`);return}this.addPattern(r.id,r)}))}};os([Pe],tt.prototype,"_endpointRenderers",2);os([zs("/api/ui/canvas/patterns")],tt.prototype,"handlePatternsPost",1);os([zs("/api/ui/canvas/pattern/:endpoint/:pattern")],tt.prototype,"handlePatternApplication",1);os([zs("/api/ui/canvas/color/:endpoint/:color")],tt.prototype,"handleColorApplication",1);os([zs("/api/ui/canvas/endpoint")],tt.prototype,"handleEndpointCreation",1);tt=os([R(Ad)],tt);const qt=new $e({class:tt,type:Ad}),{URL:wi}=ue(),{getOne:Rd}=ie.build({basePath:`${wi}/api/device`}),Hr=g.createLogger({name:"device-service",group:"Services"}),Pd=async()=>{Hr.debug("sending GET for device serial number");try{const t=await Rd({urlOverride:`${wi}/api/kos/device/serialNumber`});return[void 0,t==null?void 0:t.data.serialNumber]}catch(t){if(t instanceof z)return Hr.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},kd=async()=>{Hr.debug("sending GET for device details");try{const t=await Rd({urlOverride:`${wi}/api/kos/device`});return t?[void 0,t.data]:["unknownError",void 0]}catch(t){if(t instanceof z)return Hr.error(`Error fetching device serial number: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},SE=Object.freeze(Object.defineProperty({__proto__:null,getDeviceDetails:kd,getSerialNumber:Pd},Symbol.toStringTag,{value:"Module"}));var OE=Object.defineProperty,IE=Object.getOwnPropertyDescriptor,Ld=(t,e,s,r)=>{for(var o=r>1?void 0:r?IE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&OE(e,s,o),o};const Fd="device-model",$E="/kos/criticalData/changed",CE="/kos/criticalData/available";let Kr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_serialNumber");l(this,"_name");l(this,"_nodeId");this.id=t,this.logger=s.logger,this._serialNumber="unassigned",this._name="unassigned",this._nodeId="unassigned"}get serialNumber(){return this._serialNumber}get name(){return this._name}get nodeId(){return this._nodeId}get nodeType(){const[t]=this.nodeId.split("-");return t}get nodeName(){const[,t]=this.nodeId.split("-");return t}updateModel(t){this._serialNumber=t.serialNumber??"unassigned",this._name=t.name??"unassigned",this._nodeId=t.nodeId??"unassigned"}async loadDeviceData(){const[t,e]=await kd();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}if(e){const{name:s,nodeId:r}=e;this.updateModel({name:s,nodeId:r,serialNumber:this.serialNumber})}}async loadSerialNumber(){const[t,e]=await Pd();if(t){this.logger.error(`Error fetching device serial number: ${t}`);return}this.updateModel({serialNumber:e,name:this.name,nodeId:this.nodeId})}async handleCriticalDataChanged(){this.logger.debug(`Critical data changed for device ${this.id}`),await this.loadSerialNumber()}async init(){this.logger.debug(`initializing device ${this.id}`)}async load(){this.logger.debug(`loading device ${this.id}`),await this.loadDeviceData(),await this.loadSerialNumber()}};Ld([B({topic:[$E,CE],websocket:!0})],Kr.prototype,"handleCriticalDataChanged",1);Kr=Ld([R(Fd)],Kr);const qr=new $e({class:Kr,type:Fd});var DE=Object.getOwnPropertyDescriptor,xE=(t,e,s,r)=>{for(var o=r>1?void 0:r?DE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Nd="network-interface-model";let Jo=class{constructor(t,e,s){l(this,"id");l(this,"name");l(this,"type");l(this,"nmdevicestate");l(this,"hwaddress");l(this,"mtu");l(this,"configured");l(this,"wifi");l(this,"ethernet");l(this,"ip4settings");l(this,"category");l(this,"logger");this.id=t,this.logger=s.logger,this.name=e.name,this.type=e.type,this.nmdevicestate=e.nmdevicestate,this.hwaddress=e.hwaddress,this.mtu=e.mtu,this.configured=e.configured,this.wifi=e.wifi,this.ethernet=e.ethernet,this.ip4settings=e.ip4settings,this.category=e.category}updateModel(t){this.name=t.name,this.type=t.type,this.nmdevicestate=t.nmdevicestate,this.hwaddress=t.hwaddress,this.mtu=t.mtu,this.configured=t.configured,this.wifi=t.wifi,this.ethernet=t.ethernet,this.ip4settings=t.ip4settings,this.category=t.category}async init(){this.logger.debug(`initializing network-interface ${this.id}`)}async load(){this.logger.debug(`loading network-interface ${this.id}`)}};Jo=xE([R(Nd)],Jo);const Ei=new ve({class:Jo,type:Nd}),{URL:AE}=ue(),{getAll:RE}=ie.build({basePath:`${AE}/api/kos/network/interfaces`}),Oa=g.createLogger({name:"network-interface-service",group:"Services"}),Ud=async()=>{Oa.debug("sending GET for copy-logs");try{const t=await RE({});return[void 0,t==null?void 0:t.data]}catch(t){if(t instanceof z)return Oa.error(`Error fetching log file size: ${t.payload.error}`),[t.payload.error,void 0]}return["unknownError",void 0]},PE=Object.freeze(Object.defineProperty({__proto__:null,getNetworkInterfaces:Ud},Symbol.toStringTag,{value:"Module"}));var kE=Object.defineProperty,LE=Object.getOwnPropertyDescriptor,jd=(t,e,s,r)=>{for(var o=r>1?void 0:r?LE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&kE(e,s,o),o};const Bd="network-interface-container-model";let zr=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new ke({parentId:t,indexMap:{byCategory:"category"}})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing network-interface-container container ${this.id}`)}async refreshInterfaces(){this.logger.debug("refreshing interfaces");const[t,e]=await Ud();if(t){this.logger.error(`Error loading network interfaces: ${t}`);return}e&&e.forEach(s=>{const r=Ei.instance(s.name).forceUpdate.options(s).build();this.addModel(r)})}async load(){this.logger.debug(`loading network-interface-container container ${this.id}`),this.refreshInterfaces()}};jd([Pe],zr.prototype,"_models",2);zr=jd([R(Bd)],zr);const Us=new $e({class:zr,type:Bd});Us.addRelatedModel(Ei);const{URL:FE}=ue(),{getAll:NE}=ie.build({basePath:`${FE}/api/kos/storage/devices`}),Ia=g.createLogger({name:"storage-device-service",group:"Services"}),Hd=async()=>{Ia.debug("sending GET for storage-device");const t=await NE({});return!(t!=null&&t.data)||t.status!==200?(Ia.error("Failed to retrieve storage-device data",t),[]):t.data},UE=Object.freeze(Object.defineProperty({__proto__:null,getStorageDevices:Hd},Symbol.toStringTag,{value:"Module"}));var jE=Object.getOwnPropertyDescriptor,BE=(t,e,s,r)=>{for(var o=r>1?void 0:r?jE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const Kd="storage-device-model";let en=class{constructor(t,e,s){l(this,"id");l(this,"mountDir");l(this,"removed");l(this,"vendor");l(this,"runTimeMs");l(this,"model");l(this,"nodeId");l(this,"local");l(this,"label");l(this,"syspath");l(this,"logger");this.id=t,this.logger=s.logger,this.mountDir=e.mountDir,this.removed=e.removed,this.vendor=e.vendor,this.runTimeMs=e.runTimeMs,this.model=e.model,this.nodeId=e.nodeId,this.local=e.local,this.label=e.label,this.syspath=e.syspath}updateModel(t){this.mountDir=t.mountDir,this.removed=t.removed,this.vendor=t.vendor,this.runTimeMs=t.runTimeMs,this.model=t.model,this.nodeId=t.nodeId,this.local=t.local,this.label=t.label,this.syspath=t.syspath}async init(){this.logger.debug(`initializing storage-device ${this.id}`)}async load(){this.logger.debug(`loading storage-device ${this.id}`)}};en=BE([Jr(),R(Kd)],en);const Vr=new ve({class:en,type:Kd});var HE=Object.defineProperty,KE=Object.getOwnPropertyDescriptor,Mi=(t,e,s,r)=>{for(var o=r>1?void 0:r?KE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&HE(e,s,o),o};const qd="storage-device-container-model",qE="/kos/storage";let js=class{constructor(t,e,s){l(this,"id");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new ke({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}async init(){this.logger.debug(`initializing storage-device-container container ${this.id}`)}get isStorageInserted(){return this.data.length>0}get volumes(){return this.data}handleStorageAvailability(t){this._models.data.filter(s=>!t.find(r=>r.id===s.id)).forEach(s=>{this.removeModel(s.id)}),t.forEach(s=>{const r=this.getModel(s.id);if(r){const o={...s,kosParentId:this.id};r.updateModel(o)}else{const o={...s,kosParentId:this.id},n=Vr.instance(s.id).options(o).build();this.addModel(n)}})}async load(){this.logger.debug(`loading storage-device-container container ${this.id}`),(await Hd()).forEach(e=>{if(e.deviceType!=="disk"){const s={...e,kosParentId:this.id},r=Vr.instance(e.id).options(s).build();this.addModel(r)}})}};Mi([Pe],js.prototype,"_models",2);Mi([B({topic:qE,websocket:!0})],js.prototype,"handleStorageAvailability",1);js=Mi([R(qd)],js);const zt=new $e({class:js,type:qd});zt.addRelatedModel(Vr);const{URL:Ti}=ue(),{getAll:zE,postModel:VE}=ie.build({basePath:`${Ti}/api/kos/update/available`}),$a=g.createLogger({name:"usb-update-service",group:"Services"}),zd=async()=>{$a.debug("sending GET for usb-update");const t=await zE({urlOverride:`${Ti}/api/kos/update/available`});return!(t!=null&&t.data)||(t==null?void 0:t.status)!==200?($a.error("Failed to retrieve usb-update data",t),[]):t.data},Vd=async(t,e,s)=>{const r=await VE({model:{manifestId:t,deviceId:e},tracker:s,urlOverride:`${Ti}/api/kos/update/install`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},GE=Object.freeze(Object.defineProperty({__proto__:null,getAvailableUpdates:zd,installUpdate:Vd},Symbol.toStringTag,{value:"Module"}));var YE=Object.defineProperty,WE=Object.getOwnPropertyDescriptor,Gd=(t,e,s,r)=>{for(var o=r>1?void 0:r?WE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&YE(e,s,o),o};const Yd="usb-update-model";let Gr=class{constructor(t,e,s){l(this,"id");l(this,"active");l(this,"blocked");l(this,"createTime");l(this,"deviceId");l(this,"manifestId");l(this,"notes");l(this,"futureHandler");l(this,"logger");this.id=t,this.logger=s.logger,this.active=e.active,this.blocked=e.blocked,this.createTime=e.createTime,this.deviceId=e.deviceId,this.manifestId=e.manifestId,this.notes=e.notes,this.futureHandler=new so(this)}updateModel(t){this.active=t.active,this.blocked=t.blocked,this.createTime=t.createTime,this.deviceId=t.deviceId,this.manifestId=t.manifestId,this.notes=t.notes}reset(){this.futureHandler.removeFuture()}get future(){return this.futureHandler.future}async install(t){if(!t)throw new Error("No tracker provided");return this.logger.info(`Installing update for manifest ${this.manifestId} from device ${this.deviceId}`),Vd(this.manifestId,this.deviceId,t)}async init(){this.logger.debug(`initializing usb-update ${this.id}`)}async load(){this.logger.debug(`loading usb-update ${this.id}`)}};Gd([Di()],Gr.prototype,"install",1);Gr=Gd([R(Yd)],Gr);const _i=new ve({class:Gr,type:Yd});var QE=Object.defineProperty,XE=Object.getOwnPropertyDescriptor,yo=(t,e,s,r)=>{for(var o=r>1?void 0:r?XE(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(r?i(e,s,o):i(o))||o);return r&&o&&QE(e,s,o),o};const Wd="usb-update-container-model";let Vt=class{constructor(t,e,s){l(this,"id");l(this,"disposer");l(this,"storageService");l(this,"_activeUpdate");l(this,"logger");l(this,"_models");this.id=t,this.logger=s.logger,this._models=new ke({parentId:t})}getModel(t){return this._models.getModel(t)}get models(){return this._models}get data(){return this._models.data}addModel(t){this._models.addModel(t)}removeModel(t){this._models.removeModel(t)}get activeUpdate(){return this._activeUpdate}reset(){this.clearActiveUpdate()}clearActiveUpdate(){this._activeUpdate=void 0}updateActiveUpdate(t){this._activeUpdate=t}get isUsbInserted(){return this.storageService.isStorageInserted}get hasAvailableUpdates(){return this._models.data.length>0}async syncAvailableUpdates(){const t=await zd();ee(()=>{const e=t.map(s=>`${s.deviceId}-${s.manifestId}`);this._models.data.filter(s=>!e.includes(s.id)).forEach(s=>this.removeModel(s.id)),t.forEach(s=>{const r=`${s.deviceId}-${s.manifestId}`,o=_i.instance(r).forceUpdate.options({...s,createTime:new Date(s.createTime)}).build();this.addModel(o)}),this.data.length===1?this.updateActiveUpdate(this.data[0]):this.clearActiveUpdate()})}usbInsertedEffect(){this.isUsbInserted?this.syncAvailableUpdates():(this._models.clear(),this.clearActiveUpdate())}async init(){this.logger.debug(`initializing usb-update-container container ${this.id}`)}unload(){var t;(t=this.disposer)==null||t.call(this)}async activate(){this.logger.debug(`activating usb-update-container container ${this.id}`),await this.syncAvailableUpdates()}async load(){this.logger.debug(`loading usb-update-container container ${this.id}`)}};yo([Wt({modelType:zt.type})],Vt.prototype,"storageService",2);yo([Pe],Vt.prototype,"_models",2);yo([$c({dependencies:t=>[t.isUsbInserted]})],Vt.prototype,"usbInsertedEffect",1);Vt=yo([R(Wd)],Vt);const Bs=new $e({class:Vt,type:Wd});Bs.addRelatedModel(_i);const ZE=()=>({...{[Jt.type]:{class:Tu},[et.type]:{class:Ou,singleton:!0},...ne.registration,...vt.registration,...Ht.registration,...Fr.registration,...qe.registration,[mi.type]:{class:exports.WsEventModel,singleton:!0},...Ns.registration,...pi.registration,...$r.registration}}),Si=ZE(),JE={models:Si,preloadModels:[]},eM=!0,Qd=t=>()=>{const e=Si;return Kc(tn)(Fs).model(Ht).model(zt).model(Bs).model(qr).model(Rr).model(Ds).model(Pr).model(ri).model(Us).model(qt).model(bi).model(Fu).model(ei,eM).model(Ws).model(ju),Object.keys(e).forEach(s=>{const r=e[s];Hc(tn)(s,r)}),{preload:A.model.preloadModel(t),model:A.model.register(t),companion:A.companion.register(t),legacy:A.model.registerLegacyModel(t)}},Oe={};Oe.core={models:Qd(Oe)};Oe.preload=A.model.preloadModel(Oe);Oe.model=A.model.register(Oe);Oe.companion=A.companion.register(Oe);Oe.legacy=A.model.registerLegacyModel(Oe);const tn=Oe;class tM{registerTroubleRankMapper(e,s){return I.propertyMapper.registerPropertyMapper(_e.TroubleRank,e,s),this}registerTroubleRoleMapper(e,s){return I.propertyMapper.registerPropertyMapper(_e.TroubleRole,e,s),this}registerTroubleColorMapper(e,s){return I.propertyMapper.registerPropertyMapper(_e.TroubleColor,e,s),this}registerModelLoader(e,s,r){I.loader.registerLoader(e,s,r)}registerCanvasPatternLoader(e,s){I.loader.registerLoader(qt.loader,e,s)}}const sM=async(t,e)=>{const s=ri.instance(t).options({}).build(),r=e?`${e}-`:"";return await pe(s),{getState:o=>s.data[`${r}${o}`],updateState:async(o,n)=>{await s.updateState(`${r}${o}`,n)},clean:async()=>{for(const o of s.data.keys)await s.updateState(`${r}${o}`,void 0)},unsubscribe:()=>{De(s)}}},Xd="kos:service:region",Zd="regionId",rM=`${Xd}-${Zd}`,Jd=async t=>{const e=vt.factory(rM)({path:Xd,attribute:Zd});await pe(e),e.updateProperty(t)};async function oM(){const{default:t}=await Promise.resolve().then(()=>kn);return t}function nM(t){return yt(t)}const Ca=Ve(),iM=Object.freeze(Object.defineProperty({__proto__:null,api:Ca,default:Ca,kosServiceRequest:nM},Symbol.toStringTag,{value:"Module"}));function aM(t){return yt(t)}const Da=Ve(),cM=Object.freeze(Object.defineProperty({__proto__:null,api:Da,default:Da,kosServiceRequest:aM},Symbol.toStringTag,{value:"Module"}));function lM(t){return yt(t)}const xa=Ve(),uM=Object.freeze(Object.defineProperty({__proto__:null,api:xa,default:xa,kosServiceRequest:lM},Symbol.toStringTag,{value:"Module"}));function dM(t){return yt(t)}const Aa=Ve(),hM=Object.freeze(Object.defineProperty({__proto__:null,api:Aa,default:Aa,kosServiceRequest:dM},Symbol.toStringTag,{value:"Module"}));function fM(t){return yt(t)}const Ra=Ve(),pM=Object.freeze(Object.defineProperty({__proto__:null,api:Ra,default:Ra,kosServiceRequest:fM},Symbol.toStringTag,{value:"Module"}));function gM(t){return yt(t)}const Pa=Ve(),mM=Object.freeze(Object.defineProperty({__proto__:null,api:Pa,default:Pa,kosServiceRequest:gM},Symbol.toStringTag,{value:"Module"})),Oi="/kos-timer-event",Ii="/kos-timer-event/tick",$i="defaultTimerEnd",gs=g.createLogger({name:"timer-manager"}),yM=t=>t.updateProperty!==void 0;class eh{constructor(e,s,r){l(this,"name");l(this,"timeout");l(this,"timer");l(this,"state","inactive");l(this,"decrementValue",1);l(this,"remainingTime");l(this,"timeoutActions",new Map);this.name=e;const o=typeof s=="number"?s:s.value||60;this.timeout=o,this.state="inactive",this.remainingTime=o,yM(s)&&Q(()=>{g.info(`Updating config value timer ${e} with new timeout value ${s.value}`);const n=s.value||60;this.updateTimeout(n)}),this.addTimeoutAction({name:$i}),r&&r.forEach(n=>{this.addTimeoutAction(n)})}get id(){return this.name}start(){if(this.state==="active"){gs.debug(`Timer ${this.name} already started`);return}(this.state==="inactive"||this.state==="paused")&&(this.state="active",this.timer=setInterval(()=>this.updateTimer(),1e3))}pause(){this.timer&&(gs.debug(`Pausing timer ${this.name}`),this.state="paused",clearInterval(this.timer))}restart(){this.pause(),this.remainingTime=this.timeout,this.start()}reset(){this.pause(),this.remainingTime=this.timeout,this.state="inactive"}updateTimeout(e){this.timeout=e,this.restart()}addTimeoutAction(e){const s=e.remainingTime??0;this.timeoutActions.has(s)||this.timeoutActions.set(s,[]);const r=e.name,o=this.timeoutActions.get(s).find(n=>n.name===r);o?o.action=e.action:this.timeoutActions.get(s).push(e)}removeTimeoutAction(e){for(const[s,r]of this.timeoutActions.entries()){const o=r.filter(n=>n.name!==e);o.length===0?this.timeoutActions.delete(s):this.timeoutActions.set(s,o)}}updateTimer(){if(this.remainingTime=Math.round((this.remainingTime-this.decrementValue)*100)/100,this.remainingTime<=0){this.state==="active"&&this.executeActions(0),this.pause();return}this.state==="active"&&this.executeActions(this.remainingTime)}executeActions(e){this.timeoutActions.has(e)&&this.timeoutActions.get(e).forEach(s=>{var r;gs.debug(`Executing timer action ${s.name} at ${e}`),(r=s.action)==null||r.call(s,s.name,e),this.notifyTimeoutAction(s),s.singleUse&&(gs.info(`${this.name} Removing single-use action ${s.name}`),this.removeTimeoutAction(s.name))}),this.notifyTick()}notifyTick(){K(`${Ii}/${this.name}`,{name:this.name,remainingTime:this.remainingTime})}notifyTimeoutAction(e){K(Oi,{name:this.name,action:e.name,remainingTime:this.remainingTime})}}const ms=new Map,$t=(t,e)=>{const s=ms.get(t);if(!s){gs.error(`Timer ${t} not found`);return}e(s)},th={createRelativeTimer(t,e,s){const r=new Date,o=Math.round((e.getTime()-r.getTime())/1e3);return this.createTimer(t,o,s)},createTimer(t,e=60,s){if(ms.has(t))return ms.get(t);const r=new eh(t,e,s);return ms.set(t,r),r},getTimer(t){return ms.get(t)},clearTimer(t){$t(t,e=>e.pause())},restartTimer(t){$t(t,e=>e.restart())},resetTimer(t){$t(t,e=>e.reset())},addTimeoutAction(t,e){$t(t,s=>s.addTimeoutAction(e))},removeTimeoutAction(t,e){$t(t,s=>s.removeTimeoutAction(e))},startTimer(t){$t(t,e=>e.start())}},sh="kos:service:region:settings",rh="timeZone",bM=`${sh}-${rh}`,sn=async t=>{const e=vt.factory(bM)({path:sh,attribute:rh});await pe(e),e.updateProperty(t)},vM=t=>!t||!t.data;function Ci(t,e,s={}){const{alias:r,namespace:o,abortController:n=!1,trackerPolicy:i="id"}=s;return async function(...a){const c=bt();g.debug(`Calling future service ${e} with tracker ${c}`);let u,d;n&&(u=new AbortController);const h=pt.initiateFuture({tracker:c,id:qn});o&&(h.namespace=o),g.debug(`waiting for future ${h.id} to be ready`),await pe(h),g.debug(`future ${h.id} is ready`),ee(()=>{g.debug(`Adding future ${h.id} to futureHandler`),this.futureHandler.addFuture(h,r)}),n&&u&&(d=Q(()=>{(h.status==="CANCELLED"||h.endState===Je.Canceled)&&(g.debug(`Future ${h.id} cancelled, aborting request`),u==null||u.abort())}),u.signal.addEventListener("abort",async()=>{if(h.status!=="CANCELLED"&&h.endState!==Je.Canceled&&!h.endState){g.debug(`AbortController aborted, cancelling future ${h.id}`);try{await h.cancelFuture()}catch(p){g.error(`Failed to cancel future ${h.id}:`,p)}}},{once:!0}));const f=()=>{d&&(d(),d=void 0)};try{const p=[...a];if(n&&u){const M=p[p.length-1];M&&typeof M=="object"&&"aborted"in M?p[p.length-1]=u.signal:p.push(u.signal)}if(i==="context"){const M=p[p.length-1];if($n(M))M.$tracker=c;else{const S={[eo]:!0,$tracker:c};p.push(S)}}else p.push(c);const y=await t.apply(this,p);g.debug(`received future response for ${c}`,y);const w=vM(y)?y:y==null?void 0:y.data;return w?(w.progress=1,g.debug("mapping future response to future model"),h.endState?g.debug(`future ${h.id} has already completed. Not updating the model`):Zn(w,h)):this.futureHandler.removeFuture(r),f(),w}catch(p){if(f(),n&&(u!=null&&u.signal.aborted)){const y=new Error("Operation cancelled");throw g.debug(`Operation ${e} was cancelled`),y}throw g.error(p),p}}}Qt(Fc,{register:()=>{},execute:()=>Ci});function Di(t={}){const{alias:e}=t;return(s,r,o)=>{s[vs]=s[vs]||{},e&&(s[Ms]=s[Ms]||new Map,s[Ms].set(r,e));const n=o.value,i=Ci(n,r,t);s[vs][r]={handler:i}}}const wM=({path:t})=>(e,s)=>{e[F]=e[F]||{},e[F][s]={modelType:Ns.type,id:`${Ns.type}-${t}`,options:{path:t},lifecycle:C.INIT}};function EM(t){const{path:e,attribute:s}=t;return(r,o)=>{r[F]=r[F]||{},r[F][o]={modelType:pi.type,id:`${e}-${s}`,options:{path:e,attribute:s},lifecycle:C.INIT}}}const Rt=g.createLogger({name:"services",group:"Services"}),MM=async(t,e)=>oh(t,e,`${exports.BASE_URL}/api/server/login`),oh=async(t,e,s=`${exports.BASE_URL}/api/login`)=>{const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({email:t,password:e})});if(!r.ok){const n=await r.json();throw Error(`${n==null?void 0:n.error}`)}return await r.json()},TM=async t=>nh(t,`${exports.BASE_URL}/api/server/startPasswordReset`,""),nh=async(t,e=`${exports.BASE_URL}/api/startPasswordReset`,s="server")=>{const r=await exports.kosFetch(`${e}?email=${t}`,{method:"POST",destinationAddress:s});if(!r.ok)throw Error(`There was a problem reseting config; returned status ${r.status}`);return await r.json()},_M=async(t,e)=>ih(t,e,`${exports.BASE_URL}/api/server/resetPassword`),ih=async(t,e,s=`${exports.BASE_URL}/api/resetPassword`)=>{Rt.debug(`resetting password with token ${t} and password ${e.replace(/./g,"*")}`);const r=await exports.kosFetch(`${s}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e})});if(Rt.debug(`password reset returned status ${r.status}`),!r.ok){Rt.error(`password reset failed with message ${r.statusText}`);const n=await r.json();throw Error(`${n==null?void 0:n.error}:There was a problem resetting the password.`)}return await r.json()},SM=async(t,e,s)=>ah(t,e,s,`${exports.BASE_URL}/api/server/acceptInvite`),ah=async(t,e,s,r=`${exports.BASE_URL}/api/server/acceptInvite`)=>{Rt.debug(`accepting invite with token ${t} and password ${e.replace(/./g,"*")}`);const o=await exports.kosFetch(`${r}`,{method:"POST",destinationAddress:"",body:JSON.stringify({token:t,password:e,name:s})});if(Rt.debug(`invitation accept returned status ${o.status}`),!o.ok){Rt.error(`invite failed with message ${o.statusText}`);const i=await o.json();throw Error(`${i==null?void 0:i.error}:There was a problem accepting the invite.`)}return await o.json()};function OM(t,e,s,r){const o=t instanceof Promise?{promise:t,abortController:e,cancelFuture:s,future:r}:t,{promise:n,abortController:i,cancelFuture:a,future:c}=o,u=n;let d=0,h="PENDING",f=!0;const p=new Set;let y;return c&&typeof c=="object"&&(y=E.autorun(()=>{const w=c.progress||0,M=c.status||"PENDING",S=!c.endState;(w!==d||M!==h||S!==f)&&(d=w,h=M,f=S,p.forEach(U=>{try{U(d,h)}catch(x){console.warn("Progress callback error:",x)}}))})),n.finally(()=>{f=!1,i!=null&&i.signal.aborted||(h="COMPLETED",p.forEach(w=>{try{w(d,h)}catch(M){console.warn("Progress callback error:",M)}})),y&&y(),p.clear()}),u.cancel=async()=>{i&&!i.signal.aborted&&i.abort(),a&&await a(),f=!1,h="CANCELLED",p.forEach(w=>{try{w(d,h)}catch(M){console.warn("Progress callback error:",M)}}),y&&y()},u.getController=()=>i,u.isCancelled=()=>(i==null?void 0:i.signal.aborted)??!1,Object.defineProperty(u,"progress",{get:()=>d,enumerable:!0}),Object.defineProperty(u,"status",{get:()=>h,enumerable:!0}),Object.defineProperty(u,"isRunning",{get:()=>f,enumerable:!0}),u.onProgressUpdate=w=>(p.add(w),w(d,h),()=>p.delete(w)),u}const IM=lt.keyframes`
|
|
146
146
|
0% {
|
|
147
147
|
left: -90px;
|
|
148
148
|
color: #eee;
|
|
@@ -154,13 +154,13 @@ ${u}topics:${e}
|
|
|
154
154
|
left: 90px;
|
|
155
155
|
color: #eee;
|
|
156
156
|
}
|
|
157
|
-
|
|
157
|
+
`,$M=lt.css`
|
|
158
158
|
font-size: 100px;
|
|
159
159
|
margin-top: -80px;
|
|
160
160
|
position: relative;
|
|
161
|
-
animation: ${
|
|
161
|
+
animation: ${IM} ease-in-out infinite alternate;
|
|
162
162
|
animation-duration: 1.2s;
|
|
163
|
-
`,
|
|
163
|
+
`,CM=({children:t})=>Na.createPortal(t,document.body);function ch({message:t="Wait a moment while we load your app.",theme:e="light"}){return T.jsx(CM,{children:T.jsxs(DM,{theme:e,children:[t,T.jsx("div",{css:$M,children:"."})]})})}const DM=an.div`
|
|
164
164
|
padding-inline: 20px;
|
|
165
165
|
width: 100%;
|
|
166
166
|
height: 100vh;
|
|
@@ -174,31 +174,31 @@ ${u}topics:${e}
|
|
|
174
174
|
left: 0;
|
|
175
175
|
color: ${({theme:t})=>t==="light"?"black":"white"};
|
|
176
176
|
z-index: 10000;
|
|
177
|
-
`;class
|
|
177
|
+
`;class lh extends m.Component{constructor(e){super(e),this.state={error:null,errorInfo:null}}componentDidCatch(e,s){this.setState({error:e,errorInfo:s})}render(){return this.state.errorInfo?this.props.fallback||T.jsxs("div",{children:[T.jsx("h2",{children:"Something went wrong."}),T.jsxs("details",{style:{whiteSpace:"pre-wrap"},children:[this.state.error&&this.state.error.toString(),T.jsx("br",{}),this.state.errorInfo.componentStack]})]}):this.props.children}}const xM={normal:"#B5F7F6",warn:"#F3D78A",error:"#FC8486"},AM=({value:t=0,title:e,status:s="normal",subtitle:r})=>{const o=lt.css`
|
|
178
178
|
display: flex;
|
|
179
179
|
flex-direction: column;
|
|
180
|
-
`,n=
|
|
180
|
+
`,n=lt.css`
|
|
181
181
|
position: relative;
|
|
182
182
|
height: 18px;
|
|
183
183
|
width: 100%;
|
|
184
184
|
background-color: #ddd;
|
|
185
185
|
border-radius: 5px;
|
|
186
186
|
overflow: hidden;
|
|
187
|
-
`,i=
|
|
187
|
+
`,i=lt.css`
|
|
188
188
|
position: absolute;
|
|
189
189
|
top: 50%; /* position the top edge of the element at the middle of the parent */
|
|
190
190
|
left: 50%; /* position the left edge of the element at the middle of the parent */
|
|
191
191
|
z-index: 5;
|
|
192
192
|
transform: translate(-50%, -50%);
|
|
193
193
|
font-size: smaller;
|
|
194
|
-
`,a=
|
|
194
|
+
`,a=lt.css`
|
|
195
195
|
width: ${t}%;
|
|
196
196
|
height: 35px;
|
|
197
|
-
background-color: ${
|
|
197
|
+
background-color: ${xM[s]};
|
|
198
198
|
text-align: center;
|
|
199
199
|
line-height: 32px;
|
|
200
200
|
color: black;
|
|
201
|
-
`,c=
|
|
201
|
+
`,c=lt.css`
|
|
202
202
|
animation: indeterminateAnimation 1s infinite linear;
|
|
203
203
|
transform-origin: 0% 50%;
|
|
204
204
|
@keyframes indeterminateAnimation {
|
|
@@ -212,7 +212,7 @@ ${u}topics:${e}
|
|
|
212
212
|
transform: translateX(100%) scaleX(0.5);
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
`;return T.jsxs("div",{css:o,children:[T.jsxs("div",{css:n,children:[T.jsx("div",{css:i,children:e}),T.jsx("div",{css:[a,t<0?c:""]})]}),T.jsx("div",{children:r})]})},
|
|
215
|
+
`;return T.jsxs("div",{css:o,children:[T.jsxs("div",{css:n,children:[T.jsx("div",{css:i,children:e}),T.jsx("div",{css:[a,t<0?c:""]})]}),T.jsx("div",{children:r})]})},RM={setModel:()=>!1},bo=m.createContext(RM),PM=()=>{const t=m.useContext(bo);if(t==null)throw new Error("useModels must be used within a KosModelProvider");return t.model},uh=({children:t})=>{const[e,s]=m.useState(),r=m.useCallback(o=>(s(o),!0),[s]);return T.jsx(bo.Provider,{value:{model:e,setModel:r},children:t})},dh=g.createLogger({name:"kos-model-hierarchy-context"}),kM={models:[],addModel:()=>{dh.debug("Default implementation being used. Do Nothing.")}},vo=m.createContext(kM),LM=({children:t})=>{const[e,s]=m.useState([]),r=m.useCallback(o=>{e.includes(o)||(dh.debug("adding to hierarchy context",o.id),s(n=>[...n,o]))},[e]);return T.jsx(vo.Provider,{value:{models:e,addModel:r},children:t})},FM=()=>!0,hh=t=>{const e=m.useContext(vo);if(!e)throw new Error("useContextModelHierarchy must be used within a KosModelCollectionProvider");const s=(t==null?void 0:t.filter)||FM;return m.useMemo(()=>e.models.filter(s),[e.models,s])},NM=t=>hh({filter:s=>{const r=Ae(s.id);return(r==null?void 0:r.type)===t}})[0],UM=g.createLogger({name:"kos-model-loader"}),jM=()=>T.jsx("div",{}),fh=({fallback:t,children:e,...s})=>T.jsx(uh,{children:T.jsx(lh,{fallback:t,children:T.jsx(m.Suspense,{children:T.jsx(ph,{...s,children:e})})})}),ph=t=>{const[e,s]=m.useState(),[r,o]=m.useState(!1),{setModel:n}=m.useContext(bo),i=m.useContext(vo);if(m.useEffect(()=>{t.model&&(s(t.model),n(t.model),o(!0),i&&i.addModel(t.model))},[i,t.model,n]),t.error)throw UM.error(t.error),new Error(t.error);const a=t.loading||T.jsx(jM,{});return T.jsx(T.Fragment,{children:e&&r?t.children:a})},br={header:{title:"Model",createLabel:"Create new Model",deleteLabel:"Delete"},createModal:{okText:"OK",cancelText:"Cancel",title:"Create New Model"}},gh=m.createContext(br),BM=({translations:t=br,children:e})=>{const s={header:{...br.header,...t.header},createModal:{...br.createModal,...t.createModal}};return T.jsx(gh.Provider,{value:s,children:e})};function HM(t,e){const s=_.create(t,!1,e),r=s.whenReady().then(()=>s);return yn(r)}const mh=m.createContext(void 0),KM=(t={models:{},preloadModels:[]},e)=>{const s=HM(t,e),r=({children:o})=>{const n=s.read(),[i,a]=m.useState(n.isOnline);return m.useEffect(()=>{const c=Q(()=>{a(n.isOnline)});return()=>{c()}},[n]),T.jsx(mh.Provider,{value:{kosCore:n,online:i},children:o})};return{KosCoreContextProvider:cn.observer(r)}},yh=()=>{const t=m.useContext(mh);if(t===void 0)throw new Error("useKosCore must be used within a KosCoreContextProvider");return t},qM=8,zM=(t=0)=>new Promise(e=>{setTimeout(()=>{e(!0)},2**t*10)}),dt=new Map;function VM(t,e){if(dt.has(t)){const s=dt.get(t);if(s.status==="finished"){const r=_.getInstance().modelManager.getModelById(t);return{kosModel:r,model:r==null?void 0:r.modelData}}else throw s.promise}else{const s=e().then(()=>{dt.set(t,{status:"finished",key:t})},o=>{throw dt.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw dt.set(t,r),s}}function GM(t,e){return VM(t,e)}async function YM(t,e){const{modelId:s,factory:r,modelType:o,options:n,activate:i}=e;let a=0;await t.whenReady();let c;if(n){const d=typeof o=="string"?t.modelManager.getModelFactory(o):r;if(!d)throw Error("No Factory Specified. Cannot create a new instance");c=d.build(s,n)}const u=t.modelManager.getModelById(s);if(!u){if(a>qM)throw Error(`KOS Model ${s} has not been found`);await zM(a),a=a+1}return await(u==null?void 0:u.whenReady()),u?(c=u.modelData,{kosModel:u,model:c}):{kosModel:void 0,model:void 0}}const Z=t=>{const{modelId:e,modelType:s,activate:r,destroyOnUnmount:o}=t,n=yh(),[i,a]=m.useState(!1),[c,u]=m.useState(),{kosModel:d,model:h}=GM(e||s||"",()=>YM(n.kosCore,t));return m.useEffect(()=>{t.forceUpdate&&h&&xn(h)&&h.updateModel(t.options||{})},[h]),m.useEffect(()=>{async function f(){try{return await n.kosCore.whenReady(),r&&await(d==null?void 0:d.fsm.transitionTo(k.GO_ACTIVE,v.ACTIVE)),a(!0),d}catch(y){throw u(y.message),y}}let p;return n.kosCore&&e&&f().then(y=>{p=Q(()=>{const w=(y==null?void 0:y.status)===v.READY;a(w)})}).catch(y=>{console.error(y)}),()=>{if(r){if(h!=null&&h.id){const y=n.kosCore.modelManager.getModelById(h.id);y==null||y.fsm.transitionTo(k.GO_INACTIVE,v.INACTIVE).then(()=>{if(o){const w=h.id;De(h).then(()=>{dt.delete(w),p==null||p()})}})}}else o&&h&&De(h).then(()=>{dt.delete(e),p==null||p()})}},[r,o,n.kosCore,d,h,e]),{model:h,ready:i,error:c,status:{model:h,ready:i,error:c},KosModelLoader:fh}},xi=()=>{const t=$r.type;return Z({modelId:t,modelType:$r.type,options:{}})},Ai=m.createContext(void 0),WM=({children:t})=>{const{model:e,ready:s}=xi(),r=m.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(Ai.Provider,{value:r,children:t})},QM=()=>{const t=m.useContext(Ai);if(!t)throw new Error("useKosTimeContext must be used within a KosTimeProvider");return t},Ri=()=>{const t=Pr.type;return Z({modelId:t,modelType:Pr.type,options:{}})};function XM(t){return()=>e=>{const{model:s,status:r,KosModelLoader:o}=Ri();return T.jsx(o,{...r,children:T.jsx(t,{...e,softwareInfo:s})})}}const Pi=m.createContext(void 0),ZM=({children:t})=>{const{model:e,ready:s}=Ri(),r=m.useMemo(()=>s&&e?{model:e}:{},[s,e]);return T.jsx(Pi.Provider,{value:r,children:t})},JM=()=>{const t=m.useContext(Pi);if(!t)throw new Error("useSoftwareInfoContext must be used within a SoftwareInfoProvider");return t},bh=new Wl,vh=m.createContext(bh);function eT({children:t}){return T.jsx(vh.Provider,{value:bh,children:t})}const ki=m.createContext(void 0),tT=()=>{const t=window.location.origin,e=be();return(e==null?void 0:e.host)||t},sT=({children:t,appContext:e,locale:s="en",resolver:r,rootUrl:o,descriptorResolver:n})=>{const[i,a]=m.useState(!1),[c,u]=m.useState(),[d,h]=m.useState(),f=o||tT(),p=m.useMemo(()=>e??"app/system",[e]);m.useEffect(()=>{async function M(){const U=(Array.isArray(p)?p:[p]).map(J=>(n||bd(J))()),L=(await Promise.allSettled(U)).map(J=>{if(J.status==="rejected"){g.warn("Failed to load localization descriptor",J.reason);return}return J.value}).filter(J=>!!J).reverse().reduce((J,we)=>{const H=we.path;return Object.keys(we.namespaces).forEach(ns=>{const te=we.namespaces[ns];te.basePath=H}),{...J,namespaces:{...J.namespaces,...we.namespaces}}},{});u(L)}M()},[p,n]),m.useEffect(()=>{async function M(){if(c){const S=f,{translations:U}=await Td.init({lang:s,descriptor:c,defaultNamespace:"common",resolver:r,rootUrl:S});h(U),a(!0)}}M()},[s,c,r,f]);const y=m.useMemo(()=>i?{setLocale:M=>{d&&(d.currentLocale=M)}}:{setLocale:()=>{throw new Error("Translations not ready")}},[i,d]),w=i?t:null;return T.jsx(ki.Provider,{value:y,children:w})},rT=()=>{const t=m.useContext(ki);if(!t)throw new Error("useTranslationContainerContext must be used within a TranslationContainerProvider");return t},oT=()=>{const t=qt.type;return Z({modelId:t,modelType:qt.type,options:{}})};function nT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=oT();return T.jsx(o,{...r,children:T.jsx(t,{...e,canvasDispatcher:s})})}}const iT=(t,e,s)=>{const r=atob(t),o=new Uint8ClampedArray(e*s*4);for(let n=0,i=0;n<r.length&&i<o.length;n+=3,i+=4)o[i]=r.charCodeAt(n),o[i+1]=r.charCodeAt(n+1),o[i+2]=r.charCodeAt(n+2),o[i+3]=255;return o};function aT({ctx:t,format:e,dataString:s,width:r,height:o,pixelSize:n}){const i=iT(s,r,o),a=new ImageData(i,r,o),c=document.createElement("canvas");c.width=r,c.height=o;const u=c.getContext("2d");u==null||u.putImageData(a,0,0),t.imageSmoothingEnabled=!1,t.clearRect(0,0,r*n,o*n),t.drawImage(c,0,0,r*n,o*n)}const cT=g.createLogger({name:"canvas-streamer"});cT.debug("main-view component loaded");const Lo=10,wh=cn.observer(({canvasDispatcher:t,height:e=30,width:s=50,defaultFps:r=10,showPreview:o=!1,name:n,apiPath:i="/api/system/canvas"})=>{const a=m.useRef(null),[c,u]=m.useState();m.useEffect(()=>{const h=t.addNamedEndpoint(n,{apiPath:i,fps:r,width:s,height:e,id:n});u(h)},[t]);const d=m.useCallback(h=>{if(a.current&&o){const f=a.current.getContext("2d");f&&aT({ctx:f,format:"base64",dataString:h,height:e,width:s,pixelSize:Lo})}},[s,e,o]);return m.useEffect(()=>{c&&(c.onFrame=d,c.width=s,c.height=e,c.fps=r)},[c,d,s,e,r]),o&&Na.createPortal(T.jsx(uT,{children:T.jsx(dT,{children:T.jsx("canvas",{ref:a,width:s*Lo,height:e*Lo,style:{border:"1px solid black"}})})}),document.body)}),lT=nT(wh),uT=an.div`
|
|
216
216
|
display: flex;
|
|
217
217
|
flex-direction: column;
|
|
218
218
|
gap: 8px;
|
|
@@ -220,9 +220,9 @@ ${u}topics:${e}
|
|
|
220
220
|
width: 100%;
|
|
221
221
|
justify-content: space-between;
|
|
222
222
|
align-items: center;
|
|
223
|
-
`,
|
|
223
|
+
`,dT=an.div`
|
|
224
224
|
display: flex;
|
|
225
225
|
flex-direction: column;
|
|
226
226
|
align-items: center;
|
|
227
|
-
`,Ah=()=>{const t=Yr.type;return ee({modelId:t,modelType:Yr.type,options:{}})};function HT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ah();return T.jsx(o,{...r,children:T.jsx(t,{...e,device:s})})}}function KT(t,e,s){const r=new Promise(o=>{I.getInstance().whenReady().then(()=>{const{model:n}=I.getInstance().modelManager.createModelInstance(t,e??t,s);return n.whenReady().then(()=>{o(n.modelData)})})});return On(r)}function qT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ni();return T.jsx(o,{...r,children:T.jsx(t,{...e,kosTime:s})})}}const xh=()=>{const t=Bs.type;return ee({modelId:t,modelType:Bs.type,options:{}})};function zT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=xh();return T.jsx(o,{...r,children:T.jsx(t,{...e,networkInterfaceContainer:s})})}}const Rh=()=>{const t=Fr.type;return ee({modelId:t,modelType:Fr.type,options:{}})};function VT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Rh();return T.jsx(o,{...r,children:T.jsx(t,{...e,oTA:s})})}}function GT(t,e){y.useEffect(()=>{function s(o){t.current&&!t.current.contains(o.target)&&e()}function r(o){o.key==="Escape"&&e()}return document.addEventListener("mousedown",s),document.addEventListener("keydown",r,!1),()=>{document.removeEventListener("mousedown",s),document.removeEventListener("keydown",r,!1)}},[t,e])}function YT(t){const e=y.useRef(null),s=t.onAlert;return GT(e,s),T.jsx("div",{ref:e,style:{width:"100%"},children:t.children})}const WT=t=>{var u;const{stateProp:e}=t,[s,r]=y.useState((u=t.stateProp)==null?void 0:u.value),[o,n]=y.useState(!1),[i,a]=y.useState(void 0);return y.useEffect(()=>{async function d(h){try{h&&(await ge(h),n(!0))}catch(f){a(f.message)}}d(e)},[e]),y.useEffect(()=>{const d=Z(()=>{e&&o&&r(e.value)});return()=>{d()}},[o,e]),[s,{ready:o,error:i}]},Ph=()=>{const[t,e]=y.useState(!1),[s,r]=y.useState([]),o=Wt.type,n=ee({modelId:o,modelType:Wt.type,options:{}});return y.useEffect(()=>{const i=Z(()=>{var a,c;e(((a=n.model)==null?void 0:a.isStorageInserted)??!1),r(((c=n.model)==null?void 0:c.data)??[])});return()=>{i()}},[n.model]),{...n,inserted:t,devices:s}};function QT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ph();return T.jsx(o,{...r,children:T.jsx(t,{...e,storageDeviceContainer:s})})}}const zo=m.createLogger({name:"use-timer"}),ZT=({timerName:t,onTimerExpired:e,onTimerTick:s,timerEventActions:r,autoStart:o})=>{const n=dh.getTimer(t);y.useEffect(()=>{if(!n){console.warn(`Timer with name ${t} does not exist.`);return}const u=C(Ri,d=>{const{name:h,action:f,remainingTime:p}=d==null?void 0:d.body;h===t&&(f===ki?e({name:h,action:f,remainingTime:p,timer:n}):r!=null&&r[f]&&r[f]({name:h,action:f,remainingTime:p,timer:n}))});return o&&n.start(),()=>{u.unsubscribe()}},[o,e,r,t,n]),y.useEffect(()=>{if(!n||!s)return;const u=`${Pi}/${t}`,d=C(u,h=>{const{name:f,remainingTime:p}=h==null?void 0:h.body;f===t&&s({name:f,remainingTime:p,timer:n})});return()=>{d.unsubscribe()}},[s,t,n]);const i=y.useCallback(()=>{n?n.start():zo.warn(`Timer with name ${t} does not exist.`)},[n,t]),a=y.useCallback(()=>{n?n.reset():zo.warn(`Timer with name ${t} does not exist.`)},[n,t]),c=y.useCallback(()=>{n?n.pause():zo.warn(`Timer with name ${t} does not exist.`)},[n,t]);return{timer:n,start:i,reset:a,pause:c}},XT=t=>{const e=/[\\^$.*+?()[\]{}|]/g;return RegExp(e.source).test(t)?t.replace(e,"\\$&"):t},JT=t=>t instanceof RegExp,e_=t=>typeof t=="string",t_=(t,e,s)=>{if(t===""||e==="")return t;let r=e;JT(r)||(r=new RegExp("("+XT(r)+")","gi"));const o=t.split(r);for(let n=1,i=o.length;n<i;n+=2)o[n]=s(o[n],n);return o},kh=(t,e,s)=>{let r=t;return Array.isArray(r)||(r=[r]),r.flatMap(o=>e_(o)?t_(o,e,s):o)};function s_(t,e){let s=t;return Object.entries(e).forEach(([r,o])=>{const n=new RegExp(`<${r}>(.*?)</${r}>|<${r}/>`,"g");s=kh(s,n,(i,a)=>o.type==="br"?T.jsx("br",{}):y.cloneElement(o,{key:`${r}-${a}`},i))}),s}const r_=t=>{const{i18nKey:e,t:s,defaults:r,components:o,values:n={},context:i}=t,a=s(e,{defaultValue:r,data:n,context:i,returnObjects:!0}),c=s_(a,o||{});return T.jsx("span",{className:t.className,children:c})},Dt=new Map;function o_(t,e){if(Dt.has(t)){const s=Dt.get(t);if(s.status==="finished")return s.result;throw s.promise}else{const s=e().then(o=>{Dt.set(t,{status:"finished",result:o})},o=>{throw Dt.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Dt.set(t,r),s}}function fn(t,e){return o_(t,e)}const n_=async()=>{const t=await Gc(Ve.type);return await ge(t.model),t.model},i_=async(t,e,s)=>{const r=t.resolveNamespace(e);await ge(r);for(const o of s){const n=t.resolveNamespace(o);await ge(n),Dt.set(o,{status:"finished",result:n})}return r},a_=(t,e)=>{const s=[t].flat(),[r,...o]=s,n=fn(Ve.type,n_),i=s.join("__"),a=fn(i,()=>i_(n,r,o)),c=y.useMemo(()=>({exists:d=>{const h=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.exists(h):!1}}),[e==null?void 0:e.keyPrefix,a]);return{t:y.useCallback((d,h)=>{const f=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.resolveKey(f,h):(m.debug(`Translation model ${t} not ready for key: ${f}`),f)},[e==null?void 0:e.keyPrefix,t,a]),i18n:c}},Lh=()=>{const t=Ve.type;return ee({modelId:t,modelType:Ve.type,options:{}})};function c_(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Lh();return T.jsx(o,{...r,children:T.jsx(t,{...e,translationContainer:s})})}}const l_=t=>ee({modelId:t,modelType:Us.type}),Ki=()=>ee({modelId:Vt.type,modelType:Vt.type,options:{}}),u_=({troubleType:t,condition:e})=>{const{model:s}=Ki(),[r,o]=y.useState(!1),[n,i]=y.useState([]),a=y.useCallback(()=>{var c,u;return n.length>0&&((c=n[0])!=null&&c.resolvable)?(u=n[0])==null?void 0:u.resolve():Promise.resolve(void 0)},[n]);return y.useEffect(()=>Z(()=>{const u=(t?s==null?void 0:s.troubles.getIndexByKey("byType",t):s==null?void 0:s.troubles.data)||[],d=e?u.filter(e):u;o(d.length>0),i(d)}),[e,s,t]),[r,a,n.length>0?n[0]:void 0,n]};function d_(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ki();return T.jsx(o,{...r,children:T.jsx(t,{...e,troubleContainer:s})})}}const Fh=()=>{const t=Ks.type,e=ee({modelId:t,modelType:Ks.type,options:{},activate:!0,destroyOnUnmount:!0}),[s,r]=y.useState(!1),[o,n]=y.useState(!1),[i,a]=y.useState([]);return y.useEffect(()=>{const c=Z(()=>{var u,d,h;r(((u=e.model)==null?void 0:u.isUsbInserted)??!1),n(((d=e.model)==null?void 0:d.hasAvailableUpdates)??!1),a(((h=e.model)==null?void 0:h.data)??[])});return()=>{c()}},[e.model]),{...e,inserted:s,updateAvailable:o,updates:i}};function h_(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Fh();return T.jsx(o,{...r,children:T.jsx(t,{...e,usbUpdateContainer:s})})}}const f_=({path:t,propKey:e})=>{const{status:s}=ee({modelType:xs.type,modelId:t,options:{path:t}}),[r,o]=y.useState(!1),[n,i]=y.useState(),[a,c]=y.useState(""),[u,d]=y.useState(),h=f=>{n&&e&&n.updateProperty(e,f)};return y.useEffect(()=>{var f;s.model&&i(s.model),s.model&&e&&((f=s.model)!=null&&f.props.has(e)?c(s.model.props[e]):d(`property ${e} not found`)),s.ready&&o(s.ready)},[s.ready,s.model,e]),y.useEffect(()=>{e&&M.autorun(()=>{const f=n==null?void 0:n.props[e];c(f||"")})},[n,e]),{config:n,ready:r,value:a,error:u,updateValue:h}},p_=(t,e)=>{switch(e.type){case"UPDATE":return e.payload;default:return t}},Nh=({configProperty:t,optionsTransformer:e})=>{const[s,r]=y.useState(!1),[o,n]=y.useState(""),[i,a]=y.useReducer(p_,{value:String(t==null?void 0:t.value),displayValue:t==null?void 0:t.displayValue,significantValue:t==null?void 0:t.significantValue,unit:t==null?void 0:t.unit,options:t==null?void 0:t.options,mappedOptions:[],updateProperty:t==null?void 0:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}),c=y.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&(t==null||t.updateProperty(d))},[t]);return y.useEffect(()=>{async function u(d){try{d&&(await ge(d),r(!0))}catch(h){n(h.message)}}u(t)},[t]),y.useEffect(()=>{const u=Z(()=>{if(t&&s){let d=[];e&&(d=e(t.options)),a({type:"UPDATE",payload:{value:String(t.value),displayValue:t.displayValue,significantValue:t.significantValue,unit:t.unit,options:t.options,mappedOptions:d,updateProperty:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}})}});return()=>{u()}},[t,e,s]),{...i,configSelectProps:{onChange:c,value:i.value,options:e?i.mappedOptions||[]:i.options||[]},ready:s,error:o}};function g_(t,e){const s=e??new Date().getFullYear(),r=[31,28,31,30,31,30,31,31,30,31,30,31];return t===1&&(s%4===0&&s%100!==0||s%400===0)?29:r[t]??0}function m_(t,e){return new Date(t,e,0).getDate()}function Uh(t,e){const s=g_(e,t),r=[];for(let o=1;o<=s;o++)r.push(o);return r}function jh(){return[...Array(12).keys()].map(e=>new Date(0,e).getMonth())}function Bh(t=[2018,2028]){const e=[];for(let s=t[0];s<=t[1];s++)e.push(s);return e}function Hh(t,e=[2018,2028]){const s=Bh(e);return t==="long"?s:s.map(r=>Number(r.toString().substring(2)))}function qi(t="numeric",e="en-US"){const s=new Intl.DateTimeFormat(e,{month:t,timeZone:"UTC"}).format;return[...Array(12).keys()].map(r=>s(new Date(Date.UTC(0,r,1))))}function y_({locale:t="en-US",year:e,month:s,day:r,formatOptions:o={weekday:"long",year:"numeric",month:"long",day:"numeric"},displayOrder:n}){const i=s-1,a=new Date(e,i,r),c=new Intl.DateTimeFormat(t,{month:o.month}).format(a),u=new Intl.DateTimeFormat(t,{year:o.year}).format(a),d=new Intl.DateTimeFormat(t,{day:o.day}).format(a);return n?n=="MMDDYY"?`${c} ${d} ${u}`:n==="DDMMYY"?`${d} ${c} ${u}`:n==="YYMMDD"?`${u} ${c} ${d}`:`${u} ${d} ${c}`:new Intl.DateTimeFormat(t,o).format(a)}function Me(t){return t.toString().length===2?new Date(Date.parse(`01 Jan 20${t}`)).getFullYear():t}function b_(t){return typeof t=="string"?new Date(Date.parse(`01 ${t.substring(0,3)} 2023`)).getMonth()+1:t}function Kh(t,e,s){const r=Me(e),o=new Date(r,t,1).getDay(),n=new Date(r,t+1,0).getDate();return[...Array(42).keys()].map(a=>a<o||a>n+o-1?{label:"",value:0,disabled:!0}:s[a-o])}function Ms(t,e,s){const r=e-1,o=new Date(t,r,s);return new Date(o).getMonth()===r&&new Date(o).getDate()===s}function Ts(t,e){return new Date(t,e,0).getDate()}function qh(t="en-US",e="short"){const s=new Intl.DateTimeFormat(t,{weekday:e}).format;return[...Array(7).keys()].map(r=>s(new Date(Date.UTC(2021,5,r))))}function zh({locale:t="en-US",year:e=new Date().getFullYear(),month:s=new Date().getMonth(),yearRange:r=[2018,2028],daysOfWeekFilter:o=[],formatOptions:{yearFormat:n="long",monthFormat:i="long",dayFormat:a="short"}={}}){const c=zi(n,r),u=Vh(n,r,t),d=Gh(i,t),h=Yh(i,t),f=Vi(e,s),p=Wh(e,s,t,o),g=Xh(s,e,p),v=Qh(t,a);return{daysArray:f,monthsArray:d,yearsArray:c,yearsOptionsArray:u,monthsOptionsArray:h,daysOptionsArray:p,calendarDayArray:g,dayNamesArray:v}}function zi(t="long",e=[2018,2028]){return y.useMemo(()=>Hh(t,e),[t,e])}function Vh(t="long",e=[2018,2028],s="en-US"){const r=zi(t,e);return y.useMemo(()=>r.map(n=>({label:n.toLocaleString(s).replace(",",""),value:n})),[s,r])}function Gh(t,e="en-US"){return y.useMemo(()=>qi(t,e),[t,e])}function Yh(t,e="en-US"){const s=y.useMemo(()=>jh(),[]),r=y.useMemo(()=>qi(t,e),[t,e]);return y.useMemo(()=>[...Array(12).keys()].map(n=>({label:r[n],value:Number(s[n])})),[r,s])}function Vi(t,e){const s=Me(t);return y.useMemo(()=>Uh(s,e),[e,s])}const v_=(t,e,s,r=[])=>{const o=new Date(t,e,s).getDay();return r.length>0&&r.includes(o)};function Wh(t,e,s="en-US",r=[]){const o=Vi(t,e);return y.useMemo(()=>o.map(i=>({label:i.toLocaleString(s),value:i,disabled:v_(t,e,i,r)})),[r,s,e,o,t])}function Qh(t="en-US",e="short"){return y.useMemo(()=>qh(t,e),[t,e])}function Zh({year:t=new Date().getFullYear(),month:e=new Date().getMonth(),day:s=new Date().getDate(),formatString:r}){const o=e,n=new Date(t,o,s);return{formattedDate:Ze.format(n,r)}}function Xh(t,e,s){return y.useMemo(()=>Kh(t,e,s),[t,e,s])}var Jh=(t=>(t.MMDDYY="MMDDYY",t.DDMMYY="DDMMYY",t.YYMMDD="YYMMDD",t.YYDDMM="YYDDMM",t))(Jh||{});function w_({locale:t="en-US",date:{year:e=new Date().getFullYear(),month:s=new Date().getMonth(),day:r=new Date().getDate()}={year:new Date().getFullYear(),month:new Date().getMonth(),day:new Date().getDate()},formatOptions:{yearFormat:o="long",monthFormat:n="long",dayFormat:i="short",formatString:a="yyyy/MM/dd"}={},filterOptions:{yearsRange:c=[2018,2028],daysOfWeekFilter:u=[]}={}}){const[d,h]=y.useState(e),[f,p]=y.useState(c),[g,v]=y.useState(s),[E,_]=y.useState(r);y.useEffect(()=>{h(e)},[e]),y.useEffect(()=>{v(s)},[s]),y.useEffect(()=>{_(r)},[r]);const{yearsArray:R,yearsOptionsArray:S,monthsArray:O,monthsOptionsArray:L,daysArray:Y,daysOptionsArray:ae,calendarDayArray:H,dayNamesArray:ls}=zh({locale:t,year:d,yearRange:f,month:g,formatOptions:{yearFormat:o,monthFormat:n,dayFormat:i},daysOfWeekFilter:u}),{formattedDate:se}=Zh({year:d,month:g,day:E,formatString:a});return{dateActions:{setYear:h,setYearRange:p,setMonth:v,setDay:_,nextMonth:()=>{const oe=g<11?Me(d):Me(d+1),he=g<11?g+1:0;if(!Ms(oe,he,E)){const ot=Ts(oe,he);_(ot)}he===0&&h(oe),v(he)},previousMonth:()=>{const oe=Me(g===0?d-1:d),he=g===0?11:g-1;if(!Ms(oe,he,E)){const ot=Ts(oe,he);_(ot)}he===11&&h(oe),v(he)},nextYear:()=>{const oe=d<f[1]?d+1:f[0],he=Me(oe);if(Ms(he,g,E))h(oe);else{const ot=Ts(Me(d+1),g);_(ot),h(oe)}},previousYear:()=>{const oe=d>f[0]?d-1:f[0],he=Me(oe);if(Ms(he,g,E))h(oe);else{const ot=Ts(Me(d-1),g);_(ot),h(oe)}}},dateState:{year:d,yearRange:f,month:g,day:E,yearsArray:R,yearsOptionsArray:S,monthsArray:O,monthsOptionsArray:L,daysArray:Y,daysOptionsArray:ae,calendarDayNames:ls,calendarDayArray:H,formattedDate:se}}}function ef({date:t=new Date,dateFormat:e,timeFormat:s,options:r={}}){const[o,n]=y.useState("Formatting Time..."),[i,a]=y.useState("Formatting Date..."),c=!!r.ignoreDateFormat,{model:u,ready:d}=ee({modelId:ne.type,modelType:ne.type,options:{}}),h=typeof t=="string"?Ze.parseISO(t):t;return y.useEffect(()=>{c?a(""):e?a(Ze.format(h,e)):d&&a(Ze.format(h,u!=null&&u.selectedDateFormat?u==null?void 0:u.selectedDateFormat:""))},[c,t,e,h,u,d]),y.useEffect(()=>{s?n(Ze.format(h,s)):d&&n(Ze.format(h,u!=null&&u.selectedTimeFormat?u==null?void 0:u.selectedTimeFormat:""))},[t,s,h,u,d]),{formattedDate:i,formattedTime:o}}const tf=({secondsFromMidnight:t=0})=>{const[e,s]=y.useState(0),[r,o]=y.useState(0),[n,i]=y.useState(0),[a,c]=y.useState(new Date),{formattedTime:u}=ef({date:a,options:{ignoreDateFormat:!0}});return y.useEffect(()=>{const d=Number(t),h=Math.floor(d/3600),f=Math.floor(d%3600/60),p=d%60;s(h),o(f),i(p);const g=new Date;g.setHours(0,0,0,0);const v=new Date(g.getTime()+d*1e3);c(new Date(v))},[t]),{hours:e,minutes:r,seconds:n,formattedTime:u,timeActions:{setHours:s,setMinutes:o,setSeconds:i}}},E_=({configProperty:t})=>{const{value:e}=Nh({configProperty:t}),s=parseInt(e||"0",10),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}=tf({secondsFromMidnight:s}),c=y.useRef();return y.useEffect(()=>{const u=r*3600+o*60+n;return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{t&&t.updateProperty(u.toString())},100),()=>{c.current&&clearTimeout(c.current)}},[t,r,o,n]),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}};function M_(t,e={}){const{intervalMs:s=5*60*1e3,immediate:r=!0}=e;y.useEffect(()=>{const o=()=>{try{t({__warmup:!0})}catch{}};r&&("requestIdleCallback"in window?requestIdleCallback(o):setTimeout(o,1));const n=s?setInterval(o,s):null;return()=>{n&&clearInterval(n)}},[t,s,r])}const T_=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),__=(t=T_)=>{const[e,s]=y.useState([]),[r,o]=y.useState(),{model:n,ready:i}=ee({modelType:ne.type,modelId:ne.type,options:{}});y.useEffect(()=>{const c=Z(()=>{s((n==null?void 0:n.dateFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),y.useEffect(()=>{const c=Z(()=>{n!=null&&n.dateFormatId&&(n!=null&&n.selectedDateFormat)&&o({id:n==null?void 0:n.dateFormatId,value:n==null?void 0:n.selectedDateFormat})});return()=>{c()}},[n==null?void 0:n.selectedDateFormat,n==null?void 0:n.dateFormatId]);const a=y.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedDateFormat(u))},[n]);return{raw:(n==null?void 0:n.dateFormatOptions.map(c=>c.id))??[],regionModel:n,selectedDateFormat:(r==null?void 0:r.value)||"",dateFormatId:(r==null?void 0:r.id)||"",updateDateFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)||"",options:e}}},S_=t=>T.jsx("option",{title:t,value:t,children:t},t),sf="kos:service:region:settings",rf="timeZone",O_=`${sf}-${rf}`,I_=(t=S_)=>{const[e,s]=y.useState([]),[r,o]=y.useState(""),{model:n,ready:i}=ee({modelType:ne.type,modelId:ne.type,options:{}}),a=wt.factory(O_)({path:sf,attribute:rf});y.useEffect(()=>{const u=Z(()=>{s((n==null?void 0:n.timeZones.map(t))||[]),n!=null&&n.timeZones.length&&hn(n==null?void 0:n.timeZones[0])});return()=>{u()}},[n,i,t]),y.useEffect(()=>{const u=Z(()=>{o(a.value||"")});return()=>{u()}},[a.value]);const c=y.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&hn(d)},[]);return{options:e,raw:(n==null?void 0:n.timeZones)??[],regionModel:n,selectedTimeZone:r,timeZones:(n==null?void 0:n.timeZones)??[],updateTimeZone:c,selectProps:{onChange:c,value:r,options:e}}},of="kos:service:region",nf="regionId",$_=`${of}-${nf}`,C_=t=>T.jsx("option",{title:t,value:t,children:t},t),af=(t=C_)=>{const[e,s]=y.useState([]),[r,o]=y.useState("factory"),{model:n,ready:i}=ee({modelType:ne.type,modelId:ne.type,options:{}}),a=wt.factory($_)({path:of,attribute:nf});y.useEffect(()=>{const u=Z(()=>{s((n==null?void 0:n.availableRegions.map(t))||[])});return()=>{u()}},[n,i,t]),y.useEffect(()=>{const u=Z(()=>{o(a.value||"factory")});return()=>{u()}},[a.value]);const c=y.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&lh(d)},[]);return{raw:(n==null?void 0:n.availableRegions)??[],regionModel:n,regionData:n==null?void 0:n.selectedRegion,selectedRegion:r,updateRegion:c,regionSelectProps:{onChange:c,value:r,options:e}}},D_=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),A_=(t=D_)=>{const[e,s]=y.useState([]),[r,o]=y.useState(),{model:n,ready:i}=ee({modelType:ne.type,modelId:ne.type,options:{}});y.useEffect(()=>{const c=Z(()=>{s((n==null?void 0:n.timeFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),y.useEffect(()=>{const c=Z(()=>{n!=null&&n.timeFormatId&&(n!=null&&n.selectedTimeFormat)&&o({id:n==null?void 0:n.timeFormatId,value:n==null?void 0:n.selectedTimeFormat})});return()=>{c()}},[n==null?void 0:n.selectedTimeFormat,n==null?void 0:n.timeFormatId]);const a=y.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedTimeFormat(u))},[n]);return{raw:(n==null?void 0:n.timeFormatOptions.map(c=>c.id))??[],regionModel:n,selectedTimeFormat:(r==null?void 0:r.value)??"",timeFormatId:(r==null?void 0:r.id)??"",updateTimeFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)??"",options:e}}},x_=(t,e)=>y.useMemo(()=>Wn(t),e),R_={config:{attributes:!0,childList:!0,subtree:!0}};function P_(t,e,s=R_){const[r,o]=y.useState(null);y.useEffect(()=>{if(!e||typeof e!="function")throw new Error("A valid callback function is required");const n=new MutationObserver(e);o(n)},[e,s,o]),y.useEffect(()=>{if(!r)return()=>{};if(!t)throw new Error("A valid DOM element is required");const{config:n}=s;try{r.observe(t,n)}catch(i){m.error(i)}return()=>{r&&r.disconnect()}},[r,t,s])}const cf={validateStart:function(t){return!0},validateStop:function(t){const e=t.event.currentTarget.getBoundingClientRect(),[s,r]=t.xy;return s<e.left||s>e.right||r<e.top||r>e.bottom}},Vo=m.createLogger({name:"usePressGesture",group:"kos-hooks"});function k_({onPressed:t,onRelease:e,intersectionStrategy:s=cf}){const r=y.useRef(!1),o=vf.useGesture({onDragStart:c=>{Vo.info("onDragStart",c.type),s.validateStart(c)&&(t&&t(),r.current=!0)},onDrag:c=>{Vo.info("onDrag",c.type),r.current&&s.validateStop(c)&&(e&&e(),r.current=!1)},onDragEnd:c=>{Vo.info("onDragEnd",c.type),r.current&&e&&(e(),r.current=!1)}}),n=()=>{t&&t(),r.current=!0},i=()=>{r.current&&e&&(e(),r.current=!1)},a=()=>{r.current&&e&&(e(),r.current=!1)};return{dom:o,mesh:()=>({onPointerDown:n,onPointerUp:i,onPointerOut:a})}}const lf=()=>{const[t,e]=y.useState(!1),s=I.getInstance();return y.useEffect(()=>{const r=Z(()=>{s&&s.reloading!==t&&e(s.reloading)});return()=>{r()}},[s,t]),[t]};function uf(t=!1,e="2-digit"){return y.useMemo(()=>{const s=t?12:24;return Array.from({length:s},(r,o)=>{const n=t&&o===0?12:o%s;return{id:o,label:e==="2-digit"?n.toString().padStart(2,"0"):n.toString()}})},[e,t])}function pn(t,e="2-digit",s=0,r=0){return y.useMemo(()=>Array.from({length:t},(o,n)=>{const i=String(n+s);return{id:n+r,label:e==="2-digit"?i.padStart(2,"0"):i}}),[t,s,r,e])}function df(t="en-US"){return y.useMemo(()=>["AM","PM"].map(e=>{const s=new Intl.DateTimeFormat(t,{hour:"2-digit",hour12:!0}).formatToParts(new Date().setHours(e==="AM"?0:12))[2].value;return{id:s,label:s}}),[t])}function hf({formatOptions:{hour12:t=!0,hour:e="2-digit",minute:s="2-digit",second:r="2-digit"}={hour12:!0,hour:"2-digit",minute:"2-digit",second:"2-digit"},locale:o="en-US"}){const n=uf(t,e),i=pn(60,s),a=pn(60,r),c=df(o);return{hourOptions:n,minuteOptions:i,secondOptions:a,amPmOptions:c}}function ff(t,e){return Ze.format(t,e)}function pf({formatOptions:t,initialDate:e=new Date,locale:s="en-US",format:r="HH:mm"}){const[o,n]=y.useState(e),i=y.useCallback(v=>{n(E=>{const _=new Date(E);return _.setHours(Number(v)),_})},[]),a=y.useCallback(v=>{n(E=>{const _=new Date(E);return _.setMinutes(Number(v)),_})},[]),c=y.useCallback(v=>{n(E=>{const _=new Date(E);return _.setSeconds(Number(v)),_})},[]),u=y.useCallback(v=>{const E=new Date(v);n(E)},[]),d=ff(o,r),{hourOptions:h,minuteOptions:f,secondOptions:p,amPmOptions:g}=hf({formatOptions:t,locale:s});return{amPmOptions:g,formattedTime:d,hourOptions:h,minuteOptions:f,secondOptions:p,setHours:i,setMinutes:a,setSeconds:c,setTime:u,time:new Date(o)}}const L_=t=>{const{regionModel:e}=af(),s=y.useMemo(()=>({hour12:e==null?void 0:e.is12HourTimeFormat}),[e==null?void 0:e.is12HourTimeFormat]);return pf({...t,locale:e==null?void 0:e.regionId,format:e==null?void 0:e.selectedTimeFormat,formatOptions:s})};function F_(t,e,s={}){const{disposeOnUnmount:r=!0}=s,[o,n]=y.useState(!1),[i,a]=y.useState(void 0),c=y.useRef(null),u=y.useRef(!0),d=y.useRef(!1),h=y.useMemo(()=>{if(!u.current&&c.current&&r&&mr(c.current)){const p=c.current;Promise.resolve().then(()=>{mr(p)&&p.dispose()})}u.current=!1,d.current=!1;const f=t();return c.current=f,f},e);return y.useEffect(()=>{d.current||(sl(h)?(d.current=!0,n(!1),a(void 0),h.ready().then(()=>{n(!0)}).catch(f=>{a(f),n(!1)})):(n(!0),a(void 0)))},[h]),y.useEffect(()=>()=>{r&&c.current&&mr(c.current)&&c.current.dispose(),c.current=null},[r]),{viewModel:h,ready:o,error:i}}function N_(t){return e=>{const[s]=lf();return s?T.jsx(bh,{message:"Wait a moment while your project reloads..."}):T.jsx(t,{...e})}}const qa=m.createLogger({name:"studio-properties-service",group:"Services"}),U_="/api/kos/studio/properties",gf=async t=>{if(qa.debug("sending GET for studio-properties"),!t)throw qa.error("connectionId is undefined"),new Error("connectionId is undefined");return await Ne.get(U_,{},{destinationAddress:t,timeout:500})},j_=Object.freeze(Object.defineProperty({__proto__:null,getStudioProperties:gf},Symbol.toStringTag,{value:"Module"}));var B_=Object.getOwnPropertyDescriptor,H_=(t,e,s,r)=>{for(var o=r>1?void 0:r?B_(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const mf="studio-properties-model",K_="/kos/studio/properties",za={"kos.studio.tool.legacy":1};let gn=class{constructor(t,e,s){l(this,"id");l(this,"connectionId");l(this,"unsubscribe",null);l(this,"logger");l(this,"data");this.id=t,this.logger=s.logger,this.data=Re(),this.connectionId=e.connectionId}async init(){this.logger.debug(`initializing studio-properties ${this.id}`)}async load(){this.logger.debug(`loading studio-properties ${this.id}`)}async terminatePropertiesSession(){var t;(t=this.unsubscribe)==null||t.call(this)}async initializePropertiesSession(){this.unsubscribe=Nt.getInstance().subscribeTopic({topic:K_,destinationAddress:this.connectionId,callback:s=>{this.logger.error(`Received studio-properties message for connection ${this.connectionId}: ${JSON.stringify(s)}`)}});const[t,e]=await gf(this.connectionId);if(t){this.logger.error(`Error loading studio-properties: ${t}`),this.data.setValues(za);return}if(e){const s=Object.keys(e).reduce((r,o)=>(r[o]=e[o]??o,r),{});this.data.setValues(s??za),m.ifDebug(()=>this.logger.debug(`studio-properties loaded: ${JSON.stringify(s)}`))}}get(t){return this.data[t]}createObservableProperty(t){return Wn(()=>this.get(t))}};gn=H_([k(mf)],gn);const q_=new we({class:gn,type:mf});Object.defineProperty(exports,"makeAutoObservable",{enumerable:!0,get:()=>M.makeAutoObservable});Object.defineProperty(exports,"makeObservable",{enumerable:!0,get:()=>M.makeObservable});Object.defineProperty(exports,"kosComponent",{enumerable:!0,get:()=>yn.observer});exports.AncestorPathVisitor=Ym;exports.AuthState=kl;exports.BrowserKosRouter=iu;exports.BrowserRouter=ai;exports.CanvasDispatcher=Yt;exports.CanvasDispatcherServices=kE;exports.CanvasRenderer=Si;exports.CanvasStreamer=UT;exports.CanvasStreamerBase=Dh;exports.ChildModels=_e;exports.CompanionParentModel=Je;exports.ConfigBean=xs;exports.ContainerAwareSetup=io;exports.CoreExtensionManager=xM;exports.CoreModels=xi;exports.CreateModelTranslationsContext=Sh;exports.CreateModelTranslationsProvider=yT;exports.DateDisplayFormat=Jh;exports.DateHelpers=ty;exports.DependencyLifecycle=D;exports.DependencyModels=x;exports.DependencyResolutionPolicy=Xe;exports.Device=Yr;exports.DeviceServices=rM;exports.DomIntersectionStrategy=cf;exports.EVENT_KOS_MODEL_READY=En;exports.EVENT_TROUBLE_ADDED=tb;exports.EVENT_TROUBLE_REMOVED=sb;exports.EXTENSION_CANVAS_RENDERER=re;exports.EXTENSION_FEATURE_FLAG_RESOLVER=Vl;exports.EXTENSION_TROUBLE_DATA_MAPPER=kr;exports.EXTENSION_TROUBLE_MAPPER=er;exports.ErrorBoundaryWithFallback=vh;exports.EventBus=Tf;exports.EventBusFunctional=Sf;exports.EventBusState=If;exports.ExtensionException=gr;exports.ExtensionManager=$;exports.FUTURE_CONTAINER_MODEL_TYPE=Pu;exports.FUTURE_MODEL_TYPE=Au;exports.FUTURE_NOT_ASSIGNED=Zn;exports.FeatureFlagService=Gl;exports.FetchError=z;exports.FutureAliases=Pt;exports.FutureContainerFactory=tt;exports.FutureContainerModel=Lu;exports.FutureContainerSetup=ro;exports.FutureEndState=et;exports.FutureFactory=rs;exports.FutureHandler=lo;exports.FutureManager=gt;exports.FutureModel=Ru;exports.FutureService=xt;exports.HEADER_CACHE_CONTROL=Za;exports.HEADER_CONTENT_TYPE=Qa;exports.HEADER_DESTINATION_ADDR=Ge;exports.HEADER_FOS_REQUEST_ID=Xa;exports.HEADER_METHOD=Xr;exports.HEADER_ORDERED=vn;exports.HEADER_REQUEST_ID=qs;exports.HEADER_REQUEST_TYPE=ke;exports.HEADER_RESPONSE_ID=Jr;exports.HEADER_SOURCE_ADDR=Wa;exports.HEADER_TOPIC=Ya;exports.HEADER_URL=Zt;exports.HEADER_WORK_TRACKER=wn;exports.HttpRouteHandlers=Be;exports.KOS_EXECUTION_CONTEXT=Gs;exports.KOS_MODEL_ID=Tr;exports.KOS_SERVICE=jM;exports.KOS_SERVICE_1_6_5=LM;exports.KOS_SERVICE_1_8_1=NM;exports.KeyValue=ui;exports.KeyValueServices=Qb;exports.Kos=ue;exports.KosConfigPropertySpec=wt;exports.KosContainerIndex=kn;exports.KosContextBean=tu;exports.KosContextManager=Q;exports.KosCore=I;exports.KosCoreModelPropertyMapper=Se;exports.KosDataContainer=Yn;exports.KosDependencyTypes=fp;exports.KosExpressionEvaluator=Gu;exports.KosExtensionUtils=$p;exports.KosFeatureFlags=Yl;exports.KosFetchMethods=Bc;exports.KosGlobalConfig=In;exports.KosHttpRouteManager=jn;exports.KosLog=m;exports.KosLogManager=Qu;exports.KosLogManagerServices=rw;exports.KosMockEvents=tc;exports.KosModel=xl;exports.KosModelCollectionProvider=hT;exports.KosModelContainer=Fe;exports.KosModelContext=So;exports.KosModelEvents=N;exports.KosModelFactory=Os;exports.KosModelLoader=Th;exports.KosModelLoaderDisplay=_h;exports.KosModelManager=Pl;exports.KosModelProvider=wh;exports.KosModelRegistrationFactory=we;exports.KosModelRegistry=dn;exports.KosModelState=w;exports.KosModelSymbol=$n;exports.KosModelVisitor=Ll;exports.KosObservableData=qc;exports.KosRegistration=Yy;exports.KosSingletonRegistration=Wy;exports.KosTime=xr;exports.KosTimeContext=Ui;exports.KosTimeProvider=ST;exports.KosTimeServices=uw;exports.KosTimer=uh;exports.KosToken=nu;exports.KosTranslationProvider=xT;exports.KosTranslations=Rd;exports.KosViewModelSymbol=Cc;exports.KosWSTransportStatus=Al;exports.KosWsEvents=zs;exports.LOADER_FEATURE_FLAG=sy;exports.LOGIN_HOST=Ja;exports.LOGIN_URL=wf;exports.LoadingMessage=bh;exports.LogBlock=Ns;exports.LogBlockContainer=Eo;exports.LogConfig=Rt;exports.LogStream=Cs;exports.LogStreamContainer=Js;exports.LogStreamServices=Ew;exports.LoggerSetup=no;exports.MODEL_DELETION_DELAY=Rl;exports.MiddlewareChain=Xl;exports.ModelEffects=xe;exports.ModelError=cl;exports.MultipleFutureContainerSetup=oo;exports.MultipleFutureHandler=Hc;exports.NestedModelContext=Oo;exports.NetworkInterface=$i;exports.NetworkInterfaceContainer=Bs;exports.NetworkInterfaceServices=hM;exports.ObservableData=Re;exports.OptionsRequired=Vs;exports.Ota=Fr;exports.OutsideAlerter=YT;exports.PLUGIN_EXTENSION_NAME=Cp;exports.PORT=ec;exports.PROFILE_ENABLE_RELEASES=Cf;exports.PROFILE_LOG_DEBUG=vc;exports.PROFILE_LOG_INFO=wc;exports.PROFILE_RELAX_STORE_VALIDATION=Df;exports.PROFILE_TOOLS_PREVIEW=bc;exports.ParentModel=_s;exports.PluginExtensionManager=Dp;exports.ProgressBar=cT;exports.ReferenceConfig=pr;exports.RegionInfo=ne;exports.RegionServices=hb;exports.RegistrationManager=P;exports.Registry=AM;exports.ReloadAwareSetup=Dc;exports.ReplayStrategy=pt;exports.ResponseRetention=X;exports.STATUS=bn;exports.ServiceFactory=ie;exports.ServiceRequestHandlers=He;exports.SingletonKosModelRegistrationFactory=Ce;exports.SoftwareInfo=Nr;exports.SoftwareInfoContext=Bi;exports.SoftwareInfoProvider=$T;exports.SoftwareInfoServices=rE;exports.StateActionHandlers=Uf;exports.StateBean=js;exports.StateBeanServices=cE;exports.StateEntryHandlers=kt;exports.StateExitHandlers=Ss;exports.StateMachineSetup=Xt;exports.StateProp=Ei;exports.StatePropServices=bE;exports.StorageDevice=Qr;exports.StorageDeviceContainer=Wt;exports.StorageDeviceServices=yM;exports.StudioProperties=q_;exports.StudioPropertiesServices=j_;exports.SubscriptionHandlers=J;exports.TIMER_END=ki;exports.TIMER_EVENT=Ri;exports.TOPIC_TIMER_TICK_EVENT=Pi;exports.TimerManager=dh;exports.TokenContext=Ch;exports.TokenProvider=DT;exports.Topics=$s;exports.Trans=r_;exports.TransitionMap=br;exports.Transitions=Nn;exports.Translation=Br;exports.TranslationContainer=Ve;exports.TranslationContainerContext=Hi;exports.TranslationContext=$E;exports.TransportFactory=Xo;exports.Trouble=Us;exports.TroubleAwareSetup=Cn;exports.TroubleContainer=Vt;exports.TroubleServices=jw;exports.Troubles=be;exports.UsbUpdate=Ai;exports.UsbUpdateContainer=Ks;exports.UsbUpdateServices=SM;exports.VFS_SERVICE=VM;exports.VFS_SERVICE_1_6_5=HM;exports.VFS_SERVICE_1_8_1=qM;exports.ViewModelConfig=Dn;exports.WS_EVENT_TYPE=Pd;exports.WebSocketEvents=Te;exports.WebSocketTransport=Nt;exports.WsEventFactory=Ti;exports.acceptOrgInvitation=yh;exports.addDaysToDate=jl;exports.addFuture=Ou;exports.addMonthsToDate=Ul;exports.api=$u;exports.applyFunctionalEnhancements=Fn;exports.applyMixins=Wm;exports.arraysEqual=Qm;exports.buildConfigBeanModel=nb;exports.buildFuture=ii;exports.buildFutureModel=_u;exports.cancelFuture=Iu;exports.checkAppsStarted=Jy;exports.checkWildcardPattern=tl;exports.clearAllServiceResponses=wy;exports.clearPath=vy;exports.clearServiceResponse=by;exports.convert=si;exports.convertFileSizeRaw=$f;exports.convertWithUnits=bb;exports.createBaseMessage=bl;exports.createBroadcastMessageResponse=_l;exports.createCancellablePromise=sT;exports.createClient=Ye;exports.createFosBaseMessage=yl;exports.createHeaders=vl;exports.createKosHtpMessageResponse=Sl;exports.createKosMessage=Ml;exports.createKosMessageResponse=Ol;exports.createMessageBody=rt;exports.createModelDependency=dl;exports.createOptionKey=ap;exports.createPropKey=yt;exports.createReadableStream=wl;exports.createStudioMessage=ml;exports.createStudioMessageRequest=El;exports.createStudioMessageResponse=Tl;exports.debounce=Jc;exports.declarativeModel=ou;exports.declarativeModelRegistry=Ky;exports.del=Pc;exports.deleteFuture=Su;exports.destroyKosModel=Ae;exports.discoverAndRegisterModels=Gy;exports.evaluateScopes=pu;exports.executeChildrenModelLifecycle=pl;exports.executeDependentModelLifecycle=ds;exports.executeListLifecycle=fl;exports.fetchModel=KT;exports.findModel=Lp;exports.findModels=Yc;exports.formatDate=Kl;exports.formatDateSince=Nl;exports.formatDateTime=zl;exports.formatTime=ql;exports.get=Rc;exports.getAllKosCompanionModels=Wc;exports.getCalendarMonthArray=Kh;exports.getConfigBean=fu;exports.getDayStrings=qh;exports.getDays=m_;exports.getDaysArray=Uh;exports.getDaysInMonth=zn;exports.getDependenciesByLifecycle=hl;exports.getFormattedDate=y_;exports.getFormattedMonth=b_;exports.getFormattedMonthsArray=qi;exports.getFormattedYear=Me;exports.getFormattedYearsArray=Hh;exports.getFutures=kb;exports.getHttpRouteHandlers=kc;exports.getKosCompanionModel=Fp;exports.getKosLocalizationDescriptor=$d;exports.getKosMessageLogging=_c;exports.getKosModel=Gc;exports.getKosModelSync=Pe;exports.getKosModelType=kp;exports.getKosSessionKey=eu;exports.getLastDayOfMonth=Ts;exports.getLocalizationDescriptor=wE;exports.getLogLevel=Tc;exports.getLogMessageToStudio=Sc;exports.getMessageBody=Zo;exports.getMonthsArray=jh;exports.getObservableCompanions=Np;exports.getQueryParams=ve;exports.getServiceResponse=my;exports.getStartedApps=eb;exports.getTranslations=Id;exports.getYearsArray=Bh;exports.hasCachedResponse=yy;exports.hasDecimals=du;exports.hasHttpRouteHandlers=Sr;exports.hasKosProfile=Go;exports.hasReadyHook=sl;exports.hslStringToHex=Ql;exports.hslToHex=Wl;exports.httpDelete=gp;exports.initKosProvider=vT;exports.initializeStateMachine=Ac;exports.injectStateMachineSupport=xn;exports.isBoolean=Jn;exports.isDisposable=mr;exports.isKosCompanionTypeFactory=ol;exports.isKosDataModel=Is;exports.isKosExecutionContext=Rn;exports.isKosLoggingEnabled=Rf;exports.isKosModel=$e;exports.isKosModelContainer=Un;exports.isKosModelReady=Or;exports.isLeapYear=qn;exports.isLocalRefId=My;exports.isNumber=uo;exports.isPrintable=Dg;exports.isTroubleAware=CE;exports.isValidDate=Ms;exports.kosAction=te;exports.kosAutoEffect=Z;exports.kosChild=Le;exports.kosCompanion=lp;exports.kosComputed=Wn;exports.kosConfigBean=ho;exports.kosConfigProperty=$b;exports.kosContainerAware=xc;exports.kosContext=up;exports.kosDependency=Jt;exports.kosEffect=lu;exports.kosFuture=Fi;exports.kosFutureAware=dp;exports.kosLogger=mp;exports.kosLoggerAware=Lc;exports.kosModel=k;exports.kosModelEffect=Fc;exports.kosMultipleFutureAware=hp;exports.kosObservable=Qn;exports.kosParentAware=ao;exports.kosReference=yp;exports.kosServiceRequest=bt;exports.kosStateBean=QM;exports.kosStateEntry=wp;exports.kosStateExit=Ep;exports.kosStateGuard=Mp;exports.kosStateMachine=vp;exports.kosStateProp=ZM;exports.kosSubscribe=Jp;exports.kosTopicHandler=B;exports.kosTroubleAware=Tp;exports.kosViewModel=vg;exports.kosWhen=tn;exports.login=ph;exports.mapConfigBeanModelToDto=bu;exports.mapDataToModel=Jo;exports.mapDtoToConfigBeanModel=mu;exports.mapDtoToFutureModel=ni;exports.mapDtoToFutureOptions=oi;exports.mapUpdateDtoToConfigBeanModel=yu;exports.modelBindings=ss;exports.modelEventTopicFactory=nl;exports.modelFactory=es;exports.modelTypeEventTopicFactory=il;exports.modifyConfigBean=hu;exports.modifyFuture=Lb;exports.pairedClientHeartbeat=cy;exports.parseWildcardSegment=el;exports.pipe=Jl;exports.post=Ys;exports.preloadKosModel=Bp;exports.processId=ey;exports.processMiddleware=ny;exports.put=pp;exports.registerCompanionModel=jp;exports.registerCoreModels=ih;exports.registerExtensionPoint=Ws;exports.registerFutureLifecycleWrapper=ru;exports.registerHttpRoutes=Kg;exports.registerKosModel=Zc;exports.registerLegacyModel=Qc;exports.resetKosModel=Pp;exports.resetPassword=mh;exports.resolveBaseUrl=Cl;exports.resolveChild=ul;exports.resolveContainerDeltas=Zm;exports.resolveItemListDeltas=Jm;exports.resolveKosCompanion=Yo;exports.resolveKosContext=Sy;exports.resolveKosProfiles=Mc;exports.resolveListDeltas=Xm;exports.resolveServiceUrl=de;exports.resolveVariable=Zl;exports.retryWithExponentialBackoff=uy;exports.sendAsyncIntent=Zy;exports.sendBroadcastMessage=tm;exports.sendIntent=Qy;exports.sendKosHttpMessageResponse=$l;exports.sendKosMessage=Xg;exports.sendKosMessageResponse=Il;exports.sendRequest=Ty;exports.sendStudioMessage=em;exports.sendStudioMessageRequest=Jg;exports.startPasswordReset=gh;exports.stringComponentInsert=kh;exports.studioAcceptOrgInvitation=tT;exports.studioLogin=XM;exports.studioResetPassword=eT;exports.studioStartPasswordReset=JM;exports.subscribeStore=RM;exports.syncPublish=_y;exports.troubleByTypeReducer=Kc;exports.troubleDataFactory=yd;exports.unloadKosModel=Rp;exports.updateCompanionModelRegistration=ay;exports.updateModelRegistration=iy;exports.updateRegion=lh;exports.updateTimeZone=hn;exports.useAmPmValues=df;exports.useCalendarDayArray=Xh;exports.useConfigBean=f_;exports.useConfigProperty=Nh;exports.useContextModel=uT;exports.useContextModelHierarchy=Mh;exports.useDateArrays=zh;exports.useDateProps=w_;exports.useDateRelativeConfig=E_;exports.useDateRelativeData=tf;exports.useDayNames=Qh;exports.useDayOptions=Wh;exports.useDays=Vi;exports.useDevice=Ah;exports.useFormattedDate=Zh;exports.useFormattedTime=ff;exports.useFunctionWarmup=M_;exports.useHourValues=uf;exports.useKosCore=Ih;exports.useKosDateFormats=__;exports.useKosModel=ee;exports.useKosRegions=af;exports.useKosTime=Ni;exports.useKosTimeContext=OT;exports.useKosTimeFormats=A_;exports.useKosTimeZones=I_;exports.useKosTranslation=a_;exports.useKosTranslationContext=RT;exports.useLocalComputed=x_;exports.useModelFromHierarchy=pT;exports.useMonths=Gh;exports.useMonthsOptions=Yh;exports.useMutationObserver=P_;exports.useNetworkInterfaceContainer=xh;exports.useOta=Rh;exports.usePressGesture=k_;exports.useProjectReload=lf;exports.useRegionTimeProps=L_;exports.useRegionalTimeDate=ef;exports.useSoftwareInfo=ji;exports.useSoftwareInfoContext=CT;exports.useStateProperty=WT;exports.useStorageDeviceContainer=Ph;exports.useSuspenseData=fn;exports.useTimeOptions=hf;exports.useTimeProps=pf;exports.useTimeValues=pn;exports.useTimer=ZT;exports.useTranslationContainer=Lh;exports.useTroubleContainerModel=Ki;exports.useTroubleModel=l_;exports.useTroublePresence=u_;exports.useUsbUpdateContainer=Fh;exports.useViewModel=F_;exports.useYears=zi;exports.useYearsOptions=Vh;exports.uuid=vt;exports.variableToHex=ry;exports.waitForAppToStart=Xy;exports.waitForAppsToStart=cu;exports.waitForRequest=Vn;exports.whenReady=ge;exports.withDevice=HT;exports.withKosTime=qT;exports.withNetworkInterfaceContainer=zT;exports.withOta=VT;exports.withProjectReloading=N_;exports.withSoftwareInfo=IT;exports.withStorageDeviceContainer=QT;exports.withTranslationContainer=c_;exports.withTroubleContainer=d_;exports.withUsbUpdateContainer=h_;exports.wrapPromise=On;exports.wrapWithFutureLifecycle=Li;
|
|
227
|
+
`,Eh=()=>{const t=qr.type;return Z({modelId:t,modelType:qr.type,options:{}})};function hT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Eh();return T.jsx(o,{...r,children:T.jsx(t,{...e,device:s})})}}function fT(t,e,s){const r=new Promise(o=>{_.getInstance().whenReady().then(()=>{const{model:n}=_.getInstance().modelManager.createModelInstance(t,e??t,s);return n.whenReady().then(()=>{o(n.modelData)})})});return yn(r)}function pT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=xi();return T.jsx(o,{...r,children:T.jsx(t,{...e,kosTime:s})})}}const Mh=()=>{const t=Us.type;return Z({modelId:t,modelType:Us.type,options:{}})};function gT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Mh();return T.jsx(o,{...r,children:T.jsx(t,{...e,networkInterfaceContainer:s})})}}const Th=()=>{const t=Rr.type;return Z({modelId:t,modelType:Rr.type,options:{}})};function mT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Th();return T.jsx(o,{...r,children:T.jsx(t,{...e,oTA:s})})}}function yT(t,e){m.useEffect(()=>{function s(o){t.current&&!t.current.contains(o.target)&&e()}function r(o){o.key==="Escape"&&e()}return document.addEventListener("mousedown",s),document.addEventListener("keydown",r,!1),()=>{document.removeEventListener("mousedown",s),document.removeEventListener("keydown",r,!1)}},[t,e])}function bT(t){const e=m.useRef(null),s=t.onAlert;return yT(e,s),T.jsx("div",{ref:e,style:{width:"100%"},children:t.children})}const vT=t=>{var u;const{stateProp:e}=t,[s,r]=m.useState((u=t.stateProp)==null?void 0:u.value),[o,n]=m.useState(!1),[i,a]=m.useState(void 0);return m.useEffect(()=>{async function d(h){try{h&&(await pe(h),n(!0))}catch(f){a(f.message)}}d(e)},[e]),m.useEffect(()=>{const d=Q(()=>{e&&o&&r(e.value)});return()=>{d()}},[o,e]),[s,{ready:o,error:i}]},_h=()=>{const[t,e]=m.useState(!1),[s,r]=m.useState([]),o=zt.type,n=Z({modelId:o,modelType:zt.type,options:{}});return m.useEffect(()=>{const i=Q(()=>{var a,c;e(((a=n.model)==null?void 0:a.isStorageInserted)??!1),r(((c=n.model)==null?void 0:c.data)??[])});return()=>{i()}},[n.model]),{...n,inserted:t,devices:s}};function wT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=_h();return T.jsx(o,{...r,children:T.jsx(t,{...e,storageDeviceContainer:s})})}}const Fo=g.createLogger({name:"use-timer"}),ET=({timerName:t,onTimerExpired:e,onTimerTick:s,timerEventActions:r,autoStart:o})=>{const n=th.getTimer(t);m.useEffect(()=>{if(!n){console.warn(`Timer with name ${t} does not exist.`);return}const u=$(Oi,d=>{const{name:h,action:f,remainingTime:p}=d==null?void 0:d.body;h===t&&(f===$i?e({name:h,action:f,remainingTime:p,timer:n}):r!=null&&r[f]&&r[f]({name:h,action:f,remainingTime:p,timer:n}))});return o&&n.start(),()=>{u.unsubscribe()}},[o,e,r,t,n]),m.useEffect(()=>{if(!n||!s)return;const u=`${Ii}/${t}`,d=$(u,h=>{const{name:f,remainingTime:p}=h==null?void 0:h.body;f===t&&s({name:f,remainingTime:p,timer:n})});return()=>{d.unsubscribe()}},[s,t,n]);const i=m.useCallback(()=>{n?n.start():Fo.warn(`Timer with name ${t} does not exist.`)},[n,t]),a=m.useCallback(()=>{n?n.reset():Fo.warn(`Timer with name ${t} does not exist.`)},[n,t]),c=m.useCallback(()=>{n?n.pause():Fo.warn(`Timer with name ${t} does not exist.`)},[n,t]);return{timer:n,start:i,reset:a,pause:c}},MT=t=>{const e=/[\\^$.*+?()[\]{}|]/g;return RegExp(e.source).test(t)?t.replace(e,"\\$&"):t},TT=t=>t instanceof RegExp,_T=t=>typeof t=="string",ST=(t,e,s)=>{if(t===""||e==="")return t;let r=e;TT(r)||(r=new RegExp("("+MT(r)+")","gi"));const o=t.split(r);for(let n=1,i=o.length;n<i;n+=2)o[n]=s(o[n],n);return o},Sh=(t,e,s)=>{let r=t;return Array.isArray(r)||(r=[r]),r.flatMap(o=>_T(o)?ST(o,e,s):o)};function OT(t,e){let s=t;return Object.entries(e).forEach(([r,o])=>{const n=new RegExp(`<${r}>(.*?)</${r}>|<${r}/>`,"g");s=Sh(s,n,(i,a)=>o.type==="br"?T.jsx("br",{}):m.cloneElement(o,{key:`${r}-${a}`},i))}),s}const IT=t=>{const{i18nKey:e,t:s,defaults:r,components:o,values:n={},context:i}=t,a=s(e,{defaultValue:r,data:n,context:i,returnObjects:!0}),c=OT(a,o||{});return T.jsx("span",{className:t.className,children:c})},Ct=new Map;function $T(t,e){if(Ct.has(t)){const s=Ct.get(t);if(s.status==="finished")return s.result;throw s.promise}else{const s=e().then(o=>{Ct.set(t,{status:"finished",result:o})},o=>{throw Ct.set(t,{status:"error",error:o}),o}),r={status:"pending",promise:s};throw Ct.set(t,r),s}}function rn(t,e){return $T(t,e)}const CT=async()=>{const t=await Uc(qe.type);return await pe(t.model),t.model},DT=async(t,e,s)=>{const r=t.resolveNamespace(e);await pe(r);for(const o of s){const n=t.resolveNamespace(o);await pe(n),Ct.set(o,{status:"finished",result:n})}return r},xT=(t,e)=>{const s=[t].flat(),[r,...o]=s,n=rn(qe.type,CT),i=s.join("__"),a=rn(i,()=>DT(n,r,o)),c=m.useMemo(()=>({exists:d=>{const h=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.exists(h):!1}}),[e==null?void 0:e.keyPrefix,a]);return{t:m.useCallback((d,h)=>{const f=e!=null&&e.keyPrefix?`${e.keyPrefix}.${d}`:d;return a?a.resolveKey(f,h):(g.debug(`Translation model ${t} not ready for key: ${f}`),f)},[e==null?void 0:e.keyPrefix,t,a]),i18n:c}},Oh=()=>{const t=qe.type;return Z({modelId:t,modelType:qe.type,options:{}})};function AT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Oh();return T.jsx(o,{...r,children:T.jsx(t,{...e,translationContainer:s})})}}const RT=t=>Z({modelId:t,modelType:Fs.type}),Li=()=>Z({modelId:Ht.type,modelType:Ht.type,options:{}}),PT=({troubleType:t,condition:e})=>{const{model:s}=Li(),[r,o]=m.useState(!1),[n,i]=m.useState([]),a=m.useCallback(()=>{var c,u;return n.length>0&&((c=n[0])!=null&&c.resolvable)?(u=n[0])==null?void 0:u.resolve():Promise.resolve(void 0)},[n]);return m.useEffect(()=>Q(()=>{const u=(t?s==null?void 0:s.troubles.getIndexByKey("byType",t):s==null?void 0:s.troubles.data)||[],d=e?u.filter(e):u;o(d.length>0),i(d)}),[e,s,t]),[r,a,n.length>0?n[0]:void 0,n]};function kT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Li();return T.jsx(o,{...r,children:T.jsx(t,{...e,troubleContainer:s})})}}const Ih=()=>{const t=Bs.type,e=Z({modelId:t,modelType:Bs.type,options:{},activate:!0,destroyOnUnmount:!0}),[s,r]=m.useState(!1),[o,n]=m.useState(!1),[i,a]=m.useState([]);return m.useEffect(()=>{const c=Q(()=>{var u,d,h;r(((u=e.model)==null?void 0:u.isUsbInserted)??!1),n(((d=e.model)==null?void 0:d.hasAvailableUpdates)??!1),a(((h=e.model)==null?void 0:h.data)??[])});return()=>{c()}},[e.model]),{...e,inserted:s,updateAvailable:o,updates:i}};function LT(t){return e=>{const{model:s,status:r,KosModelLoader:o}=Ih();return T.jsx(o,{...r,children:T.jsx(t,{...e,usbUpdateContainer:s})})}}const FT=({path:t,propKey:e})=>{const{status:s}=Z({modelType:Ds.type,modelId:t,options:{path:t}}),[r,o]=m.useState(!1),[n,i]=m.useState(),[a,c]=m.useState(""),[u,d]=m.useState(),h=f=>{n&&e&&n.updateProperty(e,f)};return m.useEffect(()=>{var f;s.model&&i(s.model),s.model&&e&&((f=s.model)!=null&&f.props.has(e)?c(s.model.props[e]):d(`property ${e} not found`)),s.ready&&o(s.ready)},[s.ready,s.model,e]),m.useEffect(()=>{e&&E.autorun(()=>{const f=n==null?void 0:n.props[e];c(f||"")})},[n,e]),{config:n,ready:r,value:a,error:u,updateValue:h}},NT=(t,e)=>{switch(e.type){case"UPDATE":return e.payload;default:return t}},$h=({configProperty:t,optionsTransformer:e})=>{const[s,r]=m.useState(!1),[o,n]=m.useState(""),[i,a]=m.useReducer(NT,{value:String(t==null?void 0:t.value),displayValue:t==null?void 0:t.displayValue,significantValue:t==null?void 0:t.significantValue,unit:t==null?void 0:t.unit,options:t==null?void 0:t.options,mappedOptions:[],updateProperty:t==null?void 0:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}),c=m.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&(t==null||t.updateProperty(d))},[t]);return m.useEffect(()=>{async function u(d){try{d&&(await pe(d),r(!0))}catch(h){n(h.message)}}u(t)},[t]),m.useEffect(()=>{const u=Q(()=>{if(t&&s){let d=[];e&&(d=e(t.options)),a({type:"UPDATE",payload:{value:String(t.value),displayValue:t.displayValue,significantValue:t.significantValue,unit:t.unit,options:t.options,mappedOptions:d,updateProperty:t.updateProperty,displayOptions:t==null?void 0:t.displayOptions}})}});return()=>{u()}},[t,e,s]),{...i,configSelectProps:{onChange:c,value:i.value,options:e?i.mappedOptions||[]:i.options||[]},ready:s,error:o}};function UT(t,e){const s=e??new Date().getFullYear(),r=[31,28,31,30,31,30,31,31,30,31,30,31];return t===1&&(s%4===0&&s%100!==0||s%400===0)?29:r[t]??0}function jT(t,e){return new Date(t,e,0).getDate()}function Ch(t,e){const s=UT(e,t),r=[];for(let o=1;o<=s;o++)r.push(o);return r}function Dh(){return[...Array(12).keys()].map(e=>new Date(0,e).getMonth())}function xh(t=[2018,2028]){const e=[];for(let s=t[0];s<=t[1];s++)e.push(s);return e}function Ah(t,e=[2018,2028]){const s=xh(e);return t==="long"?s:s.map(r=>Number(r.toString().substring(2)))}function Fi(t="numeric",e="en-US"){const s=new Intl.DateTimeFormat(e,{month:t,timeZone:"UTC"}).format;return[...Array(12).keys()].map(r=>s(new Date(Date.UTC(0,r,1))))}function BT({locale:t="en-US",year:e,month:s,day:r,formatOptions:o={weekday:"long",year:"numeric",month:"long",day:"numeric"},displayOrder:n}){const i=s-1,a=new Date(e,i,r),c=new Intl.DateTimeFormat(t,{month:o.month}).format(a),u=new Intl.DateTimeFormat(t,{year:o.year}).format(a),d=new Intl.DateTimeFormat(t,{day:o.day}).format(a);return n?n=="MMDDYY"?`${c} ${d} ${u}`:n==="DDMMYY"?`${d} ${c} ${u}`:n==="YYMMDD"?`${u} ${c} ${d}`:`${u} ${d} ${c}`:new Intl.DateTimeFormat(t,o).format(a)}function Me(t){return t.toString().length===2?new Date(Date.parse(`01 Jan 20${t}`)).getFullYear():t}function HT(t){return typeof t=="string"?new Date(Date.parse(`01 ${t.substring(0,3)} 2023`)).getMonth()+1:t}function Rh(t,e,s){const r=Me(e),o=new Date(r,t,1).getDay(),n=new Date(r,t+1,0).getDate();return[...Array(42).keys()].map(a=>a<o||a>n+o-1?{label:"",value:0,disabled:!0}:s[a-o])}function ys(t,e,s){const r=e-1,o=new Date(t,r,s);return new Date(o).getMonth()===r&&new Date(o).getDate()===s}function bs(t,e){return new Date(t,e,0).getDate()}function Ph(t="en-US",e="short"){const s=new Intl.DateTimeFormat(t,{weekday:e}).format;return[...Array(7).keys()].map(r=>s(new Date(Date.UTC(2021,5,r))))}function kh({locale:t="en-US",year:e=new Date().getFullYear(),month:s=new Date().getMonth(),yearRange:r=[2018,2028],daysOfWeekFilter:o=[],formatOptions:{yearFormat:n="long",monthFormat:i="long",dayFormat:a="short"}={}}){const c=Ni(n,r),u=Lh(n,r,t),d=Fh(i,t),h=Nh(i,t),f=Ui(e,s),p=Uh(e,s,t,o),y=Hh(s,e,p),w=jh(t,a);return{daysArray:f,monthsArray:d,yearsArray:c,yearsOptionsArray:u,monthsOptionsArray:h,daysOptionsArray:p,calendarDayArray:y,dayNamesArray:w}}function Ni(t="long",e=[2018,2028]){return m.useMemo(()=>Ah(t,e),[t,e])}function Lh(t="long",e=[2018,2028],s="en-US"){const r=Ni(t,e);return m.useMemo(()=>r.map(n=>({label:n.toLocaleString(s).replace(",",""),value:n})),[s,r])}function Fh(t,e="en-US"){return m.useMemo(()=>Fi(t,e),[t,e])}function Nh(t,e="en-US"){const s=m.useMemo(()=>Dh(),[]),r=m.useMemo(()=>Fi(t,e),[t,e]);return m.useMemo(()=>[...Array(12).keys()].map(n=>({label:r[n],value:Number(s[n])})),[r,s])}function Ui(t,e){const s=Me(t);return m.useMemo(()=>Ch(s,e),[e,s])}const KT=(t,e,s,r=[])=>{const o=new Date(t,e,s).getDay();return r.length>0&&r.includes(o)};function Uh(t,e,s="en-US",r=[]){const o=Ui(t,e);return m.useMemo(()=>o.map(i=>({label:i.toLocaleString(s),value:i,disabled:KT(t,e,i,r)})),[r,s,e,o,t])}function jh(t="en-US",e="short"){return m.useMemo(()=>Ph(t,e),[t,e])}function Bh({year:t=new Date().getFullYear(),month:e=new Date().getMonth(),day:s=new Date().getDate(),formatString:r}){const o=e,n=new Date(t,o,s);return{formattedDate:We.format(n,r)}}function Hh(t,e,s){return m.useMemo(()=>Rh(t,e,s),[t,e,s])}var Kh=(t=>(t.MMDDYY="MMDDYY",t.DDMMYY="DDMMYY",t.YYMMDD="YYMMDD",t.YYDDMM="YYDDMM",t))(Kh||{});function qT({locale:t="en-US",date:{year:e=new Date().getFullYear(),month:s=new Date().getMonth(),day:r=new Date().getDate()}={year:new Date().getFullYear(),month:new Date().getMonth(),day:new Date().getDate()},formatOptions:{yearFormat:o="long",monthFormat:n="long",dayFormat:i="short",formatString:a="yyyy/MM/dd"}={},filterOptions:{yearsRange:c=[2018,2028],daysOfWeekFilter:u=[]}={}}){const[d,h]=m.useState(e),[f,p]=m.useState(c),[y,w]=m.useState(s),[M,S]=m.useState(r);m.useEffect(()=>{h(e)},[e]),m.useEffect(()=>{w(s)},[s]),m.useEffect(()=>{S(r)},[r]);const{yearsArray:U,yearsOptionsArray:x,monthsArray:O,monthsOptionsArray:L,daysArray:J,daysOptionsArray:we,calendarDayArray:H,dayNamesArray:ns}=kh({locale:t,year:d,yearRange:f,month:y,formatOptions:{yearFormat:o,monthFormat:n,dayFormat:i},daysOfWeekFilter:u}),{formattedDate:te}=Bh({year:d,month:y,day:M,formatString:a});return{dateActions:{setYear:h,setYearRange:p,setMonth:w,setDay:S,nextMonth:()=>{const re=y<11?Me(d):Me(d+1),de=y<11?y+1:0;if(!ys(re,de,M)){const rt=bs(re,de);S(rt)}de===0&&h(re),w(de)},previousMonth:()=>{const re=Me(y===0?d-1:d),de=y===0?11:y-1;if(!ys(re,de,M)){const rt=bs(re,de);S(rt)}de===11&&h(re),w(de)},nextYear:()=>{const re=d<f[1]?d+1:f[0],de=Me(re);if(ys(de,y,M))h(re);else{const rt=bs(Me(d+1),y);S(rt),h(re)}},previousYear:()=>{const re=d>f[0]?d-1:f[0],de=Me(re);if(ys(de,y,M))h(re);else{const rt=bs(Me(d-1),y);S(rt),h(re)}}},dateState:{year:d,yearRange:f,month:y,day:M,yearsArray:U,yearsOptionsArray:x,monthsArray:O,monthsOptionsArray:L,daysArray:J,daysOptionsArray:we,calendarDayNames:ns,calendarDayArray:H,formattedDate:te}}}function qh({date:t=new Date,dateFormat:e,timeFormat:s,options:r={}}){const[o,n]=m.useState("Formatting Time..."),[i,a]=m.useState("Formatting Date..."),c=!!r.ignoreDateFormat,{model:u,ready:d}=Z({modelId:ne.type,modelType:ne.type,options:{}}),h=typeof t=="string"?We.parseISO(t):t;return m.useEffect(()=>{c?a(""):e?a(We.format(h,e)):d&&a(We.format(h,u!=null&&u.selectedDateFormat?u==null?void 0:u.selectedDateFormat:""))},[c,t,e,h,u,d]),m.useEffect(()=>{s?n(We.format(h,s)):d&&n(We.format(h,u!=null&&u.selectedTimeFormat?u==null?void 0:u.selectedTimeFormat:""))},[t,s,h,u,d]),{formattedDate:i,formattedTime:o}}const zh=({secondsFromMidnight:t=0})=>{const[e,s]=m.useState(0),[r,o]=m.useState(0),[n,i]=m.useState(0),[a,c]=m.useState(new Date),{formattedTime:u}=qh({date:a,options:{ignoreDateFormat:!0}});return m.useEffect(()=>{const d=Number(t),h=Math.floor(d/3600),f=Math.floor(d%3600/60),p=d%60;s(h),o(f),i(p);const y=new Date;y.setHours(0,0,0,0);const w=new Date(y.getTime()+d*1e3);c(new Date(w))},[t]),{hours:e,minutes:r,seconds:n,formattedTime:u,timeActions:{setHours:s,setMinutes:o,setSeconds:i}}},zT=({configProperty:t})=>{const{value:e}=$h({configProperty:t}),s=parseInt(e||"0",10),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}=zh({secondsFromMidnight:s}),c=m.useRef();return m.useEffect(()=>{const u=r*3600+o*60+n;return c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{t&&t.updateProperty(u.toString())},100),()=>{c.current&&clearTimeout(c.current)}},[t,r,o,n]),{hours:r,minutes:o,seconds:n,formattedTime:i,timeActions:a}};function VT(t,e={}){const{intervalMs:s=5*60*1e3,immediate:r=!0}=e;m.useEffect(()=>{const o=()=>{try{t({__warmup:!0})}catch{}};r&&("requestIdleCallback"in window?requestIdleCallback(o):setTimeout(o,1));const n=s?setInterval(o,s):null;return()=>{n&&clearInterval(n)}},[t,s,r])}const GT=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),YT=(t=GT)=>{const[e,s]=m.useState([]),[r,o]=m.useState(),{model:n,ready:i}=Z({modelType:ne.type,modelId:ne.type,options:{}});m.useEffect(()=>{const c=Q(()=>{s((n==null?void 0:n.dateFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),m.useEffect(()=>{const c=Q(()=>{n!=null&&n.dateFormatId&&(n!=null&&n.selectedDateFormat)&&o({id:n==null?void 0:n.dateFormatId,value:n==null?void 0:n.selectedDateFormat})});return()=>{c()}},[n==null?void 0:n.selectedDateFormat,n==null?void 0:n.dateFormatId]);const a=m.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedDateFormat(u))},[n]);return{raw:(n==null?void 0:n.dateFormatOptions.map(c=>c.id))??[],regionModel:n,selectedDateFormat:(r==null?void 0:r.value)||"",dateFormatId:(r==null?void 0:r.id)||"",updateDateFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)||"",options:e}}},WT=t=>T.jsx("option",{title:t,value:t,children:t},t),Vh="kos:service:region:settings",Gh="timeZone",QT=`${Vh}-${Gh}`,XT=(t=WT)=>{const[e,s]=m.useState([]),[r,o]=m.useState(""),{model:n,ready:i}=Z({modelType:ne.type,modelId:ne.type,options:{}}),a=vt.factory(QT)({path:Vh,attribute:Gh});m.useEffect(()=>{const u=Q(()=>{s((n==null?void 0:n.timeZones.map(t))||[]),n!=null&&n.timeZones.length&&sn(n==null?void 0:n.timeZones[0])});return()=>{u()}},[n,i,t]),m.useEffect(()=>{const u=Q(()=>{o(a.value||"")});return()=>{u()}},[a.value]);const c=m.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&sn(d)},[]);return{options:e,raw:(n==null?void 0:n.timeZones)??[],regionModel:n,selectedTimeZone:r,timeZones:(n==null?void 0:n.timeZones)??[],updateTimeZone:c,selectProps:{onChange:c,value:r,options:e}}},Yh="kos:service:region",Wh="regionId",ZT=`${Yh}-${Wh}`,JT=t=>T.jsx("option",{title:t,value:t,children:t},t),Qh=(t=JT)=>{const[e,s]=m.useState([]),[r,o]=m.useState("factory"),{model:n,ready:i}=Z({modelType:ne.type,modelId:ne.type,options:{}}),a=vt.factory(ZT)({path:Yh,attribute:Wh});m.useEffect(()=>{const u=Q(()=>{s((n==null?void 0:n.availableRegions.map(t))||[])});return()=>{u()}},[n,i,t]),m.useEffect(()=>{const u=Q(()=>{o(a.value||"factory")});return()=>{u()}},[a.value]);const c=m.useCallback(u=>{var h;let d="factory";typeof u=="string"?d=u:(h=u==null?void 0:u.target)!=null&&h.value&&(d=u.target.value),d&&Jd(d)},[]);return{raw:(n==null?void 0:n.availableRegions)??[],regionModel:n,regionData:n==null?void 0:n.selectedRegion,selectedRegion:r,updateRegion:c,regionSelectProps:{onChange:c,value:r,options:e}}},e_=t=>T.jsx("option",{title:t.id,value:t.format,children:t.format},t.id),t_=(t=e_)=>{const[e,s]=m.useState([]),[r,o]=m.useState(),{model:n,ready:i}=Z({modelType:ne.type,modelId:ne.type,options:{}});m.useEffect(()=>{const c=Q(()=>{s((n==null?void 0:n.timeFormatOptions.map(t))||[])});return()=>{c()}},[n,i,t]),m.useEffect(()=>{const c=Q(()=>{n!=null&&n.timeFormatId&&(n!=null&&n.selectedTimeFormat)&&o({id:n==null?void 0:n.timeFormatId,value:n==null?void 0:n.selectedTimeFormat})});return()=>{c()}},[n==null?void 0:n.selectedTimeFormat,n==null?void 0:n.timeFormatId]);const a=m.useCallback(c=>{var d;let u="";typeof c=="string"?u=c:(d=c==null?void 0:c.target)!=null&&d.value&&(u=c.target.value),u&&(n==null||n.setSelectedTimeFormat(u))},[n]);return{raw:(n==null?void 0:n.timeFormatOptions.map(c=>c.id))??[],regionModel:n,selectedTimeFormat:(r==null?void 0:r.value)??"",timeFormatId:(r==null?void 0:r.id)??"",updateTimeFormat:a,props:{onChange:a,value:(r==null?void 0:r.id)??"",options:e}}},s_=(t,e)=>m.useMemo(()=>Hn(t),e),r_={config:{attributes:!0,childList:!0,subtree:!0}};function o_(t,e,s=r_){const[r,o]=m.useState(null);m.useEffect(()=>{if(!e||typeof e!="function")throw new Error("A valid callback function is required");const n=new MutationObserver(e);o(n)},[e,s,o]),m.useEffect(()=>{if(!r)return()=>{};if(!t)throw new Error("A valid DOM element is required");const{config:n}=s;try{r.observe(t,n)}catch(i){g.error(i)}return()=>{r&&r.disconnect()}},[r,t,s])}const Xh={validateStart:function(t){return!0},validateStop:function(t){const e=t.event.currentTarget.getBoundingClientRect(),[s,r]=t.xy;return s<e.left||s>e.right||r<e.top||r>e.bottom}},No=g.createLogger({name:"usePressGesture",group:"kos-hooks"});function n_({onPressed:t,onRelease:e,intersectionStrategy:s=Xh}){const r=m.useRef(!1),o=lf.useGesture({onDragStart:c=>{No.info("onDragStart",c.type),s.validateStart(c)&&(t&&t(),r.current=!0)},onDrag:c=>{No.info("onDrag",c.type),r.current&&s.validateStop(c)&&(e&&e(),r.current=!1)},onDragEnd:c=>{No.info("onDragEnd",c.type),r.current&&e&&(e(),r.current=!1)}}),n=()=>{t&&t(),r.current=!0},i=()=>{r.current&&e&&(e(),r.current=!1)},a=()=>{r.current&&e&&(e(),r.current=!1)};return{dom:o,mesh:()=>({onPointerDown:n,onPointerUp:i,onPointerOut:a})}}const Zh=()=>{const[t,e]=m.useState(!1),s=_.getInstance();return m.useEffect(()=>{const r=Q(()=>{s&&s.reloading!==t&&e(s.reloading)});return()=>{r()}},[s,t]),[t]};function Jh(t=!1,e="2-digit"){return m.useMemo(()=>{const s=t?12:24;return Array.from({length:s},(r,o)=>{const n=t&&o===0?12:o%s;return{id:o,label:e==="2-digit"?n.toString().padStart(2,"0"):n.toString()}})},[e,t])}function on(t,e="2-digit",s=0,r=0){return m.useMemo(()=>Array.from({length:t},(o,n)=>{const i=String(n+s);return{id:n+r,label:e==="2-digit"?i.padStart(2,"0"):i}}),[t,s,r,e])}function ef(t="en-US"){return m.useMemo(()=>["AM","PM"].map(e=>{const s=new Intl.DateTimeFormat(t,{hour:"2-digit",hour12:!0}).formatToParts(new Date().setHours(e==="AM"?0:12))[2].value;return{id:s,label:s}}),[t])}function tf({formatOptions:{hour12:t=!0,hour:e="2-digit",minute:s="2-digit",second:r="2-digit"}={hour12:!0,hour:"2-digit",minute:"2-digit",second:"2-digit"},locale:o="en-US"}){const n=Jh(t,e),i=on(60,s),a=on(60,r),c=ef(o);return{hourOptions:n,minuteOptions:i,secondOptions:a,amPmOptions:c}}function sf(t,e){return We.format(t,e)}function rf({formatOptions:t,initialDate:e=new Date,locale:s="en-US",format:r="HH:mm"}){const[o,n]=m.useState(e),i=m.useCallback(w=>{n(M=>{const S=new Date(M);return S.setHours(Number(w)),S})},[]),a=m.useCallback(w=>{n(M=>{const S=new Date(M);return S.setMinutes(Number(w)),S})},[]),c=m.useCallback(w=>{n(M=>{const S=new Date(M);return S.setSeconds(Number(w)),S})},[]),u=m.useCallback(w=>{const M=new Date(w);n(M)},[]),d=sf(o,r),{hourOptions:h,minuteOptions:f,secondOptions:p,amPmOptions:y}=tf({formatOptions:t,locale:s});return{amPmOptions:y,formattedTime:d,hourOptions:h,minuteOptions:f,secondOptions:p,setHours:i,setMinutes:a,setSeconds:c,setTime:u,time:new Date(o)}}const i_=t=>{const{regionModel:e}=Qh(),s=m.useMemo(()=>({hour12:e==null?void 0:e.is12HourTimeFormat}),[e==null?void 0:e.is12HourTimeFormat]);return rf({...t,locale:e==null?void 0:e.regionId,format:e==null?void 0:e.selectedTimeFormat,formatOptions:s})};function a_(t,e,s={}){const{disposeOnUnmount:r=!0}=s,[o,n]=m.useState(!1),[i,a]=m.useState(void 0),c=m.useRef(null),u=m.useRef(!0),d=m.useRef(!1),h=m.useMemo(()=>{if(!u.current&&c.current&&r&&hr(c.current)){const p=c.current;Promise.resolve().then(()=>{hr(p)&&p.dispose()})}u.current=!1,d.current=!1;const f=t();return c.current=f,f},e);return m.useEffect(()=>{d.current||(Wc(h)?(d.current=!0,n(!1),a(void 0),h.ready().then(()=>{n(!0)}).catch(f=>{a(f),n(!1)})):(n(!0),a(void 0)))},[h]),m.useEffect(()=>()=>{r&&c.current&&hr(c.current)&&c.current.dispose(),c.current=null},[r]),{viewModel:h,ready:o,error:i}}function c_(t){return e=>{const[s]=Zh();return s?T.jsx(ch,{message:"Wait a moment while your project reloads..."}):T.jsx(t,{...e})}}const ka=g.createLogger({name:"studio-properties-service",group:"Services"}),l_="/api/kos/studio/properties",of=async t=>{if(ka.debug("sending GET for studio-properties"),!t)throw ka.error("connectionId is undefined"),new Error("connectionId is undefined");return await Le.get(l_,{},{destinationAddress:t,timeout:500})},u_=Object.freeze(Object.defineProperty({__proto__:null,getStudioProperties:of},Symbol.toStringTag,{value:"Module"}));var d_=Object.getOwnPropertyDescriptor,h_=(t,e,s,r)=>{for(var o=r>1?void 0:r?d_(e,s):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=i(o)||o);return o};const nf="studio-properties-model",f_="/kos/studio/properties",La={"kos.studio.tool.legacy":1};let nn=class{constructor(t,e,s){l(this,"id");l(this,"connectionId");l(this,"unsubscribe",null);l(this,"logger");l(this,"data");this.id=t,this.logger=s.logger,this.data=xe(),this.connectionId=e.connectionId}async init(){this.logger.debug(`initializing studio-properties ${this.id}`)}async load(){this.logger.debug(`loading studio-properties ${this.id}`)}async terminatePropertiesSession(){var t;(t=this.unsubscribe)==null||t.call(this)}async initializePropertiesSession(){this.unsubscribe=Pt.getInstance().subscribeTopic({topic:f_,destinationAddress:this.connectionId,callback:s=>{this.logger.error(`Received studio-properties message for connection ${this.connectionId}: ${JSON.stringify(s)}`)}});const[t,e]=await of(this.connectionId);if(t){this.logger.error(`Error loading studio-properties: ${t}`),this.data.setValues(La);return}if(e){const s=Object.keys(e).reduce((r,o)=>(r[o]=e[o]??o,r),{});this.data.setValues(s??La),g.ifDebug(()=>this.logger.debug(`studio-properties loaded: ${JSON.stringify(s)}`))}}get(t){return this.data[t]}createObservableProperty(t){return Hn(()=>this.get(t))}};nn=h_([R(nf)],nn);const p_=new ve({class:nn,type:nf});Object.defineProperty(exports,"makeAutoObservable",{enumerable:!0,get:()=>E.makeAutoObservable});Object.defineProperty(exports,"makeObservable",{enumerable:!0,get:()=>E.makeObservable});Object.defineProperty(exports,"kosComponent",{enumerable:!0,get:()=>cn.observer});exports.AncestorPathVisitor=Nm;exports.AuthState=$l;exports.BrowserKosRouter=Ql;exports.BrowserRouter=ei;exports.CanvasDispatcher=qt;exports.CanvasDispatcherServices=rE;exports.CanvasRenderer=bi;exports.CanvasStreamer=lT;exports.CanvasStreamerBase=wh;exports.ChildModels=Xe;exports.CompanionParentModel=Ze;exports.ConfigBean=Ds;exports.ContainerAwareSetup=_n;exports.CoreExtensionManager=tM;exports.CoreModels=Si;exports.CreateModelTranslationsContext=gh;exports.CreateModelTranslationsProvider=BM;exports.DateDisplayFormat=Kh;exports.DateHelpers=zm;exports.DependencyLifecycle=C;exports.DependencyModels=F;exports.DependencyResolutionPolicy=Qe;exports.Device=qr;exports.DeviceServices=SE;exports.DomIntersectionStrategy=Xh;exports.EVENT_KOS_MODEL_READY=hn;exports.EVENT_TROUBLE_ADDED=Ty;exports.EVENT_TROUBLE_REMOVED=_y;exports.EXTENSION_CANVAS_RENDERER=se;exports.EXTENSION_FEATURE_FLAG_RESOLVER=Ul;exports.EXTENSION_FUTURE_LIFECYCLE_WRAPPER=Fc;exports.EXTENSION_TROUBLE_DATA_MAPPER=xr;exports.EXTENSION_TROUBLE_MAPPER=Qs;exports.ErrorBoundaryWithFallback=lh;exports.EventBus=ff;exports.EventBusFunctional=gf;exports.EventBusState=yf;exports.ExtensionException=dr;exports.ExtensionManager=I;exports.FUTURE_CONTAINER_MODEL_TYPE=_u;exports.FUTURE_MODEL_TYPE=Eu;exports.FUTURE_NOT_ASSIGNED=qn;exports.FeatureFlagService=jl;exports.FetchError=z;exports.FutureAliases=Ms;exports.FutureContainerFactory=et;exports.FutureContainerModel=Ou;exports.FutureContainerSetup=wn;exports.FutureEndState=Je;exports.FutureFactory=Jt;exports.FutureHandler=so;exports.FutureManager=pt;exports.FutureModel=Tu;exports.FutureService=vs;exports.HEADER_CACHE_CONTROL=Ha;exports.HEADER_CONTENT_TYPE=Ba;exports.HEADER_DESTINATION_ADDR=ze;exports.HEADER_FOS_REQUEST_ID=Ka;exports.HEADER_METHOD=Yr;exports.HEADER_ORDERED=un;exports.HEADER_REQUEST_ID=Hs;exports.HEADER_REQUEST_TYPE=Re;exports.HEADER_RESPONSE_ID=Wr;exports.HEADER_SOURCE_ADDR=ja;exports.HEADER_TOPIC=Ua;exports.HEADER_URL=Gt;exports.HEADER_WORK_TRACKER=dn;exports.HttpRouteHandlers=je;exports.KOS_EXECUTION_CONTEXT=eo;exports.KOS_MODEL_ID=vr;exports.KOS_SERVICE=uM;exports.KOS_SERVICE_1_6_5=iM;exports.KOS_SERVICE_1_8_1=cM;exports.KeyValue=ri;exports.KeyValueServices=bb;exports.Kos=le;exports.KosConfigPropertySpec=vt;exports.KosContainerIndex=Dn;exports.KosContextBean=Yl;exports.KosContextManager=W;exports.KosCore=_;exports.KosCoreModelPropertyMapper=_e;exports.KosDataContainer=Bn;exports.KosDependencyTypes=rp;exports.KosExpressionEvaluator=Fu;exports.KosExtensionUtils=bp;exports.KosFeatureFlags=Bl;exports.KosFetchMethods=Ac;exports.KosGlobalConfig=bn;exports.KosHttpRouteManager=Pn;exports.KosLog=g;exports.KosLogManager=ju;exports.KosLogManagerServices=Sv;exports.KosLoggerFactory=Cn;exports.KosMockEvents=Va;exports.KosModel=Sl;exports.KosModelCollectionProvider=LM;exports.KosModelContainer=ke;exports.KosModelContext=bo;exports.KosModelEvents=k;exports.KosModelFactory=_s;exports.KosModelLoader=fh;exports.KosModelLoaderDisplay=ph;exports.KosModelManager=Il;exports.KosModelProvider=uh;exports.KosModelRegistrationFactory=ve;exports.KosModelRegistry=tn;exports.KosModelState=v;exports.KosModelSymbol=vn;exports.KosModelVisitor=Cl;exports.KosObservableData=kc;exports.KosRegistration=my;exports.KosSingletonRegistration=yy;exports.KosTime=$r;exports.KosTimeContext=Ai;exports.KosTimeProvider=WM;exports.KosTimeServices=Av;exports.KosTimer=eh;exports.KosToken=Wl;exports.KosTranslationProvider=sT;exports.KosTranslations=Td;exports.KosViewModelSymbol=wc;exports.KosWSTransportStatus=_l;exports.KosWsEvents=Ks;exports.LOADER_FEATURE_FLAG=Vm;exports.LOGIN_HOST=qa;exports.LOGIN_URL=uf;exports.LoadingMessage=ch;exports.LogBlock=Ls;exports.LogBlockContainer=po;exports.LogConfig=Es;exports.LogStream=Is;exports.LogStreamContainer=Ws;exports.LogStreamServices=Kv;exports.LoggerSetup=Tn;exports.MODEL_DELETION_DELAY=Ol;exports.MiddlewareChain=zl;exports.ModelEffects=Ue;exports.ModelError=tl;exports.MultipleFutureContainerSetup=En;exports.MultipleFutureHandler=Rc;exports.NestedModelContext=vo;exports.NetworkInterface=Ei;exports.NetworkInterfaceContainer=Us;exports.NetworkInterfaceServices=PE;exports.ObservableData=xe;exports.OptionsRequired=qs;exports.Ota=Rr;exports.OutsideAlerter=bT;exports.PLUGIN_EXTENSION_NAME=vp;exports.PORT=za;exports.PROFILE_ENABLE_RELEASES=vf;exports.PROFILE_LOG_DEBUG=uc;exports.PROFILE_LOG_INFO=dc;exports.PROFILE_RELAX_STORE_VALIDATION=wf;exports.PROFILE_TOOLS_PREVIEW=lc;exports.ParentModel=ws;exports.PluginExtensionManager=wp;exports.ProgressBar=AM;exports.ReferenceConfig=ur;exports.RegionInfo=ne;exports.RegionServices=Py;exports.RegistrationManager=A;exports.Registry=JE;exports.ReloadAwareSetup=Ec;exports.ReplayStrategy=ht;exports.ResponseRetention=oe;exports.STATUS=ln;exports.ServiceFactory=ie;exports.ServiceRequestHandlers=ft;exports.SingletonKosModelRegistrationFactory=$e;exports.SoftwareInfo=Pr;exports.SoftwareInfoContext=Pi;exports.SoftwareInfoProvider=ZM;exports.SoftwareInfoServices=Sw;exports.StateActionHandlers=Cf;exports.StateBean=Ns;exports.StateBeanServices=Dw;exports.StateEntryHandlers=xt;exports.StateExitHandlers=Ts;exports.StateMachineSetup=Yt;exports.StateProp=pi;exports.StatePropServices=jw;exports.StorageDevice=Vr;exports.StorageDeviceContainer=zt;exports.StorageDeviceServices=UE;exports.StudioProperties=p_;exports.StudioPropertiesServices=u_;exports.SubscriptionHandlers=X;exports.TIMER_END=$i;exports.TIMER_EVENT=Oi;exports.TOPIC_TIMER_TICK_EVENT=Ii;exports.TimerManager=th;exports.TokenContext=vh;exports.TokenProvider=eT;exports.Topics=Os;exports.Trans=IT;exports.TransitionMap=pr;exports.Transitions=An;exports.Translation=Fr;exports.TranslationContainer=qe;exports.TranslationContainerContext=ki;exports.TranslationContext=Qw;exports.TransportFactory=qo;exports.Trouble=Fs;exports.TroubleAwareSetup=Mn;exports.TroubleContainer=Ht;exports.TroubleServices=cw;exports.Troubles=ye;exports.UsbUpdate=_i;exports.UsbUpdateContainer=Bs;exports.UsbUpdateServices=GE;exports.VFS_SERVICE=mM;exports.VFS_SERVICE_1_6_5=hM;exports.VFS_SERVICE_1_8_1=pM;exports.ViewModelConfig=Sn;exports.WS_EVENT_TYPE=_d;exports.WebSocketEvents=Te;exports.WebSocketTransport=Pt;exports.WsEventFactory=mi;exports.acceptOrgInvitation=ah;exports.addDaysToDate=Rl;exports.addFuture=mu;exports.addMonthsToDate=Al;exports.api=bu;exports.applyFunctionalEnhancements=Yc;exports.applyMixins=Um;exports.arraysEqual=jm;exports.buildConfigBeanModel=Iy;exports.buildFuture=Jn;exports.buildFutureModel=pu;exports.cancelFuture=yu;exports.checkAppsStarted=Ey;exports.checkWildcardPattern=Gc;exports.clearAllServiceResponses=uy;exports.clearPath=ly;exports.clearServiceResponse=cy;exports.convert=Wn;exports.convertFileSizeRaw=bf;exports.convertWithUnits=jy;exports.createBaseMessage=dl;exports.createBroadcastMessageResponse=yl;exports.createCancellablePromise=OM;exports.createClient=Ve;exports.createFosBaseMessage=ul;exports.createHeaders=hl;exports.createKosHtpMessageResponse=bl;exports.createKosMessage=gl;exports.createKosMessageResponse=vl;exports.createMessageBody=st;exports.createModelDependency=ol;exports.createOptionKey=Xf;exports.createPropKey=mt;exports.createReadableStream=fl;exports.createStudioMessage=ll;exports.createStudioMessageRequest=pl;exports.createStudioMessageResponse=ml;exports.debounce=zc;exports.del=Sc;exports.deleteFuture=gu;exports.destroyKosModel=De;exports.evaluateScopes=ou;exports.executeApiMethod=Dc;exports.executeChildrenModelLifecycle=al;exports.executeDependentModelLifecycle=as;exports.executeListLifecycle=il;exports.fetchModel=fT;exports.findModel=Op;exports.findModels=jc;exports.formatDate=Ll;exports.formatDateSince=xl;exports.formatDateTime=Nl;exports.formatTime=Fl;exports.get=_c;exports.getAllKosCompanionModels=Bc;exports.getCalendarMonthArray=Rh;exports.getConfigBean=ru;exports.getDayStrings=Ph;exports.getDays=jT;exports.getDaysArray=Ch;exports.getDaysInMonth=Un;exports.getDependenciesByLifecycle=nl;exports.getFormattedDate=BT;exports.getFormattedMonth=HT;exports.getFormattedMonthsArray=Fi;exports.getFormattedYear=Me;exports.getFormattedYearsArray=Ah;exports.getFutures=rb;exports.getHttpRouteHandlers=Oc;exports.getKosCompanionModel=Ip;exports.getKosLocalizationDescriptor=bd;exports.getKosMessageLogging=gc;exports.getKosModel=Uc;exports.getKosModelSync=Ae;exports.getKosModelType=Sp;exports.getKosServiceApi=oM;exports.getKosSessionKey=Gl;exports.getLastDayOfMonth=bs;exports.getLocalizationDescriptor=Hw;exports.getLogLevel=pc;exports.getLogMessageToStudio=mc;exports.getMessageBody=Ko;exports.getMonthsArray=Dh;exports.getObservableCompanions=$p;exports.getQueryParams=be;exports.getServiceResponse=iy;exports.getStartedApps=My;exports.getTranslations=yd;exports.getYearsArray=xh;exports.handleServiceRequestError=xc;exports.hasCachedResponse=ay;exports.hasDecimals=tu;exports.hasHttpRouteHandlers=Er;exports.hasKosProfile=Uo;exports.hasReadyHook=Wc;exports.hslStringToHex=Kl;exports.hslToHex=Hl;exports.httpDelete=np;exports.initKosProvider=KM;exports.initializeStateMachine=Mc;exports.injectStateMachineSupport=In;exports.isBoolean=Vn;exports.isDisposable=hr;exports.isKosCompanionTypeFactory=Xc;exports.isKosDataModel=Ss;exports.isKosExecutionContext=$n;exports.isKosLoggingEnabled=Tf;exports.isKosModel=Ie;exports.isKosModelContainer=Rn;exports.isKosModelReady=Mr;exports.isLeapYear=Nn;exports.isLocalRefId=hy;exports.isNumber=ro;exports.isPrintable=wg;exports.isTroubleAware=Xw;exports.isValidDate=ys;exports.kosAction=ee;exports.kosAutoEffect=Q;exports.kosChild=Pe;exports.kosCompanion=Jf;exports.kosComputed=Hn;exports.kosConfigBean=oo;exports.kosConfigProperty=Qy;exports.kosContainerAware=Tc;exports.kosContext=ep;exports.kosDependency=Wt;exports.kosEffect=Jl;exports.kosFuture=Di;exports.kosFutureAware=tp;exports.kosLogger=ip;exports.kosLoggerAware=Ic;exports.kosModel=R;exports.kosModelEffect=$c;exports.kosMultipleFutureAware=sp;exports.kosObservable=Kn;exports.kosParentAware=Jr;exports.kosReference=ap;exports.kosServiceRequest=yt;exports.kosStateBean=wM;exports.kosStateEntry=up;exports.kosStateExit=dp;exports.kosStateGuard=hp;exports.kosStateMachine=lp;exports.kosStateProp=EM;exports.kosSubscribe=Kp;exports.kosTopicHandler=B;exports.kosTroubleAware=fp;exports.kosViewModel=lg;exports.kosWhen=Vo;exports.login=oh;exports.mapConfigBeanModelToDto=cu;exports.mapDataToModel=zo;exports.mapDtoToConfigBeanModel=iu;exports.mapDtoToFutureModel=Zn;exports.mapDtoToFutureOptions=Xn;exports.mapUpdateDtoToConfigBeanModel=au;exports.modelEventTopicFactory=Zc;exports.modelFactory=Xt;exports.modelTypeEventTopicFactory=Jc;exports.modifyConfigBean=su;exports.modifyFuture=ob;exports.pairedClientHeartbeat=Zm;exports.parseWildcardSegment=Vc;exports.pipe=Vl;exports.post=zs;exports.preloadKosModel=xp;exports.processId=qm;exports.processMiddleware=Wm;exports.put=op;exports.registerCompanionModel=Dp;exports.registerCoreModels=Qd;exports.registerExtensionPoint=Qt;exports.registerHttpRoutes=Rg;exports.registerKosModel=Kc;exports.registerLegacyModel=Hc;exports.resetKosModel=_p;exports.resetPassword=ih;exports.resolveBaseUrl=Ml;exports.resolveChild=rl;exports.resolveContainerDeltas=Bm;exports.resolveItemListDeltas=Km;exports.resolveKosCompanion=jo;exports.resolveKosContext=gy;exports.resolveKosProfiles=fc;exports.resolveListDeltas=Hm;exports.resolveServiceRequestParameters=Cc;exports.resolveServiceUrl=ue;exports.resolveVariable=ql;exports.retryWithExponentialBackoff=ey;exports.sendAsyncIntent=vy;exports.sendBroadcastMessage=zg;exports.sendIntent=by;exports.sendKosHttpMessageResponse=El;exports.sendKosMessage=Hg;exports.sendKosMessageResponse=wl;exports.sendRequest=fy;exports.sendStudioMessage=qg;exports.sendStudioMessageRequest=Kg;exports.startPasswordReset=nh;exports.stringComponentInsert=Sh;exports.studioAcceptOrgInvitation=SM;exports.studioLogin=MM;exports.studioResetPassword=_M;exports.studioStartPasswordReset=TM;exports.subscribeStore=sM;exports.syncPublish=py;exports.troubleByTypeReducer=Pc;exports.troubleDataFactory=ad;exports.unloadKosModel=Tp;exports.updateCompanionModelRegistration=Xm;exports.updateModelRegistration=Qm;exports.updateRegion=Jd;exports.updateTimeZone=sn;exports.useAmPmValues=ef;exports.useCalendarDayArray=Hh;exports.useConfigBean=FT;exports.useConfigProperty=$h;exports.useContextModel=PM;exports.useContextModelHierarchy=hh;exports.useDateArrays=kh;exports.useDateProps=qT;exports.useDateRelativeConfig=zT;exports.useDateRelativeData=zh;exports.useDayNames=jh;exports.useDayOptions=Uh;exports.useDays=Ui;exports.useDevice=Eh;exports.useFormattedDate=Bh;exports.useFormattedTime=sf;exports.useFunctionWarmup=VT;exports.useHourValues=Jh;exports.useKosCore=yh;exports.useKosDateFormats=YT;exports.useKosModel=Z;exports.useKosRegions=Qh;exports.useKosTime=xi;exports.useKosTimeContext=QM;exports.useKosTimeFormats=t_;exports.useKosTimeZones=XT;exports.useKosTranslation=xT;exports.useKosTranslationContext=rT;exports.useLocalComputed=s_;exports.useModelFromHierarchy=NM;exports.useMonths=Fh;exports.useMonthsOptions=Nh;exports.useMutationObserver=o_;exports.useNetworkInterfaceContainer=Mh;exports.useOta=Th;exports.usePressGesture=n_;exports.useProjectReload=Zh;exports.useRegionTimeProps=i_;exports.useRegionalTimeDate=qh;exports.useSoftwareInfo=Ri;exports.useSoftwareInfoContext=JM;exports.useStateProperty=vT;exports.useStorageDeviceContainer=_h;exports.useSuspenseData=rn;exports.useTimeOptions=tf;exports.useTimeProps=rf;exports.useTimeValues=on;exports.useTimer=ET;exports.useTranslationContainer=Oh;exports.useTroubleContainerModel=Li;exports.useTroubleModel=RT;exports.useTroublePresence=PT;exports.useUsbUpdateContainer=Ih;exports.useViewModel=a_;exports.useYears=Ni;exports.useYearsOptions=Lh;exports.uuid=bt;exports.variableToHex=Gm;exports.waitForAppToStart=wy;exports.waitForAppsToStart=Zl;exports.waitForRequest=jn;exports.whenReady=pe;exports.withDevice=hT;exports.withKosTime=pT;exports.withNetworkInterfaceContainer=gT;exports.withOta=mT;exports.withProjectReloading=c_;exports.withSoftwareInfo=XM;exports.withStorageDeviceContainer=wT;exports.withTranslationContainer=AT;exports.withTroubleContainer=kT;exports.withUsbUpdateContainer=LT;exports.wrapPromise=yn;exports.wrapWithFutureLifecycle=Ci;
|
|
228
228
|
//# sourceMappingURL=index.cjs.map
|