@kosdev-code/kos-ddk-models 0.1.0-dev.5187 → 0.1.0-dev.5190

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.js CHANGED
@@ -1 +1 @@
1
- "use strict";var io=Object.defineProperty;var no=(e,t,o)=>t in e?io(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var n=(e,t,o)=>(no(e,typeof t!="symbol"?t+"":t,o),o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@kosdev-code/kos-ui-sdk"),m=require("@kosdev-code/kos-freestyle-sdk"),P=require("@kosdev-code/kos-dispense-sdk"),ke="PurgeTrouble",Xe="PrimeTrouble",{URL:Ae}=s.resolveServiceUrl("AUTH_SERVICE"),{getOne:ao,postModel:lo}=s.ServiceFactory.build({basePath:`${Ae}/api/auth`}),Je=s.KosLog.createLogger({name:"auth-service",group:"Services"}),Ze=async()=>(Je.debug("sending GET for auth"),await ao({urlOverride:`${Ae}/api/app/kosdev.ddk/auth/role`})),et=async e=>(Je.debug("sending POST for auth"),await lo({urlOverride:`${Ae}/api/app/kosdev.ddk/auth/pincode/${e}`,model:{}})),co=Object.freeze(Object.defineProperty({__proto__:null,getCurrentRole:Ze,sendPinCode:et},Symbol.toStringTag,{value:"Module"}));var uo=Object.defineProperty,po=Object.getOwnPropertyDescriptor,tt=(e,t,o,i)=>{for(var r=i>1?void 0:i?po(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&uo(t,o,r),r};const w="auth-model",ze=e=>e.toLowerCase();let ne=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"currentRole");this.id=e,this.logger=o.logger,this.currentRole="crew"}async authorize(e){if(!e)return!1;const t=await et(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 Ze();(e==null?void 0:e.status)===200&&(this.logger.debug(`response ${e.data}`),s.kosAction(()=>{this.currentRole=ze(e.data)}))}handleRoleChange(e){this.currentRole=ze(e)}forceRole(e){this.currentRole=e}};tt([s.kosTopicHandler({topic:"/app/kosdev.ddk/auth/role",websocket:!0})],ne.prototype,"handleRoleChange",1);ne=tt([s.kosModel(w)],ne);const ge={registration:{[w]:{class:ne,singleton:!1}},type:w,predicate:s.isKosModel(w),factory:s.Kos.Factory.create(w)};var go=Object.defineProperty,ho=Object.getOwnPropertyDescriptor,Ie=(e,t,o,i)=>{for(var r=i>1?void 0:i?ho(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&go(t,o,r),r};const ot="door-model",yo=s.createPropKey("doorPath");let Q=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"doorPath");n(this,"open");n(this,"ignoreDoor");this.id=e,this.logger=o.logger,this.doorPath=t.doorPath}get currentState(){return this.open.value===void 0?"UNKNOWN":this.open.value?"OPEN":"CLOSED"}get isOpen(){const e=this.open.value===void 0?!0:this.open.value;return this.ignoreDoor.value?(this.logger.debug("Door state is being ignored (treating as closed) due to ignoreDoor config property being true."),!1):e}};Ie([s.kosStateProp({path:yo,attribute:"state"})],Q.prototype,"open",2);Ie([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ignoreDoorStateOnExit"})],Q.prototype,"ignoreDoor",2);Q=Ie([s.kosModel(ot)],Q);const rt=new s.KosModelRegistrationFactory({class:Q,type:ot}),{URL:Re}=s.resolveServiceUrl("SETUP-STEP_SERVICE"),{getAll:vo,postModel:fo}=s.ServiceFactory.build({basePath:`${Re}/api/setup-step`}),st=s.KosLog.createLogger({name:"setup-step-service",group:"Services"}),it=async()=>(st.debug("sending GET for setup-step"),await vo({urlOverride:`${Re}/api/app/kosdev.ddk/setup/steps`})),nt=async e=>(st.debug("sending POST for setup-step"),await fo({urlOverride:`${Re}/api/app/kosdev.ddk/setup/complete/${e}`,model:{}})),mo=Object.freeze(Object.defineProperty({__proto__:null,getSetupSteps:it,markStepComplete:nt},Symbol.toStringTag,{value:"Module"}));var bo=Object.getOwnPropertyDescriptor,_o=(e,t,o,i)=>{for(var r=i>1?void 0:i?bo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=l(r)||r);return r};const L="setup-step-model";let Pe=class{constructor(e,t,o){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=o.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 nt(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}`)}};Pe=_o([s.kosModel(L)],Pe);const Fe={registration:{[L]:{class:Pe,singleton:!1}},type:L,predicate:s.isKosModel(L),factory:s.Kos.Factory.create(L)};var To=Object.defineProperty,Mo=Object.getOwnPropertyDescriptor,he=(e,t,o,i)=>{for(var r=i>1?void 0:i?Mo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&To(t,o,r),r};const D="setup-step-container-model";function Be(e){return t=>{const o=Fe.factory(t.id)(t);o.updateModel(t),e.addModel(o)}}function Ye(e){return t=>{e.removeModel(t)}}let b=class{constructor(e,t,o){n(this,"id");n(this,"_currentStep");n(this,"logger");n(this,"models");n(this,"authModel");this.id=e,this.logger=o.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(o=>o.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 it();if(e!=null&&e.data){const t=e.data.map((o,i)=>({...o,idx:i,id:`setup-${o.name}`}));s.resolveContainerDeltas({container:this.models,onAddItem:Be(this),onRemoveItem:Ye(this)})(t)}this.nextStep()}handleStepChanges(e){const t=e.map((o,i)=>({...o,idx:i,id:`setup-${o.name}`}));s.resolveContainerDeltas({container:this.models,onAddItem:Be(this),onRemoveItem:Ye(this)})(t)}};he([s.kosChild],b.prototype,"models",2);he([s.kosDependency({modelType:ge.type})],b.prototype,"authModel",2);he([s.kosTopicHandler({topic:"/app/kosdev.ddk/setup/steps",websocket:!0})],b.prototype,"handleStepChanges",1);b=he([s.kosModel(D)],b);const Ke={registration:{[D]:{class:b,singleton:!0},...Fe.registration},type:D,predicate:s.isKosModel(D),factory:s.Kos.Singleton.create(D)},{URL:v}=s.resolveServiceUrl("AUTH_SERVICE"),{getOne:at,getAll:se}=s.ServiceFactory.build({basePath:`${v}/api/app/kosdev.ddk/ncui/`}),X=s.KosLog.createLogger({name:"auth-service",group:"Services"}),So=async()=>{X.debug("sending GET for cuis");const e=await se({urlOverride:`${v}/api/app/kosdev.ddk/cui`});if((e==null?void 0:e.status)!==200)throw new Error("Failed to retrieve cuis");return e.data},ko=async()=>{X.debug("sending GET for navigation");try{const e=await se({urlOverride:`${v}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.navigations`});if((e==null?void 0:e.status)!==200){X.info("no extensions found, using base data");const t=await se({urlOverride:`${v}/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 se({urlOverride:`${v}/api/kos/descriptor/system:app/kondra.ncui.navigations`});return(t==null?void 0:t.data)??[]}},Po=async()=>(X.debug("navigating to CUI"),await at({urlOverride:`${v}/api/app/kosdev.ddk/cui/open`})),$o=async()=>(X.debug("navigating to NCUI"),await at({urlOverride:`${v}/api/app/kosdev.ddk/ncui/open`}));var Oo=Object.defineProperty,Co=Object.getOwnPropertyDescriptor,y=(e,t,o,i)=>{for(var r=i>1?void 0:i?Co(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Oo(t,o,r),r};const A="application-model",lt=(e,t="")=>e.reduce((o,i)=>{const r=t?`${t}.${i.name}`:i.name;if(o[r]={...i,root:!t},i.children){const a=lt(i.children,r);Object.keys(a).forEach(l=>{o[l]=a[l]})}return o},{});let u=class{constructor(e,t,o){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=o.logger,this.door=rt.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 lt(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 $o()}async exit(){this.logger.info("navigating to CUI"),await Po()}async load(){var o,i;this.logger.debug(`loading application ${this.id}`);const e=await ko();this._navigationItems=e;const t=await So();this._cuis=t,(o=this.setupStepContainer)!=null&&o.hasIncompletePreSteps&&((i=this.authModel)==null||i.forceRole("technician")),this.languages=[{name:"English",locale:"en"}]}};y([s.kosDependency({modelType:s.Device.type})],u.prototype,"device",2);y([s.kosDependency({modelType:ge.type})],u.prototype,"authModel",2);y([s.kosDependency({modelType:Ke.type})],u.prototype,"setupStepContainer",2);y([s.kosChild],u.prototype,"door",2);y([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],u.prototype,"ncuiLanguage",2);y([s.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"activeCui"})],u.prototype,"activeCui",2);y([s.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"fallbackCui"})],u.prototype,"fallbackCui",2);u=y([s.kosModel(A)],u);const ye={registration:{[A]:{class:u,singleton:!0}},type:A,predicate:s.isKosModel(A),factory:s.Kos.Singleton.create(A)},re={none:999,crew:0,technician:1,manager:2},Ue=e=>t=>{if(t.type===m.AGITATION_REQUIRED_TROUBLE)return!1;const o=(t==null?void 0:t.role)||"technician";if(e&&o){const i=re[e.toLowerCase()]??re.crew,r=re[o.toLowerCase()]??re.crew;return i>=r}return!1};var Eo=Object.defineProperty,wo=Object.getOwnPropertyDescriptor,$=(e,t,o,i)=>{for(var r=i>1?void 0:i?wo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Eo(t,o,r),r};const dt="agitation-control-model",$e="resolve",Lo="agitate";let g=class{constructor(e,t,o){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=o.logger,this.troubleContainer=t.companionParent,this.futureHandler=new s.MultipleFutureHandler(this,$e)}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),o=e>0&&t.length===0;return this.isDoorClosed&&o&&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(Ue(e)).filter(t=>t.type!==m.AGITATION_REQUIRED_TROUBLE)}get future(){return this.futureHandler.future}get resolveFuture(){return this.futureHandler.getFuture($e)}get agitateFuture(){return this.futureHandler.getFuture(Lo)}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}`)}};$([s.kosDependency({modelType:ye.type})],g.prototype,"application",2);$([s.kosFuture({alias:$e})],g.prototype,"resolveDeferredTroubles",1);$([s.kosTopicHandler({topic:m.CartridgeAgitatorEvents.TOPIC_AGITATION_STARTED})],g.prototype,"handleAgitationStarted",1);$([s.kosTopicHandler({topic:m.CartridgeAgitatorEvents.TOPIC_AGITATION_ENDED})],g.prototype,"handleAgitationEnded",1);$([s.kosModelEffect({dependencies:e=>[e.readyToResolve,e._agitationFutureId]})],g.prototype,"handleReadyToResolve",1);g=$([s.kosModel(dt)],g);const Do=new s.SingletonKosModelRegistrationFactory({class:g,type:dt});var Ao=Object.defineProperty,Io=Object.getOwnPropertyDescriptor,ee=(e,t,o,i)=>{for(var r=i>1?void 0:i?Io(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Ao(t,o,r),r};const I="animation-model";let f=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"disableAll");n(this,"enableDial");n(this,"enableModal");n(this,"enableSideBar");this.id=e,this.logger=o.logger}};ee([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.disableAll"})],f.prototype,"disableAll",2);ee([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableDial"})],f.prototype,"enableDial",2);ee([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableModal"})],f.prototype,"enableModal",2);ee([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableSideBar"})],f.prototype,"enableSideBar",2);f=ee([s.kosModel(I)],f);const ct={registration:{[I]:{class:f,singleton:!0}},type:I,predicate:s.isKosModel(I),factory:s.Kos.Singleton.create(I)},{URL:Ro}=s.resolveServiceUrl("ANIMATION_SERVICE"),{getAll:Fo}=s.ServiceFactory.build({basePath:`${Ro}/api/animation`}),Ko=s.KosLog.createLogger({name:"animation-service",group:"Services"}),Uo=async()=>(Ko.debug("sending GET for animation"),await Fo({})),xo=Object.freeze(Object.defineProperty({__proto__:null,getAnimations:Uo},Symbol.toStringTag,{value:"Module"}));var jo=Object.defineProperty,No=Object.getOwnPropertyDescriptor,ut=(e,t,o,i)=>{for(var r=i>1?void 0:i?No(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&jo(t,o,r),r};const R="carb-water-model";let ae=class{constructor(e,t,o){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=o.logger}getPump(){const t=this.assemblyModel.getHoldersByGroup("carb")[0].pumps.data[0];return s.getKosCompanionModel(t,m.FcmPump.type)}async init(){this.logger.debug(`initializing carb-water ${this.id}`)}async load(){this.logger.debug(`loading carb-water ${this.id}`)}};ut([s.kosDependency({modelType:P.Assembly.type})],ae.prototype,"assemblyModel",2);ae=ut([s.kosModel(R)],ae);const pt={registration:{[R]:{class:ae,singleton:!1}},type:R,predicate:s.isKosModel(R),factory:s.Kos.Factory.create(R)},{URL:O}=s.resolveServiceUrl("COPY-LOGS_SERVICE"),{getAll:Wo,getOne:Ho,postModel:gt,deleteModel:Vo}=s.ServiceFactory.build({basePath:`${O}/api/copy-logs`}),le=s.KosLog.createLogger({name:"copy-logs-service",group:"Services"}),ht=async(e,t)=>{const o=await Vo({tracker:t,id:e,urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(o!=null&&o.data))throw new Error("No response from server");return o.data},yt=async(e,t)=>{const o=await gt({model:{},tracker:t,urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/eraseAndCopy/${e}`});if(!(o!=null&&o.data))throw new Error("No response from server");return o.data},vt=async(e,t)=>{const o=await gt({model:{},tracker:t,urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(o!=null&&o.data))throw new Error("No response from server");return o.data},ft=async()=>{le.debug("sending GET for copy-logs");try{const e=await Wo({urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/volumes/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof s.FetchError)return le.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},mt=async()=>{le.debug("sending GET for log file size");try{const e=await Ho({urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/files/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof s.FetchError)return le.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},zo=Object.freeze(Object.defineProperty({__proto__:null,copyLogFromVolume:vt,eraseAndCopyLogsToVolume:yt,eraseVolume:ht,getLogFileSize:mt,getVolumes:ft},Symbol.toStringTag,{value:"Module"}));var bt=Object.defineProperty,Bo=Object.getOwnPropertyDescriptor,Yo=(e,t,o)=>t in e?bt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,C=(e,t,o,i)=>{for(var r=i>1?void 0:i?Bo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&bt(t,o,r),r},Go=(e,t,o)=>(Yo(e,t+"",o),o);const qo="copy-logs-model";let p=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}`),yt(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}`),ht(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}`),vt(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 ft(),[o,i]=await mt();if(o){this.logger.error(`Error fetching log file size: ${o}`);return}if(e){this.logger.error(`Error fetching volumes: ${e}`);return}t&&(t.forEach(r=>{const a=this.storageDeviceContainer.getModel(r.id);if(a){const l={id:r.id,name:a.label,freeBytes:r.info.freeBytes,totalBytes:r.info.totalBytes};this._volumes.addModel(l)}}),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}`)}};Go(p,"Registration");C([s.kosDependency({modelType:s.StorageDeviceContainer.type})],p.prototype,"storageDeviceContainer",2);C([s.kosFuture()],p.prototype,"eraseAndCopyVolume",1);C([s.kosFuture()],p.prototype,"eraseVolume",1);C([s.kosFuture()],p.prototype,"copyLogs",1);C([s.kosModelEffect({dependencies:e=>[e.inserted]})],p.prototype,"handleInsertion",1);p=C([s.kosModel({modelTypeId:qo,singleton:!0}),s.kosFutureAware(),s.kosLoggerAware()],p);const Qo=p.Registration,_t=s.KosLog.createLogger({name:"dashboard-operations-service",group:"Services"}),Tt=async(e,t)=>(_t.debug("resolveAll"),await s.TroubleServices.bulkResolveTroubles(e,void 0,t)),Mt=async(e,t)=>(_t.debug("resolveTrouble"),await s.TroubleServices.resolveTrouble(e,void 0,t)),Xo=Object.freeze(Object.defineProperty({__proto__:null,resolveAll:Tt,resolveTrouble:Mt},Symbol.toStringTag,{value:"Module"}));var Jo=Object.defineProperty,Zo=Object.getOwnPropertyDescriptor,ve=(e,t,o,i)=>{for(var r=i>1?void 0:i?Zo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Jo(t,o,r),r};const F="dashboard-operations-model";function Ge(e){return!e.deferred}function qe(e){return e.deferred}let _=class{constructor(e,t,o){n(this,"id");n(this,"troubles");n(this,"futureHandler");n(this,"logger");this.id=e,this.futureHandler=new s.FutureHandler(this),this.logger=o.logger}get troublesByType(){return this.troubles.troubles.data.reduce(s.troubleByTypeReducer,{})}get queuedPurgeTroubles(){return this.purgeTroubles.filter(qe)}get queuedPrimeTroubles(){return this.primeTroubles.filter(qe)}get resolvablePrimeTroubles(){return this.primeTroubles.filter(Ge)}get resolvablePurgeTroubles(){return this.purgeTroubles.filter(Ge)}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[Xe]||[]}get future(){return this.futureHandler.getFuture()}async resolveAllTroubles(e,t){if(!t)throw new Error("No tracker provided");const o=e===ke?this.purgeTroubles:this.primeTroubles;o.filter(l=>l.shouldDefer).forEach(l=>{this.logger.info(`Deferring trouble ${l.rawId}`),l.defer()});const r=o.filter(l=>!l.shouldDefer).map(l=>l.rawId);return r.length===0?void 0:await Tt(r,t)}async resolveTrouble(e,t){if(!t)throw new Error("No tracker provided");return await Mt(e,t)}async init(){this.logger.debug(`initializing dashboard-operations ${this.id}`)}async load(){this.logger.debug(`loading dashboard-operations ${this.id}`)}};ve([s.kosDependency({modelType:s.TroubleContainer.type})],_.prototype,"troubles",2);ve([s.kosFuture()],_.prototype,"resolveAllTroubles",1);ve([s.kosFuture()],_.prototype,"resolveTrouble",1);_=ve([s.kosModel(F)],_);const fe={registration:{[F]:{class:_,singleton:!0}},type:F,predicate:s.isKosModel(F),factory:s.Kos.Singleton.create(F)};var er=Object.getOwnPropertyDescriptor,tr=(e,t,o,i)=>{for(var r=i>1?void 0:i?er(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=l(r)||r);return r};const K="dispenser-model";let Oe=class{constructor(e,t,o){n(this,"id");n(this,"logger");this.id=e,this.logger=o.logger}updateModel(){}async init(){this.logger.debug(`initializing dispenser ${this.id}`)}async load(){this.logger.debug(`loading dispenser ${this.id}`)}};Oe=tr([s.kosModel(K)],Oe);const St={registration:{[K]:{class:Oe,singleton:!0}},type:K,predicate:s.isKosModel(K),factory:s.Kos.Singleton.create(K)},{URL:or}=s.resolveServiceUrl("DISPENSER_SERVICE"),{getAll:rr}=s.ServiceFactory.build({basePath:`${or}/api/dispenser`}),sr=s.KosLog.createLogger({name:"dispenser-service",group:"Services"}),ir=async()=>(sr.debug("sending GET for dispenser"),await rr({})),nr=Object.freeze(Object.defineProperty({__proto__:null,getDispensers:ir},Symbol.toStringTag,{value:"Module"}));var ar=Object.defineProperty,lr=Object.getOwnPropertyDescriptor,kt=(e,t,o,i)=>{for(var r=i>1?void 0:i?lr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&ar(t,o,r),r};const U="dispenser-info-model";let de=class{constructor(e,t,o){n(this,"logger");n(this,"id");n(this,"name");this.id=e,this.logger=o.logger}async init(){this.logger.debug(`initializing dispenser-info ${this.id}`)}async load(){this.logger.debug(`loading dispenser-info ${this.id}`)}};kt([s.kosConfigProperty({path:"kos:device",attribute:"name"})],de.prototype,"name",2);de=kt([s.kosModel(U)],de);const Pt={registration:{[U]:{class:de,singleton:!1}},type:U,predicate:s.isKosModel(U),factory:s.Kos.Factory.create(U)},{URL:dr}=s.resolveServiceUrl("DISPENSER-INFO_SERVICE"),{getAll:cr}=s.ServiceFactory.build({basePath:`${dr}/api/dispenser-info`}),ur=s.KosLog.createLogger({name:"dispenser-info-service",group:"Services"}),pr=async()=>(ur.debug("sending GET for dispenser-info"),await cr({})),gr=Object.freeze(Object.defineProperty({__proto__:null,getDispenserInfos:pr},Symbol.toStringTag,{value:"Module"}));var hr=Object.getOwnPropertyDescriptor,yr=(e,t,o,i)=>{for(var r=i>1?void 0:i?hr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=l(r)||r);return r};const x="enrollment-model";let Ce=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"enrolled");this.id=e,this.logger=o.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}`)}};Ce=yr([s.kosModel(x)],Ce);const $t={registration:{[x]:{class:Ce,singleton:!0}},type:x,predicate:s.isKosModel(x),factory:s.Kos.Singleton.create(x)},{URL:vr}=s.resolveServiceUrl("ENROLLMENT_SERVICE"),{getAll:fr}=s.ServiceFactory.build({basePath:`${vr}/api/enrollment`}),mr=s.KosLog.createLogger({name:"enrollment-service",group:"Services"}),br=async()=>(mr.debug("sending GET for enrollment"),await fr({})),_r=Object.freeze(Object.defineProperty({__proto__:null,getEnrollments:br},Symbol.toStringTag,{value:"Module"})),Tr=e=>e.toLowerCase().includes("micros"),Mr=e=>!e.toLowerCase().includes("micros"),Sr=e=>t=>{const o=e==null?void 0:e.getHoldersByGroup(t);return o?o.map(i=>({id:i.id,name:i.ingredientName,path:i.path})):null},kr=["water","carb","ns","nss"],T="dashboardKeyFactory",Te=[];s.registerExtensionPoint(T,{register:(e,t)=>{Te.includes(t)||Te.push(t)},execute:(e,t)=>{const o=Te.sort((i,r)=>i.rank-r.rank);for(const i of o){const r=i.factory(t);if(r)return r}}});const Ot=e=>{s.ExtensionManager[T].register(T,e)},Ct=e=>s.ExtensionManager[T].execute(T,e);s.ExtensionManager.registerDashboardKeyFactory=Ot;s.ExtensionManager.executeDashboardKeyFactory=Ct;const Ee=3600,Et=60,Pr=e=>{const t=Math.floor(e/Ee),o=Math.floor(e%Ee/Et);return{hours:t,minutes:o}},$r=(e,t)=>e*Ee+t*Et,wt=e=>{const o=new Date().valueOf()-e.valueOf(),i=Math.floor(o/(1e3*60)),r=Math.floor(i/60),a=Math.floor(r/24),l=i%60,te=r%24;let oe="";return a>0&&(oe+=`${a} day${a>1?"s":""} `),te>0&&(oe+=`${te} hour${te>1?"s":""} `),(l>0||a===0&&te===0)&&(oe+=`${l} minute${l>1?"s":""} `),oe};var Or=Object.defineProperty,Cr=Object.getOwnPropertyDescriptor,me=(e,t,o,i)=>{for(var r=i>1?void 0:i?Cr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Or(t,o,r),r};const j="ingredient-summary-model";let M=class{constructor(e,t,o){n(this,"id");n(this,"assemblyModel");n(this,"dashboardOperationModel");n(this,"appModel");n(this,"logger");this.id=e,this.logger=o.logger,this.dashboardOperationModel=fe.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=Ue(e);return this.assemblyModel.allHolders.filter(o=>{const i=s.getKosCompanionModel(o,m.FreestyleHolder.type);if(i!=null&&i.isRemote)return!1;const r=o.troubles.filter(t);return r.length>0&&r.find(a=>a.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}`)}};me([s.kosDependency({modelType:P.Assembly.type})],M.prototype,"assemblyModel",2);me([s.kosDependency({modelType:fe.type})],M.prototype,"dashboardOperationModel",2);me([s.kosDependency({modelType:ye.type})],M.prototype,"appModel",2);M=me([s.kosModel(j)],M);const Lt={registration:{[j]:{class:M,singleton:!1}},type:j,predicate:s.isKosModel(j),factory:s.Kos.Factory.create(j)},{URL:xe}=s.resolveServiceUrl("LOCKOUT_SERVICE"),{postModel:Dt}=s.ServiceFactory.build({basePath:`${xe}/api/app/kosdev.ddk/lockout`}),At=s.KosLog.createLogger({name:"lockout-service",group:"Services"}),Er=async()=>(At.info("lock"),await Dt({model:{},urlOverride:`${xe}/api/app/kosdev.ddk/lockout/lockNow`})),It=async e=>{At.info("unlock");const t=await Dt({model:{},urlOverride:`${xe}/api/app/kosdev.ddk/lockout/unlock/${e}`});return t==null?void 0:t.data},wr=Object.freeze(Object.defineProperty({__proto__:null,lock:Er,unlock:It},Symbol.toStringTag,{value:"Module"}));var Lr=Object.defineProperty,Dr=Object.getOwnPropertyDescriptor,E=(e,t,o,i)=>{for(var r=i>1?void 0:i?Dr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Lr(t,o,r),r};const Rt="lockout-model",Ar=[{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 h=class{constructor(e,t,o){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=o.logger,this.saveMap=new Map}get enabled(){const e=this.getProp("oneTimeLockConfig.lockTime"),t=e!==void 0&&e!=="",o=this.getProp("lockScheduleEnabled");return t||o}get schedule(){return Ar}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 It(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}`)}};E([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"pin"})],h.prototype,"pin",2);E([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockSkipped"})],h.prototype,"nextLockSkipped",2);E([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockTime"})],h.prototype,"nextLockTime",2);E([s.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextUnLockTime"})],h.prototype,"nextUnLockTime",2);E([s.kosConfigBean({path:"app:kosdev.ddk:service:cuiLockout"})],h.prototype,"cuiLockout",2);h=E([s.kosModel(Rt)],h);const Ir=new s.SingletonKosModelRegistrationFactory({class:h,type:Rt}),Rr=async(e,t)=>await s.TroubleServices.bulkResolveTroubles(e,void 0,t);var Fr=Object.defineProperty,Kr=Object.getOwnPropertyDescriptor,be=(e,t,o,i)=>{for(var r=i>1?void 0:i?Kr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Fr(t,o,r),r};const N="macro-assignment-model",Qe="PurgeTrouble",Ur="PrimeTrouble";let S=class{constructor(e,t,o){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=o.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,o)=>{const i=o.troublesByType[Qe]||[];return t=[...t,...i],t},[])}get holderPrimeTroubles(){return this.macroHolders.reduce((t,o)=>{const i=o.troublesByType[Ur]||[];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===Qe?this.holderPurgeTroubles:this.holderPrimeTroubles).map(a=>a.rawId);return await Rr(i,t)}};be([s.kosDependency({modelType:P.HolderContainer.type})],S.prototype,"holders",2);be([s.kosDependency({modelType:P.IngredientContainer.type})],S.prototype,"ingredients",2);be([s.kosFuture()],S.prototype,"resolveAll",1);S=be([s.kosModel(N)],S);const Ft={registration:{[N]:{class:S,singleton:!0}},type:N,predicate:s.isKosModel(N),factory:s.Kos.Singleton.create(N)};var xr=Object.getOwnPropertyDescriptor,jr=(e,t,o,i)=>{for(var r=i>1?void 0:i?xr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=l(r)||r);return r};const W="network-test-model";let we=class{constructor(e,t,o){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=o.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}`)}};we=jr([s.kosModel(W)],we);const je={registration:{[W]:{class:we,singleton:!1}},type:W,predicate:s.isKosModel(W),factory:s.Kos.Factory.create(W)},{URL:_e}=s.resolveServiceUrl("NETWORK-TEST_SERVICE"),{getAll:Nr,getOne:Kt}=s.ServiceFactory.build({basePath:`${_e}/api/app/ncui/network/tests`}),Wr=s.KosLog.createLogger({name:"network-test-service",group:"Services"}),Ut=async()=>{Wr.debug("sending GET for network-test");const e=await Nr({urlOverride:`${_e}/api/app/kosdev.ddk/network/tests`});return e==null?void 0:e.data},xt=async()=>{const e=await Kt({urlOverride:`${_e}/api/app/kosdev.ddk/network/reports`});return e==null?void 0:e.data},jt=async(e,t)=>await Kt({urlOverride:`${_e}/api/app/kosdev.ddk/network/tests/run/group/${e}`,tracker:t}),Hr=Object.freeze(Object.defineProperty({__proto__:null,getNetworkTests:Ut,getTestsReports:xt,performGroupTest:jt},Symbol.toStringTag,{value:"Module"}));var Vr=Object.defineProperty,zr=Object.getOwnPropertyDescriptor,Ne=(e,t,o,i)=>{for(var r=i>1?void 0:i?zr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Vr(t,o,r),r};const H="network-test-container-model";let J=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"lastTested");n(this,"futureHandler");n(this,"models");this.id=e,this.logger=o.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)),o=Math.max(...t.map(i=>i?i.getTime():0));return o?wt(new Date(o)):""}async load(){this.logger.debug(`loading network-test-container container ${this.id}`);const e=await Ut(),t=await xt();e&&e.forEach(o=>{const i=je.factory(o.id)(o);this.addModel(i)}),e&&t&&e.forEach(o=>{const i=t==null?void 0:t[o.group],r=i==null?void 0:i[o.id],a=this.getModel(o.id);if(a&&r){const l={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};a.updateModel(l)}})}async performTest(e,t){if(!t)throw new Error("No tracker provided");const o=await jt(e,t);return o==null?void 0:o.data}onFutureUpdate(e){const{clientData:t}=e;t&&t.forEach(o=>{const i=this.getModel(o.id);if(s.kosAction(()=>{this.lastTested=this.lastTested>new Date(o.timestamp)?this.lastTested:new Date(o.timestamp)}),i){const r={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};s.kosAction(()=>{i.updateModel(r)})}})}};Ne([s.kosChild],J.prototype,"models",2);Ne([s.kosFuture()],J.prototype,"performTest",1);J=Ne([s.kosModel(H)],J);const Nt={registration:{[H]:{class:J,singleton:!0},...je.registration},type:H,predicate:s.isKosModel(H),factory:s.Kos.Singleton.create(H)};var Br=Object.defineProperty,Yr=Object.getOwnPropertyDescriptor,We=(e,t,o,i)=>{for(var r=i>1?void 0:i?Yr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Br(t,o,r),r};const V="nutritive-sweetener-model",Gr=s.createPropKey("statePath");let Z=class{constructor(e,t){n(this,"id");n(this,"assemblyModel");n(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}};We([s.kosDependency({modelType:P.Assembly.type})],Z.prototype,"assemblyModel",2);We([s.kosStateBean({path:Gr})],Z.prototype,"pumpState",2);Z=We([s.kosModel(V),s.kosLoggerAware()],Z);const Wt={registration:{[V]:{class:Z,singleton:!1}},type:V,predicate:s.isKosModel(V),factory:s.Kos.Factory.create(V)};var qr=Object.defineProperty,Qr=Object.getOwnPropertyDescriptor,Ht=(e,t,o,i)=>{for(var r=i>1?void 0:i?Qr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&qr(t,o,r),r};const z="plain-water-model";let ce=class{constructor(e,t,o){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=o.logger}getHolder(){return this.assemblyModel.getHoldersByGroup("water")[0]}getPump(){var i,r;const e=this.getHolder(),t=(r=(i=e==null?void 0:e.pumps)==null?void 0:i.data)==null?void 0:r[0];return s.getKosCompanionModel(t,m.FcmPump.type)}async init(){this.logger.debug(`initializing plain-water ${this.id}`)}async load(){this.logger.debug(`loading plain-water ${this.id}`)}};Ht([s.kosDependency({modelType:P.Assembly.type})],ce.prototype,"assemblyModel",2);ce=Ht([s.kosModel(z)],ce);const Vt={registration:{[z]:{class:ce,singleton:!1}},type:z,predicate:s.isKosModel(z),factory:s.Kos.Factory.create(z)},{URL:zt}=s.resolveServiceUrl("REBOOT_SERVICE"),{postModel:Xr}=s.ServiceFactory.build({basePath:`${zt}/api/reboot`}),Jr=s.KosLog.createLogger({name:"reboot-service",group:"Services"}),Bt=async()=>(Jr.debug("sending POST call for Reboot Dispenser"),await Xr({urlOverride:`${zt}/api/app/kosdev.ddk/ncui/reboot`,model:{}})),Zr=Object.freeze(Object.defineProperty({__proto__:null,rebootDispenser:Bt},Symbol.toStringTag,{value:"Module"}));var es=Object.getOwnPropertyDescriptor,ts=(e,t,o,i)=>{for(var r=i>1?void 0:i?es(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=l(r)||r);return r};const B="reboot-model";let Le=class{constructor(e,t,o){n(this,"id");n(this,"logger");this.id=e,this.logger=o.logger}async completeReboot(){await Bt()}updateModel(){}async init(){this.logger.debug(`initializing reboot ${this.id}`)}async load(){this.logger.debug(`loading reboot ${this.id}`)}};Le=ts([s.kosModel(B)],Le);const Yt={registration:{[B]:{class:Le,singleton:!1}},type:B,predicate:s.isKosModel(B),factory:s.Kos.Factory.create(B)};var os=Object.defineProperty,rs=Object.getOwnPropertyDescriptor,c=(e,t,o,i)=>{for(var r=i>1?void 0:i?rs(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&os(t,o,r),r};const Y="settings-model";let d=class{constructor(e,t,o){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");n(this,"horizontalMode");this.id=e,this.logger=o.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")}};c([s.kosConfigProperty({path:"system:app",attribute:"resolveDelaysMs"})],d.prototype,"resolveDelaysMs",2);c([s.kosConfigProperty({path:"system:app",attribute:"dateFormat"})],d.prototype,"dateFormat",2);c([s.kosConfigProperty({path:"system:app",attribute:"timeFormat"})],d.prototype,"timeFormat",2);c([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hidePlainWaterBev"})],d.prototype,"hidePlainWaterBev",2);c([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hideCarbWaterBev"})],d.prototype,"hideCarbWaterBev",2);c([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],d.prototype,"ncuiLanguage",2);c([s.kosConfigProperty({path:"kos:device",attribute:"name"})],d.prototype,"name",2);c([s.kosConfigProperty({path:"kos:service:OTA",attribute:"activateAndRebootTime"})],d.prototype,"activateAndRebootTime",2);c([s.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.display.horizontalMode"})],d.prototype,"horizontalMode",2);c([s.kosModelEffect({dependencies:e=>[e.horizontalMode.value]})],d.prototype,"handleUpdateDisplayMode",1);d=c([s.kosModel(Y)],d);const Gt={registration:{[Y]:{class:d,singleton:!0}},type:Y,predicate:s.isKosModel(Y),factory:s.Kos.Singleton.create(Y)},{URL:qt}=s.resolveServiceUrl("SETTINGS_SERVICE"),{getAll:Qt}=s.ServiceFactory.build({basePath:`${qt}/api/settings`}),ss=s.KosLog.createLogger({name:"settings-service",group:"Services"}),is=async()=>(ss.debug("sending GET for settings"),await Qt({})),ns=async()=>await Qt({urlOverride:`${qt}api/app/kosdev.ddk/ncui/languages`}),as=Object.freeze(Object.defineProperty({__proto__:null,getNcuiLanguage:ns,getSettings:is},Symbol.toStringTag,{value:"Module"}));var ls=Object.getOwnPropertyDescriptor,ds=(e,t,o,i)=>{for(var r=i>1?void 0:i?ls(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=l(r)||r);return r};const G="utilities-model";let De=class{constructor(e,t,o){n(this,"id");n(this,"name");n(this,"options");n(this,"roles");n(this,"columnId");n(this,"logger");this.id=e,this.logger=o.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}`)}};De=ds([s.kosModel(G)],De);const He={registration:{[G]:{class:De,singleton:!1}},type:G,predicate:s.isKosModel(G),factory:s.Kos.Factory.create(G)},{URL:ie}=s.resolveServiceUrl("UTILITIES_SERVICE"),{getAll:Me}=s.ServiceFactory.build({basePath:`${ie}/api/utilities`}),Se=s.KosLog.createLogger({name:"utilities-service",group:"Services"}),Xt=async()=>{Se.debug("sending GET for utilities");try{const e=await Me({urlOverride:`${ie}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.utilities`});if((e==null?void 0:e.status)!==200){Se.info("no extensions found, using base data");const t=await Me({urlOverride:`${ie}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}return(e==null?void 0:e.data)??[]}catch(e){Se.info(`error fetching utilities: ${e}. Using base data`);const t=await Me({urlOverride:`${ie}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}},cs=Object.freeze(Object.defineProperty({__proto__:null,getUtilities:Xt},Symbol.toStringTag,{value:"Module"}));var us=Object.defineProperty,ps=Object.getOwnPropertyDescriptor,Jt=(e,t,o,i)=>{for(var r=i>1?void 0:i?ps(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&us(t,o,r),r};const q="utilities-container-model";let ue=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"_models");this.id=e,this.logger=o.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 Xt();e==null||e.forEach((t,o)=>{t.forEach(i=>{const r={...i,columnId:String(o)},a=He.factory(i.name)(r);this.addModel(a)})})}};Jt([s.kosChild],ue.prototype,"_models",2);ue=Jt([s.kosModel(q)],ue);const Zt={registration:{[q]:{class:ue,singleton:!0},...He.registration},type:q,predicate:s.isKosModel(q),factory:s.Kos.Singleton.create(q)},gs={...ct.registration,...ye.registration,...ge.registration,...pt.registration,...fe.registration,...St.registration,...Pt.registration,...$t.registration,...Lt.registration,...Ft.registration,...Nt.registration,...Wt.registration,...Vt.registration,...Yt.registration,...Gt.registration,...Ke.registration,...Zt.registration};var eo=Object.defineProperty,hs=Object.getOwnPropertyDescriptor,ys=(e,t,o)=>t in e?eo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,Ve=(e,t,o,i)=>{for(var r=i>1?void 0:i?hs(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&eo(t,o,r),r},vs=(e,t,o)=>(ys(e,t+"",o),o);const fs="trouble-action-model";let k=class{constructor(e,t,o){n(this,"id");n(this,"troubleContainer");n(this,"state");n(this,"troubleActionData");this.id=e,this.logger=o.logger,this.state=s.ObservableData(),this.troubleActionData=t.definitions.reduce((i,r)=>(i[r.troubleType]=r,i),{})}get activeTrouble(){const e=Object.keys(this.troubleActionData);if(e.length>0){const t=e[0],o=this.troubleContainer.troubles.getIndexByKey("byType",t);return o.length>0?o[0]:void 0}}get activeTroubleType(){var e;return(e=this.activeTrouble)==null?void 0:e.type}handleTroubleActions(){const e=this.troubleContainer.troubles.data.reduce((t,o)=>{const i=o.type;if(this.troubleActionData[i]){const r=this.troubleActionData[i].stateKey??i,a=this.troubleActionData[i].stateValue??i;t[r]=a}return t},{});this.state.setValues(e),Object.keys(this.troubleActionData).forEach(t=>{if(this.troubleContainer.troubles.getIndexByKey("byType",t).length===0){const o=this.troubleActionData[t].stateKey??t;this.state[o]=void 0}})}};vs(k,"Registration");Ve([s.kosDependency({modelType:s.TroubleContainer.type})],k.prototype,"troubleContainer",2);Ve([s.kosModelEffect({dependencies:e=>[e.troubleContainer.troubles.data]})],k.prototype,"handleTroubleActions",1);k=Ve([s.kosModel({modelTypeId:fs,singleton:!0}),s.kosLoggerAware()],k);const ms=k.Registration,{URL:to}=s.resolveServiceUrl("START_SERVICE"),{getOne:bs}=s.ServiceFactory.build({basePath:`${to}/api/start`}),_s=s.KosLog.createLogger({name:"start-service",group:"Services"}),oo=async()=>(_s.debug("navigating to NCUI"),await bs({urlOverride:`${to}/api/app/kosdev.ddk/ncui/open`})),Ts=Object.freeze(Object.defineProperty({__proto__:null,navigateToNCui:oo},Symbol.toStringTag,{value:"Module"}));var Ms=Object.defineProperty,Ss=Object.getOwnPropertyDescriptor,ro=(e,t,o,i)=>{for(var r=i>1?void 0:i?Ss(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(r=(i?l(t,o,r):l(r))||r);return i&&r&&Ms(t,o,r),r};const so="start-model";let pe=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"troubles");this.id=e,this.logger=o.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 oo()}async init(){this.logger.debug(`initializing start ${this.id}`)}async load(){this.logger.debug(`loading start ${this.id}`)}};ro([s.kosDependency({modelType:s.TroubleContainer.type})],pe.prototype,"troubles",2);pe=ro([s.kosModel(so)],pe);const ks=new s.SingletonKosModelRegistrationFactory({class:pe,type:so});exports.AgitationControl=Do;exports.Animation=ct;exports.AnimationServices=xo;exports.Application=ye;exports.Auth=ge;exports.AuthServices=co;exports.CarbWater=pt;exports.CopyLogs=Qo;exports.CopyLogsServices=zo;exports.DDKModels=gs;exports.DashboardOperations=fe;exports.DashboardOperationsServices=Xo;exports.Dispenser=St;exports.DispenserInfo=Pt;exports.DispenserInfoServices=gr;exports.DispenserServices=nr;exports.Door=rt;exports.EXTENSION_POINT_DASHBOARD_KEY_FACTORY=T;exports.Enrollment=$t;exports.EnrollmentServices=_r;exports.IngredientSummary=Lt;exports.Lockout=Ir;exports.LockoutServices=wr;exports.MACRO_KEYS=kr;exports.MacroAssignment=Ft;exports.NetworkTest=je;exports.NetworkTestContainer=Nt;exports.NetworkTestServices=Hr;exports.NutritiveSweetener=Wt;exports.PlainWater=Vt;exports.Reboot=Yt;exports.RebootServices=Zr;exports.Settings=Gt;exports.SettingsServices=as;exports.SetupStep=Fe;exports.SetupStepContainer=Ke;exports.SetupStepServices=mo;exports.Start=ks;exports.StartServices=Ts;exports.TROUBLE_TYPE_PRIME=Xe;exports.TROUBLE_TYPE_PURGE=ke;exports.TroubleActionManager=ms;exports.Utilities=He;exports.UtilitiesContainer=Zt;exports.UtilitiesServices=cs;exports.calculateTimeDifference=wt;exports.executeDashboardKeyFactory=Ct;exports.isMacroGroup=Mr;exports.isMicroGroup=Tr;exports.macroHolderMap=Sr;exports.registerDashboardKeyFactory=Ot;exports.toSeconds=$r;exports.toTimeComponents=Pr;exports.troubleVisibilityFilter=Ue;
1
+ "use strict";var io=Object.defineProperty;var no=(e,t,o)=>t in e?io(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var n=(e,t,o)=>(no(e,typeof t!="symbol"?t+"":t,o),o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@kosdev-code/kos-ui-sdk"),m=require("@kosdev-code/kos-freestyle-sdk"),P=require("@kosdev-code/kos-dispense-sdk"),ke="PurgeTrouble",Xe="PrimeTrouble",{URL:Ae}=r.resolveServiceUrl("AUTH_SERVICE"),{getOne:ao,postModel:lo}=r.ServiceFactory.build({basePath:`${Ae}/api/auth`}),Je=r.KosLog.createLogger({name:"auth-service",group:"Services"}),Ze=async()=>(Je.debug("sending GET for auth"),await ao({urlOverride:`${Ae}/api/app/kosdev.ddk/auth/role`})),et=async e=>(Je.debug("sending POST for auth"),await lo({urlOverride:`${Ae}/api/app/kosdev.ddk/auth/pincode/${e}`,model:{}})),co=Object.freeze(Object.defineProperty({__proto__:null,getCurrentRole:Ze,sendPinCode:et},Symbol.toStringTag,{value:"Module"}));var uo=Object.defineProperty,po=Object.getOwnPropertyDescriptor,tt=(e,t,o,i)=>{for(var s=i>1?void 0:i?po(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&uo(t,o,s),s};const w="auth-model",ze=e=>e.toLowerCase();let ne=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"currentRole");this.id=e,this.logger=o.logger,this.currentRole="crew"}async authorize(e){if(!e)return!1;const t=await et(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 Ze();(e==null?void 0:e.status)===200&&(this.logger.debug(`response ${e.data}`),r.kosAction(()=>{this.currentRole=ze(e.data)}))}handleRoleChange(e){this.currentRole=ze(e)}forceRole(e){this.currentRole=e}};tt([r.kosTopicHandler({topic:"/app/kosdev.ddk/auth/role",websocket:!0})],ne.prototype,"handleRoleChange",1);ne=tt([r.kosModel(w)],ne);const ge={registration:{[w]:{class:ne,singleton:!1}},type:w,predicate:r.isKosModel(w),factory:r.Kos.Factory.create(w)};var go=Object.defineProperty,ho=Object.getOwnPropertyDescriptor,Ie=(e,t,o,i)=>{for(var s=i>1?void 0:i?ho(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&go(t,o,s),s};const ot="door-model",yo=r.createPropKey("doorPath");let Q=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"doorPath");n(this,"open");n(this,"ignoreDoor");this.id=e,this.logger=o.logger,this.doorPath=t.doorPath}get currentState(){return this.open.value===void 0?"UNKNOWN":this.open.value?"OPEN":"CLOSED"}get isOpen(){const e=this.open.value===void 0?!0:this.open.value;return this.ignoreDoor.value?(this.logger.debug("Door state is being ignored (treating as closed) due to ignoreDoor config property being true."),!1):e}};Ie([r.kosStateProp({path:yo,attribute:"state"})],Q.prototype,"open",2);Ie([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ignoreDoorStateOnExit"})],Q.prototype,"ignoreDoor",2);Q=Ie([r.kosModel(ot)],Q);const rt=new r.KosModelRegistrationFactory({class:Q,type:ot}),{URL:Re}=r.resolveServiceUrl("SETUP-STEP_SERVICE"),{getAll:vo,postModel:fo}=r.ServiceFactory.build({basePath:`${Re}/api/setup-step`}),st=r.KosLog.createLogger({name:"setup-step-service",group:"Services"}),it=async()=>(st.debug("sending GET for setup-step"),await vo({urlOverride:`${Re}/api/app/kosdev.ddk/setup/steps`})),nt=async e=>(st.debug("sending POST for setup-step"),await fo({urlOverride:`${Re}/api/app/kosdev.ddk/setup/complete/${e}`,model:{}})),mo=Object.freeze(Object.defineProperty({__proto__:null,getSetupSteps:it,markStepComplete:nt},Symbol.toStringTag,{value:"Module"}));var bo=Object.getOwnPropertyDescriptor,_o=(e,t,o,i)=>{for(var s=i>1?void 0:i?bo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=l(s)||s);return s};const L="setup-step-model";let Pe=class{constructor(e,t,o){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=o.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 nt(this.name);(e==null?void 0:e.status)===200&&r.kosAction(()=>{this.complete=!0})}async init(){this.logger.debug(`initializing setup-step ${this.id}`)}async load(){this.logger.debug(`loading setup-step ${this.id}`)}};Pe=_o([r.kosModel(L)],Pe);const Fe={registration:{[L]:{class:Pe,singleton:!1}},type:L,predicate:r.isKosModel(L),factory:r.Kos.Factory.create(L)};var To=Object.defineProperty,Mo=Object.getOwnPropertyDescriptor,he=(e,t,o,i)=>{for(var s=i>1?void 0:i?Mo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&To(t,o,s),s};const D="setup-step-container-model";function Be(e){return t=>{const o=Fe.factory(t.id)(t);o.updateModel(t),e.addModel(o)}}function Ye(e){return t=>{e.removeModel(t)}}let b=class{constructor(e,t,o){n(this,"id");n(this,"_currentStep");n(this,"logger");n(this,"models");n(this,"authModel");this.id=e,this.logger=o.logger,this._currentStep=void 0,this.models=new r.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(o=>o.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 it();if(e!=null&&e.data){const t=e.data.map((o,i)=>({...o,idx:i,id:`setup-${o.name}`}));r.resolveContainerDeltas({container:this.models,onAddItem:Be(this),onRemoveItem:Ye(this)})(t)}this.nextStep()}handleStepChanges(e){const t=e.map((o,i)=>({...o,idx:i,id:`setup-${o.name}`}));r.resolveContainerDeltas({container:this.models,onAddItem:Be(this),onRemoveItem:Ye(this)})(t)}};he([r.kosChild],b.prototype,"models",2);he([r.kosDependency({modelType:ge.type})],b.prototype,"authModel",2);he([r.kosTopicHandler({topic:"/app/kosdev.ddk/setup/steps",websocket:!0})],b.prototype,"handleStepChanges",1);b=he([r.kosModel(D)],b);const Ke={registration:{[D]:{class:b,singleton:!0},...Fe.registration},type:D,predicate:r.isKosModel(D),factory:r.Kos.Singleton.create(D)},{URL:v}=r.resolveServiceUrl("AUTH_SERVICE"),{getOne:at,getAll:se}=r.ServiceFactory.build({basePath:`${v}/api/app/kosdev.ddk/ncui/`}),X=r.KosLog.createLogger({name:"auth-service",group:"Services"}),So=async()=>{X.debug("sending GET for cuis");const e=await se({urlOverride:`${v}/api/app/kosdev.ddk/cui`});if((e==null?void 0:e.status)!==200)throw new Error("Failed to retrieve cuis");return e.data},ko=async()=>{X.debug("sending GET for navigation");try{const e=await se({urlOverride:`${v}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.navigations`});if((e==null?void 0:e.status)!==200){X.info("no extensions found, using base data");const t=await se({urlOverride:`${v}/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 se({urlOverride:`${v}/api/kos/descriptor/system:app/kondra.ncui.navigations`});return(t==null?void 0:t.data)??[]}},Po=async()=>(X.debug("navigating to CUI"),await at({urlOverride:`${v}/api/app/kosdev.ddk/cui/open`})),$o=async()=>(X.debug("navigating to NCUI"),await at({urlOverride:`${v}/api/app/kosdev.ddk/ncui/open`}));var Oo=Object.defineProperty,Co=Object.getOwnPropertyDescriptor,y=(e,t,o,i)=>{for(var s=i>1?void 0:i?Co(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Oo(t,o,s),s};const A="application-model",lt=(e,t="")=>e.reduce((o,i)=>{const s=t?`${t}.${i.name}`:i.name;if(o[s]={...i,root:!t},i.children){const a=lt(i.children,s);Object.keys(a).forEach(l=>{o[l]=a[l]})}return o},{});let u=class{constructor(e,t,o){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=o.logger,this.door=rt.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 lt(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 $o()}async exit(){this.logger.info("navigating to CUI"),await Po()}async load(){var o,i;this.logger.debug(`loading application ${this.id}`);const e=await ko();this._navigationItems=e;const t=await So();this._cuis=t,(o=this.setupStepContainer)!=null&&o.hasIncompletePreSteps&&((i=this.authModel)==null||i.forceRole("technician")),this.languages=[{name:"English",locale:"en"}]}};y([r.kosDependency({modelType:r.Device.type})],u.prototype,"device",2);y([r.kosDependency({modelType:ge.type})],u.prototype,"authModel",2);y([r.kosDependency({modelType:Ke.type})],u.prototype,"setupStepContainer",2);y([r.kosChild],u.prototype,"door",2);y([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],u.prototype,"ncuiLanguage",2);y([r.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"activeCui"})],u.prototype,"activeCui",2);y([r.kosConfigProperty({path:"app:kosdev.ddk:service:cui",attribute:"fallbackCui"})],u.prototype,"fallbackCui",2);u=y([r.kosModel(A)],u);const ye={registration:{[A]:{class:u,singleton:!0}},type:A,predicate:r.isKosModel(A),factory:r.Kos.Singleton.create(A)},re={none:999,crew:0,technician:1,manager:2},Ue=e=>t=>{if(t.type===m.AGITATION_REQUIRED_TROUBLE)return!1;const o=(t==null?void 0:t.role)||"technician";if(e&&o){const i=re[e.toLowerCase()]??re.crew,s=re[o.toLowerCase()]??re.crew;return i>=s}return!1};var Eo=Object.defineProperty,wo=Object.getOwnPropertyDescriptor,$=(e,t,o,i)=>{for(var s=i>1?void 0:i?wo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Eo(t,o,s),s};const dt="agitation-control-model",$e="resolve",Lo="agitate";let g=class{constructor(e,t,o){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=o.logger,this.troubleContainer=t.companionParent,this.futureHandler=new r.MultipleFutureHandler(this,$e)}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),o=e>0&&t.length===0;return this.isDoorClosed&&o&&this.exiting}onFutureUpdate(e){e.endState===r.FutureEndState.Success?(this.logger.debug(`Resolve deferred troubles future ${e.id} completed successfully`),this.queuedTroubles.forEach(t=>{t.clearDefer()}),r.kosAction(()=>{this._canExit=!0,this._isFailed=!1})):(e.endState===r.FutureEndState.Fail||e.endState===r.FutureEndState.Canceled||e.endState===r.FutureEndState.Aborted)&&(this.logger.error(`Resolve deferred troubles future ${e.id} failed`),this.clearAll(),r.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 r.TroubleServices.bulkResolveTroubles(t,void 0,e)}get hasQueuedTroubles(){return this.queuedTroubles.length>0}get queuedTroubles(){return this.troubleContainer.troubles.getIndexByKey(r.Troubles.INDEX_TROUBLES_BY_DEFERRED,r.Troubles.TROUBLES_DEFERRED)}get visibleTroubles(){const e=this.application.currentRole;return this.troubleContainer.troubles.data.filter(Ue(e)).filter(t=>t.type!==m.AGITATION_REQUIRED_TROUBLE)}get future(){return this.futureHandler.future}get resolveFuture(){return this.futureHandler.getFuture($e)}get agitateFuture(){return this.futureHandler.getFuture(Lo)}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}`)}};$([r.kosDependency({modelType:ye.type})],g.prototype,"application",2);$([r.kosFuture({alias:$e})],g.prototype,"resolveDeferredTroubles",1);$([r.kosTopicHandler({topic:m.CartridgeAgitatorEvents.TOPIC_AGITATION_STARTED})],g.prototype,"handleAgitationStarted",1);$([r.kosTopicHandler({topic:m.CartridgeAgitatorEvents.TOPIC_AGITATION_ENDED})],g.prototype,"handleAgitationEnded",1);$([r.kosModelEffect({dependencies:e=>[e.readyToResolve,e._agitationFutureId]})],g.prototype,"handleReadyToResolve",1);g=$([r.kosModel(dt)],g);const Do=new r.SingletonKosModelRegistrationFactory({class:g,type:dt});var Ao=Object.defineProperty,Io=Object.getOwnPropertyDescriptor,ee=(e,t,o,i)=>{for(var s=i>1?void 0:i?Io(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Ao(t,o,s),s};const I="animation-model";let f=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"disableAll");n(this,"enableDial");n(this,"enableModal");n(this,"enableSideBar");this.id=e,this.logger=o.logger}};ee([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.disableAll"})],f.prototype,"disableAll",2);ee([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableDial"})],f.prototype,"enableDial",2);ee([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableModal"})],f.prototype,"enableModal",2);ee([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.animations.enableSideBar"})],f.prototype,"enableSideBar",2);f=ee([r.kosModel(I)],f);const ct={registration:{[I]:{class:f,singleton:!0}},type:I,predicate:r.isKosModel(I),factory:r.Kos.Singleton.create(I)},{URL:Ro}=r.resolveServiceUrl("ANIMATION_SERVICE"),{getAll:Fo}=r.ServiceFactory.build({basePath:`${Ro}/api/animation`}),Ko=r.KosLog.createLogger({name:"animation-service",group:"Services"}),Uo=async()=>(Ko.debug("sending GET for animation"),await Fo({})),xo=Object.freeze(Object.defineProperty({__proto__:null,getAnimations:Uo},Symbol.toStringTag,{value:"Module"}));var jo=Object.defineProperty,No=Object.getOwnPropertyDescriptor,ut=(e,t,o,i)=>{for(var s=i>1?void 0:i?No(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&jo(t,o,s),s};const R="carb-water-model";let ae=class{constructor(e,t,o){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=o.logger}getPump(){const t=this.assemblyModel.getHoldersByGroup("carb")[0].pumps.data[0];return r.getKosCompanionModel(t,m.FcmPump.type)}async init(){this.logger.debug(`initializing carb-water ${this.id}`)}async load(){this.logger.debug(`loading carb-water ${this.id}`)}};ut([r.kosDependency({modelType:P.Assembly.type})],ae.prototype,"assemblyModel",2);ae=ut([r.kosModel(R)],ae);const pt={registration:{[R]:{class:ae,singleton:!1}},type:R,predicate:r.isKosModel(R),factory:r.Kos.Factory.create(R)},{URL:O}=r.resolveServiceUrl("COPY-LOGS_SERVICE"),{getAll:Wo,getOne:Ho,postModel:gt,deleteModel:Vo}=r.ServiceFactory.build({basePath:`${O}/api/copy-logs`}),le=r.KosLog.createLogger({name:"copy-logs-service",group:"Services"}),ht=async(e,t)=>{const o=await Vo({tracker:t,id:e,urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(o!=null&&o.data))throw new Error("No response from server");return o.data},yt=async(e,t)=>{const o=await gt({model:{},tracker:t,urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/eraseAndCopy/${e}`});if(!(o!=null&&o.data))throw new Error("No response from server");return o.data},vt=async(e,t)=>{const o=await gt({model:{},tracker:t,urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/${e}`});if(!(o!=null&&o.data))throw new Error("No response from server");return o.data},ft=async()=>{le.debug("sending GET for copy-logs");try{const e=await Wo({urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/volumes/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof r.FetchError)return le.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},mt=async()=>{le.debug("sending GET for log file size");try{const e=await Ho({urlOverride:`${O}/api/app/kosdev.ddk/copyLogs/files/size`});return[void 0,e==null?void 0:e.data]}catch(e){if(e instanceof r.FetchError)return le.error(`Error fetching log file size: ${e.payload.error}`),[e.payload.error,void 0]}return["unknownError",void 0]},zo=Object.freeze(Object.defineProperty({__proto__:null,copyLogFromVolume:vt,eraseAndCopyLogsToVolume:yt,eraseVolume:ht,getLogFileSize:mt,getVolumes:ft},Symbol.toStringTag,{value:"Module"}));var bt=Object.defineProperty,Bo=Object.getOwnPropertyDescriptor,Yo=(e,t,o)=>t in e?bt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,C=(e,t,o,i)=>{for(var s=i>1?void 0:i?Bo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&bt(t,o,s),s},Go=(e,t,o)=>(Yo(e,t+"",o),o);const qo="copy-logs-model";let p=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 r.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)===r.FutureEndState.Success&&this.copyProgress.filesSkipped>0}onFutureUpdate(e){this.logger.info(`Future update: ${e.status}`),e.status===r.FutureEndState.Success&&(this.logger.info(`Future success: ${e.status}`),this.diskFull&&r.kosAction(()=>{e.endState=r.FutureEndState.Fail,e.reason="errDiskFull"})),e.status===r.FutureEndState.Fail&&this.logger.error(`Future failed: ${e.status}`),e.note==="copy"?r.kosAction(()=>{this._actionState="copying",this.copyProgress=e.clientData||{bytesCopied:0,bytesToCopy:0,filesCopied:0,filesSkipped:0}}):(this._actionState="erasing",r.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(r.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}`),yt(this._activeVolume.id,e)}async eraseVolume(e){var t;if(!e)throw new Error("No tracker provided");if(r.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}`),ht(this._activeVolume.id,e)}async copyLogs(e){var t;if(!e)throw new Error("No tracker provided");if(r.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}`),vt(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 ft(),[o,i]=await mt();if(o){this.logger.error(`Error fetching log file size: ${o}`);return}if(e){this.logger.error(`Error fetching volumes: ${e}`);return}t&&(t.forEach(s=>{const a=this.storageDeviceContainer.getModel(s.id);if(a){const l={id:s.id,name:a.label,freeBytes:s.info.freeBytes,totalBytes:s.info.totalBytes};this._volumes.addModel(l)}}),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}`)}};Go(p,"Registration");C([r.kosDependency({modelType:r.StorageDeviceContainer.type})],p.prototype,"storageDeviceContainer",2);C([r.kosFuture()],p.prototype,"eraseAndCopyVolume",1);C([r.kosFuture()],p.prototype,"eraseVolume",1);C([r.kosFuture()],p.prototype,"copyLogs",1);C([r.kosModelEffect({dependencies:e=>[e.inserted]})],p.prototype,"handleInsertion",1);p=C([r.kosModel({modelTypeId:qo,singleton:!0}),r.kosFutureAware(),r.kosLoggerAware()],p);const Qo=p.Registration,_t=r.KosLog.createLogger({name:"dashboard-operations-service",group:"Services"}),Tt=async(e,t)=>(_t.debug("resolveAll"),await r.TroubleServices.bulkResolveTroubles(e,void 0,t)),Mt=async(e,t)=>(_t.debug("resolveTrouble"),await r.TroubleServices.resolveTrouble(e,void 0,t)),Xo=Object.freeze(Object.defineProperty({__proto__:null,resolveAll:Tt,resolveTrouble:Mt},Symbol.toStringTag,{value:"Module"}));var Jo=Object.defineProperty,Zo=Object.getOwnPropertyDescriptor,ve=(e,t,o,i)=>{for(var s=i>1?void 0:i?Zo(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Jo(t,o,s),s};const F="dashboard-operations-model";function Ge(e){return!e.deferred}function qe(e){return e.deferred}let _=class{constructor(e,t,o){n(this,"id");n(this,"troubles");n(this,"futureHandler");n(this,"logger");this.id=e,this.futureHandler=new r.FutureHandler(this),this.logger=o.logger}get troublesByType(){return this.troubles.troubles.data.reduce(r.troubleByTypeReducer,{})}get queuedPurgeTroubles(){return this.purgeTroubles.filter(qe)}get queuedPrimeTroubles(){return this.primeTroubles.filter(qe)}get resolvablePrimeTroubles(){return this.primeTroubles.filter(Ge)}get resolvablePurgeTroubles(){return this.purgeTroubles.filter(Ge)}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[Xe]||[]}get future(){return this.futureHandler.getFuture()}async resolveAllTroubles(e,t){if(!t)throw new Error("No tracker provided");const o=e===ke?this.purgeTroubles:this.primeTroubles;o.filter(l=>l.shouldDefer).forEach(l=>{this.logger.info(`Deferring trouble ${l.rawId}`),l.defer()});const s=o.filter(l=>!l.shouldDefer).map(l=>l.rawId);return s.length===0?void 0:await Tt(s,t)}async resolveTrouble(e,t){if(!t)throw new Error("No tracker provided");return await Mt(e,t)}async init(){this.logger.debug(`initializing dashboard-operations ${this.id}`)}async load(){this.logger.debug(`loading dashboard-operations ${this.id}`)}};ve([r.kosDependency({modelType:r.TroubleContainer.type})],_.prototype,"troubles",2);ve([r.kosFuture()],_.prototype,"resolveAllTroubles",1);ve([r.kosFuture()],_.prototype,"resolveTrouble",1);_=ve([r.kosModel(F)],_);const fe={registration:{[F]:{class:_,singleton:!0}},type:F,predicate:r.isKosModel(F),factory:r.Kos.Singleton.create(F)};var er=Object.getOwnPropertyDescriptor,tr=(e,t,o,i)=>{for(var s=i>1?void 0:i?er(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=l(s)||s);return s};const K="dispenser-model";let Oe=class{constructor(e,t,o){n(this,"id");n(this,"logger");this.id=e,this.logger=o.logger}updateModel(){}async init(){this.logger.debug(`initializing dispenser ${this.id}`)}async load(){this.logger.debug(`loading dispenser ${this.id}`)}};Oe=tr([r.kosModel(K)],Oe);const St={registration:{[K]:{class:Oe,singleton:!0}},type:K,predicate:r.isKosModel(K),factory:r.Kos.Singleton.create(K)},{URL:or}=r.resolveServiceUrl("DISPENSER_SERVICE"),{getAll:rr}=r.ServiceFactory.build({basePath:`${or}/api/dispenser`}),sr=r.KosLog.createLogger({name:"dispenser-service",group:"Services"}),ir=async()=>(sr.debug("sending GET for dispenser"),await rr({})),nr=Object.freeze(Object.defineProperty({__proto__:null,getDispensers:ir},Symbol.toStringTag,{value:"Module"}));var ar=Object.defineProperty,lr=Object.getOwnPropertyDescriptor,kt=(e,t,o,i)=>{for(var s=i>1?void 0:i?lr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&ar(t,o,s),s};const U="dispenser-info-model";let de=class{constructor(e,t,o){n(this,"logger");n(this,"id");n(this,"name");this.id=e,this.logger=o.logger}async init(){this.logger.debug(`initializing dispenser-info ${this.id}`)}async load(){this.logger.debug(`loading dispenser-info ${this.id}`)}};kt([r.kosConfigProperty({path:"kos:device",attribute:"name"})],de.prototype,"name",2);de=kt([r.kosModel(U)],de);const Pt={registration:{[U]:{class:de,singleton:!1}},type:U,predicate:r.isKosModel(U),factory:r.Kos.Factory.create(U)},{URL:dr}=r.resolveServiceUrl("DISPENSER-INFO_SERVICE"),{getAll:cr}=r.ServiceFactory.build({basePath:`${dr}/api/dispenser-info`}),ur=r.KosLog.createLogger({name:"dispenser-info-service",group:"Services"}),pr=async()=>(ur.debug("sending GET for dispenser-info"),await cr({})),gr=Object.freeze(Object.defineProperty({__proto__:null,getDispenserInfos:pr},Symbol.toStringTag,{value:"Module"}));var hr=Object.getOwnPropertyDescriptor,yr=(e,t,o,i)=>{for(var s=i>1?void 0:i?hr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=l(s)||s);return s};const x="enrollment-model";let Ce=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"enrolled");this.id=e,this.logger=o.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}`)}};Ce=yr([r.kosModel(x)],Ce);const $t={registration:{[x]:{class:Ce,singleton:!0}},type:x,predicate:r.isKosModel(x),factory:r.Kos.Singleton.create(x)},{URL:vr}=r.resolveServiceUrl("ENROLLMENT_SERVICE"),{getAll:fr}=r.ServiceFactory.build({basePath:`${vr}/api/enrollment`}),mr=r.KosLog.createLogger({name:"enrollment-service",group:"Services"}),br=async()=>(mr.debug("sending GET for enrollment"),await fr({})),_r=Object.freeze(Object.defineProperty({__proto__:null,getEnrollments:br},Symbol.toStringTag,{value:"Module"})),Tr=e=>e.toLowerCase().includes("micros"),Mr=e=>!e.toLowerCase().includes("micros"),Sr=e=>t=>{const o=e==null?void 0:e.getHoldersByGroup(t);return o?o.map(i=>({id:i.id,name:i.ingredientName,path:i.path})):null},kr=["water","carb","ns","nss"],T="dashboardKeyFactory",Te=[];r.registerExtensionPoint(T,{register:(e,t)=>{Te.includes(t)||Te.push(t)},execute:(e,t)=>{const o=Te.sort((i,s)=>i.rank-s.rank);for(const i of o){const s=i.factory(t);if(s)return s}}});const Ot=e=>{r.ExtensionManager[T].register(T,e)},Ct=e=>r.ExtensionManager[T].execute(T,e);r.ExtensionManager.registerDashboardKeyFactory=Ot;r.ExtensionManager.executeDashboardKeyFactory=Ct;const Ee=3600,Et=60,Pr=e=>{const t=Math.floor(e/Ee),o=Math.floor(e%Ee/Et);return{hours:t,minutes:o}},$r=(e,t)=>e*Ee+t*Et,wt=e=>{const o=new Date().valueOf()-e.valueOf(),i=Math.floor(o/(1e3*60)),s=Math.floor(i/60),a=Math.floor(s/24),l=i%60,te=s%24;let oe="";return a>0&&(oe+=`${a} day${a>1?"s":""} `),te>0&&(oe+=`${te} hour${te>1?"s":""} `),(l>0||a===0&&te===0)&&(oe+=`${l} minute${l>1?"s":""} `),oe};var Or=Object.defineProperty,Cr=Object.getOwnPropertyDescriptor,me=(e,t,o,i)=>{for(var s=i>1?void 0:i?Cr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Or(t,o,s),s};const j="ingredient-summary-model";let M=class{constructor(e,t,o){n(this,"id");n(this,"assemblyModel");n(this,"dashboardOperationModel");n(this,"appModel");n(this,"logger");this.id=e,this.logger=o.logger,this.dashboardOperationModel=fe.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=Ue(e);return this.assemblyModel.allHolders.filter(o=>{const i=r.getKosCompanionModel(o,m.FreestyleHolder.type);if(i!=null&&i.isRemote)return!1;const s=o.troubles.filter(t);return s.length>0&&s.find(a=>a.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}`)}};me([r.kosDependency({modelType:P.Assembly.type})],M.prototype,"assemblyModel",2);me([r.kosDependency({modelType:fe.type})],M.prototype,"dashboardOperationModel",2);me([r.kosDependency({modelType:ye.type})],M.prototype,"appModel",2);M=me([r.kosModel(j)],M);const Lt={registration:{[j]:{class:M,singleton:!1}},type:j,predicate:r.isKosModel(j),factory:r.Kos.Factory.create(j)},{URL:xe}=r.resolveServiceUrl("LOCKOUT_SERVICE"),{postModel:Dt}=r.ServiceFactory.build({basePath:`${xe}/api/app/kosdev.ddk/lockout`}),At=r.KosLog.createLogger({name:"lockout-service",group:"Services"}),Er=async()=>(At.info("lock"),await Dt({model:{},urlOverride:`${xe}/api/app/kosdev.ddk/lockout/lockNow`})),It=async e=>{At.info("unlock");const t=await Dt({model:{},urlOverride:`${xe}/api/app/kosdev.ddk/lockout/unlock/${e}`});return t==null?void 0:t.data},wr=Object.freeze(Object.defineProperty({__proto__:null,lock:Er,unlock:It},Symbol.toStringTag,{value:"Module"}));var Lr=Object.defineProperty,Dr=Object.getOwnPropertyDescriptor,E=(e,t,o,i)=>{for(var s=i>1?void 0:i?Dr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Lr(t,o,s),s};const Rt="lockout-model",Ar=[{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 h=class{constructor(e,t,o){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=o.logger,this.saveMap=new Map}get enabled(){const e=this.getProp("oneTimeLockConfig.lockTime"),t=e!==void 0&&e!=="",o=this.getProp("lockScheduleEnabled");return t||o}get schedule(){return Ar}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 It(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}`)}};E([r.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"pin"})],h.prototype,"pin",2);E([r.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockSkipped"})],h.prototype,"nextLockSkipped",2);E([r.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextLockTime"})],h.prototype,"nextLockTime",2);E([r.kosConfigProperty({path:"app:kosdev.ddk:service:cuiLockout",attribute:"nextUnLockTime"})],h.prototype,"nextUnLockTime",2);E([r.kosConfigBean({path:"app:kosdev.ddk:service:cuiLockout"})],h.prototype,"cuiLockout",2);h=E([r.kosModel(Rt)],h);const Ir=new r.SingletonKosModelRegistrationFactory({class:h,type:Rt}),Rr=async(e,t)=>await r.TroubleServices.bulkResolveTroubles(e,void 0,t);var Fr=Object.defineProperty,Kr=Object.getOwnPropertyDescriptor,be=(e,t,o,i)=>{for(var s=i>1?void 0:i?Kr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Fr(t,o,s),s};const N="macro-assignment-model",Qe="PurgeTrouble",Ur="PrimeTrouble";let S=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"futureHandler");n(this,"holders");n(this,"ingredients");this.id=e,this.futureHandler=new r.FutureHandler,this.logger=o.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,o)=>{const i=o.troublesByType[Qe]||[];return t=[...t,...i],t},[])}get holderPrimeTroubles(){return this.macroHolders.reduce((t,o)=>{const i=o.troublesByType[Ur]||[];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===Qe?this.holderPurgeTroubles:this.holderPrimeTroubles).map(a=>a.rawId);return await Rr(i,t)}};be([r.kosDependency({modelType:P.HolderContainer.type})],S.prototype,"holders",2);be([r.kosDependency({modelType:P.IngredientContainer.type})],S.prototype,"ingredients",2);be([r.kosFuture()],S.prototype,"resolveAll",1);S=be([r.kosModel(N)],S);const Ft={registration:{[N]:{class:S,singleton:!0}},type:N,predicate:r.isKosModel(N),factory:r.Kos.Singleton.create(N)};var xr=Object.getOwnPropertyDescriptor,jr=(e,t,o,i)=>{for(var s=i>1?void 0:i?xr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=l(s)||s);return s};const W="network-test-model";let we=class{constructor(e,t,o){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=o.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}`)}};we=jr([r.kosModel(W)],we);const je={registration:{[W]:{class:we,singleton:!1}},type:W,predicate:r.isKosModel(W),factory:r.Kos.Factory.create(W)},{URL:_e}=r.resolveServiceUrl("NETWORK-TEST_SERVICE"),{getAll:Nr,getOne:Kt}=r.ServiceFactory.build({basePath:`${_e}/api/app/ncui/network/tests`}),Wr=r.KosLog.createLogger({name:"network-test-service",group:"Services"}),Ut=async()=>{Wr.debug("sending GET for network-test");const e=await Nr({urlOverride:`${_e}/api/app/kosdev.ddk/network/tests`});return e==null?void 0:e.data},xt=async()=>{const e=await Kt({urlOverride:`${_e}/api/app/kosdev.ddk/network/reports`});return e==null?void 0:e.data},jt=async(e,t)=>await Kt({urlOverride:`${_e}/api/app/kosdev.ddk/network/tests/run/group/${e}`,tracker:t}),Hr=Object.freeze(Object.defineProperty({__proto__:null,getNetworkTests:Ut,getTestsReports:xt,performGroupTest:jt},Symbol.toStringTag,{value:"Module"}));var Vr=Object.defineProperty,zr=Object.getOwnPropertyDescriptor,Ne=(e,t,o,i)=>{for(var s=i>1?void 0:i?zr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Vr(t,o,s),s};const H="network-test-container-model";let J=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"lastTested");n(this,"futureHandler");n(this,"models");this.id=e,this.logger=o.logger,this.futureHandler=new r.FutureHandler(this),this.models=new r.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)),o=Math.max(...t.map(i=>i?i.getTime():0));return o?wt(new Date(o)):""}async load(){this.logger.debug(`loading network-test-container container ${this.id}`);const e=await Ut(),t=await xt();e&&e.forEach(o=>{const i=je.factory(o.id)(o);this.addModel(i)}),e&&t&&e.forEach(o=>{const i=t==null?void 0:t[o.group],s=i==null?void 0:i[o.id],a=this.getModel(o.id);if(a&&s){const l={group:s.group,name:s.name,passed:s.passed,failureTime:s.failureTime?new Date(s.failureTime):void 0,inProgress:s.inProgress,timestamp:new Date(s.timestamp),results:s.results};a.updateModel(l)}})}async performTest(e,t){if(!t)throw new Error("No tracker provided");const o=await jt(e,t);return o==null?void 0:o.data}onFutureUpdate(e){const{clientData:t}=e;t&&t.forEach(o=>{const i=this.getModel(o.id);if(r.kosAction(()=>{this.lastTested=this.lastTested>new Date(o.timestamp)?this.lastTested:new Date(o.timestamp)}),i){const s={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};r.kosAction(()=>{i.updateModel(s)})}})}};Ne([r.kosChild],J.prototype,"models",2);Ne([r.kosFuture()],J.prototype,"performTest",1);J=Ne([r.kosModel(H)],J);const Nt={registration:{[H]:{class:J,singleton:!0},...je.registration},type:H,predicate:r.isKosModel(H),factory:r.Kos.Singleton.create(H)};var Br=Object.defineProperty,Yr=Object.getOwnPropertyDescriptor,We=(e,t,o,i)=>{for(var s=i>1?void 0:i?Yr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Br(t,o,s),s};const V="nutritive-sweetener-model",Gr=r.createPropKey("statePath");let Z=class{constructor(e,t){n(this,"id");n(this,"assemblyModel");n(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}};We([r.kosDependency({modelType:P.Assembly.type})],Z.prototype,"assemblyModel",2);We([r.kosStateBean({path:Gr})],Z.prototype,"pumpState",2);Z=We([r.kosModel(V),r.kosLoggerAware()],Z);const Wt={registration:{[V]:{class:Z,singleton:!1}},type:V,predicate:r.isKosModel(V),factory:r.Kos.Factory.create(V)};var qr=Object.defineProperty,Qr=Object.getOwnPropertyDescriptor,Ht=(e,t,o,i)=>{for(var s=i>1?void 0:i?Qr(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&qr(t,o,s),s};const z="plain-water-model";let ce=class{constructor(e,t,o){n(this,"id");n(this,"assemblyModel");n(this,"logger");this.id=e,this.logger=o.logger}getHolder(){return this.assemblyModel.getHoldersByGroup("water")[0]}getPump(){var i,s;const e=this.getHolder(),t=(s=(i=e==null?void 0:e.pumps)==null?void 0:i.data)==null?void 0:s[0];return r.getKosCompanionModel(t,m.FcmPump.type)}async init(){this.logger.debug(`initializing plain-water ${this.id}`)}async load(){this.logger.debug(`loading plain-water ${this.id}`)}};Ht([r.kosDependency({modelType:P.Assembly.type})],ce.prototype,"assemblyModel",2);ce=Ht([r.kosModel(z)],ce);const Vt={registration:{[z]:{class:ce,singleton:!1}},type:z,predicate:r.isKosModel(z),factory:r.Kos.Factory.create(z)},{URL:zt}=r.resolveServiceUrl("REBOOT_SERVICE"),{postModel:Xr}=r.ServiceFactory.build({basePath:`${zt}/api/reboot`}),Jr=r.KosLog.createLogger({name:"reboot-service",group:"Services"}),Bt=async()=>(Jr.debug("sending POST call for Reboot Dispenser"),await Xr({urlOverride:`${zt}/api/app/kosdev.ddk/ncui/reboot`,model:{}})),Zr=Object.freeze(Object.defineProperty({__proto__:null,rebootDispenser:Bt},Symbol.toStringTag,{value:"Module"}));var es=Object.getOwnPropertyDescriptor,ts=(e,t,o,i)=>{for(var s=i>1?void 0:i?es(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=l(s)||s);return s};const B="reboot-model";let Le=class{constructor(e,t,o){n(this,"id");n(this,"logger");this.id=e,this.logger=o.logger}async completeReboot(){await Bt()}updateModel(){}async init(){this.logger.debug(`initializing reboot ${this.id}`)}async load(){this.logger.debug(`loading reboot ${this.id}`)}};Le=ts([r.kosModel(B)],Le);const Yt={registration:{[B]:{class:Le,singleton:!1}},type:B,predicate:r.isKosModel(B),factory:r.Kos.Factory.create(B)};var os=Object.defineProperty,rs=Object.getOwnPropertyDescriptor,c=(e,t,o,i)=>{for(var s=i>1?void 0:i?rs(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&os(t,o,s),s};const Y="settings-model";let d=class{constructor(e,t,o){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");n(this,"horizontalMode");this.id=e,this.logger=o.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")}};c([r.kosConfigProperty({path:"system:app",attribute:"resolveDelaysMs"})],d.prototype,"resolveDelaysMs",2);c([r.kosConfigProperty({path:"system:app",attribute:"dateFormat"})],d.prototype,"dateFormat",2);c([r.kosConfigProperty({path:"system:app",attribute:"timeFormat"})],d.prototype,"timeFormat",2);c([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hidePlainWaterBev"})],d.prototype,"hidePlainWaterBev",2);c([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.hideCarbWaterBev"})],d.prototype,"hideCarbWaterBev",2);c([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.ncuiLanguage"})],d.prototype,"ncuiLanguage",2);c([r.kosConfigProperty({path:"kos:device",attribute:"name"})],d.prototype,"name",2);c([r.kosConfigProperty({path:"kos:service:OTA",attribute:"activateAndRebootTime"})],d.prototype,"activateAndRebootTime",2);c([r.kosConfigProperty({path:"app:kosdev.ddk:app",attribute:"ncui.uiConfig.display.horizontalMode"})],d.prototype,"horizontalMode",2);c([r.kosModelEffect({dependencies:e=>[e.horizontalMode.value]})],d.prototype,"handleUpdateDisplayMode",1);d=c([r.kosModel(Y)],d);const Gt={registration:{[Y]:{class:d,singleton:!0}},type:Y,predicate:r.isKosModel(Y),factory:r.Kos.Singleton.create(Y)},{URL:qt}=r.resolveServiceUrl("SETTINGS_SERVICE"),{getAll:Qt}=r.ServiceFactory.build({basePath:`${qt}/api/settings`}),ss=r.KosLog.createLogger({name:"settings-service",group:"Services"}),is=async()=>(ss.debug("sending GET for settings"),await Qt({})),ns=async()=>await Qt({urlOverride:`${qt}api/app/kosdev.ddk/ncui/languages`}),as=Object.freeze(Object.defineProperty({__proto__:null,getNcuiLanguage:ns,getSettings:is},Symbol.toStringTag,{value:"Module"}));var ls=Object.getOwnPropertyDescriptor,ds=(e,t,o,i)=>{for(var s=i>1?void 0:i?ls(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=l(s)||s);return s};const G="utilities-model";let De=class{constructor(e,t,o){n(this,"id");n(this,"name");n(this,"options");n(this,"roles");n(this,"columnId");n(this,"logger");this.id=e,this.logger=o.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}`)}};De=ds([r.kosModel(G)],De);const He={registration:{[G]:{class:De,singleton:!1}},type:G,predicate:r.isKosModel(G),factory:r.Kos.Factory.create(G)},{URL:ie}=r.resolveServiceUrl("UTILITIES_SERVICE"),{getAll:Me}=r.ServiceFactory.build({basePath:`${ie}/api/utilities`}),Se=r.KosLog.createLogger({name:"utilities-service",group:"Services"}),Xt=async()=>{Se.debug("sending GET for utilities");try{const e=await Me({urlOverride:`${ie}/api/kos/descriptor/app:kosdev.ddk:ncuiDescriptor/kondra.ncui.utilities`});if((e==null?void 0:e.status)!==200){Se.info("no extensions found, using base data");const t=await Me({urlOverride:`${ie}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}return(e==null?void 0:e.data)??[]}catch(e){Se.info(`error fetching utilities: ${e}. Using base data`);const t=await Me({urlOverride:`${ie}/api/kos/descriptor/system:app/kondra.ncui.utilities`});return(t==null?void 0:t.data)??[]}},cs=Object.freeze(Object.defineProperty({__proto__:null,getUtilities:Xt},Symbol.toStringTag,{value:"Module"}));var us=Object.defineProperty,ps=Object.getOwnPropertyDescriptor,Jt=(e,t,o,i)=>{for(var s=i>1?void 0:i?ps(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&us(t,o,s),s};const q="utilities-container-model";let ue=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"_models");this.id=e,this.logger=o.logger,this._models=new r.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 Xt();e==null||e.forEach((t,o)=>{t.forEach(i=>{const s={...i,columnId:String(o)},a=He.factory(i.name)(s);this.addModel(a)})})}};Jt([r.kosChild],ue.prototype,"_models",2);ue=Jt([r.kosModel(q)],ue);const Zt={registration:{[q]:{class:ue,singleton:!0},...He.registration},type:q,predicate:r.isKosModel(q),factory:r.Kos.Singleton.create(q)},gs={...ct.registration,...ye.registration,...ge.registration,...pt.registration,...fe.registration,...St.registration,...Pt.registration,...$t.registration,...Lt.registration,...Ft.registration,...Nt.registration,...Wt.registration,...Vt.registration,...Yt.registration,...Gt.registration,...Ke.registration,...Zt.registration};var eo=Object.defineProperty,hs=Object.getOwnPropertyDescriptor,ys=(e,t,o)=>t in e?eo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,Ve=(e,t,o,i)=>{for(var s=i>1?void 0:i?hs(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&eo(t,o,s),s},vs=(e,t,o)=>(ys(e,t+"",o),o);const fs="trouble-action-model";let k=class{constructor(e,t){n(this,"id");n(this,"troubleContainer");n(this,"state");n(this,"troubleActionData");this.id=e,this.state=r.ObservableData(),this.troubleActionData=t.definitions.reduce((o,i)=>(o[i.troubleType]=i,o),{})}get activeTrouble(){const e=Object.keys(this.troubleActionData);if(e.length>0){const t=e[0],o=this.troubleContainer.troubles.getIndexByKey("byType",t);return o.length>0?o[0]:void 0}}get activeTroubleType(){var e;return(e=this.activeTrouble)==null?void 0:e.type}handleTroubleActions(){const e=this.troubleContainer.troubles.data.reduce((t,o)=>{const i=o.type;if(this.troubleActionData[i]){const s=this.troubleActionData[i].stateKey??i,a=this.troubleActionData[i].stateValue??i;t[s]=a}return t},{});this.state.setValues(e),Object.keys(this.troubleActionData).forEach(t=>{if(this.troubleContainer.troubles.getIndexByKey("byType",t).length===0){const o=this.troubleActionData[t].stateKey??t;this.state[o]=void 0}})}};vs(k,"Registration");Ve([r.kosDependency({modelType:r.TroubleContainer.type})],k.prototype,"troubleContainer",2);Ve([r.kosModelEffect({dependencies:e=>[e.troubleContainer.troubles.data]})],k.prototype,"handleTroubleActions",1);k=Ve([r.kosModel({modelTypeId:fs,singleton:!0}),r.kosLoggerAware()],k);const ms=k.Registration,{URL:to}=r.resolveServiceUrl("START_SERVICE"),{getOne:bs}=r.ServiceFactory.build({basePath:`${to}/api/start`}),_s=r.KosLog.createLogger({name:"start-service",group:"Services"}),oo=async()=>(_s.debug("navigating to NCUI"),await bs({urlOverride:`${to}/api/app/kosdev.ddk/ncui/open`})),Ts=Object.freeze(Object.defineProperty({__proto__:null,navigateToNCui:oo},Symbol.toStringTag,{value:"Module"}));var Ms=Object.defineProperty,Ss=Object.getOwnPropertyDescriptor,ro=(e,t,o,i)=>{for(var s=i>1?void 0:i?Ss(t,o):t,a=e.length-1,l;a>=0;a--)(l=e[a])&&(s=(i?l(t,o,s):l(s))||s);return i&&s&&Ms(t,o,s),s};const so="start-model";let pe=class{constructor(e,t,o){n(this,"id");n(this,"logger");n(this,"troubles");this.id=e,this.logger=o.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 oo()}async init(){this.logger.debug(`initializing start ${this.id}`)}async load(){this.logger.debug(`loading start ${this.id}`)}};ro([r.kosDependency({modelType:r.TroubleContainer.type})],pe.prototype,"troubles",2);pe=ro([r.kosModel(so)],pe);const ks=new r.SingletonKosModelRegistrationFactory({class:pe,type:so});exports.AgitationControl=Do;exports.Animation=ct;exports.AnimationServices=xo;exports.Application=ye;exports.Auth=ge;exports.AuthServices=co;exports.CarbWater=pt;exports.CopyLogs=Qo;exports.CopyLogsServices=zo;exports.DDKModels=gs;exports.DashboardOperations=fe;exports.DashboardOperationsServices=Xo;exports.Dispenser=St;exports.DispenserInfo=Pt;exports.DispenserInfoServices=gr;exports.DispenserServices=nr;exports.Door=rt;exports.EXTENSION_POINT_DASHBOARD_KEY_FACTORY=T;exports.Enrollment=$t;exports.EnrollmentServices=_r;exports.IngredientSummary=Lt;exports.Lockout=Ir;exports.LockoutServices=wr;exports.MACRO_KEYS=kr;exports.MacroAssignment=Ft;exports.NetworkTest=je;exports.NetworkTestContainer=Nt;exports.NetworkTestServices=Hr;exports.NutritiveSweetener=Wt;exports.PlainWater=Vt;exports.Reboot=Yt;exports.RebootServices=Zr;exports.Settings=Gt;exports.SettingsServices=as;exports.SetupStep=Fe;exports.SetupStepContainer=Ke;exports.SetupStepServices=mo;exports.Start=ks;exports.StartServices=Ts;exports.TROUBLE_TYPE_PRIME=Xe;exports.TROUBLE_TYPE_PURGE=ke;exports.TroubleActionManager=ms;exports.Utilities=He;exports.UtilitiesContainer=Zt;exports.UtilitiesServices=cs;exports.calculateTimeDifference=wt;exports.executeDashboardKeyFactory=Ct;exports.isMacroGroup=Mr;exports.isMicroGroup=Tr;exports.macroHolderMap=Sr;exports.registerDashboardKeyFactory=Ot;exports.toSeconds=$r;exports.toTimeComponents=Pr;exports.troubleVisibilityFilter=Ue;
package/index.mjs CHANGED
@@ -2268,7 +2268,7 @@ let k = class {
2268
2268
  *
2269
2269
  * @category Lifecycle
2270
2270
  */
2271
- constructor(e, t, o) {
2271
+ constructor(e, t) {
2272
2272
  /**
2273
2273
  * Unique identifier for this model instance.
2274
2274
  *
@@ -2309,7 +2309,7 @@ let k = class {
2309
2309
  * @category Internal State
2310
2310
  */
2311
2311
  i(this, "troubleActionData");
2312
- this.id = e, this.logger = o.logger, this.state = Eo(), this.troubleActionData = t.definitions.reduce((s, r) => (s[r.troubleType] = r, s), {});
2312
+ this.id = e, this.state = Eo(), this.troubleActionData = t.definitions.reduce((o, s) => (o[s.troubleType] = s, o), {});
2313
2313
  }
2314
2314
  // -------------------LIFECYCLE----------------------------
2315
2315
  /**
@@ -1,5 +1,5 @@
1
1
  import { TroubleActionOptions } from './types';
2
- import { IKosDataModel, IKosIdentifiable, KosCreationContext, KosData, KosLoggerAware, PublicModelInterface, SingletonKosModelRegistrationFactory } from '../../../../../sdk/kos-ui-sdk/src/index.ts';
2
+ import { IKosDataModel, IKosIdentifiable, KosData, KosLoggerAware, PublicModelInterface, SingletonKosModelRegistrationFactory } from '../../../../../sdk/kos-ui-sdk/src/index.ts';
3
3
 
4
4
  /**
5
5
  * Model type identifier for the TroubleAction singleton model.
@@ -184,7 +184,7 @@ export declare class TroubleActionModelImpl implements IKosDataModel, IKosIdenti
184
184
  *
185
185
  * @category Lifecycle
186
186
  */
187
- constructor(modelId: string, options: TroubleActionOptions, context: KosCreationContext);
187
+ constructor(modelId: string, options: TroubleActionOptions);
188
188
  /**
189
189
  * Gets the first active trouble that has an associated action definition.
190
190
  *
@@ -1 +1 @@
1
- {"version":3,"file":"trouble-action-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/ddk/kos-ddk-models/src/lib/trouble-action/trouble-action-model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,oCAAoC,EAErC,MAAM,yBAAyB,CAAC;AASjC,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;AAE9E;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;CAAG;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,qBAEa,sBAAuB,YAAW,aAAa,EAAE,gBAAgB;IAC5E;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,YAAY,EAAE,oCAAoC,CACvD,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;IAEF;;;;;;;OAOG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;;;OASG;IAEH,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAEnD;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB,CAAoC;IAE7D;;;;;;;;;;;;OAYG;gBAED,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,kBAAkB;IAa7B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,aAAa,oEAgBhB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,iBAAiB,uBAEpB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IAIH,oBAAoB;CAsBrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,aAAa,gFAAsC,CAAC"}
1
+ {"version":3,"file":"trouble-action-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/ddk/kos-ddk-models/src/lib/trouble-action/trouble-action-model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,oCAAoC,EAErC,MAAM,yBAAyB,CAAC;AASjC,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;AAE9E;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;CAAG;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,qBAEa,sBAAuB,YAAW,aAAa,EAAE,gBAAgB;IAC5E;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,YAAY,EAAE,oCAAoC,CACvD,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;IAEF;;;;;;;OAOG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;;;OASG;IAEH,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAEnD;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB,CAAoC;IAE7D;;;;;;;;;;;;OAYG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAW1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,aAAa,oEAgBhB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,iBAAiB,uBAEpB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IAIH,oBAAoB;CAsBrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,aAAa,gFAAsC,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@kosdev-code/kos-ddk-models",
3
- "version": "0.1.0-dev.5187",
3
+ "version": "0.1.0-dev.5190",
4
4
  "dependencies": {
5
- "@kosdev-code/kos-ui-sdk": "0.1.0-dev.5187",
6
- "@kosdev-code/kos-dispense-sdk": "0.1.0-dev.5187",
7
- "@kosdev-code/kos-freestyle-sdk": "0.1.0-dev.5187"
5
+ "@kosdev-code/kos-ui-sdk": "0.1.0-dev.5190",
6
+ "@kosdev-code/kos-dispense-sdk": "0.1.0-dev.5190",
7
+ "@kosdev-code/kos-freestyle-sdk": "0.1.0-dev.5190"
8
8
  },
9
9
  "main": "./index.js",
10
10
  "module": "./index.mjs",
11
11
  "typings": "./index.d.ts",
12
12
  "kos": {
13
13
  "build": {
14
- "gitHash": "020361929a0ecf6ad0f2fbb5175f7a46596a4169"
14
+ "gitHash": "2ba7db6f93d0e6a77b8bc4377ab6d3b413a32e69"
15
15
  }
16
16
  },
17
17
  "publishConfig": {