@kosdev-code/kos-ddk-models 0.1.0-dev.5072 → 0.1.0-dev.5092

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/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from './lib/animation';
4
4
  export * from './lib/application';
5
5
  export * from './lib/auth';
6
6
  export * from './lib/carb-water';
7
+ export * from './lib/cgp-pump';
7
8
  export * from './lib/copy-logs';
8
9
  export * from './lib/dashboard-operations';
9
10
  export * from './lib/dispenser';
@@ -22,10 +23,10 @@ export * from './lib/reboot';
22
23
  export * from './lib/registration';
23
24
  export * from './lib/settings';
24
25
  export * from './lib/setup-step';
26
+ export * from './lib/spm-pump';
25
27
  export * from './lib/trouble-action';
26
28
  export * from './lib/utilities';
27
29
  export * from './lib/utils';
28
30
  export * from './start';
29
31
  export * from './types';
30
- export * from './lib/spm-pump';
31
32
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ddk/kos-ddk-models/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ddk/kos-ddk-models/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var Lr=Object.defineProperty;var Dr=(e,t,r)=>t in e?Lr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var n=(e,t,r)=>(Dr(e,typeof t!="symbol"?t+"":t,r),r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@kosdev-code/kos-ui-sdk"),se=require("@kosdev-code/kos-freestyle-sdk"),w=require("@kosdev-code/kos-dispense-sdk"),Ie="PurgeTrouble",lt="PrimeTrouble",{URL:ze}=s.resolveServiceUrl("AUTH_SERVICE"),{getOne:Fr,postModel:Rr}=s.ServiceFactory.build({basePath:`${ze}/api/auth`}),ct=s.KosLog.createLogger({name:"auth-service",group:"Services"}),ut=async()=>(ct.debug("sending GET for auth"),await Fr({urlOverride:`${ze}/api/app/kosdev.ddk/auth/role`})),dt=async e=>(ct.debug("sending POST for auth"),await Rr({urlOverride:`${ze}/api/app/kosdev.ddk/auth/pincode/${e}`,model:{}})),Ir=Object.freeze(Object.defineProperty({__proto__:null,getCurrentRole:ut,sendPinCode:dt},Symbol.toStringTag,{value:"Module"}));var Ar=Object.defineProperty,xr=Object.getOwnPropertyDescriptor,pt=(e,t,r,i)=>{for(var o=i>1?void 0:i?xr(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Ar(t,r,o),o};const A="auth-model",rt=e=>e.toLowerCase();let de=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"currentRole");this.id=e,this.logger=r.logger,this.currentRole="crew"}async authorize(e){if(!e)return!1;const t=await dt(e);return(t==null?void 0:t.status)===200?t.data:!1}async init(){this.logger.debug(`initializing auth ${this.id}`)}async load(){this.logger.debug(`loading auth ${this.id}`);const e=await ut();(e==null?void 0:e.status)===200&&(this.logger.debug(`response ${e.data}`),s.kosAction(()=>{this.currentRole=rt(e.data)}))}handleRoleChange(e){this.currentRole=rt(e)}forceRole(e){this.currentRole=e}};pt([s.kosTopicHandler({topic:"/app/kosdev.ddk/auth/role",websocket:!0})],de.prototype,"handleRoleChange",1);de=pt([s.kosModel(A)],de);const Pe={registration:{[A]:{class:de,singleton:!1}},type:A,predicate:s.isKosModel(A),factory:s.Kos.Factory.create(A)};var Kr=Object.defineProperty,Ur=Object.getOwnPropertyDescriptor,gt=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ur(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Kr(t,r,o),o};const ht="door-model",jr=s.createPropKey("doorPath");let pe=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"doorPath");n(this,"open");this.id=e,this.logger=r.logger,this.doorPath=t.doorPath}get currentState(){return this.open.value===void 0?"UNKNOWN":this.open.value?"OPEN":"CLOSED"}get isOpen(){return this.open.value===void 0?!0:this.open.value}};gt([s.kosStateProp({path:jr,attribute:"state"})],pe.prototype,"open",2);pe=gt([s.kosModel(ht)],pe);const ft=new s.KosModelRegistrationFactory({class:pe,type:ht}),{URL:Be}=s.resolveServiceUrl("SETUP-STEP_SERVICE"),{getAll:Vr,postModel:Hr}=s.ServiceFactory.build({basePath:`${Be}/api/setup-step`}),mt=s.KosLog.createLogger({name:"setup-step-service",group:"Services"}),yt=async()=>(mt.debug("sending GET for setup-step"),await Vr({urlOverride:`${Be}/api/app/kosdev.ddk/setup/steps`})),vt=async e=>(mt.debug("sending POST for setup-step"),await Hr({urlOverride:`${Be}/api/app/kosdev.ddk/setup/complete/${e}`,model:{}})),Nr=Object.freeze(Object.defineProperty({__proto__:null,getSetupSteps:yt,markStepComplete:vt},Symbol.toStringTag,{value:"Module"}));var Wr=Object.getOwnPropertyDescriptor,zr=(e,t,r,i)=>{for(var o=i>1?void 0:i?Wr(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const x="setup-step-model";let Ae=class{constructor(e,t,r){n(this,"id");n(this,"idx");n(this,"name");n(this,"complete");n(this,"preStep");n(this,"exclusive");n(this,"logger");this.id=e,this.idx=t.idx,this.logger=r.logger,this.name=t.name,this.complete=t.complete,this.preStep=t.preStep,this.exclusive=t.exclusive}updateModel(e){this.name=e.name,this.idx=e.idx,this.complete=e.complete,this.preStep=e.preStep,this.exclusive=e.exclusive}get titleKey(){return`setup.${this.name}.title`}get bodyKey(){return`setup.${this.name}.body`}async completeStep(){const e=await vt(this.name);(e==null?void 0:e.status)===200&&s.kosAction(()=>{this.complete=!0})}async init(){this.logger.debug(`initializing setup-step ${this.id}`)}async load(){this.logger.debug(`loading setup-step ${this.id}`)}};Ae=zr([s.kosModel(x)],Ae);const Ye={registration:{[x]:{class:Ae,singleton:!1}},type:x,predicate:s.isKosModel(x),factory:s.Kos.Factory.create(x)};var Br=Object.defineProperty,Yr=Object.getOwnPropertyDescriptor,Te=(e,t,r,i)=>{for(var o=i>1?void 0:i?Yr(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Br(t,r,o),o};const K="setup-step-container-model";function ot(e){return t=>{const r=Ye.factory(t.id)(t);r.updateModel(t),e.addModel(r)}}function st(e){return t=>{e.removeModel(t)}}let $=class{constructor(e,t,r){n(this,"id");n(this,"_currentStep");n(this,"logger");n(this,"models");n(this,"authModel");this.id=e,this.logger=r.logger,this._currentStep=void 0,this.models=new s.KosModelContainer({parentId:e,sortKey:"idx"})}get currentStep(){return this._currentStep}setCurrentStep(e){const t=this.models.getModel(e);t&&(this._currentStep=t)}nextStep(){if(!this._currentStep)this._currentStep=this.firstIncompleteStep;else{const e=this._currentStep.idx,t=this.models.data.find(r=>r.idx>e);t&&(this._currentStep=t)}}get hasIncompletePreSteps(){return this.models.data.some(e=>e.preStep&&!e.complete)}get setupRequired(){return this.models.data.some(e=>!e.complete)}get firstIncompleteStep(){return this.models.data.find(e=>!e.complete)}get isLastStep(){var e;return this.models.data[this.models.data.length-1].id===((e=this._currentStep)==null?void 0:e.id)}get data(){return this.models.data}getModel(e){return this.models.getModel(e)}addModel(e){this.models.addModel(e)}removeModel(e){this.models.removeModel(e)}async init(){this.logger.debug(`initializing setup-step-container container ${this.id}`)}async load(){this.logger.debug(`loading setup-step-container container ${this.id}`);const e=await yt();if(e!=null&&e.data){const t=e.data.map((r,i)=>({...r,idx:i,id:`setup-${r.name}`}));s.resolveContainerDeltas({container:this.models,onAddItem:ot(this),onRemoveItem:st(this)})(t)}this.nextStep()}handleStepChanges(e){const t=e.map((r,i)=>({...r,idx:i,id:`setup-${r.name}`}));s.resolveContainerDeltas({container:this.models,onAddItem:ot(this),onRemoveItem:st(this)})(t)}};Te([s.kosChild],$.prototype,"models",2);Te([s.kosDependency({modelType:Pe.type})],$.prototype,"authModel",2);Te([s.kosTopicHandler({topic:"/app/kosdev.ddk/setup/steps",websocket:!0})],$.prototype,"handleStepChanges",1);$=Te([s.kosModel(K)],$);const qe={registration:{[K]:{class:$,singleton:!0},...Ye.registration},type:K,predicate:s.isKosModel(K),factory:s.Kos.Singleton.create(K)},{URL:P}=s.resolveServiceUrl("AUTH_SERVICE"),{getOne:bt,getAll:ce}=s.ServiceFactory.build({basePath:`${P}/api/app/kosdev.ddk/ncui/`}),re=s.KosLog.createLogger({name:"auth-service",group:"Services"}),qr=async()=>{re.debug("sending GET for cuis");const e=await ce({urlOverride:`${P}/api/app/kosdev.ddk/cui`});if((e==null?void 0:e.status)!==200)throw new Error("Failed to retrieve cuis");return e.data},Gr=async()=>{re.debug("sending GET for navigation");try{const e=await ce({urlOverride:`${P}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.navigations`});if((e==null?void 0:e.status)!==200){re.info("no extensions found, using base data");const t=await ce({urlOverride:`${P}/api/kos/descriptor/system:app/kondra.ncui.navigations`});return(t==null?void 0:t.data)??[]}return(e==null?void 0:e.data)??[]}catch{const t=await ce({urlOverride:`${P}/api/kos/descriptor/system:app/kondra.ncui.navigations`});return(t==null?void 0:t.data)??[]}},Qr=async()=>(re.debug("navigating to CUI"),await bt({urlOverride:`${P}/api/app/kosdev.ddk/cui/open`})),Xr=async()=>(re.debug("navigating to NCUI"),await bt({urlOverride:`${P}/api/app/kosdev.ddk/ncui/open`}));var Jr=Object.defineProperty,Zr=Object.getOwnPropertyDescriptor,b=(e,t,r,i)=>{for(var o=i>1?void 0:i?Zr(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Jr(t,r,o),o};const U="application-model",_t=(e,t="")=>e.reduce((r,i)=>{const o=t?`${t}.${i.name}`:i.name;if(r[o]={...i,root:!t},i.children){const l=_t(i.children,o);Object.keys(l).forEach(a=>{r[a]=l[a]})}return r},{});let h=class{constructor(e,t,r){n(this,"id");n(this,"device");n(this,"authModel");n(this,"setupStepContainer");n(this,"door");n(this,"ncuiLanguage");n(this,"activeCui");n(this,"fallbackCui");n(this,"_cuis",[]);n(this,"_navigationItems",[]);n(this,"languages");n(this,"logger");this.id=e,this.languages=[],this._cuis=[],this.logger=r.logger,this.door=ft.instance("app:kosdev.ddk:service:door:door").options({doorPath:"app:kosdev.ddk:service:door:door"}).build()}get setupRequired(){return this.authModel.currentRole==="crew"?!1:this.setupStepContainer.setupRequired}get currentRole(){return this.authModel.currentRole}get cuis(){return this._cuis.reduce((e,t)=>(e[t.appId]=t,e),{})}get navigationItems(){return _t(this._navigationItems)}get hasCuiDefined(){return!!this.activeCui.value||!!this.fallbackCui.value}get doorIsOpen(){return this.door.isOpen}async enter(){this.logger.info("navigating to NCUI"),await Xr()}async exit(){this.logger.info("navigating to CUI"),await Qr()}async load(){var r,i;this.logger.debug(`loading application ${this.id}`);const e=await Gr();this._navigationItems=e;const t=await qr();this._cuis=t,(r=this.setupStepContainer)!=null&&r.hasIncompletePreSteps&&((i=this.authModel)==null||i.forceRole("technician")),this.languages=[{name:"English",locale:"en"}]}};b([s.kosDependency({modelType:s.Device.type})],h.prototype,"device",2);b([s.kosDependency({modelType:Pe.type})],h.prototype,"authModel",2);b([s.kosDependency({modelType:qe.type})],h.prototype,"setupStepContainer",2);b([s.kosChild],h.prototype,"door",2);b([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],h.prototype,"ncuiLanguage",2);b([s.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"activeCui"})],h.prototype,"activeCui",2);b([s.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"fallbackCui"})],h.prototype,"fallbackCui",2);h=b([s.kosModel(U)],h);const $e={registration:{[U]:{class:h,singleton:!0}},type:U,predicate:s.isKosModel(U),factory:s.Kos.Singleton.create(U)},le={none:999,crew:0,technician:1,manager:2},Ge=e=>t=>{if(t.type===se.AGITATION_REQUIRED_TROUBLE)return!1;const r=(t==null?void 0:t.role)||"technician";if(e&&r){const i=le[e.toLowerCase()]??le.crew,o=le[r.toLowerCase()]??le.crew;return i>=o}return!1};var eo=Object.defineProperty,to=Object.getOwnPropertyDescriptor,L=(e,t,r,i)=>{for(var o=i>1?void 0:i?to(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&eo(t,r,o),o};const Pt="agitation-control-model",xe="resolve",ro="agitate";let y=class{constructor(e,t,r){n(this,"id");n(this,"futureHandler");n(this,"logger");n(this,"troubleContainer");n(this,"_agitationFutureId");n(this,"_canExit",!0);n(this,"_exiting",!1);n(this,"_isFailed",!1);n(this,"disposer");n(this,"application");n(this,"inProgress",[]);this.id=e,this.logger=r.logger,this.troubleContainer=t.companionParent,this.futureHandler=new s.MultipleFutureHandler(this,xe)}set isFailed(e){this._isFailed=e}get isFailed(){return this._isFailed}get isDoorClosed(){return!this.application.doorIsOpen}get isAgitating(){return!!this._agitationFutureId}set exiting(e){this._exiting=e}get exiting(){return this._exiting}get canExit(){return this.queuedTroubles.length===0&&this._canExit}clearAll(){this.queuedTroubles.forEach(e=>{e.clearDefer()})}get readyToResolve(){const e=this.queuedTroubles.length,t=this.queuedTroubles.filter(i=>i.shouldDefer),r=e>0&&t.length===0;return this.isDoorClosed&&r&&this.exiting}onFutureUpdate(e){e.endState===s.FutureEndState.Success?(this.logger.debug(`Resolve deferred troubles future ${e.id} completed successfully`),this.queuedTroubles.forEach(t=>{t.clearDefer()}),s.kosAction(()=>{this._canExit=!0,this._isFailed=!1})):(e.endState===s.FutureEndState.Fail||e.endState===s.FutureEndState.Canceled||e.endState===s.FutureEndState.Aborted)&&(this.logger.error(`Resolve deferred troubles future ${e.id} failed`),this.clearAll(),s.kosAction(()=>{this._canExit=!1,this._isFailed=!0}))}async resolveDeferredTroubles(e){const t=this.queuedTroubles.filter(i=>!i.shouldDefer).map(i=>i.rawId).filter(i=>!this.inProgress.includes(i));return this.inProgress.push(...t),t.length===0?void 0:await s.TroubleServices.bulkResolveTroubles(t,void 0,e)}get hasQueuedTroubles(){return this.queuedTroubles.length>0}get queuedTroubles(){return this.troubleContainer.troubles.getIndexByKey(s.Troubles.INDEX_TROUBLES_BY_DEFERRED,s.Troubles.TROUBLES_DEFERRED)}get visibleTroubles(){const e=this.application.currentRole;return this.troubleContainer.troubles.data.filter(Ge(e)).filter(t=>t.type!==se.AGITATION_REQUIRED_TROUBLE)}get future(){return this.futureHandler.future}get resolveFuture(){return this.futureHandler.getFuture(xe)}get agitateFuture(){return this.futureHandler.getFuture(ro)}handleAgitationStarted(e){this.logger.info(`Agitation started for ${e.path}`),this._agitationFutureId=String(e.futureId)}handleAgitationEnded(e){this.logger.info(`Agitation ended for ${e.path}`),this._agitationFutureId=void 0}async init(){this.logger.debug(`initializing agitation-control ${this.id}`)}unload(){this.logger.debug(`unloading agitation-control ${this.id}`),this.disposer&&this.disposer()}handleReadyToResolve(){this.readyToResolve&&(this.logger.info("AgitationControl - Resolving deferred troubles"),this.resolveDeferredTroubles()),this._agitationFutureId&&this.logger.info("AgitationControl - Agitation started")}async load(){this.logger.debug(`loading agitation-control ${this.id}`)}};L([s.kosDependency({modelType:$e.type})],y.prototype,"application",2);L([s.kosFuture({alias:xe})],y.prototype,"resolveDeferredTroubles",1);L([s.kosTopicHandler({topic:se.CartridgeAgitatorEvents.TOPIC_AGITATION_STARTED})],y.prototype,"handleAgitationStarted",1);L([s.kosTopicHandler({topic:se.CartridgeAgitatorEvents.TOPIC_AGITATION_ENDED})],y.prototype,"handleAgitationEnded",1);L([s.kosModelEffect({dependencies:e=>[e.readyToResolve,e._agitationFutureId]})],y.prototype,"handleReadyToResolve",1);y=L([s.kosModel(Pt)],y);const oo=new s.SingletonKosModelRegistrationFactory({class:y,type:Pt});var so=Object.defineProperty,io=Object.getOwnPropertyDescriptor,ie=(e,t,r,i)=>{for(var o=i>1?void 0:i?io(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&so(t,r,o),o};const j="animation-model";let T=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"disableAll");n(this,"enableDial");n(this,"enableModal");n(this,"enableSideBar");this.id=e,this.logger=r.logger}};ie([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.disableAll"})],T.prototype,"disableAll",2);ie([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableDial"})],T.prototype,"enableDial",2);ie([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableModal"})],T.prototype,"enableModal",2);ie([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableSideBar"})],T.prototype,"enableSideBar",2);T=ie([s.kosModel(j)],T);const Tt={registration:{[j]:{class:T,singleton:!0}},type:j,predicate:s.isKosModel(j),factory:s.Kos.Singleton.create(j)},{URL:no}=s.resolveServiceUrl("ANIMATION_SERVICE"),{getAll:ao}=s.ServiceFactory.build({basePath:`${no}/api/animation`}),lo=s.KosLog.createLogger({name:"animation-service",group:"Services"}),co=async()=>(lo.debug("sending GET for animation"),await ao({})),uo=Object.freeze(Object.defineProperty({__proto__:null,getAnimations:co},Symbol.toStringTag,{value:"Module"})),{URL:D}=s.resolveServiceUrl("FCM-PUMP_SERVICE"),{postModel:ne}=s.ServiceFactory.build({basePath:`${D}/api/fcm-pump`}),u=s.KosLog.createLogger({name:"fcm-pump-service",group:"Services"}),$t=async e=>{var t,r,i,o,l;u.debug(`performElectricalTest - sending POST request to /api/ext/freestyle/fcm/diagnostics/${e}/electricalTest`);try{const a=await ne({model:{},urlOverride:`${D}/api/ext/freestyle/fcm/diagnostics/${e}/electricalTest`});return u.debug("performElectricalTest - response:",a),((a==null?void 0:a.status)===200||(a==null?void 0:a.status)===499)&&((t=a.data)!=null&&t.error)?[a.data.error||"unknownError",a.data]:[void 0,a==null?void 0:a.data]}catch(a){if(u.error(`performElectricalTest - sending POST request to /api/ext/freestyle/fcm/diagnostics/${e}/electricalTest`,a),a instanceof s.FetchError){const g=((i=(r=a.payload)==null?void 0:r.data)==null?void 0:i.error)||((o=a.payload)==null?void 0:o.error)||"unknownError";return[g,((l=a.payload)==null?void 0:l.data)||{error:g}]}}return["unknownError",{error:"unknownError"}]},Mt=async(e,t)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/preCalibrate`);try{const r=await ne({model:{},urlOverride:`${D}/api/ext/freestyle/fcm/calibration/${e}/preCalibrate`,tracker:t});return u.debug("performPreCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){u.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/preCalibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},St=async(e,t)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/calibrate`);try{const r=await ne({model:{},urlOverride:`${D}/api/ext/freestyle/fcm/calibration/${e}/calibrate`,tracker:t});return u.debug("performPreCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){u.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/calibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},Ct=async(e,t,r)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/verify/${t}`);try{const i=await ne({model:{},urlOverride:`${D}/api/ext/freestyle/fcm/calibration/${e}/verify/${t}`,tracker:r});return u.debug("performVerify - response:",i),i!=null&&i.data&&s.FutureManager.initiateFuture(i.data),i==null?void 0:i.data}catch(i){u.error(`performVerify - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/verify/${t}`,i);const o={id:r||"",endState:s.FutureEndState.Fail,tracker:r,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(o),o}},po=e=>e?e.data==="success"||!e.data?"success":e.data:"error",Ot=async(e,t,r)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/complete/${t}/${r}`);try{const i=await ne({model:{},urlOverride:`${D}/api/ext/freestyle/fcm/calibration/${e}/complete/${t}/${r}`});return u.debug("performPreCalibrate - response:",i),po(i==null?void 0:i.data)}catch(i){u.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/complete/${t}/${r}`,i);return}},go=Object.freeze(Object.defineProperty({__proto__:null,performCalibrate:St,performComplete:Ot,performElectricalTest:$t,performPreCalibrate:Mt,performVerify:Ct},Symbol.toStringTag,{value:"Module"}));var ho=Object.defineProperty,fo=Object.getOwnPropertyDescriptor,Me=(e,t,r,i)=>{for(var o=i>1?void 0:i?fo(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&ho(t,r,o),o};const kt="fcm-pump-model",mo=s.KosLog.createLogger({name:"fcm-pump-model"});let M=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"pumpModel");n(this,"futureHandler");this.id=e,this.logger=r.logger,this.pumpModel=t.companionParent,this.futureHandler=new s.FutureHandler(this)}get future(){return this.futureHandler.future}get name(){return this.pumpModel.name}get canPour(){return this.pumpModel.canPour}get isPouring(){return this.pumpModel.isPouring}async cancelPour(){return this.pumpModel.cancelPour()}performIntent(e){return this.pumpModel.performIntent(e)}async performElectricalTest(){const[e,t]=await $t(this.pumpModel.path);return e&&mo.error(`Failed to perform electrical test on pump ${this.id}`,e),t}getChildren(){return[...this.futureHandler.allFutures]}async performPreCalibrate(e){return Mt(this.pumpModel.path,e)}async performCalibrate(e){return St(this.pumpModel.path,e)}async performVerify(e,t){return Ct(this.pumpModel.path,e,t)}async performComplete(e,t){return Ot(this.pumpModel.path,e,t)}async init(){this.logger.debug(`initializing fcm-pump ${this.id}`)}async load(){this.logger.debug(`loading fcm-pump ${this.id}`)}};Me([s.kosFuture()],M.prototype,"performPreCalibrate",1);Me([s.kosFuture()],M.prototype,"performCalibrate",1);Me([s.kosFuture()],M.prototype,"performVerify",1);M=Me([s.kosModel(kt)],M);const Qe=new s.KosModelRegistrationFactory({class:M,type:kt});var yo=Object.defineProperty,vo=Object.getOwnPropertyDescriptor,Et=(e,t,r,i)=>{for(var o=i>1?void 0:i?vo(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&yo(t,r,o),o};const V="carb-water-model";let ge=class{constructor(e,t,r){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=r.logger}getPump(){const t=this.assemblyModel.getHoldersByGroup("carb")[0].pumps.data[0];return s.getKosCompanionModel(t,Qe.type)}async init(){this.logger.debug(`initializing carb-water ${this.id}`)}async load(){this.logger.debug(`loading carb-water ${this.id}`)}};Et([s.kosDependency({modelType:w.Assembly.type})],ge.prototype,"assemblyModel",2);ge=Et([s.kosModel(V)],ge);const wt={registration:{[V]:{class:ge,singleton:!1}},type:V,predicate:s.isKosModel(V),factory:s.Kos.Factory.create(V)},{URL:F}=s.resolveServiceUrl("COPY-LOGS_SERVICE"),{getAll:bo,getOne:_o,postModel:Lt,deleteModel:Po}=s.ServiceFactory.build({basePath:`${F}/api/copy-logs`}),he=s.KosLog.createLogger({name:"copy-logs-service",group:"Services"}),Dt=async(e,t)=>{const r=await Po({tracker:t,id:e,urlOverride:`${F}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},Ft=async(e,t)=>{const r=await Lt({model:{},tracker:t,urlOverride:`${F}/api/app/kosdev.ddk/copyLogs/eraseAndCopy/${e}`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},Rt=async(e,t)=>{const r=await Lt({model:{},tracker:t,urlOverride:`${F}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},It=async()=>{he.debug("sending GET for copy-logs");try{const e=await bo({urlOverride:`${F}/api/app/kosdev.ddk/copyLogs/volumes/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof s.FetchError)return he.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},At=async()=>{he.debug("sending GET for log file size");try{const e=await _o({urlOverride:`${F}/api/app/kosdev.ddk/copyLogs/files/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof s.FetchError)return he.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},To=Object.freeze(Object.defineProperty({__proto__:null,copyLogFromVolume:Rt,eraseAndCopyLogsToVolume:Ft,eraseVolume:Dt,getLogFileSize:At,getVolumes:It},Symbol.toStringTag,{value:"Module"}));var xt=Object.defineProperty,$o=Object.getOwnPropertyDescriptor,Mo=(e,t,r)=>t in e?xt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R=(e,t,r,i)=>{for(var o=i>1?void 0:i?$o(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&xt(t,r,o),o},So=(e,t,r)=>(Mo(e,t+"",r),r);const Co="copy-logs-model";let f=class{constructor(e){n(this,"id");n(this,"_volumes");n(this,"storageDeviceContainer");n(this,"_activeVolume");n(this,"_logFileSize",0);n(this,"_actionState","idle");n(this,"copyProgress");this.id=e,this._volumes=new s.KosDataContainer,this._activeVolume=void 0,this.copyProgress={bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}get volumes(){return this._volumes.data}get activeVolume(){return this._activeVolume}get logFileSize(){return this._logFileSize}reset(){this.clearActiveVolume(),this.futureHandler.removeFuture()}clearActiveVolume(){this._activeVolume=void 0}updateActiveVolume(e){this._activeVolume=e}get inserted(){return this.storageDeviceContainer.isStorageInserted}updateLogFileSize(e){this._logFileSize=e}get canCopyLogs(){return this.inserted&&this._activeVolume}get actionState(){return this._actionState}get diskFull(){var e;return((e=this.future)==null?void 0:e.status)===s.FutureEndState.Success&&this.copyProgress.filesSkipped>0}onFutureUpdate(e){this.logger.info(`Future update: ${e.status}`),e.status===s.FutureEndState.Success&&(this.logger.info(`Future success: ${e.status}`),this.diskFull&&s.kosAction(()=>{e.endState=s.FutureEndState.Fail,e.reason="errDiskFull"})),e.status===s.FutureEndState.Fail&&this.logger.error(`Future failed: ${e.status}`),e.note==="copy"?s.kosAction(()=>{this._actionState="copying",this.copyProgress=e.clientData||{bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}):(this._actionState="erasing",s.kosAction(()=>{this.copyProgress={bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}))}async eraseAndCopyVolume(e){var t;if(!e)throw new Error("No tracker provided");if(s.kosAction(()=>{this._actionState="erasing"}),!this._activeVolume)throw this.logger.error("No active volume selected"),new Error("No active volume selected");return this.logger.info(`Erasing volume ${(t=this._activeVolume)==null?void 0:t.name}`),Ft(this._activeVolume.id,e)}async eraseVolume(e){var t;if(!e)throw new Error("No tracker provided");if(s.kosAction(()=>{this._actionState="erasing"}),!this._activeVolume)throw this.logger.error("No active volume selected"),new Error("No active volume selected");return this.logger.info(`Erasing volume ${(t=this._activeVolume)==null?void 0:t.name}`),Dt(this._activeVolume.id,e)}async copyLogs(e){var t;if(!e)throw new Error("No tracker provided");if(s.kosAction(()=>{this._actionState="copying"}),!this._activeVolume)throw this.logger.error("No active volume selected"),new Error("No active volume selected");return this.logger.info(`Copying logs to ${(t=this._activeVolume)==null?void 0:t.name}`),Rt(this._activeVolume.id,e)}handleInsertion(){this.inserted?this.syncVolumes():(this._volumes.clear(),this.clearActiveVolume())}async init(){this.logger.debug(`initializing copy-logs ${this.id}`)}async syncVolumes(){const[e,t]=await It(),[r,i]=await At();if(r){this.logger.error(`Error fetching log file size: ${r}`);return}if(e){this.logger.error(`Error fetching volumes: ${e}`);return}t&&(t.forEach(o=>{const l=this.storageDeviceContainer.getModel(o.id);if(l){const a={id:o.id,name:l.label,freeBytes:o.info.freeBytes,totalBytes:o.info.totalBytes};this._volumes.addModel(a)}}),t.length===1?this.updateActiveVolume(this._volumes.data[0]):this.clearActiveVolume()),i&&(this.logger.info(`Log file size: ${i}`),this.updateLogFileSize(parseInt(i,10)))}async activate(){this.logger.debug(`activating copy-logs ${this.id}`),await this.syncVolumes()}async load(){this.logger.debug(`loading copy-logs ${this.id}`)}};So(f,"Registration");R([s.kosDependency({modelType:s.StorageDeviceContainer.type})],f.prototype,"storageDeviceContainer",2);R([s.kosFuture()],f.prototype,"eraseAndCopyVolume",1);R([s.kosFuture()],f.prototype,"eraseVolume",1);R([s.kosFuture()],f.prototype,"copyLogs",1);R([s.kosModelEffect({dependencies:e=>[e.inserted]})],f.prototype,"handleInsertion",1);f=R([s.kosModel({modelTypeId:Co,singleton:!0}),s.kosFutureAware(),s.kosLoggerAware()],f);const Oo=f.Registration,Kt=s.KosLog.createLogger({name:"dashboard-operations-service",group:"Services"}),Ut=async(e,t)=>(Kt.debug("resolveAll"),await s.TroubleServices.bulkResolveTroubles(e,void 0,t)),jt=async(e,t)=>(Kt.debug("resolveTrouble"),await s.TroubleServices.resolveTrouble(e,void 0,t)),ko=Object.freeze(Object.defineProperty({__proto__:null,resolveAll:Ut,resolveTrouble:jt},Symbol.toStringTag,{value:"Module"}));var Eo=Object.defineProperty,wo=Object.getOwnPropertyDescriptor,Se=(e,t,r,i)=>{for(var o=i>1?void 0:i?wo(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Eo(t,r,o),o};const H="dashboard-operations-model";function it(e){return!e.deferred}function nt(e){return e.deferred}let S=class{constructor(e,t,r){n(this,"id");n(this,"troubles");n(this,"futureHandler");n(this,"logger");this.id=e,this.futureHandler=new s.FutureHandler(this),this.logger=r.logger}get troublesByType(){return this.troubles.troubles.data.reduce(s.troubleByTypeReducer,{})}get queuedPurgeTroubles(){return this.purgeTroubles.filter(nt)}get queuedPrimeTroubles(){return this.primeTroubles.filter(nt)}get resolvablePrimeTroubles(){return this.primeTroubles.filter(it)}get resolvablePurgeTroubles(){return this.purgeTroubles.filter(it)}get hasResolvablePurgeTroubles(){return this.resolvablePurgeTroubles.length>0}get hasResolvablePrimeTroubles(){return this.resolvablePrimeTroubles.length>0}get hasPurgeTroubles(){return this.purgeTroubles.length>0}get hasPrimeTroubles(){return this.primeTroubles.length>0}get purgeTroubles(){return this.troublesByType[Ie]||[]}get primeTroubles(){return this.troublesByType[lt]||[]}get future(){return this.futureHandler.getFuture()}async resolveAllTroubles(e,t){if(!t)throw new Error("No tracker provided");const r=e===Ie?this.purgeTroubles:this.primeTroubles;r.filter(a=>a.shouldDefer).forEach(a=>{this.logger.info(`Deferring trouble ${a.rawId}`),a.defer()});const o=r.filter(a=>!a.shouldDefer).map(a=>a.rawId);return o.length===0?void 0:await Ut(o,t)}async resolveTrouble(e,t){if(!t)throw new Error("No tracker provided");return await jt(e,t)}async init(){this.logger.debug(`initializing dashboard-operations ${this.id}`)}async load(){this.logger.debug(`loading dashboard-operations ${this.id}`)}};Se([s.kosDependency({modelType:s.TroubleContainer.type})],S.prototype,"troubles",2);Se([s.kosFuture()],S.prototype,"resolveAllTroubles",1);Se([s.kosFuture()],S.prototype,"resolveTrouble",1);S=Se([s.kosModel(H)],S);const Ce={registration:{[H]:{class:S,singleton:!0}},type:H,predicate:s.isKosModel(H),factory:s.Kos.Singleton.create(H)};var Lo=Object.getOwnPropertyDescriptor,Do=(e,t,r,i)=>{for(var o=i>1?void 0:i?Lo(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const N="dispenser-model";let Ke=class{constructor(e,t,r){n(this,"id");n(this,"logger");this.id=e,this.logger=r.logger}updateModel(){}async init(){this.logger.debug(`initializing dispenser ${this.id}`)}async load(){this.logger.debug(`loading dispenser ${this.id}`)}};Ke=Do([s.kosModel(N)],Ke);const Vt={registration:{[N]:{class:Ke,singleton:!0}},type:N,predicate:s.isKosModel(N),factory:s.Kos.Singleton.create(N)},{URL:Fo}=s.resolveServiceUrl("DISPENSER_SERVICE"),{getAll:Ro}=s.ServiceFactory.build({basePath:`${Fo}/api/dispenser`}),Io=s.KosLog.createLogger({name:"dispenser-service",group:"Services"}),Ao=async()=>(Io.debug("sending GET for dispenser"),await Ro({})),xo=Object.freeze(Object.defineProperty({__proto__:null,getDispensers:Ao},Symbol.toStringTag,{value:"Module"}));var Ko=Object.defineProperty,Uo=Object.getOwnPropertyDescriptor,Ht=(e,t,r,i)=>{for(var o=i>1?void 0:i?Uo(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Ko(t,r,o),o};const W="dispenser-info-model";let fe=class{constructor(e,t,r){n(this,"logger");n(this,"id");n(this,"name");this.id=e,this.logger=r.logger}async init(){this.logger.debug(`initializing dispenser-info ${this.id}`)}async load(){this.logger.debug(`loading dispenser-info ${this.id}`)}};Ht([s.kosConfigProperty({path:"kos:device",attribute:"name"})],fe.prototype,"name",2);fe=Ht([s.kosModel(W)],fe);const Nt={registration:{[W]:{class:fe,singleton:!1}},type:W,predicate:s.isKosModel(W),factory:s.Kos.Factory.create(W)},{URL:jo}=s.resolveServiceUrl("DISPENSER-INFO_SERVICE"),{getAll:Vo}=s.ServiceFactory.build({basePath:`${jo}/api/dispenser-info`}),Ho=s.KosLog.createLogger({name:"dispenser-info-service",group:"Services"}),No=async()=>(Ho.debug("sending GET for dispenser-info"),await Vo({})),Wo=Object.freeze(Object.defineProperty({__proto__:null,getDispenserInfos:No},Symbol.toStringTag,{value:"Module"}));var zo=Object.getOwnPropertyDescriptor,Bo=(e,t,r,i)=>{for(var o=i>1?void 0:i?zo(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const z="enrollment-model";let Ue=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"enrolled");this.id=e,this.logger=r.logger,this.enrolled=!1}updateModel(e){console.log("updateModel:",e)}async init(){this.logger.debug(`initializing enrollment ${this.id}`)}async load(){this.logger.debug(`loading enrollment ${this.id}`)}};Ue=Bo([s.kosModel(z)],Ue);const Wt={registration:{[z]:{class:Ue,singleton:!0}},type:z,predicate:s.isKosModel(z),factory:s.Kos.Singleton.create(z)},{URL:Yo}=s.resolveServiceUrl("ENROLLMENT_SERVICE"),{getAll:qo}=s.ServiceFactory.build({basePath:`${Yo}/api/enrollment`}),Go=s.KosLog.createLogger({name:"enrollment-service",group:"Services"}),Qo=async()=>(Go.debug("sending GET for enrollment"),await qo({})),Xo=Object.freeze(Object.defineProperty({__proto__:null,getEnrollments:Qo},Symbol.toStringTag,{value:"Module"})),Jo=e=>e.toLowerCase().includes("micros"),Zo=e=>!e.toLowerCase().includes("micros"),es=e=>t=>{const r=e==null?void 0:e.getHoldersByGroup(t);return r?r.map(i=>({id:i.id,name:i.ingredientName,path:i.path})):null},ts=["water","carb","ns","nss"],C="dashboardKeyFactory",De=[];s.registerExtensionPoint(C,{register:(e,t)=>{De.includes(t)||De.push(t)},execute:(e,t)=>{const r=De.sort((i,o)=>i.rank-o.rank);for(const i of r){const o=i.factory(t);if(o)return o}}});const zt=e=>{s.ExtensionManager[C].register(C,e)},Bt=e=>s.ExtensionManager[C].execute(C,e);s.ExtensionManager.registerDashboardKeyFactory=zt;s.ExtensionManager.executeDashboardKeyFactory=Bt;const je=3600,Yt=60,rs=e=>{const t=Math.floor(e/je),r=Math.floor(e%je/Yt);return{hours:t,minutes:r}},os=(e,t)=>e*je+t*Yt,qt=e=>{const r=new Date().valueOf()-e.valueOf(),i=Math.floor(r/(1e3*60)),o=Math.floor(i/60),l=Math.floor(o/24),a=i%60,g=o%24;let _="";return l>0&&(_+=`${l} day${l>1?"s":""} `),g>0&&(_+=`${g} hour${g>1?"s":""} `),(a>0||l===0&&g===0)&&(_+=`${a} minute${a>1?"s":""} `),_};var ss=Object.defineProperty,is=Object.getOwnPropertyDescriptor,Oe=(e,t,r,i)=>{for(var o=i>1?void 0:i?is(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&ss(t,r,o),o};const B="ingredient-summary-model";let O=class{constructor(e,t,r){n(this,"id");n(this,"assemblyModel");n(this,"dashboardOperationModel");n(this,"appModel");n(this,"logger");this.id=e,this.logger=r.logger,this.dashboardOperationModel=Ce.factory({})}get highPriorityHolders(){return this.assemblyModel.allHolders.filter(e=>e.troubles.length>0&&e.troubles.find(t=>t.rank>=400))}get actionRequiredHolders(){const e=this.appModel.currentRole,t=Ge(e);return this.assemblyModel.allHolders.filter(r=>{const i=s.getKosCompanionModel(r,se.FreestyleHolder.type);if(i!=null&&i.isRemote)return!1;const o=r.troubles.filter(t);return o.length>0&&o.find(l=>l.resolvable)})}get lowLevelHolders(){return this.assemblyModel.allHolders.filter(e=>{const t=e.fillPercent;return e.hasFuelGuage&&t<20})}async init(){this.logger.debug(`initializing ingredient-summary ${this.id}`)}async load(){this.logger.debug(`loading ingredient-summary ${this.id}`)}};Oe([s.kosDependency({modelType:w.Assembly.type})],O.prototype,"assemblyModel",2);Oe([s.kosDependency({modelType:Ce.type})],O.prototype,"dashboardOperationModel",2);Oe([s.kosDependency({modelType:$e.type})],O.prototype,"appModel",2);O=Oe([s.kosModel(B)],O);const Gt={registration:{[B]:{class:O,singleton:!1}},type:B,predicate:s.isKosModel(B),factory:s.Kos.Factory.create(B)};var ns=Object.getOwnPropertyDescriptor,as=(e,t,r,i)=>{for(var o=i>1?void 0:i?ns(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const Qt="lfcv-pump-model";let Ve=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"pumpModel");this.id=e,this.logger=r.logger,this.pumpModel=t.companionParent}get name(){return this.pumpModel.name}get canPour(){return this.pumpModel.canPour}get isPouring(){return this.pumpModel.isPouring}async cancelPour(){return this.pumpModel.cancelPour()}performIntent(e){return this.pumpModel.performIntent(e)}async init(){this.logger.debug(`initializing lfcv-pump ${this.id}`)}async load(){this.logger.debug(`loading lfcv-pump ${this.id}`)}};Ve=as([s.kosModel(Qt)],Ve);const ls=new s.KosModelRegistrationFactory({class:Ve,type:Qt}),{URL:cs}=s.resolveServiceUrl("LFCV-PUMP_SERVICE"),{getAll:us}=s.ServiceFactory.build({basePath:`${cs}/api/lfcv-pump`}),ds=s.KosLog.createLogger({name:"lfcv-pump-service",group:"Services"}),ps=async()=>(ds.debug("sending GET for lfcv-pump"),await us({})),gs=Object.freeze(Object.defineProperty({__proto__:null,getLfcvPumps:ps},Symbol.toStringTag,{value:"Module"})),{URL:Xe}=s.resolveServiceUrl("LOCKOUT_SERVICE"),{postModel:Xt}=s.ServiceFactory.build({basePath:`${Xe}/api/app/kosdev.ddk/lockout`}),Jt=s.KosLog.createLogger({name:"lockout-service",group:"Services"}),hs=async()=>(Jt.info("lock"),await Xt({model:{},urlOverride:`${Xe}/api/app/kosdev.ddk/lockout/lockNow`})),Zt=async e=>{Jt.info("unlock");const t=await Xt({model:{},urlOverride:`${Xe}/api/app/kosdev.ddk/lockout/unlock/${e}`});return t==null?void 0:t.data},fs=Object.freeze(Object.defineProperty({__proto__:null,lock:hs,unlock:Zt},Symbol.toStringTag,{value:"Module"}));var ms=Object.defineProperty,ys=Object.getOwnPropertyDescriptor,I=(e,t,r,i)=>{for(var o=i>1?void 0:i?ys(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&ms(t,r,o),o};const er="lockout-model",vs=[{day:"monday",lock:"dayWiseLockConfigMap.Mon.enabled",open:"dayWiseLockConfigMap.Mon.unlockTime",close:"dayWiseLockConfigMap.Mon.lockTime"},{day:"tuesday",lock:"dayWiseLockConfigMap.Tue.enabled",open:"dayWiseLockConfigMap.Tue.unlockTime",close:"dayWiseLockConfigMap.Tue.lockTime"},{day:"wednesday",lock:"dayWiseLockConfigMap.Wed.enabled",open:"dayWiseLockConfigMap.Wed.unlockTime",close:"dayWiseLockConfigMap.Wed.lockTime"},{day:"thursday",lock:"dayWiseLockConfigMap.Thu.enabled",open:"dayWiseLockConfigMap.Thu.unlockTime",close:"dayWiseLockConfigMap.Thu.lockTime"},{day:"friday",lock:"dayWiseLockConfigMap.Fri.enabled",open:"dayWiseLockConfigMap.Fri.unlockTime",close:"dayWiseLockConfigMap.Fri.lockTime"},{day:"saturday",lock:"dayWiseLockConfigMap.Sat.enabled",open:"dayWiseLockConfigMap.Sat.unlockTime",close:"dayWiseLockConfigMap.Sat.lockTime"},{day:"sunday",lock:"dayWiseLockConfigMap.Sun.enabled",open:"dayWiseLockConfigMap.Sun.unlockTime",close:"dayWiseLockConfigMap.Sun.lockTime"}];let v=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"dayEnabledList",["dayWiseLockConfigMap.Sun.enabled","dayWiseLockConfigMap.Mon.enabled","dayWiseLockConfigMap.Tue.enabled","dayWiseLockConfigMap.Wed.enabled","dayWiseLockConfigMap.Thu.enabled","dayWiseLockConfigMap.Fri.enabled","dayWiseLockConfigMap.Sat.enabled"]);n(this,"dayOpenAtList",["dayWiseLockConfigMap.Sun.unlockTime","dayWiseLockConfigMap.Mon.unlockTime","dayWiseLockConfigMap.Tue.unlockTime","dayWiseLockConfigMap.Wed.unlockTime","dayWiseLockConfigMap.Thu.unlockTime","dayWiseLockConfigMap.Fri.unlockTime","dayWiseLockConfigMap.Sat.unlockTime"]);n(this,"dayCloseAtList",["dayWiseLockConfigMap.Sun.lockTime","dayWiseLockConfigMap.Mon.lockTime","dayWiseLockConfigMap.Tue.lockTime","dayWiseLockConfigMap.Wed.lockTime","dayWiseLockConfigMap.Thu.lockTime","dayWiseLockConfigMap.Fri.lockTime","dayWiseLockConfigMap.Sat.lockTime"]);n(this,"saveMap");n(this,"pin");n(this,"nextLockSkipped");n(this,"nextLockTime");n(this,"nextUnLockTime");n(this,"cuiLockout");this.id=e,this.logger=r.logger,this.saveMap=new Map}get enabled(){const e=this.getProp("oneTimeLockConfig.lockTime"),t=e!==void 0&&e!=="",r=this.getProp("lockScheduleEnabled");return t||r}get schedule(){return vs}getProp(e){return this.saveMap.get(e)}setProp(e,t){this.saveMap.set(e,t)}toggleSkip(){if(this.nextLockSkipped.value==="0"){const t=this.nextLockTime.value;t!==void 0&&this.nextLockSkipped.updateProperty(t)}else this.nextLockSkipped.updateProperty("0")}async unlock(e){return await Zt(e)}async save(){return this.saveMap.forEach((e,t)=>{e!==this.cuiLockout.props[t]&&(this.cuiLockout.props[t]=e)}),this.cuiLockout.updateConfigBean()}reset(){this.cuiLockout.props.entries.forEach(([e,t])=>this.saveMap.set(e,t))}async init(){this.logger.debug(`initializing lockout ${this.id}`),this.cuiLockout.props.entries.forEach(([e,t])=>this.saveMap.set(e,t))}async load(){this.logger.debug(`loading lockout ${this.id}`)}};I([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"pin"})],v.prototype,"pin",2);I([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockSkipped"})],v.prototype,"nextLockSkipped",2);I([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockTime"})],v.prototype,"nextLockTime",2);I([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextUnLockTime"})],v.prototype,"nextUnLockTime",2);I([s.kosConfigBean({path:"app:kosdev.ddk:service:cuiLockout"})],v.prototype,"cuiLockout",2);v=I([s.kosModel(er)],v);const bs=new s.SingletonKosModelRegistrationFactory({class:v,type:er}),_s=async(e,t)=>await s.TroubleServices.bulkResolveTroubles(e,void 0,t);var Ps=Object.defineProperty,Ts=Object.getOwnPropertyDescriptor,ke=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ts(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Ps(t,r,o),o};const Y="macro-assignment-model",at="PurgeTrouble",$s="PrimeTrouble";let k=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"futureHandler");n(this,"holders");n(this,"ingredients");this.id=e,this.futureHandler=new s.FutureHandler,this.logger=r.logger}get future(){return this.futureHandler.future}get macroHolders(){return this.holders.holders.getIndexByKey("group","macros").sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}get hasMacroHolders(){return this.macroHolders.length>0}get holderPurgeTroubles(){return this.macroHolders.reduce((t,r)=>{const i=r.troublesByType[at]||[];return t=[...t,...i],t},[])}get holderPrimeTroubles(){return this.macroHolders.reduce((t,r)=>{const i=r.troublesByType[$s]||[];return t=[...t,...i],t},[])}get hasHolderPurgeTroubles(){return this.holderPurgeTroubles.length>0}get hasHolderPrimeTroubles(){return this.holderPrimeTroubles.length>0}get macroIngredients(){return this.ingredients.ingredients.getIndexByKey("macro","macro")}get hasMacroIngredients(){return this.macroIngredients.length>0}async resolveAll(e,t){if(!t)throw new Error("No tracker provided");const i=(e===at?this.holderPurgeTroubles:this.holderPrimeTroubles).map(l=>l.rawId);return await _s(i,t)}};ke([s.kosDependency({modelType:w.HolderContainer.type})],k.prototype,"holders",2);ke([s.kosDependency({modelType:w.IngredientContainer.type})],k.prototype,"ingredients",2);ke([s.kosFuture()],k.prototype,"resolveAll",1);k=ke([s.kosModel(Y)],k);const tr={registration:{[Y]:{class:k,singleton:!0}},type:Y,predicate:s.isKosModel(Y),factory:s.Kos.Singleton.create(Y)};var Ms=Object.getOwnPropertyDescriptor,Ss=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ms(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const q="network-test-model";let He=class{constructor(e,t,r){n(this,"id");n(this,"group");n(this,"passed");n(this,"inProgress");n(this,"failureTime");n(this,"timestamp");n(this,"name");n(this,"results");n(this,"logger");this.id=e,this.logger=r.logger,this.group=t.group,this.passed=!1,this.inProgress=!1,this.name=t.name,this.results=[]}updateModel(e){this.group=e.group,this.name=e.name,this.passed=e.passed,this.failureTime=e.failureTime,this.inProgress=e.inProgress,this.timestamp=e.timestamp,this.results=e.results}async init(){this.logger.debug(`initializing network-test ${this.id}`)}async load(){this.logger.debug(`loading network-test ${this.id}`)}};He=Ss([s.kosModel(q)],He);const Je={registration:{[q]:{class:He,singleton:!1}},type:q,predicate:s.isKosModel(q),factory:s.Kos.Factory.create(q)},{URL:Ee}=s.resolveServiceUrl("NETWORK-TEST_SERVICE"),{getAll:Cs,getOne:rr}=s.ServiceFactory.build({basePath:`${Ee}/api/app/ncui/network/tests`}),Os=s.KosLog.createLogger({name:"network-test-service",group:"Services"}),or=async()=>{Os.debug("sending GET for network-test");const e=await Cs({urlOverride:`${Ee}/api/app/kosdev.ddk/network/tests`});return e==null?void 0:e.data},sr=async()=>{const e=await rr({urlOverride:`${Ee}/api/app/kosdev.ddk/network/reports`});return e==null?void 0:e.data},ir=async(e,t)=>await rr({urlOverride:`${Ee}/api/app/kosdev.ddk/network/tests/run/group/${e}`,tracker:t}),ks=Object.freeze(Object.defineProperty({__proto__:null,getNetworkTests:or,getTestsReports:sr,performGroupTest:ir},Symbol.toStringTag,{value:"Module"}));var Es=Object.defineProperty,ws=Object.getOwnPropertyDescriptor,Ze=(e,t,r,i)=>{for(var o=i>1?void 0:i?ws(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Es(t,r,o),o};const G="network-test-container-model";let oe=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"lastTested");n(this,"futureHandler");n(this,"models");this.id=e,this.logger=r.logger,this.futureHandler=new s.FutureHandler(this),this.models=new s.KosModelContainer({parentId:e,indexMap:{group:"group"}}),this.lastTested=new Date("default")}get data(){return this.models.data}addModel(e){this.models.addModel(e)}removeModel(e){this.models.removeModel(e)}getModel(e){return this.models.getModel(e)}async init(){this.logger.debug(`initializing network-test-container container ${this.id}`)}getLastTested(e){const t=this.models.getIndexByKey("group",e).map(i=>i.timestamp&&new Date(i.timestamp)),r=Math.max(...t.map(i=>i?i.getTime():0));return r?qt(new Date(r)):""}async load(){this.logger.debug(`loading network-test-container container ${this.id}`);const e=await or(),t=await sr();e&&e.forEach(r=>{const i=Je.factory(r.id)(r);this.addModel(i)}),e&&t&&e.forEach(r=>{const i=t==null?void 0:t[r.group],o=i==null?void 0:i[r.id],l=this.getModel(r.id);if(l&&o){const a={group:o.group,name:o.name,passed:o.passed,failureTime:o.failureTime?new Date(o.failureTime):void 0,inProgress:o.inProgress,timestamp:new Date(o.timestamp),results:o.results};l.updateModel(a)}})}async performTest(e,t){if(!t)throw new Error("No tracker provided");const r=await ir(e,t);return r==null?void 0:r.data}onFutureUpdate(e){const{clientData:t}=e;t&&t.forEach(r=>{const i=this.getModel(r.id);if(s.kosAction(()=>{this.lastTested=this.lastTested>new Date(r.timestamp)?this.lastTested:new Date(r.timestamp)}),i){const o={group:r.group,name:r.name,passed:r.passed,failureTime:r.failureTime?new Date(r.failureTime):void 0,inProgress:r.inProgress,timestamp:new Date(r.timestamp),results:r.results};s.kosAction(()=>{i.updateModel(o)})}})}};Ze([s.kosChild],oe.prototype,"models",2);Ze([s.kosFuture()],oe.prototype,"performTest",1);oe=Ze([s.kosModel(G)],oe);const nr={registration:{[G]:{class:oe,singleton:!0},...Je.registration},type:G,predicate:s.isKosModel(G),factory:s.Kos.Singleton.create(G)};var Ls=Object.defineProperty,Ds=Object.getOwnPropertyDescriptor,ar=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ds(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Ls(t,r,o),o};const Q="nutritive-sweetener-model";let me=class{constructor(e,t,r){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=r.logger}getHolder(){return this.assemblyModel.getHoldersByGroup("ns")[0]}getPump(){return this.getHolder().pumps.data[0]}async init(){this.logger.debug(`initializing nutritive-sweetener ${this.id}`)}async load(){this.logger.debug(`loading nutritive-sweetener ${this.id}`)}};ar([s.kosDependency({modelType:w.Assembly.type})],me.prototype,"assemblyModel",2);me=ar([s.kosModel(Q)],me);const lr={registration:{[Q]:{class:me,singleton:!1}},type:Q,predicate:s.isKosModel(Q),factory:s.Kos.Factory.create(Q)};var Fs=Object.defineProperty,Rs=Object.getOwnPropertyDescriptor,cr=(e,t,r,i)=>{for(var o=i>1?void 0:i?Rs(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Fs(t,r,o),o};const X="plain-water-model";let ye=class{constructor(e,t,r){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=r.logger}getHolder(){return this.assemblyModel.getHoldersByGroup("water")[0]}getPump(){var i,o;const e=this.getHolder(),t=(o=(i=e==null?void 0:e.pumps)==null?void 0:i.data)==null?void 0:o[0];return s.getKosCompanionModel(t,Qe.type)}async init(){this.logger.debug(`initializing plain-water ${this.id}`)}async load(){this.logger.debug(`loading plain-water ${this.id}`)}};cr([s.kosDependency({modelType:w.Assembly.type})],ye.prototype,"assemblyModel",2);ye=cr([s.kosModel(X)],ye);const ur={registration:{[X]:{class:ye,singleton:!1}},type:X,predicate:s.isKosModel(X),factory:s.Kos.Factory.create(X)},{URL:dr}=s.resolveServiceUrl("REBOOT_SERVICE"),{postModel:Is}=s.ServiceFactory.build({basePath:`${dr}/api/reboot`}),As=s.KosLog.createLogger({name:"reboot-service",group:"Services"}),pr=async()=>(As.debug("sending POST call for Reboot Dispenser"),await Is({urlOverride:`${dr}/api/app/kosdev.ddk/ncui/reboot`,model:{}})),xs=Object.freeze(Object.defineProperty({__proto__:null,rebootDispenser:pr},Symbol.toStringTag,{value:"Module"}));var Ks=Object.getOwnPropertyDescriptor,Us=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ks(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const J="reboot-model";let Ne=class{constructor(e,t,r){n(this,"id");n(this,"logger");this.id=e,this.logger=r.logger}async completeReboot(){await pr()}updateModel(){}async init(){this.logger.debug(`initializing reboot ${this.id}`)}async load(){this.logger.debug(`loading reboot ${this.id}`)}};Ne=Us([s.kosModel(J)],Ne);const gr={registration:{[J]:{class:Ne,singleton:!1}},type:J,predicate:s.isKosModel(J),factory:s.Kos.Factory.create(J)};var js=Object.defineProperty,Vs=Object.getOwnPropertyDescriptor,m=(e,t,r,i)=>{for(var o=i>1?void 0:i?Vs(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&js(t,r,o),o};const Z="settings-model";let p=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"ncuiLanguageData");n(this,"resolveDelaysMs");n(this,"dateFormat");n(this,"timeFormat");n(this,"hidePlainWaterBev");n(this,"hideCarbWaterBev");n(this,"ncuiLanguage");n(this,"name");n(this,"activateAndRebootTime");this.id=e,this.logger=r.logger}updateModel(e){}async init(){this.logger.debug(`initializing settings ${this.id}`)}async getNcuiLanguageList(){this.ncuiLanguageData={status:200,data:{languages:[{name:"English",locale:"en"}]}}}async load(){this.logger.debug(`loading settings ${this.id}`),this.ncuiLanguageData={status:200,data:{languages:[{name:"English",locale:"en"}]}}}};m([s.kosConfigProperty({path:"system:app",attribute:"resolveDelaysMs"})],p.prototype,"resolveDelaysMs",2);m([s.kosConfigProperty({path:"system:app",attribute:"dateFormat"})],p.prototype,"dateFormat",2);m([s.kosConfigProperty({path:"system:app",attribute:"timeFormat"})],p.prototype,"timeFormat",2);m([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hidePlainWaterBev"})],p.prototype,"hidePlainWaterBev",2);m([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hideCarbWaterBev"})],p.prototype,"hideCarbWaterBev",2);m([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],p.prototype,"ncuiLanguage",2);m([s.kosConfigProperty({path:"kos:device",attribute:"name"})],p.prototype,"name",2);m([s.kosConfigProperty({path:"kos:service:OTA",attribute:"activateAndRebootTime"})],p.prototype,"activateAndRebootTime",2);p=m([s.kosModel(Z)],p);const hr={registration:{[Z]:{class:p,singleton:!0}},type:Z,predicate:s.isKosModel(Z),factory:s.Kos.Singleton.create(Z)},{URL:fr}=s.resolveServiceUrl("SETTINGS_SERVICE"),{getAll:mr}=s.ServiceFactory.build({basePath:`${fr}/api/settings`}),Hs=s.KosLog.createLogger({name:"settings-service",group:"Services"}),Ns=async()=>(Hs.debug("sending GET for settings"),await mr({})),Ws=async()=>await mr({urlOverride:`${fr}api/app/kosdev.ddk/ncui/languages`}),zs=Object.freeze(Object.defineProperty({__proto__:null,getNcuiLanguage:Ws,getSettings:Ns},Symbol.toStringTag,{value:"Module"}));var Bs=Object.getOwnPropertyDescriptor,Ys=(e,t,r,i)=>{for(var o=i>1?void 0:i?Bs(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=a(o)||o);return o};const ee="utilities-model";let We=class{constructor(e,t,r){n(this,"id");n(this,"name");n(this,"options");n(this,"roles");n(this,"columnId");n(this,"logger");this.id=e,this.logger=r.logger,this.name=t.name,this.options=t.options,this.roles=t==null?void 0:t.roles,this.columnId=t.columnId}updateModel(e){this.name=e.name,this.options=e.options,this.roles=e==null?void 0:e.roles}get titleKey(){return`utility.${this.id}.title`}get bodyKey(){return`utility.${this.id}.body`}async init(){this.logger.debug(`initializing utilities ${this.id}`)}async load(){this.logger.debug(`loading utilities ${this.id}`)}};We=Ys([s.kosModel(ee)],We);const et={registration:{[ee]:{class:We,singleton:!1}},type:ee,predicate:s.isKosModel(ee),factory:s.Kos.Factory.create(ee)},{URL:ue}=s.resolveServiceUrl("UTILITIES_SERVICE"),{getAll:Fe}=s.ServiceFactory.build({basePath:`${ue}/api/utilities`}),Re=s.KosLog.createLogger({name:"utilities-service",group:"Services"}),yr=async()=>{Re.debug("sending GET for utilities");try{const e=await Fe({urlOverride:`${ue}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.utilities`});if((e==null?void 0:e.status)!==200){Re.info("no extensions found, using base data");const t=await Fe({urlOverride:`${ue}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}return(e==null?void 0:e.data)??[]}catch(e){Re.info(`error fetching utilities: ${e}. Using base data`);const t=await Fe({urlOverride:`${ue}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}},qs=Object.freeze(Object.defineProperty({__proto__:null,getUtilities:yr},Symbol.toStringTag,{value:"Module"}));var Gs=Object.defineProperty,Qs=Object.getOwnPropertyDescriptor,vr=(e,t,r,i)=>{for(var o=i>1?void 0:i?Qs(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Gs(t,r,o),o};const te="utilities-container-model";let ve=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"_models");this.id=e,this.logger=r.logger,this._models=new s.KosModelContainer({parentId:e,sortKey:"id",indexMap:{byColumn:"columnId"}})}get data(){return this._models.data}get models(){return this._models}get columns(){return this._models.getIndexKeys("byColumn").sort((e,t)=>e.localeCompare(t))}addModel(e){this._models.addModel(e)}removeModel(e){this._models.removeModel(e)}getModel(e){return this._models.getModel(e)}getUtilitiesByColumn(e){return this._models.getIndexByKey("byColumn",e)}async load(){this.logger.debug(`loading utilities-container container ${this.id}`);const e=await yr();e==null||e.forEach((t,r)=>{t.forEach(i=>{const o={...i,columnId:String(r)},l=et.factory(i.name)(o);this.addModel(l)})})}};vr([s.kosChild],ve.prototype,"_models",2);ve=vr([s.kosModel(te)],ve);const br={registration:{[te]:{class:ve,singleton:!0},...et.registration},type:te,predicate:s.isKosModel(te),factory:s.Kos.Singleton.create(te)},Xs={...Tt.registration,...$e.registration,...Pe.registration,...wt.registration,...Ce.registration,...Vt.registration,...Nt.registration,...Wt.registration,...Gt.registration,...tr.registration,...nr.registration,...lr.registration,...ur.registration,...gr.registration,...hr.registration,...qe.registration,...br.registration};var Js=Object.defineProperty,Zs=Object.getOwnPropertyDescriptor,_r=(e,t,r,i)=>{for(var o=i>1?void 0:i?Zs(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&Js(t,r,o),o};const Pr="trouble-action-model";let be=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"troubleContainer");n(this,"disposer");n(this,"state");n(this,"troubleActionData");this.id=e,this.logger=r.logger,this.state=s.ObservableData(),this.troubleActionData=t.definitions.reduce((i,o)=>(i[o.troubleType]=o,i),{})}get activeTrouble(){const e=Object.keys(this.troubleActionData);if(e.length>0){const t=e[0],r=this.troubleContainer.troubles.getIndexByKey("byType",t);return r.length>0?r[0]:void 0}}get activeTroubleType(){var e;return(e=this.activeTrouble)==null?void 0:e.type}async init(){this.logger.debug(`initializing trouble-action ${this.id}`),this.disposer=s.kosAutoEffect(()=>{const e=this.troubleContainer.troubles.data.reduce((t,r)=>{const i=r.type;if(this.troubleActionData[i]){const o=this.troubleActionData[i].stateKey??i,l=this.troubleActionData[i].stateValue??i;t[o]=l}return t},{});this.state.setValues(e),Object.keys(this.troubleActionData).forEach(t=>{if(this.troubleContainer.troubles.getIndexByKey("byType",t).length===0){const r=this.troubleActionData[t].stateKey??t;this.state[r]=void 0}})})}unload(){var e;(e=this.disposer)==null||e.call(this)}async load(){this.logger.debug(`loading trouble-action ${this.id}`)}};_r([s.kosDependency({modelType:s.TroubleContainer.type})],be.prototype,"troubleContainer",2);be=_r([s.kosModel(Pr)],be);const ei=new s.SingletonKosModelRegistrationFactory({class:be,type:Pr}),{URL:Tr}=s.resolveServiceUrl("START_SERVICE"),{getOne:ti}=s.ServiceFactory.build({basePath:`${Tr}/api/start`}),ri=s.KosLog.createLogger({name:"start-service",group:"Services"}),$r=async()=>(ri.debug("navigating to NCUI"),await ti({urlOverride:`${Tr}/api/app/kosdev.ddk/ncui/open`})),oi=Object.freeze(Object.defineProperty({__proto__:null,navigateToNCui:$r},Symbol.toStringTag,{value:"Module"}));var si=Object.defineProperty,ii=Object.getOwnPropertyDescriptor,Mr=(e,t,r,i)=>{for(var o=i>1?void 0:i?ii(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&si(t,r,o),o};const Sr="start-model";let _e=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"troubles");this.id=e,this.logger=r.logger}get firmwareFailed(){return this.troubles.troubles.getIndexByKey("byType","FirmwareUpdateFailedTrouble").length>0}get firmwareInProgress(){return this.troubles.troubles.getIndexByKey("byType","FirmwareUpdateInProgressTrouble").length>0}async navigate(){await $r()}async init(){this.logger.debug(`initializing start ${this.id}`)}async load(){this.logger.debug(`loading start ${this.id}`)}};Mr([s.kosDependency({modelType:s.TroubleContainer.type})],_e.prototype,"troubles",2);_e=Mr([s.kosModel(Sr)],_e);const ni=new s.SingletonKosModelRegistrationFactory({class:_e,type:Sr}),{URL:ae}=s.resolveServiceUrl("SPM-PUMP_SERVICE"),{postModel:we}=s.ServiceFactory.build({basePath:`${ae}/api/spm-pump`}),d=s.KosLog.createLogger({name:"spm-pump-service",group:"Services"}),Cr=async(e,t)=>{d.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/preCalibrate`);try{const r=await we({model:{},urlOverride:`${ae}/api/ext/freestyle/microCalibration/pour/${e}/preCalibrate`,tracker:t});return d.debug("performPreCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){d.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/preCalibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},Or=async(e,t)=>{d.debug(`performCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/calibrate`);try{const r=await we({model:{},urlOverride:`${ae}/api/ext/freestyle/microCalibration/pour/${e}/calibrate`,tracker:t});return d.debug("performCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){d.error(`performCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/calibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},kr=async(e,t,r,i)=>{d.debug(`performVerify - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/verify`);try{const o=await we({model:{...r,measuredCalibrationVolume:t},urlOverride:`${ae}/api/ext/freestyle/microCalibration/pour/${e}/verify`,tracker:i});return d.debug("performVerify - response:",o),o!=null&&o.data&&s.FutureManager.initiateFuture(o.data),o==null?void 0:o.data}catch(o){d.error(`performVerify - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/verify`,o);const l={id:i||"",endState:s.FutureEndState.Fail,tracker:i,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(l),l}},Er=async(e,t,r,i)=>{var o,l,a,g,_;d.debug(`performComplete - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/complete`);try{const c=await we({model:{...i,measuredCalibrationVolume:t,measuredVerificationVolume:r},urlOverride:`${ae}/api/ext/freestyle/microCalibration/pour/${e}/complete`});return d.debug("performComplete - response:",c),((c==null?void 0:c.status)===200||(c==null?void 0:c.status)===499)&&((o=c.data)!=null&&o.error)?[c.data.error||"unknownError",c.data]:[void 0,c==null?void 0:c.data]}catch(c){if(d.error(`performComplete - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/complete`,c),c instanceof s.FetchError){const tt=((a=(l=c.payload)==null?void 0:l.data)==null?void 0:a.error)||((g=c.payload)==null?void 0:g.error)||"unknownError";return[tt,((_=c.payload)==null?void 0:_.data)||{error:tt}]}}return["unknownError",{error:"unknownError"}]},ai=Object.freeze(Object.defineProperty({__proto__:null,performCalibrate:Or,performComplete:Er,performPreCalibrate:Cr,performVerify:kr},Symbol.toStringTag,{value:"Module"}));var li=Object.defineProperty,ci=Object.getOwnPropertyDescriptor,Le=(e,t,r,i)=>{for(var o=i>1?void 0:i?ci(t,r):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(t,r,o):a(o))||o);return i&&o&&li(t,r,o),o};const wr="spm-pump-model";let E=class{constructor(e,t,r){n(this,"id");n(this,"logger");n(this,"pump");n(this,"futureHandler");this.id=e,this.logger=r.logger,this.pump=t.companionParent,this.futureHandler=new s.FutureHandler(this)}get name(){return this.pump.name}get canPour(){return this.pump.canPour}get isPouring(){return this.pump.isPouring}async cancelPour(){return this.pump.cancelPour()}performIntent(e){return this.pump.performIntent(e)}get future(){return this.futureHandler.future}async performPreCalibrate(e){return Cr(this.pump.path,e)}async performCalibrate(e){return Or(this.pump.path,e)}async performVerify(e,t,r){return kr(this.pump.path,e,t,r)}async performComplete(e,t,r){return Er(this.pump.path,e,t,r)}async init(){this.logger.debug(`initializing spm-pump ${this.id}`)}async load(){this.logger.debug(`loading spm-pump ${this.id}`)}};Le([s.kosFuture()],E.prototype,"performPreCalibrate",1);Le([s.kosFuture()],E.prototype,"performCalibrate",1);Le([s.kosFuture()],E.prototype,"performVerify",1);E=Le([s.kosModel(wr)],E);const ui=new s.KosModelRegistrationFactory({class:E,type:wr});exports.AgitationControl=oo;exports.Animation=Tt;exports.AnimationServices=uo;exports.Application=$e;exports.Auth=Pe;exports.AuthServices=Ir;exports.CarbWater=wt;exports.CopyLogs=Oo;exports.CopyLogsServices=To;exports.DDKModels=Xs;exports.DashboardOperations=Ce;exports.DashboardOperationsServices=ko;exports.Dispenser=Vt;exports.DispenserInfo=Nt;exports.DispenserInfoServices=Wo;exports.DispenserServices=xo;exports.Door=ft;exports.EXTENSION_POINT_DASHBOARD_KEY_FACTORY=C;exports.Enrollment=Wt;exports.EnrollmentServices=Xo;exports.FcmPump=Qe;exports.FcmPumpServices=go;exports.IngredientSummary=Gt;exports.LfcvPump=ls;exports.LfcvPumpServices=gs;exports.Lockout=bs;exports.LockoutServices=fs;exports.MACRO_KEYS=ts;exports.MacroAssignment=tr;exports.NetworkTest=Je;exports.NetworkTestContainer=nr;exports.NetworkTestServices=ks;exports.NutritiveSweetener=lr;exports.PlainWater=ur;exports.Reboot=gr;exports.RebootServices=xs;exports.Settings=hr;exports.SettingsServices=zs;exports.SetupStep=Ye;exports.SetupStepContainer=qe;exports.SetupStepServices=Nr;exports.SpmPump=ui;exports.SpmPumpServices=ai;exports.Start=ni;exports.StartServices=oi;exports.TROUBLE_TYPE_PRIME=lt;exports.TROUBLE_TYPE_PURGE=Ie;exports.TroubleActionManager=ei;exports.Utilities=et;exports.UtilitiesContainer=br;exports.UtilitiesServices=qs;exports.calculateTimeDifference=qt;exports.executeDashboardKeyFactory=Bt;exports.isMacroGroup=Zo;exports.isMicroGroup=Jo;exports.macroHolderMap=es;exports.registerDashboardKeyFactory=zt;exports.toSeconds=os;exports.toTimeComponents=rs;exports.troubleVisibilityFilter=Ge;
1
+ "use strict";var Ir=Object.defineProperty;var Ar=(e,t,r)=>t in e?Ir(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var a=(e,t,r)=>(Ar(e,typeof t!="symbol"?t+"":t,r),r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@kosdev-code/kos-ui-sdk"),ae=require("@kosdev-code/kos-freestyle-sdk"),L=require("@kosdev-code/kos-dispense-sdk"),Ke="PurgeTrouble",pt="PrimeTrouble",{URL:Ye}=s.resolveServiceUrl("AUTH_SERVICE"),{getOne:Kr,postModel:xr}=s.ServiceFactory.build({basePath:`${Ye}/api/auth`}),gt=s.KosLog.createLogger({name:"auth-service",group:"Services"}),ht=async()=>(gt.debug("sending GET for auth"),await Kr({urlOverride:`${Ye}/api/app/kosdev.ddk/auth/role`})),ft=async e=>(gt.debug("sending POST for auth"),await xr({urlOverride:`${Ye}/api/app/kosdev.ddk/auth/pincode/${e}`,model:{}})),Ur=Object.freeze(Object.defineProperty({__proto__:null,getCurrentRole:ht,sendPinCode:ft},Symbol.toStringTag,{value:"Module"}));var jr=Object.defineProperty,Vr=Object.getOwnPropertyDescriptor,mt=(e,t,r,i)=>{for(var o=i>1?void 0:i?Vr(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&jr(t,r,o),o};const K="auth-model",at=e=>e.toLowerCase();let ge=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"currentRole");this.id=e,this.logger=r.logger,this.currentRole="crew"}async authorize(e){if(!e)return!1;const t=await ft(e);return(t==null?void 0:t.status)===200?t.data:!1}async init(){this.logger.debug(`initializing auth ${this.id}`)}async load(){this.logger.debug(`loading auth ${this.id}`);const e=await ht();(e==null?void 0:e.status)===200&&(this.logger.debug(`response ${e.data}`),s.kosAction(()=>{this.currentRole=at(e.data)}))}handleRoleChange(e){this.currentRole=at(e)}forceRole(e){this.currentRole=e}};mt([s.kosTopicHandler({topic:"/app/kosdev.ddk/auth/role",websocket:!0})],ge.prototype,"handleRoleChange",1);ge=mt([s.kosModel(K)],ge);const Me={registration:{[K]:{class:ge,singleton:!1}},type:K,predicate:s.isKosModel(K),factory:s.Kos.Factory.create(K)};var Hr=Object.defineProperty,Wr=Object.getOwnPropertyDescriptor,yt=(e,t,r,i)=>{for(var o=i>1?void 0:i?Wr(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Hr(t,r,o),o};const bt="door-model",Nr=s.createPropKey("doorPath");let he=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"doorPath");a(this,"open");this.id=e,this.logger=r.logger,this.doorPath=t.doorPath}get currentState(){return this.open.value===void 0?"UNKNOWN":this.open.value?"OPEN":"CLOSED"}get isOpen(){return this.open.value===void 0?!0:this.open.value}};yt([s.kosStateProp({path:Nr,attribute:"state"})],he.prototype,"open",2);he=yt([s.kosModel(bt)],he);const vt=new s.KosModelRegistrationFactory({class:he,type:bt}),{URL:qe}=s.resolveServiceUrl("SETUP-STEP_SERVICE"),{getAll:zr,postModel:Br}=s.ServiceFactory.build({basePath:`${qe}/api/setup-step`}),_t=s.KosLog.createLogger({name:"setup-step-service",group:"Services"}),Pt=async()=>(_t.debug("sending GET for setup-step"),await zr({urlOverride:`${qe}/api/app/kosdev.ddk/setup/steps`})),Mt=async e=>(_t.debug("sending POST for setup-step"),await Br({urlOverride:`${qe}/api/app/kosdev.ddk/setup/complete/${e}`,model:{}})),Yr=Object.freeze(Object.defineProperty({__proto__:null,getSetupSteps:Pt,markStepComplete:Mt},Symbol.toStringTag,{value:"Module"}));var qr=Object.getOwnPropertyDescriptor,Gr=(e,t,r,i)=>{for(var o=i>1?void 0:i?qr(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const x="setup-step-model";let xe=class{constructor(e,t,r){a(this,"id");a(this,"idx");a(this,"name");a(this,"complete");a(this,"preStep");a(this,"exclusive");a(this,"logger");this.id=e,this.idx=t.idx,this.logger=r.logger,this.name=t.name,this.complete=t.complete,this.preStep=t.preStep,this.exclusive=t.exclusive}updateModel(e){this.name=e.name,this.idx=e.idx,this.complete=e.complete,this.preStep=e.preStep,this.exclusive=e.exclusive}get titleKey(){return`setup.${this.name}.title`}get bodyKey(){return`setup.${this.name}.body`}async completeStep(){const e=await Mt(this.name);(e==null?void 0:e.status)===200&&s.kosAction(()=>{this.complete=!0})}async init(){this.logger.debug(`initializing setup-step ${this.id}`)}async load(){this.logger.debug(`loading setup-step ${this.id}`)}};xe=Gr([s.kosModel(x)],xe);const Ge={registration:{[x]:{class:xe,singleton:!1}},type:x,predicate:s.isKosModel(x),factory:s.Kos.Factory.create(x)};var Qr=Object.defineProperty,Xr=Object.getOwnPropertyDescriptor,Te=(e,t,r,i)=>{for(var o=i>1?void 0:i?Xr(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Qr(t,r,o),o};const U="setup-step-container-model";function nt(e){return t=>{const r=Ge.factory(t.id)(t);r.updateModel(t),e.addModel(r)}}function lt(e){return t=>{e.removeModel(t)}}let $=class{constructor(e,t,r){a(this,"id");a(this,"_currentStep");a(this,"logger");a(this,"models");a(this,"authModel");this.id=e,this.logger=r.logger,this._currentStep=void 0,this.models=new s.KosModelContainer({parentId:e,sortKey:"idx"})}get currentStep(){return this._currentStep}setCurrentStep(e){const t=this.models.getModel(e);t&&(this._currentStep=t)}nextStep(){if(!this._currentStep)this._currentStep=this.firstIncompleteStep;else{const e=this._currentStep.idx,t=this.models.data.find(r=>r.idx>e);t&&(this._currentStep=t)}}get hasIncompletePreSteps(){return this.models.data.some(e=>e.preStep&&!e.complete)}get setupRequired(){return this.models.data.some(e=>!e.complete)}get firstIncompleteStep(){return this.models.data.find(e=>!e.complete)}get isLastStep(){var e;return this.models.data[this.models.data.length-1].id===((e=this._currentStep)==null?void 0:e.id)}get data(){return this.models.data}getModel(e){return this.models.getModel(e)}addModel(e){this.models.addModel(e)}removeModel(e){this.models.removeModel(e)}async init(){this.logger.debug(`initializing setup-step-container container ${this.id}`)}async load(){this.logger.debug(`loading setup-step-container container ${this.id}`);const e=await Pt();if(e!=null&&e.data){const t=e.data.map((r,i)=>({...r,idx:i,id:`setup-${r.name}`}));s.resolveContainerDeltas({container:this.models,onAddItem:nt(this),onRemoveItem:lt(this)})(t)}this.nextStep()}handleStepChanges(e){const t=e.map((r,i)=>({...r,idx:i,id:`setup-${r.name}`}));s.resolveContainerDeltas({container:this.models,onAddItem:nt(this),onRemoveItem:lt(this)})(t)}};Te([s.kosChild],$.prototype,"models",2);Te([s.kosDependency({modelType:Me.type})],$.prototype,"authModel",2);Te([s.kosTopicHandler({topic:"/app/kosdev.ddk/setup/steps",websocket:!0})],$.prototype,"handleStepChanges",1);$=Te([s.kosModel(U)],$);const Qe={registration:{[U]:{class:$,singleton:!0},...Ge.registration},type:U,predicate:s.isKosModel(U),factory:s.Kos.Singleton.create(U)},{URL:P}=s.resolveServiceUrl("AUTH_SERVICE"),{getOne:Tt,getAll:de}=s.ServiceFactory.build({basePath:`${P}/api/app/kosdev.ddk/ncui/`}),oe=s.KosLog.createLogger({name:"auth-service",group:"Services"}),Jr=async()=>{oe.debug("sending GET for cuis");const e=await de({urlOverride:`${P}/api/app/kosdev.ddk/cui`});if((e==null?void 0:e.status)!==200)throw new Error("Failed to retrieve cuis");return e.data},Zr=async()=>{oe.debug("sending GET for navigation");try{const e=await de({urlOverride:`${P}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.navigations`});if((e==null?void 0:e.status)!==200){oe.info("no extensions found, using base data");const t=await de({urlOverride:`${P}/api/kos/descriptor/system:app/kondra.ncui.navigations`});return(t==null?void 0:t.data)??[]}return(e==null?void 0:e.data)??[]}catch{const t=await de({urlOverride:`${P}/api/kos/descriptor/system:app/kondra.ncui.navigations`});return(t==null?void 0:t.data)??[]}},eo=async()=>(oe.debug("navigating to CUI"),await Tt({urlOverride:`${P}/api/app/kosdev.ddk/cui/open`})),to=async()=>(oe.debug("navigating to NCUI"),await Tt({urlOverride:`${P}/api/app/kosdev.ddk/ncui/open`}));var ro=Object.defineProperty,oo=Object.getOwnPropertyDescriptor,v=(e,t,r,i)=>{for(var o=i>1?void 0:i?oo(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&ro(t,r,o),o};const j="application-model",$t=(e,t="")=>e.reduce((r,i)=>{const o=t?`${t}.${i.name}`:i.name;if(r[o]={...i,root:!t},i.children){const l=$t(i.children,o);Object.keys(l).forEach(n=>{r[n]=l[n]})}return r},{});let f=class{constructor(e,t,r){a(this,"id");a(this,"device");a(this,"authModel");a(this,"setupStepContainer");a(this,"door");a(this,"ncuiLanguage");a(this,"activeCui");a(this,"fallbackCui");a(this,"_cuis",[]);a(this,"_navigationItems",[]);a(this,"languages");a(this,"logger");this.id=e,this.languages=[],this._cuis=[],this.logger=r.logger,this.door=vt.instance("app:kosdev.ddk:service:door:door").options({doorPath:"app:kosdev.ddk:service:door:door"}).build()}get setupRequired(){return this.authModel.currentRole==="crew"?!1:this.setupStepContainer.setupRequired}get currentRole(){return this.authModel.currentRole}get cuis(){return this._cuis.reduce((e,t)=>(e[t.appId]=t,e),{})}get navigationItems(){return $t(this._navigationItems)}get hasCuiDefined(){return!!this.activeCui.value||!!this.fallbackCui.value}get doorIsOpen(){return this.door.isOpen}async enter(){this.logger.info("navigating to NCUI"),await to()}async exit(){this.logger.info("navigating to CUI"),await eo()}async load(){var r,i;this.logger.debug(`loading application ${this.id}`);const e=await Zr();this._navigationItems=e;const t=await Jr();this._cuis=t,(r=this.setupStepContainer)!=null&&r.hasIncompletePreSteps&&((i=this.authModel)==null||i.forceRole("technician")),this.languages=[{name:"English",locale:"en"}]}};v([s.kosDependency({modelType:s.Device.type})],f.prototype,"device",2);v([s.kosDependency({modelType:Me.type})],f.prototype,"authModel",2);v([s.kosDependency({modelType:Qe.type})],f.prototype,"setupStepContainer",2);v([s.kosChild],f.prototype,"door",2);v([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],f.prototype,"ncuiLanguage",2);v([s.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"activeCui"})],f.prototype,"activeCui",2);v([s.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"fallbackCui"})],f.prototype,"fallbackCui",2);f=v([s.kosModel(j)],f);const $e={registration:{[j]:{class:f,singleton:!0}},type:j,predicate:s.isKosModel(j),factory:s.Kos.Singleton.create(j)},ue={none:999,crew:0,technician:1,manager:2},Xe=e=>t=>{if(t.type===ae.AGITATION_REQUIRED_TROUBLE)return!1;const r=(t==null?void 0:t.role)||"technician";if(e&&r){const i=ue[e.toLowerCase()]??ue.crew,o=ue[r.toLowerCase()]??ue.crew;return i>=o}return!1};var so=Object.defineProperty,io=Object.getOwnPropertyDescriptor,D=(e,t,r,i)=>{for(var o=i>1?void 0:i?io(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&so(t,r,o),o};const St="agitation-control-model",Ue="resolve",ao="agitate";let y=class{constructor(e,t,r){a(this,"id");a(this,"futureHandler");a(this,"logger");a(this,"troubleContainer");a(this,"_agitationFutureId");a(this,"_canExit",!0);a(this,"_exiting",!1);a(this,"_isFailed",!1);a(this,"disposer");a(this,"application");a(this,"inProgress",[]);this.id=e,this.logger=r.logger,this.troubleContainer=t.companionParent,this.futureHandler=new s.MultipleFutureHandler(this,Ue)}set isFailed(e){this._isFailed=e}get isFailed(){return this._isFailed}get isDoorClosed(){return!this.application.doorIsOpen}get isAgitating(){return!!this._agitationFutureId}set exiting(e){this._exiting=e}get exiting(){return this._exiting}get canExit(){return this.queuedTroubles.length===0&&this._canExit}clearAll(){this.queuedTroubles.forEach(e=>{e.clearDefer()})}get readyToResolve(){const e=this.queuedTroubles.length,t=this.queuedTroubles.filter(i=>i.shouldDefer),r=e>0&&t.length===0;return this.isDoorClosed&&r&&this.exiting}onFutureUpdate(e){e.endState===s.FutureEndState.Success?(this.logger.debug(`Resolve deferred troubles future ${e.id} completed successfully`),this.queuedTroubles.forEach(t=>{t.clearDefer()}),s.kosAction(()=>{this._canExit=!0,this._isFailed=!1})):(e.endState===s.FutureEndState.Fail||e.endState===s.FutureEndState.Canceled||e.endState===s.FutureEndState.Aborted)&&(this.logger.error(`Resolve deferred troubles future ${e.id} failed`),this.clearAll(),s.kosAction(()=>{this._canExit=!1,this._isFailed=!0}))}async resolveDeferredTroubles(e){const t=this.queuedTroubles.filter(i=>!i.shouldDefer).map(i=>i.rawId).filter(i=>!this.inProgress.includes(i));return this.inProgress.push(...t),t.length===0?void 0:await s.TroubleServices.bulkResolveTroubles(t,void 0,e)}get hasQueuedTroubles(){return this.queuedTroubles.length>0}get queuedTroubles(){return this.troubleContainer.troubles.getIndexByKey(s.Troubles.INDEX_TROUBLES_BY_DEFERRED,s.Troubles.TROUBLES_DEFERRED)}get visibleTroubles(){const e=this.application.currentRole;return this.troubleContainer.troubles.data.filter(Xe(e)).filter(t=>t.type!==ae.AGITATION_REQUIRED_TROUBLE)}get future(){return this.futureHandler.future}get resolveFuture(){return this.futureHandler.getFuture(Ue)}get agitateFuture(){return this.futureHandler.getFuture(ao)}handleAgitationStarted(e){this.logger.info(`Agitation started for ${e.path}`),this._agitationFutureId=String(e.futureId)}handleAgitationEnded(e){this.logger.info(`Agitation ended for ${e.path}`),this._agitationFutureId=void 0}async init(){this.logger.debug(`initializing agitation-control ${this.id}`)}unload(){this.logger.debug(`unloading agitation-control ${this.id}`),this.disposer&&this.disposer()}handleReadyToResolve(){this.readyToResolve&&(this.logger.info("AgitationControl - Resolving deferred troubles"),this.resolveDeferredTroubles()),this._agitationFutureId&&this.logger.info("AgitationControl - Agitation started")}async load(){this.logger.debug(`loading agitation-control ${this.id}`)}};D([s.kosDependency({modelType:$e.type})],y.prototype,"application",2);D([s.kosFuture({alias:Ue})],y.prototype,"resolveDeferredTroubles",1);D([s.kosTopicHandler({topic:ae.CartridgeAgitatorEvents.TOPIC_AGITATION_STARTED})],y.prototype,"handleAgitationStarted",1);D([s.kosTopicHandler({topic:ae.CartridgeAgitatorEvents.TOPIC_AGITATION_ENDED})],y.prototype,"handleAgitationEnded",1);D([s.kosModelEffect({dependencies:e=>[e.readyToResolve,e._agitationFutureId]})],y.prototype,"handleReadyToResolve",1);y=D([s.kosModel(St)],y);const no=new s.SingletonKosModelRegistrationFactory({class:y,type:St});var lo=Object.defineProperty,co=Object.getOwnPropertyDescriptor,ne=(e,t,r,i)=>{for(var o=i>1?void 0:i?co(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&lo(t,r,o),o};const V="animation-model";let M=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"disableAll");a(this,"enableDial");a(this,"enableModal");a(this,"enableSideBar");this.id=e,this.logger=r.logger}};ne([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.disableAll"})],M.prototype,"disableAll",2);ne([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableDial"})],M.prototype,"enableDial",2);ne([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableModal"})],M.prototype,"enableModal",2);ne([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableSideBar"})],M.prototype,"enableSideBar",2);M=ne([s.kosModel(V)],M);const Ct={registration:{[V]:{class:M,singleton:!0}},type:V,predicate:s.isKosModel(V),factory:s.Kos.Singleton.create(V)},{URL:uo}=s.resolveServiceUrl("ANIMATION_SERVICE"),{getAll:po}=s.ServiceFactory.build({basePath:`${uo}/api/animation`}),go=s.KosLog.createLogger({name:"animation-service",group:"Services"}),ho=async()=>(go.debug("sending GET for animation"),await po({})),fo=Object.freeze(Object.defineProperty({__proto__:null,getAnimations:ho},Symbol.toStringTag,{value:"Module"})),{URL:F}=s.resolveServiceUrl("FCM-PUMP_SERVICE"),{postModel:le}=s.ServiceFactory.build({basePath:`${F}/api/fcm-pump`}),u=s.KosLog.createLogger({name:"fcm-pump-service",group:"Services"}),Ot=async e=>{var t,r,i,o,l;u.debug(`performElectricalTest - sending POST request to /api/ext/freestyle/fcm/diagnostics/${e}/electricalTest`);try{const n=await le({model:{},urlOverride:`${F}/api/ext/freestyle/fcm/diagnostics/${e}/electricalTest`});return u.debug("performElectricalTest - response:",n),((n==null?void 0:n.status)===200||(n==null?void 0:n.status)===499)&&((t=n.data)!=null&&t.error)?[n.data.error||"unknownError",n.data]:[void 0,n==null?void 0:n.data]}catch(n){if(u.error(`performElectricalTest - sending POST request to /api/ext/freestyle/fcm/diagnostics/${e}/electricalTest`,n),n instanceof s.FetchError){const h=((i=(r=n.payload)==null?void 0:r.data)==null?void 0:i.error)||((o=n.payload)==null?void 0:o.error)||"unknownError";return[h,((l=n.payload)==null?void 0:l.data)||{error:h}]}}return["unknownError",{error:"unknownError"}]},kt=async(e,t)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/preCalibrate`);try{const r=await le({model:{},urlOverride:`${F}/api/ext/freestyle/fcm/calibration/${e}/preCalibrate`,tracker:t});return u.debug("performPreCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){u.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/preCalibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},Et=async(e,t)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/calibrate`);try{const r=await le({model:{},urlOverride:`${F}/api/ext/freestyle/fcm/calibration/${e}/calibrate`,tracker:t});return u.debug("performPreCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){u.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/calibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},wt=async(e,t,r)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/verify/${t}`);try{const i=await le({model:{},urlOverride:`${F}/api/ext/freestyle/fcm/calibration/${e}/verify/${t}`,tracker:r});return u.debug("performVerify - response:",i),i!=null&&i.data&&s.FutureManager.initiateFuture(i.data),i==null?void 0:i.data}catch(i){u.error(`performVerify - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/verify/${t}`,i);const o={id:r||"",endState:s.FutureEndState.Fail,tracker:r,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(o),o}},mo=e=>e?e.data==="success"||!e.data?"success":e.data:"error",Lt=async(e,t,r)=>{u.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/complete/${t}/${r}`);try{const i=await le({model:{},urlOverride:`${F}/api/ext/freestyle/fcm/calibration/${e}/complete/${t}/${r}`});return u.debug("performPreCalibrate - response:",i),mo(i==null?void 0:i.data)}catch(i){u.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/fcm/calibration/${e}/complete/${t}/${r}`,i);return}},yo=Object.freeze(Object.defineProperty({__proto__:null,performCalibrate:Et,performComplete:Lt,performElectricalTest:Ot,performPreCalibrate:kt,performVerify:wt},Symbol.toStringTag,{value:"Module"}));var bo=Object.defineProperty,vo=Object.getOwnPropertyDescriptor,Se=(e,t,r,i)=>{for(var o=i>1?void 0:i?vo(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&bo(t,r,o),o};const Dt="fcm-pump-model",_o=s.KosLog.createLogger({name:"fcm-pump-model"});let S=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"pumpModel");a(this,"futureHandler");this.id=e,this.logger=r.logger,this.pumpModel=t.companionParent,this.futureHandler=new s.FutureHandler(this)}get future(){return this.futureHandler.future}get name(){return this.pumpModel.name}get canPour(){return this.pumpModel.canPour}get isPouring(){return this.pumpModel.isPouring}async cancelPour(){return this.pumpModel.cancelPour()}performIntent(e){return this.pumpModel.performIntent(e)}async performElectricalTest(){const[e,t]=await Ot(this.pumpModel.path);return e&&_o.error(`Failed to perform electrical test on pump ${this.id}`,e),t}getChildren(){return[...this.futureHandler.allFutures]}async performPreCalibrate(e){return kt(this.pumpModel.path,e)}async performCalibrate(e){return Et(this.pumpModel.path,e)}async performVerify(e,t){return wt(this.pumpModel.path,e,t)}async performComplete(e,t){return Lt(this.pumpModel.path,e,t)}async init(){this.logger.debug(`initializing fcm-pump ${this.id}`)}async load(){this.logger.debug(`loading fcm-pump ${this.id}`)}};Se([s.kosFuture()],S.prototype,"performPreCalibrate",1);Se([s.kosFuture()],S.prototype,"performCalibrate",1);Se([s.kosFuture()],S.prototype,"performVerify",1);S=Se([s.kosModel(Dt)],S);const Je=new s.KosModelRegistrationFactory({class:S,type:Dt});var Po=Object.defineProperty,Mo=Object.getOwnPropertyDescriptor,Ft=(e,t,r,i)=>{for(var o=i>1?void 0:i?Mo(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Po(t,r,o),o};const H="carb-water-model";let fe=class{constructor(e,t,r){a(this,"id");a(this,"assemblyModel");a(this,"logger");this.id=e,this.logger=r.logger}getPump(){const t=this.assemblyModel.getHoldersByGroup("carb")[0].pumps.data[0];return s.getKosCompanionModel(t,Je.type)}async init(){this.logger.debug(`initializing carb-water ${this.id}`)}async load(){this.logger.debug(`loading carb-water ${this.id}`)}};Ft([s.kosDependency({modelType:L.Assembly.type})],fe.prototype,"assemblyModel",2);fe=Ft([s.kosModel(H)],fe);const Rt={registration:{[H]:{class:fe,singleton:!1}},type:H,predicate:s.isKosModel(H),factory:s.Kos.Factory.create(H)};var It=Object.defineProperty,To=Object.getOwnPropertyDescriptor,$o=(e,t,r)=>t in e?It(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ce=(e,t,r,i)=>{for(var o=i>1?void 0:i?To(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&It(t,r,o),o},So=(e,t,r)=>($o(e,t+"",r),r);const Co="cgp-pump-model",Ze=s.createPropKey("statePath");let T=class{constructor(e,t){a(this,"highProbeWet");a(this,"lowProbeWet");a(this,"filling");a(this,"id");a(this,"state");a(this,"parent");var r;this.id=e,this.parent=t.companionParent,this.state=((r=t.data)==null?void 0:r.state)??{name:"unknown",path:""}}get statePath(){return this.state.path}};So(T,"Registration");Ce([s.kosStateProp({path:Ze,attribute:"highProbeWet"})],T.prototype,"highProbeWet",2);Ce([s.kosStateProp({path:Ze,attribute:"lowProbeWet"})],T.prototype,"lowProbeWet",2);Ce([s.kosStateProp({path:Ze,attribute:"filling"})],T.prototype,"filling",2);T=Ce([s.kosModel({modelTypeId:Co,singleton:!1}),s.kosParentAware(),s.kosLoggerAware()],T);const Oo=T.Registration,{URL:R}=s.resolveServiceUrl("COPY-LOGS_SERVICE"),{getAll:ko,getOne:Eo,postModel:At,deleteModel:wo}=s.ServiceFactory.build({basePath:`${R}/api/copy-logs`}),me=s.KosLog.createLogger({name:"copy-logs-service",group:"Services"}),Kt=async(e,t)=>{const r=await wo({tracker:t,id:e,urlOverride:`${R}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},xt=async(e,t)=>{const r=await At({model:{},tracker:t,urlOverride:`${R}/api/app/kosdev.ddk/copyLogs/eraseAndCopy/${e}`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},Ut=async(e,t)=>{const r=await At({model:{},tracker:t,urlOverride:`${R}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(r!=null&&r.data))throw new Error("No response from server");return r.data},jt=async()=>{me.debug("sending GET for copy-logs");try{const e=await ko({urlOverride:`${R}/api/app/kosdev.ddk/copyLogs/volumes/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof s.FetchError)return me.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},Vt=async()=>{me.debug("sending GET for log file size");try{const e=await Eo({urlOverride:`${R}/api/app/kosdev.ddk/copyLogs/files/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof s.FetchError)return me.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},Lo=Object.freeze(Object.defineProperty({__proto__:null,copyLogFromVolume:Ut,eraseAndCopyLogsToVolume:xt,eraseVolume:Kt,getLogFileSize:Vt,getVolumes:jt},Symbol.toStringTag,{value:"Module"}));var Ht=Object.defineProperty,Do=Object.getOwnPropertyDescriptor,Fo=(e,t,r)=>t in e?Ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,I=(e,t,r,i)=>{for(var o=i>1?void 0:i?Do(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Ht(t,r,o),o},Ro=(e,t,r)=>(Fo(e,t+"",r),r);const Io="copy-logs-model";let m=class{constructor(e){a(this,"id");a(this,"_volumes");a(this,"storageDeviceContainer");a(this,"_activeVolume");a(this,"_logFileSize",0);a(this,"_actionState","idle");a(this,"copyProgress");this.id=e,this._volumes=new s.KosDataContainer,this._activeVolume=void 0,this.copyProgress={bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}get volumes(){return this._volumes.data}get activeVolume(){return this._activeVolume}get logFileSize(){return this._logFileSize}reset(){this.clearActiveVolume(),this.futureHandler.removeFuture()}clearActiveVolume(){this._activeVolume=void 0}updateActiveVolume(e){this._activeVolume=e}get inserted(){return this.storageDeviceContainer.isStorageInserted}updateLogFileSize(e){this._logFileSize=e}get canCopyLogs(){return this.inserted&&this._activeVolume}get actionState(){return this._actionState}get diskFull(){var e;return((e=this.future)==null?void 0:e.status)===s.FutureEndState.Success&&this.copyProgress.filesSkipped>0}onFutureUpdate(e){this.logger.info(`Future update: ${e.status}`),e.status===s.FutureEndState.Success&&(this.logger.info(`Future success: ${e.status}`),this.diskFull&&s.kosAction(()=>{e.endState=s.FutureEndState.Fail,e.reason="errDiskFull"})),e.status===s.FutureEndState.Fail&&this.logger.error(`Future failed: ${e.status}`),e.note==="copy"?s.kosAction(()=>{this._actionState="copying",this.copyProgress=e.clientData||{bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}):(this._actionState="erasing",s.kosAction(()=>{this.copyProgress={bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}))}async eraseAndCopyVolume(e){var t;if(!e)throw new Error("No tracker provided");if(s.kosAction(()=>{this._actionState="erasing"}),!this._activeVolume)throw this.logger.error("No active volume selected"),new Error("No active volume selected");return this.logger.info(`Erasing volume ${(t=this._activeVolume)==null?void 0:t.name}`),xt(this._activeVolume.id,e)}async eraseVolume(e){var t;if(!e)throw new Error("No tracker provided");if(s.kosAction(()=>{this._actionState="erasing"}),!this._activeVolume)throw this.logger.error("No active volume selected"),new Error("No active volume selected");return this.logger.info(`Erasing volume ${(t=this._activeVolume)==null?void 0:t.name}`),Kt(this._activeVolume.id,e)}async copyLogs(e){var t;if(!e)throw new Error("No tracker provided");if(s.kosAction(()=>{this._actionState="copying"}),!this._activeVolume)throw this.logger.error("No active volume selected"),new Error("No active volume selected");return this.logger.info(`Copying logs to ${(t=this._activeVolume)==null?void 0:t.name}`),Ut(this._activeVolume.id,e)}handleInsertion(){this.inserted?this.syncVolumes():(this._volumes.clear(),this.clearActiveVolume())}async init(){this.logger.debug(`initializing copy-logs ${this.id}`)}async syncVolumes(){const[e,t]=await jt(),[r,i]=await Vt();if(r){this.logger.error(`Error fetching log file size: ${r}`);return}if(e){this.logger.error(`Error fetching volumes: ${e}`);return}t&&(t.forEach(o=>{const l=this.storageDeviceContainer.getModel(o.id);if(l){const n={id:o.id,name:l.label,freeBytes:o.info.freeBytes,totalBytes:o.info.totalBytes};this._volumes.addModel(n)}}),t.length===1?this.updateActiveVolume(this._volumes.data[0]):this.clearActiveVolume()),i&&(this.logger.info(`Log file size: ${i}`),this.updateLogFileSize(parseInt(i,10)))}async activate(){this.logger.debug(`activating copy-logs ${this.id}`),await this.syncVolumes()}async load(){this.logger.debug(`loading copy-logs ${this.id}`)}};Ro(m,"Registration");I([s.kosDependency({modelType:s.StorageDeviceContainer.type})],m.prototype,"storageDeviceContainer",2);I([s.kosFuture()],m.prototype,"eraseAndCopyVolume",1);I([s.kosFuture()],m.prototype,"eraseVolume",1);I([s.kosFuture()],m.prototype,"copyLogs",1);I([s.kosModelEffect({dependencies:e=>[e.inserted]})],m.prototype,"handleInsertion",1);m=I([s.kosModel({modelTypeId:Io,singleton:!0}),s.kosFutureAware(),s.kosLoggerAware()],m);const Ao=m.Registration,Wt=s.KosLog.createLogger({name:"dashboard-operations-service",group:"Services"}),Nt=async(e,t)=>(Wt.debug("resolveAll"),await s.TroubleServices.bulkResolveTroubles(e,void 0,t)),zt=async(e,t)=>(Wt.debug("resolveTrouble"),await s.TroubleServices.resolveTrouble(e,void 0,t)),Ko=Object.freeze(Object.defineProperty({__proto__:null,resolveAll:Nt,resolveTrouble:zt},Symbol.toStringTag,{value:"Module"}));var xo=Object.defineProperty,Uo=Object.getOwnPropertyDescriptor,Oe=(e,t,r,i)=>{for(var o=i>1?void 0:i?Uo(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&xo(t,r,o),o};const W="dashboard-operations-model";function ct(e){return!e.deferred}function ut(e){return e.deferred}let C=class{constructor(e,t,r){a(this,"id");a(this,"troubles");a(this,"futureHandler");a(this,"logger");this.id=e,this.futureHandler=new s.FutureHandler(this),this.logger=r.logger}get troublesByType(){return this.troubles.troubles.data.reduce(s.troubleByTypeReducer,{})}get queuedPurgeTroubles(){return this.purgeTroubles.filter(ut)}get queuedPrimeTroubles(){return this.primeTroubles.filter(ut)}get resolvablePrimeTroubles(){return this.primeTroubles.filter(ct)}get resolvablePurgeTroubles(){return this.purgeTroubles.filter(ct)}get hasResolvablePurgeTroubles(){return this.resolvablePurgeTroubles.length>0}get hasResolvablePrimeTroubles(){return this.resolvablePrimeTroubles.length>0}get hasPurgeTroubles(){return this.purgeTroubles.length>0}get hasPrimeTroubles(){return this.primeTroubles.length>0}get purgeTroubles(){return this.troublesByType[Ke]||[]}get primeTroubles(){return this.troublesByType[pt]||[]}get future(){return this.futureHandler.getFuture()}async resolveAllTroubles(e,t){if(!t)throw new Error("No tracker provided");const r=e===Ke?this.purgeTroubles:this.primeTroubles;r.filter(n=>n.shouldDefer).forEach(n=>{this.logger.info(`Deferring trouble ${n.rawId}`),n.defer()});const o=r.filter(n=>!n.shouldDefer).map(n=>n.rawId);return o.length===0?void 0:await Nt(o,t)}async resolveTrouble(e,t){if(!t)throw new Error("No tracker provided");return await zt(e,t)}async init(){this.logger.debug(`initializing dashboard-operations ${this.id}`)}async load(){this.logger.debug(`loading dashboard-operations ${this.id}`)}};Oe([s.kosDependency({modelType:s.TroubleContainer.type})],C.prototype,"troubles",2);Oe([s.kosFuture()],C.prototype,"resolveAllTroubles",1);Oe([s.kosFuture()],C.prototype,"resolveTrouble",1);C=Oe([s.kosModel(W)],C);const ke={registration:{[W]:{class:C,singleton:!0}},type:W,predicate:s.isKosModel(W),factory:s.Kos.Singleton.create(W)};var jo=Object.getOwnPropertyDescriptor,Vo=(e,t,r,i)=>{for(var o=i>1?void 0:i?jo(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const N="dispenser-model";let je=class{constructor(e,t,r){a(this,"id");a(this,"logger");this.id=e,this.logger=r.logger}updateModel(){}async init(){this.logger.debug(`initializing dispenser ${this.id}`)}async load(){this.logger.debug(`loading dispenser ${this.id}`)}};je=Vo([s.kosModel(N)],je);const Bt={registration:{[N]:{class:je,singleton:!0}},type:N,predicate:s.isKosModel(N),factory:s.Kos.Singleton.create(N)},{URL:Ho}=s.resolveServiceUrl("DISPENSER_SERVICE"),{getAll:Wo}=s.ServiceFactory.build({basePath:`${Ho}/api/dispenser`}),No=s.KosLog.createLogger({name:"dispenser-service",group:"Services"}),zo=async()=>(No.debug("sending GET for dispenser"),await Wo({})),Bo=Object.freeze(Object.defineProperty({__proto__:null,getDispensers:zo},Symbol.toStringTag,{value:"Module"}));var Yo=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Yt=(e,t,r,i)=>{for(var o=i>1?void 0:i?qo(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Yo(t,r,o),o};const z="dispenser-info-model";let ye=class{constructor(e,t,r){a(this,"logger");a(this,"id");a(this,"name");this.id=e,this.logger=r.logger}async init(){this.logger.debug(`initializing dispenser-info ${this.id}`)}async load(){this.logger.debug(`loading dispenser-info ${this.id}`)}};Yt([s.kosConfigProperty({path:"kos:device",attribute:"name"})],ye.prototype,"name",2);ye=Yt([s.kosModel(z)],ye);const qt={registration:{[z]:{class:ye,singleton:!1}},type:z,predicate:s.isKosModel(z),factory:s.Kos.Factory.create(z)},{URL:Go}=s.resolveServiceUrl("DISPENSER-INFO_SERVICE"),{getAll:Qo}=s.ServiceFactory.build({basePath:`${Go}/api/dispenser-info`}),Xo=s.KosLog.createLogger({name:"dispenser-info-service",group:"Services"}),Jo=async()=>(Xo.debug("sending GET for dispenser-info"),await Qo({})),Zo=Object.freeze(Object.defineProperty({__proto__:null,getDispenserInfos:Jo},Symbol.toStringTag,{value:"Module"}));var es=Object.getOwnPropertyDescriptor,ts=(e,t,r,i)=>{for(var o=i>1?void 0:i?es(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const B="enrollment-model";let Ve=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"enrolled");this.id=e,this.logger=r.logger,this.enrolled=!1}updateModel(e){console.log("updateModel:",e)}async init(){this.logger.debug(`initializing enrollment ${this.id}`)}async load(){this.logger.debug(`loading enrollment ${this.id}`)}};Ve=ts([s.kosModel(B)],Ve);const Gt={registration:{[B]:{class:Ve,singleton:!0}},type:B,predicate:s.isKosModel(B),factory:s.Kos.Singleton.create(B)},{URL:rs}=s.resolveServiceUrl("ENROLLMENT_SERVICE"),{getAll:os}=s.ServiceFactory.build({basePath:`${rs}/api/enrollment`}),ss=s.KosLog.createLogger({name:"enrollment-service",group:"Services"}),is=async()=>(ss.debug("sending GET for enrollment"),await os({})),as=Object.freeze(Object.defineProperty({__proto__:null,getEnrollments:is},Symbol.toStringTag,{value:"Module"})),ns=e=>e.toLowerCase().includes("micros"),ls=e=>!e.toLowerCase().includes("micros"),cs=e=>t=>{const r=e==null?void 0:e.getHoldersByGroup(t);return r?r.map(i=>({id:i.id,name:i.ingredientName,path:i.path})):null},us=["water","carb","ns","nss"],O="dashboardKeyFactory",Re=[];s.registerExtensionPoint(O,{register:(e,t)=>{Re.includes(t)||Re.push(t)},execute:(e,t)=>{const r=Re.sort((i,o)=>i.rank-o.rank);for(const i of r){const o=i.factory(t);if(o)return o}}});const Qt=e=>{s.ExtensionManager[O].register(O,e)},Xt=e=>s.ExtensionManager[O].execute(O,e);s.ExtensionManager.registerDashboardKeyFactory=Qt;s.ExtensionManager.executeDashboardKeyFactory=Xt;const He=3600,Jt=60,ds=e=>{const t=Math.floor(e/He),r=Math.floor(e%He/Jt);return{hours:t,minutes:r}},ps=(e,t)=>e*He+t*Jt,Zt=e=>{const r=new Date().valueOf()-e.valueOf(),i=Math.floor(r/(1e3*60)),o=Math.floor(i/60),l=Math.floor(o/24),n=i%60,h=o%24;let _="";return l>0&&(_+=`${l} day${l>1?"s":""} `),h>0&&(_+=`${h} hour${h>1?"s":""} `),(n>0||l===0&&h===0)&&(_+=`${n} minute${n>1?"s":""} `),_};var gs=Object.defineProperty,hs=Object.getOwnPropertyDescriptor,Ee=(e,t,r,i)=>{for(var o=i>1?void 0:i?hs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&gs(t,r,o),o};const Y="ingredient-summary-model";let k=class{constructor(e,t,r){a(this,"id");a(this,"assemblyModel");a(this,"dashboardOperationModel");a(this,"appModel");a(this,"logger");this.id=e,this.logger=r.logger,this.dashboardOperationModel=ke.factory({})}get highPriorityHolders(){return this.assemblyModel.allHolders.filter(e=>e.troubles.length>0&&e.troubles.find(t=>t.rank>=400))}get actionRequiredHolders(){const e=this.appModel.currentRole,t=Xe(e);return this.assemblyModel.allHolders.filter(r=>{const i=s.getKosCompanionModel(r,ae.FreestyleHolder.type);if(i!=null&&i.isRemote)return!1;const o=r.troubles.filter(t);return o.length>0&&o.find(l=>l.resolvable)})}get lowLevelHolders(){return this.assemblyModel.allHolders.filter(e=>{const t=e.fillPercent;return e.hasFuelGuage&&t<20})}async init(){this.logger.debug(`initializing ingredient-summary ${this.id}`)}async load(){this.logger.debug(`loading ingredient-summary ${this.id}`)}};Ee([s.kosDependency({modelType:L.Assembly.type})],k.prototype,"assemblyModel",2);Ee([s.kosDependency({modelType:ke.type})],k.prototype,"dashboardOperationModel",2);Ee([s.kosDependency({modelType:$e.type})],k.prototype,"appModel",2);k=Ee([s.kosModel(Y)],k);const er={registration:{[Y]:{class:k,singleton:!1}},type:Y,predicate:s.isKosModel(Y),factory:s.Kos.Factory.create(Y)};var fs=Object.getOwnPropertyDescriptor,ms=(e,t,r,i)=>{for(var o=i>1?void 0:i?fs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const tr="lfcv-pump-model";let We=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"pumpModel");this.id=e,this.logger=r.logger,this.pumpModel=t.companionParent}get name(){return this.pumpModel.name}get canPour(){return this.pumpModel.canPour}get isPouring(){return this.pumpModel.isPouring}async cancelPour(){return this.pumpModel.cancelPour()}performIntent(e){return this.pumpModel.performIntent(e)}async init(){this.logger.debug(`initializing lfcv-pump ${this.id}`)}async load(){this.logger.debug(`loading lfcv-pump ${this.id}`)}};We=ms([s.kosModel(tr)],We);const ys=new s.KosModelRegistrationFactory({class:We,type:tr}),{URL:bs}=s.resolveServiceUrl("LFCV-PUMP_SERVICE"),{getAll:vs}=s.ServiceFactory.build({basePath:`${bs}/api/lfcv-pump`}),_s=s.KosLog.createLogger({name:"lfcv-pump-service",group:"Services"}),Ps=async()=>(_s.debug("sending GET for lfcv-pump"),await vs({})),Ms=Object.freeze(Object.defineProperty({__proto__:null,getLfcvPumps:Ps},Symbol.toStringTag,{value:"Module"})),{URL:et}=s.resolveServiceUrl("LOCKOUT_SERVICE"),{postModel:rr}=s.ServiceFactory.build({basePath:`${et}/api/app/kosdev.ddk/lockout`}),or=s.KosLog.createLogger({name:"lockout-service",group:"Services"}),Ts=async()=>(or.info("lock"),await rr({model:{},urlOverride:`${et}/api/app/kosdev.ddk/lockout/lockNow`})),sr=async e=>{or.info("unlock");const t=await rr({model:{},urlOverride:`${et}/api/app/kosdev.ddk/lockout/unlock/${e}`});return t==null?void 0:t.data},$s=Object.freeze(Object.defineProperty({__proto__:null,lock:Ts,unlock:sr},Symbol.toStringTag,{value:"Module"}));var Ss=Object.defineProperty,Cs=Object.getOwnPropertyDescriptor,A=(e,t,r,i)=>{for(var o=i>1?void 0:i?Cs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Ss(t,r,o),o};const ir="lockout-model",Os=[{day:"monday",lock:"dayWiseLockConfigMap.Mon.enabled",open:"dayWiseLockConfigMap.Mon.unlockTime",close:"dayWiseLockConfigMap.Mon.lockTime"},{day:"tuesday",lock:"dayWiseLockConfigMap.Tue.enabled",open:"dayWiseLockConfigMap.Tue.unlockTime",close:"dayWiseLockConfigMap.Tue.lockTime"},{day:"wednesday",lock:"dayWiseLockConfigMap.Wed.enabled",open:"dayWiseLockConfigMap.Wed.unlockTime",close:"dayWiseLockConfigMap.Wed.lockTime"},{day:"thursday",lock:"dayWiseLockConfigMap.Thu.enabled",open:"dayWiseLockConfigMap.Thu.unlockTime",close:"dayWiseLockConfigMap.Thu.lockTime"},{day:"friday",lock:"dayWiseLockConfigMap.Fri.enabled",open:"dayWiseLockConfigMap.Fri.unlockTime",close:"dayWiseLockConfigMap.Fri.lockTime"},{day:"saturday",lock:"dayWiseLockConfigMap.Sat.enabled",open:"dayWiseLockConfigMap.Sat.unlockTime",close:"dayWiseLockConfigMap.Sat.lockTime"},{day:"sunday",lock:"dayWiseLockConfigMap.Sun.enabled",open:"dayWiseLockConfigMap.Sun.unlockTime",close:"dayWiseLockConfigMap.Sun.lockTime"}];let b=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"dayEnabledList",["dayWiseLockConfigMap.Sun.enabled","dayWiseLockConfigMap.Mon.enabled","dayWiseLockConfigMap.Tue.enabled","dayWiseLockConfigMap.Wed.enabled","dayWiseLockConfigMap.Thu.enabled","dayWiseLockConfigMap.Fri.enabled","dayWiseLockConfigMap.Sat.enabled"]);a(this,"dayOpenAtList",["dayWiseLockConfigMap.Sun.unlockTime","dayWiseLockConfigMap.Mon.unlockTime","dayWiseLockConfigMap.Tue.unlockTime","dayWiseLockConfigMap.Wed.unlockTime","dayWiseLockConfigMap.Thu.unlockTime","dayWiseLockConfigMap.Fri.unlockTime","dayWiseLockConfigMap.Sat.unlockTime"]);a(this,"dayCloseAtList",["dayWiseLockConfigMap.Sun.lockTime","dayWiseLockConfigMap.Mon.lockTime","dayWiseLockConfigMap.Tue.lockTime","dayWiseLockConfigMap.Wed.lockTime","dayWiseLockConfigMap.Thu.lockTime","dayWiseLockConfigMap.Fri.lockTime","dayWiseLockConfigMap.Sat.lockTime"]);a(this,"saveMap");a(this,"pin");a(this,"nextLockSkipped");a(this,"nextLockTime");a(this,"nextUnLockTime");a(this,"cuiLockout");this.id=e,this.logger=r.logger,this.saveMap=new Map}get enabled(){const e=this.getProp("oneTimeLockConfig.lockTime"),t=e!==void 0&&e!=="",r=this.getProp("lockScheduleEnabled");return t||r}get schedule(){return Os}getProp(e){return this.saveMap.get(e)}setProp(e,t){this.saveMap.set(e,t)}toggleSkip(){if(this.nextLockSkipped.value==="0"){const t=this.nextLockTime.value;t!==void 0&&this.nextLockSkipped.updateProperty(t)}else this.nextLockSkipped.updateProperty("0")}async unlock(e){return await sr(e)}async save(){return this.saveMap.forEach((e,t)=>{e!==this.cuiLockout.props[t]&&(this.cuiLockout.props[t]=e)}),this.cuiLockout.updateConfigBean()}reset(){this.cuiLockout.props.entries.forEach(([e,t])=>this.saveMap.set(e,t))}async init(){this.logger.debug(`initializing lockout ${this.id}`),this.cuiLockout.props.entries.forEach(([e,t])=>this.saveMap.set(e,t))}async load(){this.logger.debug(`loading lockout ${this.id}`)}};A([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"pin"})],b.prototype,"pin",2);A([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockSkipped"})],b.prototype,"nextLockSkipped",2);A([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockTime"})],b.prototype,"nextLockTime",2);A([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextUnLockTime"})],b.prototype,"nextUnLockTime",2);A([s.kosConfigBean({path:"app:kosdev.ddk:service:cuiLockout"})],b.prototype,"cuiLockout",2);b=A([s.kosModel(ir)],b);const ks=new s.SingletonKosModelRegistrationFactory({class:b,type:ir}),Es=async(e,t)=>await s.TroubleServices.bulkResolveTroubles(e,void 0,t);var ws=Object.defineProperty,Ls=Object.getOwnPropertyDescriptor,we=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ls(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&ws(t,r,o),o};const q="macro-assignment-model",dt="PurgeTrouble",Ds="PrimeTrouble";let E=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"futureHandler");a(this,"holders");a(this,"ingredients");this.id=e,this.futureHandler=new s.FutureHandler,this.logger=r.logger}get future(){return this.futureHandler.future}get macroHolders(){return this.holders.holders.getIndexByKey("group","macros").sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0)}get hasMacroHolders(){return this.macroHolders.length>0}get holderPurgeTroubles(){return this.macroHolders.reduce((t,r)=>{const i=r.troublesByType[dt]||[];return t=[...t,...i],t},[])}get holderPrimeTroubles(){return this.macroHolders.reduce((t,r)=>{const i=r.troublesByType[Ds]||[];return t=[...t,...i],t},[])}get hasHolderPurgeTroubles(){return this.holderPurgeTroubles.length>0}get hasHolderPrimeTroubles(){return this.holderPrimeTroubles.length>0}get macroIngredients(){return this.ingredients.ingredients.getIndexByKey("macro","macro")}get hasMacroIngredients(){return this.macroIngredients.length>0}async resolveAll(e,t){if(!t)throw new Error("No tracker provided");const i=(e===dt?this.holderPurgeTroubles:this.holderPrimeTroubles).map(l=>l.rawId);return await Es(i,t)}};we([s.kosDependency({modelType:L.HolderContainer.type})],E.prototype,"holders",2);we([s.kosDependency({modelType:L.IngredientContainer.type})],E.prototype,"ingredients",2);we([s.kosFuture()],E.prototype,"resolveAll",1);E=we([s.kosModel(q)],E);const ar={registration:{[q]:{class:E,singleton:!0}},type:q,predicate:s.isKosModel(q),factory:s.Kos.Singleton.create(q)};var Fs=Object.getOwnPropertyDescriptor,Rs=(e,t,r,i)=>{for(var o=i>1?void 0:i?Fs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const G="network-test-model";let Ne=class{constructor(e,t,r){a(this,"id");a(this,"group");a(this,"passed");a(this,"inProgress");a(this,"failureTime");a(this,"timestamp");a(this,"name");a(this,"results");a(this,"logger");this.id=e,this.logger=r.logger,this.group=t.group,this.passed=!1,this.inProgress=!1,this.name=t.name,this.results=[]}updateModel(e){this.group=e.group,this.name=e.name,this.passed=e.passed,this.failureTime=e.failureTime,this.inProgress=e.inProgress,this.timestamp=e.timestamp,this.results=e.results}async init(){this.logger.debug(`initializing network-test ${this.id}`)}async load(){this.logger.debug(`loading network-test ${this.id}`)}};Ne=Rs([s.kosModel(G)],Ne);const tt={registration:{[G]:{class:Ne,singleton:!1}},type:G,predicate:s.isKosModel(G),factory:s.Kos.Factory.create(G)},{URL:Le}=s.resolveServiceUrl("NETWORK-TEST_SERVICE"),{getAll:Is,getOne:nr}=s.ServiceFactory.build({basePath:`${Le}/api/app/ncui/network/tests`}),As=s.KosLog.createLogger({name:"network-test-service",group:"Services"}),lr=async()=>{As.debug("sending GET for network-test");const e=await Is({urlOverride:`${Le}/api/app/kosdev.ddk/network/tests`});return e==null?void 0:e.data},cr=async()=>{const e=await nr({urlOverride:`${Le}/api/app/kosdev.ddk/network/reports`});return e==null?void 0:e.data},ur=async(e,t)=>await nr({urlOverride:`${Le}/api/app/kosdev.ddk/network/tests/run/group/${e}`,tracker:t}),Ks=Object.freeze(Object.defineProperty({__proto__:null,getNetworkTests:lr,getTestsReports:cr,performGroupTest:ur},Symbol.toStringTag,{value:"Module"}));var xs=Object.defineProperty,Us=Object.getOwnPropertyDescriptor,rt=(e,t,r,i)=>{for(var o=i>1?void 0:i?Us(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&xs(t,r,o),o};const Q="network-test-container-model";let se=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"lastTested");a(this,"futureHandler");a(this,"models");this.id=e,this.logger=r.logger,this.futureHandler=new s.FutureHandler(this),this.models=new s.KosModelContainer({parentId:e,indexMap:{group:"group"}}),this.lastTested=new Date("default")}get data(){return this.models.data}addModel(e){this.models.addModel(e)}removeModel(e){this.models.removeModel(e)}getModel(e){return this.models.getModel(e)}async init(){this.logger.debug(`initializing network-test-container container ${this.id}`)}getLastTested(e){const t=this.models.getIndexByKey("group",e).map(i=>i.timestamp&&new Date(i.timestamp)),r=Math.max(...t.map(i=>i?i.getTime():0));return r?Zt(new Date(r)):""}async load(){this.logger.debug(`loading network-test-container container ${this.id}`);const e=await lr(),t=await cr();e&&e.forEach(r=>{const i=tt.factory(r.id)(r);this.addModel(i)}),e&&t&&e.forEach(r=>{const i=t==null?void 0:t[r.group],o=i==null?void 0:i[r.id],l=this.getModel(r.id);if(l&&o){const n={group:o.group,name:o.name,passed:o.passed,failureTime:o.failureTime?new Date(o.failureTime):void 0,inProgress:o.inProgress,timestamp:new Date(o.timestamp),results:o.results};l.updateModel(n)}})}async performTest(e,t){if(!t)throw new Error("No tracker provided");const r=await ur(e,t);return r==null?void 0:r.data}onFutureUpdate(e){const{clientData:t}=e;t&&t.forEach(r=>{const i=this.getModel(r.id);if(s.kosAction(()=>{this.lastTested=this.lastTested>new Date(r.timestamp)?this.lastTested:new Date(r.timestamp)}),i){const o={group:r.group,name:r.name,passed:r.passed,failureTime:r.failureTime?new Date(r.failureTime):void 0,inProgress:r.inProgress,timestamp:new Date(r.timestamp),results:r.results};s.kosAction(()=>{i.updateModel(o)})}})}};rt([s.kosChild],se.prototype,"models",2);rt([s.kosFuture()],se.prototype,"performTest",1);se=rt([s.kosModel(Q)],se);const dr={registration:{[Q]:{class:se,singleton:!0},...tt.registration},type:Q,predicate:s.isKosModel(Q),factory:s.Kos.Singleton.create(Q)};var js=Object.defineProperty,Vs=Object.getOwnPropertyDescriptor,ot=(e,t,r,i)=>{for(var o=i>1?void 0:i?Vs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&js(t,r,o),o};const X="nutritive-sweetener-model",Hs=s.createPropKey("statePath");let ie=class{constructor(e,t){a(this,"id");a(this,"assemblyModel");a(this,"pumpState");this.id=e}get holder(){return this.assemblyModel.getHoldersByGroup("ns")[0]}getHolder(){return this.holder}get statePath(){return`${this.pump.path}:airVent:state`}get pump(){return this.holder.pumps.data[0]}getPump(){return this.pump}};ot([s.kosDependency({modelType:L.Assembly.type})],ie.prototype,"assemblyModel",2);ot([s.kosStateBean({path:Hs})],ie.prototype,"pumpState",2);ie=ot([s.kosModel(X),s.kosLoggerAware()],ie);const pr={registration:{[X]:{class:ie,singleton:!1}},type:X,predicate:s.isKosModel(X),factory:s.Kos.Factory.create(X)};var Ws=Object.defineProperty,Ns=Object.getOwnPropertyDescriptor,gr=(e,t,r,i)=>{for(var o=i>1?void 0:i?Ns(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Ws(t,r,o),o};const J="plain-water-model";let be=class{constructor(e,t,r){a(this,"id");a(this,"assemblyModel");a(this,"logger");this.id=e,this.logger=r.logger}getHolder(){return this.assemblyModel.getHoldersByGroup("water")[0]}getPump(){var i,o;const e=this.getHolder(),t=(o=(i=e==null?void 0:e.pumps)==null?void 0:i.data)==null?void 0:o[0];return s.getKosCompanionModel(t,Je.type)}async init(){this.logger.debug(`initializing plain-water ${this.id}`)}async load(){this.logger.debug(`loading plain-water ${this.id}`)}};gr([s.kosDependency({modelType:L.Assembly.type})],be.prototype,"assemblyModel",2);be=gr([s.kosModel(J)],be);const hr={registration:{[J]:{class:be,singleton:!1}},type:J,predicate:s.isKosModel(J),factory:s.Kos.Factory.create(J)},{URL:fr}=s.resolveServiceUrl("REBOOT_SERVICE"),{postModel:zs}=s.ServiceFactory.build({basePath:`${fr}/api/reboot`}),Bs=s.KosLog.createLogger({name:"reboot-service",group:"Services"}),mr=async()=>(Bs.debug("sending POST call for Reboot Dispenser"),await zs({urlOverride:`${fr}/api/app/kosdev.ddk/ncui/reboot`,model:{}})),Ys=Object.freeze(Object.defineProperty({__proto__:null,rebootDispenser:mr},Symbol.toStringTag,{value:"Module"}));var qs=Object.getOwnPropertyDescriptor,Gs=(e,t,r,i)=>{for(var o=i>1?void 0:i?qs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const Z="reboot-model";let ze=class{constructor(e,t,r){a(this,"id");a(this,"logger");this.id=e,this.logger=r.logger}async completeReboot(){await mr()}updateModel(){}async init(){this.logger.debug(`initializing reboot ${this.id}`)}async load(){this.logger.debug(`loading reboot ${this.id}`)}};ze=Gs([s.kosModel(Z)],ze);const yr={registration:{[Z]:{class:ze,singleton:!1}},type:Z,predicate:s.isKosModel(Z),factory:s.Kos.Factory.create(Z)};var Qs=Object.defineProperty,Xs=Object.getOwnPropertyDescriptor,g=(e,t,r,i)=>{for(var o=i>1?void 0:i?Xs(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&Qs(t,r,o),o};const ee="settings-model";let d=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"ncuiLanguageData");a(this,"resolveDelaysMs");a(this,"dateFormat");a(this,"timeFormat");a(this,"hidePlainWaterBev");a(this,"hideCarbWaterBev");a(this,"ncuiLanguage");a(this,"name");a(this,"activateAndRebootTime");a(this,"horizontalMode");this.id=e,this.logger=r.logger}async ready(){this.updateDisplayMode()}async getNcuiLanguageList(){this.ncuiLanguageData={status:200,data:{languages:[{name:"English",locale:"en"}]}}}async load(){this.logger.debug(`loading settings ${this.id}`),this.ncuiLanguageData={status:200,data:{languages:[{name:"English",locale:"en"}]}}}handleUpdateDisplayMode(){this.updateDisplayMode()}updateDisplayMode(){this.horizontalMode.value?document.body.setAttribute("data-dashboard-layout","horizontal"):document.body.setAttribute("data-dashboard-layout","vertical")}};g([s.kosConfigProperty({path:"system:app",attribute:"resolveDelaysMs"})],d.prototype,"resolveDelaysMs",2);g([s.kosConfigProperty({path:"system:app",attribute:"dateFormat"})],d.prototype,"dateFormat",2);g([s.kosConfigProperty({path:"system:app",attribute:"timeFormat"})],d.prototype,"timeFormat",2);g([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hidePlainWaterBev"})],d.prototype,"hidePlainWaterBev",2);g([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hideCarbWaterBev"})],d.prototype,"hideCarbWaterBev",2);g([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],d.prototype,"ncuiLanguage",2);g([s.kosConfigProperty({path:"kos:device",attribute:"name"})],d.prototype,"name",2);g([s.kosConfigProperty({path:"kos:service:OTA",attribute:"activateAndRebootTime"})],d.prototype,"activateAndRebootTime",2);g([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.display.horizontalMode"})],d.prototype,"horizontalMode",2);g([s.kosModelEffect({dependencies:e=>[e.horizontalMode.value]})],d.prototype,"handleUpdateDisplayMode",1);d=g([s.kosModel(ee)],d);const br={registration:{[ee]:{class:d,singleton:!0}},type:ee,predicate:s.isKosModel(ee),factory:s.Kos.Singleton.create(ee)},{URL:vr}=s.resolveServiceUrl("SETTINGS_SERVICE"),{getAll:_r}=s.ServiceFactory.build({basePath:`${vr}/api/settings`}),Js=s.KosLog.createLogger({name:"settings-service",group:"Services"}),Zs=async()=>(Js.debug("sending GET for settings"),await _r({})),ei=async()=>await _r({urlOverride:`${vr}api/app/kosdev.ddk/ncui/languages`}),ti=Object.freeze(Object.defineProperty({__proto__:null,getNcuiLanguage:ei,getSettings:Zs},Symbol.toStringTag,{value:"Module"}));var ri=Object.getOwnPropertyDescriptor,oi=(e,t,r,i)=>{for(var o=i>1?void 0:i?ri(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=n(o)||o);return o};const te="utilities-model";let Be=class{constructor(e,t,r){a(this,"id");a(this,"name");a(this,"options");a(this,"roles");a(this,"columnId");a(this,"logger");this.id=e,this.logger=r.logger,this.name=t.name,this.options=t.options,this.roles=t==null?void 0:t.roles,this.columnId=t.columnId}updateModel(e){this.name=e.name,this.options=e.options,this.roles=e==null?void 0:e.roles}get titleKey(){return`utility.${this.id}.title`}get bodyKey(){return`utility.${this.id}.body`}async init(){this.logger.debug(`initializing utilities ${this.id}`)}async load(){this.logger.debug(`loading utilities ${this.id}`)}};Be=oi([s.kosModel(te)],Be);const st={registration:{[te]:{class:Be,singleton:!1}},type:te,predicate:s.isKosModel(te),factory:s.Kos.Factory.create(te)},{URL:pe}=s.resolveServiceUrl("UTILITIES_SERVICE"),{getAll:Ie}=s.ServiceFactory.build({basePath:`${pe}/api/utilities`}),Ae=s.KosLog.createLogger({name:"utilities-service",group:"Services"}),Pr=async()=>{Ae.debug("sending GET for utilities");try{const e=await Ie({urlOverride:`${pe}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.utilities`});if((e==null?void 0:e.status)!==200){Ae.info("no extensions found, using base data");const t=await Ie({urlOverride:`${pe}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}return(e==null?void 0:e.data)??[]}catch(e){Ae.info(`error fetching utilities: ${e}. Using base data`);const t=await Ie({urlOverride:`${pe}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}},si=Object.freeze(Object.defineProperty({__proto__:null,getUtilities:Pr},Symbol.toStringTag,{value:"Module"}));var ii=Object.defineProperty,ai=Object.getOwnPropertyDescriptor,Mr=(e,t,r,i)=>{for(var o=i>1?void 0:i?ai(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&ii(t,r,o),o};const re="utilities-container-model";let ve=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"_models");this.id=e,this.logger=r.logger,this._models=new s.KosModelContainer({parentId:e,sortKey:"id",indexMap:{byColumn:"columnId"}})}get data(){return this._models.data}get models(){return this._models}get columns(){return this._models.getIndexKeys("byColumn").sort((e,t)=>e.localeCompare(t))}addModel(e){this._models.addModel(e)}removeModel(e){this._models.removeModel(e)}getModel(e){return this._models.getModel(e)}getUtilitiesByColumn(e){return this._models.getIndexByKey("byColumn",e)}async load(){this.logger.debug(`loading utilities-container container ${this.id}`);const e=await Pr();e==null||e.forEach((t,r)=>{t.forEach(i=>{const o={...i,columnId:String(r)},l=st.factory(i.name)(o);this.addModel(l)})})}};Mr([s.kosChild],ve.prototype,"_models",2);ve=Mr([s.kosModel(re)],ve);const Tr={registration:{[re]:{class:ve,singleton:!0},...st.registration},type:re,predicate:s.isKosModel(re),factory:s.Kos.Singleton.create(re)},ni={...Ct.registration,...$e.registration,...Me.registration,...Rt.registration,...ke.registration,...Bt.registration,...qt.registration,...Gt.registration,...er.registration,...ar.registration,...dr.registration,...pr.registration,...hr.registration,...yr.registration,...br.registration,...Qe.registration,...Tr.registration},{URL:ce}=s.resolveServiceUrl("SPM-PUMP_SERVICE"),{postModel:De}=s.ServiceFactory.build({basePath:`${ce}/api/spm-pump`}),p=s.KosLog.createLogger({name:"spm-pump-service",group:"Services"}),$r=async(e,t)=>{p.debug(`performPreCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/preCalibrate`);try{const r=await De({model:{},urlOverride:`${ce}/api/ext/freestyle/microCalibration/pour/${e}/preCalibrate`,tracker:t});return p.debug("performPreCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){p.error(`performPreCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/preCalibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},Sr=async(e,t)=>{p.debug(`performCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/calibrate`);try{const r=await De({model:{},urlOverride:`${ce}/api/ext/freestyle/microCalibration/pour/${e}/calibrate`,tracker:t});return p.debug("performCalibrate - response:",r),r!=null&&r.data&&s.FutureManager.initiateFuture(r.data),r==null?void 0:r.data}catch(r){p.error(`performCalibrate - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/calibrate`,r);const i={id:t||"",endState:s.FutureEndState.Fail,tracker:t,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(i),i}},Cr=async(e,t,r,i)=>{p.debug(`performVerify - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/verify`);try{const o=await De({model:{...r,measuredCalibrationVolume:t},urlOverride:`${ce}/api/ext/freestyle/microCalibration/pour/${e}/verify`,tracker:i});return p.debug("performVerify - response:",o),o!=null&&o.data&&s.FutureManager.initiateFuture(o.data),o==null?void 0:o.data}catch(o){p.error(`performVerify - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/verify`,o);const l={id:i||"",endState:s.FutureEndState.Fail,tracker:i,reason:"Failed to resolve trouble"};return s.FutureManager.initiateFuture(l),l}},Or=async(e,t,r,i)=>{var o,l,n,h,_;p.debug(`performComplete - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/complete`);try{const c=await De({model:{...i,measuredCalibrationVolume:t,measuredVerificationVolume:r},urlOverride:`${ce}/api/ext/freestyle/microCalibration/pour/${e}/complete`});return p.debug("performComplete - response:",c),((c==null?void 0:c.status)===200||(c==null?void 0:c.status)===499)&&((o=c.data)!=null&&o.error)?[c.data.error||"unknownError",c.data]:[void 0,c==null?void 0:c.data]}catch(c){if(p.error(`performComplete - sending POST request to /api/ext/freestyle/microCalibration/pour/${e}/complete`,c),c instanceof s.FetchError){const it=((n=(l=c.payload)==null?void 0:l.data)==null?void 0:n.error)||((h=c.payload)==null?void 0:h.error)||"unknownError";return[it,((_=c.payload)==null?void 0:_.data)||{error:it}]}}return["unknownError",{error:"unknownError"}]},li=Object.freeze(Object.defineProperty({__proto__:null,performCalibrate:Sr,performComplete:Or,performPreCalibrate:$r,performVerify:Cr},Symbol.toStringTag,{value:"Module"}));var ci=Object.defineProperty,ui=Object.getOwnPropertyDescriptor,Fe=(e,t,r,i)=>{for(var o=i>1?void 0:i?ui(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&ci(t,r,o),o};const kr="spm-pump-model";let w=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"pump");a(this,"futureHandler");this.id=e,this.logger=r.logger,this.pump=t.companionParent,this.futureHandler=new s.FutureHandler(this)}get name(){return this.pump.name}get canPour(){return this.pump.canPour}get isPouring(){return this.pump.isPouring}async cancelPour(){return this.pump.cancelPour()}performIntent(e){return this.pump.performIntent(e)}get future(){return this.futureHandler.future}async performPreCalibrate(e){return $r(this.pump.path,e)}async performCalibrate(e){return Sr(this.pump.path,e)}async performVerify(e,t,r){return Cr(this.pump.path,e,t,r)}async performComplete(e,t,r){return Or(this.pump.path,e,t,r)}async init(){this.logger.debug(`initializing spm-pump ${this.id}`)}async load(){this.logger.debug(`loading spm-pump ${this.id}`)}};Fe([s.kosFuture()],w.prototype,"performPreCalibrate",1);Fe([s.kosFuture()],w.prototype,"performCalibrate",1);Fe([s.kosFuture()],w.prototype,"performVerify",1);w=Fe([s.kosModel(kr)],w);const di=new s.KosModelRegistrationFactory({class:w,type:kr});var pi=Object.defineProperty,gi=Object.getOwnPropertyDescriptor,Er=(e,t,r,i)=>{for(var o=i>1?void 0:i?gi(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&pi(t,r,o),o};const wr="trouble-action-model";let _e=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"troubleContainer");a(this,"disposer");a(this,"state");a(this,"troubleActionData");this.id=e,this.logger=r.logger,this.state=s.ObservableData(),this.troubleActionData=t.definitions.reduce((i,o)=>(i[o.troubleType]=o,i),{})}get activeTrouble(){const e=Object.keys(this.troubleActionData);if(e.length>0){const t=e[0],r=this.troubleContainer.troubles.getIndexByKey("byType",t);return r.length>0?r[0]:void 0}}get activeTroubleType(){var e;return(e=this.activeTrouble)==null?void 0:e.type}async init(){this.logger.debug(`initializing trouble-action ${this.id}`),this.disposer=s.kosAutoEffect(()=>{const e=this.troubleContainer.troubles.data.reduce((t,r)=>{const i=r.type;if(this.troubleActionData[i]){const o=this.troubleActionData[i].stateKey??i,l=this.troubleActionData[i].stateValue??i;t[o]=l}return t},{});this.state.setValues(e),Object.keys(this.troubleActionData).forEach(t=>{if(this.troubleContainer.troubles.getIndexByKey("byType",t).length===0){const r=this.troubleActionData[t].stateKey??t;this.state[r]=void 0}})})}unload(){var e;(e=this.disposer)==null||e.call(this)}async load(){this.logger.debug(`loading trouble-action ${this.id}`)}};Er([s.kosDependency({modelType:s.TroubleContainer.type})],_e.prototype,"troubleContainer",2);_e=Er([s.kosModel(wr)],_e);const hi=new s.SingletonKosModelRegistrationFactory({class:_e,type:wr}),{URL:Lr}=s.resolveServiceUrl("START_SERVICE"),{getOne:fi}=s.ServiceFactory.build({basePath:`${Lr}/api/start`}),mi=s.KosLog.createLogger({name:"start-service",group:"Services"}),Dr=async()=>(mi.debug("navigating to NCUI"),await fi({urlOverride:`${Lr}/api/app/kosdev.ddk/ncui/open`})),yi=Object.freeze(Object.defineProperty({__proto__:null,navigateToNCui:Dr},Symbol.toStringTag,{value:"Module"}));var bi=Object.defineProperty,vi=Object.getOwnPropertyDescriptor,Fr=(e,t,r,i)=>{for(var o=i>1?void 0:i?vi(t,r):t,l=e.length-1,n;l>=0;l--)(n=e[l])&&(o=(i?n(t,r,o):n(o))||o);return i&&o&&bi(t,r,o),o};const Rr="start-model";let Pe=class{constructor(e,t,r){a(this,"id");a(this,"logger");a(this,"troubles");this.id=e,this.logger=r.logger}get firmwareFailed(){return this.troubles.troubles.getIndexByKey("byType","FirmwareUpdateFailedTrouble").length>0}get firmwareInProgress(){return this.troubles.troubles.getIndexByKey("byType","FirmwareUpdateInProgressTrouble").length>0}async navigate(){await Dr()}async init(){this.logger.debug(`initializing start ${this.id}`)}async load(){this.logger.debug(`loading start ${this.id}`)}};Fr([s.kosDependency({modelType:s.TroubleContainer.type})],Pe.prototype,"troubles",2);Pe=Fr([s.kosModel(Rr)],Pe);const _i=new s.SingletonKosModelRegistrationFactory({class:Pe,type:Rr});exports.AgitationControl=no;exports.Animation=Ct;exports.AnimationServices=fo;exports.Application=$e;exports.Auth=Me;exports.AuthServices=Ur;exports.CarbWater=Rt;exports.CgpPump=Oo;exports.CopyLogs=Ao;exports.CopyLogsServices=Lo;exports.DDKModels=ni;exports.DashboardOperations=ke;exports.DashboardOperationsServices=Ko;exports.Dispenser=Bt;exports.DispenserInfo=qt;exports.DispenserInfoServices=Zo;exports.DispenserServices=Bo;exports.Door=vt;exports.EXTENSION_POINT_DASHBOARD_KEY_FACTORY=O;exports.Enrollment=Gt;exports.EnrollmentServices=as;exports.FcmPump=Je;exports.FcmPumpServices=yo;exports.IngredientSummary=er;exports.LfcvPump=ys;exports.LfcvPumpServices=Ms;exports.Lockout=ks;exports.LockoutServices=$s;exports.MACRO_KEYS=us;exports.MacroAssignment=ar;exports.NetworkTest=tt;exports.NetworkTestContainer=dr;exports.NetworkTestServices=Ks;exports.NutritiveSweetener=pr;exports.PlainWater=hr;exports.Reboot=yr;exports.RebootServices=Ys;exports.Settings=br;exports.SettingsServices=ti;exports.SetupStep=Ge;exports.SetupStepContainer=Qe;exports.SetupStepServices=Yr;exports.SpmPump=di;exports.SpmPumpServices=li;exports.Start=_i;exports.StartServices=yi;exports.TROUBLE_TYPE_PRIME=pt;exports.TROUBLE_TYPE_PURGE=Ke;exports.TroubleActionManager=hi;exports.Utilities=st;exports.UtilitiesContainer=Tr;exports.UtilitiesServices=si;exports.calculateTimeDifference=Zt;exports.executeDashboardKeyFactory=Xt;exports.isMacroGroup=ls;exports.isMicroGroup=ns;exports.macroHolderMap=cs;exports.registerDashboardKeyFactory=Qt;exports.toSeconds=ps;exports.toTimeComponents=ds;exports.troubleVisibilityFilter=Xe;