@kosdev-code/kos-dispense-sdk 2.0.45 → 2.0.46

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.
Files changed (121) hide show
  1. package/dispense-registration-manager-o2X21qmP.js +1972 -0
  2. package/dispense-registration-manager-o2X21qmP.js.map +1 -0
  3. package/dispense-registration-manager-oEcu0aLL.cjs +2 -0
  4. package/dispense-registration-manager-oEcu0aLL.cjs.map +1 -0
  5. package/extension-utils-CJ5qRklm.cjs +2 -0
  6. package/extension-utils-CJ5qRklm.cjs.map +1 -0
  7. package/extension-utils-CbCKII-5.js +381 -0
  8. package/extension-utils-CbCKII-5.js.map +1 -0
  9. package/index.cjs +1 -142
  10. package/index.cjs.map +1 -1
  11. package/index.d.ts +1 -2
  12. package/index.d.ts.map +1 -1
  13. package/index.js +103 -133
  14. package/index.js.map +1 -1
  15. package/models/models/assembly/assembly-model.d.ts +0 -4
  16. package/models/models/assembly/assembly-model.d.ts.map +1 -1
  17. package/models/models/assembly/pump-utils.d.ts.map +1 -1
  18. package/models/models/availability/availability-model.d.ts.map +1 -1
  19. package/models/models/board/board-container-model.d.ts +0 -4
  20. package/models/models/board/board-container-model.d.ts.map +1 -1
  21. package/models/models/board/board-model.d.ts +0 -4
  22. package/models/models/board/board-model.d.ts.map +1 -1
  23. package/models/models/device-assembly/device-assembly-model.d.ts +0 -4
  24. package/models/models/device-assembly/device-assembly-model.d.ts.map +1 -1
  25. package/models/models/generic-pour/generic-pour-model.d.ts +13 -54
  26. package/models/models/generic-pour/generic-pour-model.d.ts.map +1 -1
  27. package/models/models/generic-pour/index.d.ts +2 -2
  28. package/models/models/generic-pour/index.d.ts.map +1 -1
  29. package/models/models/generic-pour/types/index.d.ts +0 -1
  30. package/models/models/holder/holder-model.d.ts.map +1 -1
  31. package/models/models/holder-container/holder-container-model.d.ts.map +1 -1
  32. package/models/models/ingredient/ingredient-model.d.ts.map +1 -1
  33. package/models/models/ingredient-container/ingredient-container-model.d.ts.map +1 -1
  34. package/models/models/nozzle/index.d.ts +1 -1
  35. package/models/models/nozzle/index.d.ts.map +1 -1
  36. package/models/models/nozzle/nozzle-model.d.ts +10 -28
  37. package/models/models/nozzle/nozzle-model.d.ts.map +1 -1
  38. package/models/models/nozzle/types/index.d.ts +0 -8
  39. package/models/models/pump/pump-model.d.ts.map +1 -1
  40. package/models/models/pump/types/index.d.ts +2 -7
  41. package/models/models/pump-container/pump-container-model.d.ts.map +1 -1
  42. package/models/models/types/assembly.d.ts +0 -4
  43. package/models/models/types/assembly.d.ts.map +1 -1
  44. package/models/models/types/intent.d.ts +0 -98
  45. package/models/models/types/intent.d.ts.map +1 -1
  46. package/models/models/types/pouring.d.ts +3 -1
  47. package/models/models/types/pouring.d.ts.map +1 -1
  48. package/models/utils/dispense-registration-manager.d.ts +2 -2
  49. package/models/utils/extension-utils.d.ts +18 -90
  50. package/models/utils/extension-utils.d.ts.map +1 -1
  51. package/models/utils/service.d.ts +12 -16
  52. package/models/utils/service.d.ts.map +1 -1
  53. package/models.cjs +1 -47
  54. package/models.cjs.map +1 -1
  55. package/models.js +37 -40
  56. package/package.json +2 -19
  57. package/pump-provider-BQcKWjr8.cjs +2 -0
  58. package/pump-provider-BQcKWjr8.cjs.map +1 -0
  59. package/pump-provider-Bv-OLySq.js +1238 -0
  60. package/pump-provider-Bv-OLySq.js.map +1 -0
  61. package/ui/contexts/cui-kit/cui-kit.d.ts +4 -4
  62. package/ui/contexts/cui-kit/cui-kit.d.ts.map +1 -1
  63. package/ui/hooks/cui-kit/use-beverages.d.ts +2 -3
  64. package/ui/hooks/cui-kit/use-beverages.d.ts.map +1 -1
  65. package/ui/hooks/cui-kit/use-brands.d.ts +1 -1
  66. package/ui/hooks/cui-kit/use-brands.d.ts.map +1 -1
  67. package/ui/hooks/cui-kit/use-cui-kit.d.ts +2 -3
  68. package/ui/hooks/cui-kit/use-cui-kit.d.ts.map +1 -1
  69. package/ui/hooks/cui-kit/use-dispense-lifecycle.d.ts +1 -2
  70. package/ui/hooks/cui-kit/use-dispense-lifecycle.d.ts.map +1 -1
  71. package/ui/hooks/cui-kit/use-flavors.d.ts +1 -1
  72. package/ui/hooks/cui-kit/use-flavors.d.ts.map +1 -1
  73. package/ui/hooks/generic-pour/use-generic-pour.d.ts +2 -3
  74. package/ui/hooks/generic-pour/use-generic-pour.d.ts.map +1 -1
  75. package/ui/hooks/nozzle-pour/use-nozzle-pour.d.ts +2 -6
  76. package/ui/hooks/nozzle-pour/use-nozzle-pour.d.ts.map +1 -1
  77. package/ui/hooks/pour/use-pour.d.ts +3 -8
  78. package/ui/hooks/pour/use-pour.d.ts.map +1 -1
  79. package/ui/hooks/utils/pour-strategy/hold-to-pour-strategy.d.ts.map +1 -1
  80. package/ui/hooks/utils/pour-strategy/pour-strategy.d.ts +9 -2
  81. package/ui/hooks/utils/pour-strategy/pour-strategy.d.ts.map +1 -1
  82. package/ui/hooks/utils/pour-strategy/tap-to-pour-strategy.d.ts.map +1 -1
  83. package/ui/index.d.ts +0 -1
  84. package/ui/index.d.ts.map +1 -1
  85. package/ui.cjs +1 -73
  86. package/ui.cjs.map +1 -1
  87. package/ui.js +65 -66
  88. package/dispense-registration-manager-C7GGaZ47.js +0 -2673
  89. package/dispense-registration-manager-C7GGaZ47.js.map +0 -1
  90. package/dispense-registration-manager-lQhkTFKW.cjs +0 -2671
  91. package/dispense-registration-manager-lQhkTFKW.cjs.map +0 -1
  92. package/extension-utils-50g2ril2.cjs +0 -500
  93. package/extension-utils-50g2ril2.cjs.map +0 -1
  94. package/extension-utils-Dt00FOJq.js +0 -501
  95. package/extension-utils-Dt00FOJq.js.map +0 -1
  96. package/extensions/control-pour-extension.d.ts +0 -70
  97. package/extensions/control-pour-extension.d.ts.map +0 -1
  98. package/extensions/index.d.ts +0 -2
  99. package/extensions/index.d.ts.map +0 -1
  100. package/kos-models.json +0 -180
  101. package/models/utils/openapi-index.d.ts +0 -2
  102. package/models/utils/openapi-index.d.ts.map +0 -1
  103. package/models/utils/services/dispense/1.6.5/openapi.d.ts +0 -845
  104. package/models/utils/services/dispense/1.6.5/service.d.ts +0 -122
  105. package/models/utils/services/dispense/1.6.5/service.d.ts.map +0 -1
  106. package/models/utils/services/dispense/1.8.1/openapi.d.ts +0 -1653
  107. package/models/utils/services/dispense/1.8.1/service.d.ts +0 -122
  108. package/models/utils/services/dispense/1.8.1/service.d.ts.map +0 -1
  109. package/models/utils/services/dispense/daily/openapi.d.ts +0 -1820
  110. package/models/utils/services/dispense/daily/service.d.ts +0 -122
  111. package/models/utils/services/dispense/daily/service.d.ts.map +0 -1
  112. package/models/utils/services-index.d.ts +0 -4
  113. package/models/utils/services-index.d.ts.map +0 -1
  114. package/pump-provider-CBFev3qg.cjs +0 -1824
  115. package/pump-provider-CBFev3qg.cjs.map +0 -1
  116. package/pump-provider-DyxEmFRT.js +0 -1825
  117. package/pump-provider-DyxEmFRT.js.map +0 -1
  118. package/ui/hooks/cui-kit/dispense-topics.d.ts +0 -47
  119. package/ui/hooks/cui-kit/dispense-topics.d.ts.map +0 -1
  120. package/ui/utils/pour-context.d.ts +0 -8
  121. package/ui/utils/pour-context.d.ts.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";var rt=Object.defineProperty;var it=(e,t,r)=>t in e?rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var d=(e,t,r)=>(it(e,typeof t!="symbol"?t+"":t,r),r);const i=require("@kosdev-code/kos-ui-sdk");require("react");var g=(e=>(e.IngredientLoader="kos.ingredient.loader",e.IngredientMapper="kos.ingredient.mapper",e.IngredientIndex="kos.ingredient.index",e.IngredientTypeMapper="kos.ingredient.type.mapper",e.HolderTypeMapper="kos.holder.type.mapper",e.HolderMapper="kos.holder.mapper",e.HolderIndex="kos.holder.index",e.HolderIngredientMapper="kos.holder.ingredient.mapper",e.AvailabilityMapper="kos.availability.mapper",e.AvailabilityLoader="kos.availability.loader",e.SelectedPourableMapper="kos.selected.pourable.mapper",e.AssemblyMapper="kos.assembly.mapper",e.BoardMapper="kos.board.mapper",e.BoardIndex="kos.board.index",e.PumpIndex="kos.pump.index",e.AssemblyFeatureFlags="kos.assembly.feature.flags",e))(g||{}),v=(e=>(e.Nozzle="nozzle-model",e.Availability="availability-model",e.Holder="holder-model",e.HolderContainer="holder-container-model",e.IngredientContainer="ingredient-container-model",e.Ingredient="ingredient-model",e.Pump="pump-model",e.PumpContainer="pump-container-model",e))(v||{}),nt=Object.getOwnPropertyDescriptor,st=(e,t,r,n)=>{for(var s=n>1?void 0:n?nt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=a(s)||s);return s};const O="ingredient-model";let re=class{constructor(e,{name:t,type:r,data:n,ingredientId:s,...o}){d(this,"id");d(this,"ingredientId");d(this,"name");d(this,"type");d(this,"data");this.id=e,this.ingredientId=s,this.name=t,this.type=r,this.data=n,Object.assign(this,o)}updateModel({name:e,type:t,data:r,ingredientId:n,...s}){this.name=e,this.type=t,this.ingredientId=n,this.data=r,Object.assign(this,s)}};re=st([i.kosModel(O)],re);const ae={registration:{[O]:{class:re,singleton:!1}},type:O,predicate:i.isKosModel(O),factory:i.Kos.Factory.create(O)},{URL:Se}=i.resolveServiceUrl("INGREDIENT_SERVICE"),{getOne:ot}=i.ServiceFactory.build({basePath:`${Se}/api/ext/dispense/ingredients`}),Re=async()=>await ot({urlOverride:`${Se}/api/ext/dispense/ingredients`});var at=Object.defineProperty,dt=Object.getOwnPropertyDescriptor,$e=(e,t,r,n)=>{for(var s=n>1?void 0:n?dt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&at(t,r,s),s};const w="ingredient-container-model",lt=i.KosLog.createLogger({name:"ingredient-container-model"});let k=class{constructor(e,t){d(this,"id");d(this,"ingredients");this.id=e,this.ingredients=new i.KosModelContainer({indexMap:{ingredientType:"type"},extensionId:g.IngredientIndex,parentId:e})}updateModel(){}getIngredientsByType(e){return this.ingredients.getIndexByKey("ingredientType",e)}async load(e){var s;lt.debug(`loading ingredient container ${this.id}`);const t=await Re();if((t==null?void 0:t.status)!==200)throw new Error("Failed to load ingredients");const r=await i.KosExtensionUtils.executeLoaderExtension({context:e,extension:g.IngredientLoader}),n=(t==null?void 0:t.data)??{};for(const o of Object.keys(n))for(const a of((s=t==null?void 0:t.data)==null?void 0:s[o])||[]){const c=await i.KosExtensionUtils.executeDataMapperExtension({extension:g.IngredientMapper,data:a,contextData:r}),p=await i.KosExtensionUtils.executePropertyMapperExtension({extension:g.IngredientTypeMapper,data:a,contextData:r}),u={...a,type:p||a.type,...c,data:c},h=ae.factory(a.id)(u);this.ingredients.addModel(h)}}};$e([i.kosChild],k.prototype,"ingredients",2);k=$e([i.kosModel(w)],k);const de={registration:{[w]:{class:k,singleton:!0}},type:w,predicate:i.isKosModel(w),factory:i.Kos.Singleton.create(w)},{URL:X}=i.resolveServiceUrl("HOLDER_SERVICE"),{getAll:ct,postModel:Te,deleteModel:pt}=i.ServiceFactory.build({basePath:`${X}/api/kos/holders`}),gt=i.KosLog.createLogger({name:"holder-service",group:"Services"}),ut=async()=>await ct({}),Ae=async(e,t)=>{if(!e||!t)throw new Error("Missing holderPath or ingredientId");return await Te({model:{holderPath:e,ingredientId:t},urlOverride:`${X}/api/ext/dispense/assignments`})},Ne=async e=>{if(!e)throw new Error("Missing holderPath");return await pt({id:e,urlOverride:`${X}/api/ext/dispense/assignments/${e}`})},De=async e=>{if(!e)throw new Error("Missing holderPath");return gt.debug(`sending POST request to /api/ext/dispense/pumpEvents/replaceLine/${e}`),await Te({model:{},urlOverride:`${X}/api/ext/dispense/pumpEvents/replaceLine/${e}`})},{URL:F}=i.resolveServiceUrl("ASSIGNMENT_SERVICE"),{getAll:ht,postModel:ze,deleteModel:yt}=i.ServiceFactory.build({destinationAddress:"",basePath:`${F}/api/ext/dispense/assignments`}),G=window.kosUseFos,It=async()=>await ht({fos:G}),Le=async(e,t)=>{var s,o,a,c;const r=JSON.stringify(t),n=`${F}/api/ext/dispense/assignments`;try{const p=await ze({model:{holderPath:e,factoryJson:r},urlOverride:n});return(p==null?void 0:p.status)===200&&((s=p==null?void 0:p.data)!=null&&s.error)?[p.data.error||"unknownError",p.data]:[void 0,p==null?void 0:p.data]}catch(p){if(p instanceof i.FetchError)return[((a=(o=p.payload)==null?void 0:o.data)==null?void 0:a.error)||"unknownError",(c=p.payload)==null?void 0:c.data]}return["unknownError",void 0]},vt=async e=>{const t=G?`${F}/api/ingredients/assignments/${e.holderPath}`:`${F}/api/ext/dispense/assignments`;return await ze({model:{...e,fuelGauge:680},fos:G,urlOverride:t})},mt=async e=>await yt({id:e,fos:G});var ft=Object.defineProperty,Pt=Object.getOwnPropertyDescriptor,Z=(e,t,r,n)=>{for(var s=n>1?void 0:n?Pt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&ft(t,r,s),s};const C=v.Holder,_e=i.KosLog.createLogger({name:"holder-model"});i.ExtensionManager[i.EXTENSION_TROUBLE_MAPPER].register("holder",async e=>{const t=[];return t.push(...e.data.holderPaths),t});i.ExtensionManager[i.EXTENSION_TROUBLE_DATA_MAPPER].register("pump",async e=>{if(e.data.pumpPath){const{model:t}=i.getKosModelSync(e.data.pumpPath);if(t){const r=t.ingredientId?i.getKosModelSync(t.ingredientId).model:void 0;return{ingredientId:t.ingredientId,ingredientName:(r==null?void 0:r.displayName)??((r==null?void 0:r.name)||""),childPumpName:t.name}}}return{}});i.ExtensionManager[i.EXTENSION_TROUBLE_DATA_MAPPER].register("holder",async e=>e.data.holderNames.length>0?{holderName:e.data.holderNames[0]||""}:{});i.ExtensionManager[i.EXTENSION_TROUBLE_DATA_MAPPER].register("container",async e=>{if(e.data.ingredients.length>0){const t=e.data.ingredients[0],{model:r}=i.getKosModelSync(t);return{ingredientName:(r==null?void 0:r.displayName)??((r==null?void 0:r.name)||""),ingredients:e.data.ingredients?e.data.ingredients:[],unknonwnIngredientId:e.data.unknonwnIngredientId??""}}return{}});class bt extends Error{constructor(r,n){super(n);d(this,"type");this.name="AssignmentError",this.type=r}}let b=class{constructor(e,{path:t,name:r,ingredientSource:n,ingredientId:s,ingredientType:o,slice:a,group:c,data:p,enjoyByDate:u},h){d(this,"id");d(this,"path");d(this,"name");d(this,"ingredientId");d(this,"ingredientType");d(this,"ingredientSource");d(this,"group");d(this,"slice");d(this,"logger");d(this,"data");d(this,"enjoyByDate");d(this,"pumps");d(this,"ingredientContainer");d(this,"troubleContainer");this.id=e,this.path=t,this.name=r,this.ingredientType=o,this.ingredientSource=n,this.ingredientId=s,this.group=c,this.slice=a,this.enjoyByDate=u,this.data=p,this.pumps=new i.KosModelContainer({parentId:e,sortKey:"path"}),this.logger=h.logger}updateModel({path:e,name:t,ingredientSource:r,ingredientId:n,ingredientType:s,group:o,slice:a,enjoyByDate:c,data:p}){this.path=e,this.name=t,this.ingredientId=n,this.ingredientType=s,this.ingredientSource=r,this.enjoyByDate=c,this.slice=a,this.group=o,this.data=p}get hasEnjoyByDate(){return!!this.enjoyByDate&&!this.unassigned}get hasEnjoyByWarning(){var e;return((e=this.troublesByType.EnjoyByTrouble)==null?void 0:e.length)>0}get nozzlePaths(){return this.pumps.data.map(e=>e.nozzlePath)}async cancelPour(){await Promise.all(this.pumps.data.filter(e=>e.isPouring).map(e=>e.cancelPour()))}get canPour(){return!this.shouldDefer&&this.pumps.data.every(e=>e.canPour)}get isPouring(){const e=this.pumps.data.some(t=>t.isPouring);return this.logger.debug(`isPouring: ${!!e}`),e}async performIntent(e){const t=typeof e=="string"?e:e.intent,r=typeof e=="string"?void 0:e.pumpPath,n=r?this.pumps.getModel(r):this.pumps.data[0];return n==null?void 0:n.performIntent({intent:t})}get pourState(){return this.pumps.data.reduce((t,r)=>r.pouringState?r.pouringState:t,"")}get nozzlePath(){var e;return(e=this.pumps.data[0])==null?void 0:e.nozzlePath}get pumpPaths(){return this.pumps.data.map(e=>e.id)}get sortedPumps(){return this.pumps.data.sort((e,t)=>e.virtual&&!t.virtual?-1:!e.virtual&&t.virtual?1:e.name.localeCompare(t.name))}get ingredient(){var t;return this.ingredientId?(t=this.ingredientContainer)==null?void 0:t.ingredients.getModel(this.ingredientId):void 0}get ingredientName(){return this.ingredient?this.ingredient.displayName??this.ingredient.name:this.ingredientId?"unknown":""}get previousIngredient(){var t;return this.prevIngredientId?(t=this.ingredientContainer)==null?void 0:t.ingredients.getModel(this.prevIngredientId):void 0}get previousIngredientName(){return this.previousIngredient?this.previousIngredient.displayName??this.previousIngredient.name:this.prevIngredientId?"unknown":""}get troubles(){return this.troubleContainer.troubles.getIndexByKey("byIface",this.path).sort((e,t)=>t.rank-e.rank)}get troubleStatus(){return""}get troublesByType(){return this.troubles.reduce(i.troubleByTypeReducer,{})}get prevIngredientId(){var e,t;return(t=(e=this.pumps.data)==null?void 0:e[0])==null?void 0:t.prevIngredientId}get unassigned(){return(!this.ingredientId||this.ingredientId==="0")&&(!this.prevIngredientId||this.prevIngredientId==="0")}get removed(){return(!this.ingredientId||this.ingredientId==="0")&&this.prevIngredientId!==void 0&&this.prevIngredientId!=="0"}get maxVolume(){return this.slice.maxVolMl??0}get remainingVolume(){return this.slice.currentVolMl??0}get hasMaxVolume(){return this.slice.maxVolMl!==void 0}get hasRemainingVolume(){return this.slice.currentVolMl!==void 0}get fillPercent(){return this.remainingVolume<=0?0:Math.floor((this.remainingVolume||1)/(this.maxVolume||1)*100)}get hasFuelGuage(){return this.hasMaxVolume&&this.hasRemainingVolume}updateIngredient(e){this.ingredientId!==e&&i.kosAction(()=>{this.ingredientId=e})}async resolveIntentVolume(e){const t=this.pumps.data[0];return t?t.resolveIntentVolume(e):{volume:-1}}async overrideRfidCode(e){if(!e)throw new Error("Invalid override");try{const[t,r]=await Le(this.path,e);if(t)throw new bt(t,`Failed to perform rfid override on holder ${this.id}`);return i.kosAction(()=>{this.ingredientId=r==null?void 0:r.ingredientId}),r}catch(t){throw _e.error(`Failed to perform rfid override on holder ${this.id}`,t),t}}async assignIngredient(e){try{e?await Ae(this.path,e):await Ne(this.path),i.kosAction(()=>{this.ingredientId=e})}catch(t){throw _e.error(`Failed to perform assign ingredient to holder ${this.id}`,t),t}}get shouldDefer(){return this.troubles.some(e=>e.shouldDefer)}async replaceLine(){await De(this.path)}};Z([i.kosChild],b.prototype,"pumps",2);Z([i.kosDependency({modelType:de.type})],b.prototype,"ingredientContainer",2);Z([i.kosDependency({modelType:i.TroubleContainer.type})],b.prototype,"troubleContainer",2);b=Z([i.kosModel(C)],b);const le={registration:{[C]:{class:b,singleton:!1}},type:C,predicate:i.isKosModel(C),factory:i.Kos.Factory.create(C)},Mt=async(e,t)=>{var Ee;const r=i.ExtensionManager.propertyMapper.executeMapper(g.HolderIngredientMapper,t),n=i.ExtensionManager.propertyMapper.executeMapper(g.HolderTypeMapper,t)||t.ingType,s=await i.KosExtensionUtils.executeDataMapperExtension({extension:g.HolderMapper,data:t,contextData:{}}),{name:o,path:a,ingredientId:c,ingType:p,ingSource:u,slice:h,..._}=t,y={..._,...s},P=h||{pos:0},U={name:o,path:a,ingredientId:r||c,ingredientType:n||p,ingredientSource:u,enjoyByDate:(Ee=t.container)!=null&&Ee.enjoyByDate?new Date(t.container.enjoyByDate):void 0,slice:P,group:e,data:y};return le.factory(t.path)(U)},{URL:Et}=i.resolveServiceUrl("ASSEMBLY_SERVICE"),{getOne:_t}=i.ServiceFactory.build({basePath:`${Et}/api/kos/device/assemblies`}),Ot=i.KosLog.createLogger({name:"assembly-service",group:"Services"}),ce=async()=>(Ot.debug("sending GET for assembly"),await _t({}));var wt=Object.defineProperty,Ct=Object.getOwnPropertyDescriptor,q=(e,t,r,n)=>{for(var s=n>1?void 0:n?Ct(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&wt(t,r,s),s};const S="board-container-model",pe="/kos/hardware/board/linked",ge="/kos/hardware/board/unlinked";exports.BoardContainerModel=class{constructor(t,r,n){d(this,"id");d(this,"logger");d(this,"models");this.id=t,this.logger=n.logger,this.models=new i.KosModelContainer({parentId:t,extensionId:g.BoardIndex})}get boardList(){return this.models.data}updateModel(){}addModel(t){this.models.addModel(t)}removeModel(t){this.models.removeModel(t)}updateBoard(t){const r=t.path,n=this.models.getModel(r);if(!n){this.logger.warn(`board ${r} not found`);return}n.updateModel(t)}handleBoardLinkEvent(t){this.logger.debug(`handling ${pe} event ${t}`),t?this.updateBoard(t):this.logger.debug("- boardLinkEvent is undefined")}handleBoardUnlinkEvent(t){this.logger.debug(`handling ${ge} event ${t}`),t?this.updateBoard(t):this.logger.debug("- boardLinkEvent is undefined")}};q([i.kosChild],exports.BoardContainerModel.prototype,"models",2);q([i.kosTopicHandler({lifecycle:i.DependencyLifecycle.INIT,topic:pe,websocket:!0})],exports.BoardContainerModel.prototype,"handleBoardLinkEvent",1);q([i.kosTopicHandler({lifecycle:i.DependencyLifecycle.INIT,topic:ge,websocket:!0})],exports.BoardContainerModel.prototype,"handleBoardUnlinkEvent",1);exports.BoardContainerModel=q([i.kosModel(S)],exports.BoardContainerModel);const St=async e=>{const t=e.data.boardPath,{model:r}=i.getKosModelSync(t);return{boardName:(r==null?void 0:r.name)||""}};var Rt=Object.defineProperty,$t=Object.getOwnPropertyDescriptor,xe=(e,t,r,n)=>{for(var s=n>1?void 0:n?$t(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&Rt(t,r,s),s};const R=v.PumpContainer;var ue=(e=>(e.byBoard="byBoard",e.byType="byType",e.byNozzle="byNozzle",e))(ue||{});let H=class{constructor(e,t){d(this,"id");d(this,"pumps");this.id=e,this.pumps=new i.KosModelContainer({indexMap:{byNozzle:r=>r.nozzlePaths,byBoard:r=>r.boardPath,byType:"type"},parentId:e,extensionId:g.PumpIndex})}get pumpModels(){return this.pumps.data}get pumpPaths(){return this.pumpModels.map(e=>e.path)}addModel(e){this.pumps.addModel(e)}removeModel(e){this.pumps.removeModel(e)}getModel(e){return this.pumps.getModel(e)}get models(){return this.pumps}get data(){return this.pumps.data}updateModel(){}async load(){}};xe([i.kosChild],H.prototype,"pumps",2);H=xe([i.kosModel(R)],H);const J={registration:{[R]:{class:H,singleton:!0}},type:R,predicate:i.isKosModel(R),factory:i.Kos.Singleton.create(R)},Be=async e=>{const t=[],{model:r}=await i.getKosModel(e);return r&&(t.push(r.boardPath),t.push(r.nozzlePath),t.push(r.holderPath)),t},Tt=async e=>{const t=[],r=e.data.pumpPath;t.push(r);const n=await Be(r);return[...t,...n]},At=async e=>{const t=[],r=e.data.boardPath;t.push(e.data.boardPath);const n=await i.getKosModel(J.type);if(n!=null&&n.model){const o=n.model.models.getIndexByKey(ue.byBoard,r).map(c=>Be(c.path));(await Promise.allSettled(o)).forEach(c=>{c.status==="fulfilled"&&c.value.forEach(p=>t.push(p))})}return Array.from(new Set(t))};var Nt=Object.getOwnPropertyDescriptor,Dt=(e,t,r,n)=>{for(var s=n>1?void 0:n?Nt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=a(s)||s);return s};const $="board-model",Oe=(e,t)=>{const{type:r,name:n,path:s,linked:o,instanceId:a,link:c,...p}=e;t.type=r,t.name=n,t.path=s,t.linked=o,t.link=Object.freeze(c),t.instanceId=a,Object.assign(t,p)};i.ExtensionManager[i.EXTENSION_TROUBLE_MAPPER].register("board",At);i.ExtensionManager[i.EXTENSION_TROUBLE_DATA_MAPPER].register("board",St);let ie=class{constructor(e,t,r){d(this,"id");d(this,"type");d(this,"name");d(this,"path");d(this,"linked");d(this,"instanceId");d(this,"logger");this.id=e,this.logger=r.logger,Oe(t,this)}updateModel(e){Oe(e,this)}async init(){this.logger.debug(`initializing board ${this.id}`)}async load(){this.logger.debug(`loading board ${this.id}`)}};ie=Dt([i.kosModel($)],ie);const he={registration:{[$]:{class:ie,singleton:!1}},type:$,predicate:i.isKosModel($),factory:i.Kos.Factory.create($)},ye={registration:{[S]:{class:exports.BoardContainerModel,singleton:!0},...he.registration},type:S,predicate:i.isKosModel(S),factory:i.Kos.Singleton.create(S)};var zt=Object.defineProperty,Lt=Object.getOwnPropertyDescriptor,W=(e,t,r,n)=>{for(var s=n>1?void 0:n?Lt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&zt(t,r,s),s};const T=v.HolderContainer,xt="/kos/insertion/insert/start",Bt="/kos/insertion/insert/complete",Ut="/kos/insertion/insert/update",Kt="/kos/insertion/remove",kt="/kos/pumpEvent/replaceLine",Ft="/kos/handle/*";let M=class{constructor(e,t,r){d(this,"id");d(this,"holders");d(this,"logger");this.id=e,this.holders=new i.KosModelContainer({indexMap:{nozzle:n=>n.nozzlePaths,group:"group"},parentId:e,extensionId:g.HolderIndex}),this.logger=r.logger}updateModel(){}handleHolderEvents(e){var r,n,s;i.KosLog.ifDebug(()=>this.logger.debug("Received holder change event",JSON.stringify(e)));const t=this.holders.getModel(e.path);t&&(this.logger.info(`Received change event for holder ${t.path}. Updating fuel gauge data.`),t.slice.currentVolMl=(r=e.slice)==null?void 0:r.currentVolMl,t.slice.maxVolMl=(n=e.slice)==null?void 0:n.maxVolMl,(s=e==null?void 0:e.container)!=null&&s.enjoyByDate?t.enjoyByDate=new Date(e.container.enjoyByDate):t.enjoyByDate=void 0)}handleInsertion(e){i.KosLog.ifDebug(()=>this.logger.debug("Received insertion event",JSON.stringify(e))),(Array.isArray(e)?e:[e]).forEach(r=>{i.kosAction(()=>{var o,a,c;const n=r.ingredientId,s=this.holders.getModel(r.path);s&&(this.logger.info(`Received insertion event for holder ${s.path}`),s.updateIngredient(n),s.slice.currentVolMl=(o=r.slice)==null?void 0:o.currentVolMl,s.slice.maxVolMl=(a=r.slice)==null?void 0:a.maxVolMl,(c=r==null?void 0:r.container)!=null&&c.enjoyByDate?s.enjoyByDate=new Date(r.container.enjoyByDate):s.enjoyByDate=void 0,r.pumps.forEach(p=>{i.kosAction(()=>{const u=s.pumps.getModel(p.path);u&&(u.ingredientId=p.ingredientId,u.inserted=p.inserted,u.prevIngredientId=p.prevIngredientId)})}))})})}};W([i.kosChild],M.prototype,"holders",2);W([i.kosTopicHandler({topic:Ft,websocket:!0,condition:(e,t)=>t.holders.getModel(e.path)!==void 0})],M.prototype,"handleHolderEvents",1);W([i.kosTopicHandler({topic:[xt,Bt,Ut,Kt,kt],websocket:!0})],M.prototype,"handleInsertion",1);M=W([i.kosModel(T)],M);const Ie={registration:{[T]:{class:M,singleton:!0}},type:T,predicate:i.isKosModel(T),factory:i.Kos.Singleton.create(T)},Gt=i.KosLog.createLogger({name:"board-utils"}),Ht=async e=>{const t=await i.KosExtensionUtils.executeDataMapperExtension({extension:g.BoardMapper,data:e,contextData:{}}),{type:r,name:n,path:s,linked:o,instanceId:a,...c}=e,p={...c,...t},u={type:r,name:n,path:s,linked:o,instanceId:a,...p},h=he.factory(e.path)(u);return h.updateModel(u),h},jt=e=>async t=>{Gt.debug(`adding board ${t.name}`);const r=await Ht(t);e.addModel(r)};var l=(e=>(e.IDLE="IDLE",e.POURING="POURING",e.POUR_STARTING="POUR_STARTING",e.POUR_CANCELING="POUR_CANCELING",e.POUR_CANCELED="POUR_CANCELED",e.POUR_COMPLETE="POUR_COMPLETE",e))(l||{});const{URL:ve}=i.resolveServiceUrl("PUMP_SERVICE"),{postModel:Vt,getOne:Yt}=i.ServiceFactory.build({basePath:`${ve}/api/kos/holders`});i.KosLog.createLogger({name:"pump-service",group:"Services"});const Ue=async({intent:e,pumpId:t,tracker:r})=>{const n=`${ve}/api/ext/dispense/nozzle/nozzle/pipeline/ingredient/pour/${t}/${e}`,s=await Vt({model:{},urlOverride:n,tracker:r});return s!=null&&s.data&&i.FutureManager.initiateFuture(s.data),s},Ke=async(e,t)=>{const r=`${ve}/api/ext/dispense/nozzle/nozzle/pipeline/ingredient/intent/${e}/${t}/volume`,n=await Yt({urlOverride:r});return n!=null&&n.data?n.data:{volume:-1}};var Xt=Object.defineProperty,Zt=Object.getOwnPropertyDescriptor,me=(e,t,r,n)=>{for(var s=n>1?void 0:n?Zt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&Xt(t,r,s),s};const A=v.Pump;i.ExtensionManager[i.EXTENSION_TROUBLE_MAPPER].register("pump",Tt);let L=class{constructor(e,t){d(this,"id");d(this,"inserted");d(this,"type");d(this,"virtual");d(this,"ingredientId");d(this,"holderPath");d(this,"boardPath");d(this,"nozzlePath");d(this,"childPump");d(this,"name");d(this,"path");d(this,"prevIngredientId");d(this,"troubleContainer");d(this,"futureHandler");d(this,"currentState",l.IDLE);this.id=e;const{inserted:r,holderPath:n,boardPath:s,nozzlePath:o,name:a,path:c,childPump:p,virtual:u,prevIngredientId:h,..._}=t;this.inserted=r,this.type=t.type,this.ingredientId=t.ingredientId,this.holderPath=n,this.boardPath=s,this.nozzlePath=o,this.name=a,this.path=c,this.childPump=!!p,this.virtual=!!u,this.prevIngredientId=h,Object.assign(this,_),this.futureHandler=new i.FutureHandler(this)}updateModel(e){const{inserted:t,holderPath:r,boardPath:n,nozzlePath:s,childPump:o,name:a,path:c,...p}=e;this.inserted=t,this.type=e.type,this.ingredientId=e.ingredientId,this.holderPath=r,this.boardPath=n,this.nozzlePath=s,this.childPump=this.childPump?this.childPump:!!o,this.name=a,this.path=c,this.prevIngredientId=e.prevIngredientId,Object.assign(this,p)}get troubles(){return this.troubleContainer.troubles.getIndexByKey("byIface",this.path).sort((e,t)=>t.rank-e.rank)}get troubleStatus(){return""}get troublesByType(){return this.troubles.reduce(i.troubleByTypeReducer,{})}get pouringState(){var e;return((e=this.future)==null?void 0:e.endState)||""}get isPouring(){var e;return!!(this.future&&!((e=this.future)!=null&&e.endState))||this.currentState===l.POUR_STARTING||this.currentState===l.POURING}get canPour(){return!!this.ingredientId&&!this.isPouring}onFutureUpdate(e){e.endState&&i.kosAction(()=>{this.currentState=l.IDLE})}async cancelPour(){var e;this.currentState===l.POURING||this.currentState===l.POUR_STARTING?(this.currentState=l.POUR_CANCELING,await((e=this.future)==null?void 0:e.cancelFuture()),i.kosAction(()=>{this.currentState=l.IDLE})):i.KosLog.warn(`Cannot cancel pour in state ${this.currentState}`)}get future(){return this.futureHandler.future}async resolveIntentVolume(e){return await Ke(this.path,e)}async performIntent(e,t){const r=typeof e=="string"?e:e.intent;if(!r)throw new Error("No intent provided");try{if(this.currentState===l.IDLE){if(this.currentState=l.POUR_STARTING,!t)throw new Error("No tracker provided");const n=await Ue({tracker:t,intent:r,pumpId:this.path});return this.currentState===l.POUR_STARTING&&i.kosAction(()=>{this.currentState=l.POURING}),n==null?void 0:n.data}else throw new Error(`Cannot pour in state ${this.currentState}`)}catch(n){throw i.KosLog.error(n),this.currentState=l.IDLE,n}}};me([i.kosDependency({modelType:i.TroubleContainer.type})],L.prototype,"troubleContainer",2);me([i.kosFuture()],L.prototype,"performIntent",1);L=me([i.kosModel(A)],L);const fe={registration:{[A]:{class:L,singleton:!1}},type:A,predicate:i.isKosModel(A),factory:i.Kos.Factory.create(A)},qt=i.KosLog.createLogger({name:"pump-utils"}),Jt=(e,t)=>{const r=(t.pumps??[]).length>1,n={boardPath:t.boardPath,holderPath:t.holderPath,ingredientId:t.ingredientId,childPump:!!t.childPump,virtual:r,inserted:t.inserted,name:t.name,path:t.path,type:t.type,nozzlePath:e,prevIngredientId:t.prevIngredientId},s=fe.factory(t.path)(n);return s.updateModel(n),s},ke=e=>t=>r=>n=>{var c;qt.debug(`adding pump ${n.name}`);const s=Jt(r.path,n);e.addModel(s);const o=s.holderPath,a=t.holders.getModel(o);a==null||a.pumps.addModel(s),a!=null&&a.nozzlePaths.includes(r.path)||a==null||a.nozzlePaths.push(r.path),(c=n==null?void 0:n.pumps)==null||c.forEach(p=>{const u=s.holderPath,h={...p,childPump:!0,holderPath:u,ingredientId:s.ingredientId};ke(e)(t)(r)(h)})};var Wt=Object.defineProperty,Qt=Object.getOwnPropertyDescriptor,x=(e,t,r,n)=>{for(var s=n>1?void 0:n?Qt(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&Wt(t,r,s),s};const N="assembly-model",Fe="assembly-data",Ge="assembly-raw-data";let m=class{constructor(e,t,r){d(this,"id");d(this,"_nozzlePaths",new Set);d(this,"troubleContainer");d(this,"holderContainer");d(this,"boardContainer");d(this,"pumpContainer");d(this,"logger");this.id=e,this.holderContainer=Ie.factory({}),this.boardContainer=ye.factory({}),this.pumpContainer=J.factory({}),this.logger=r.logger}updateModel(e){}get allHolders(){return this.holderContainer.holders.data}get holderGroups(){return this.holderContainer.holders.getIndexKeys("group")}get nozzlePaths(){return Array.from(this._nozzlePaths)}getHoldersByGroup(e){return this.holderContainer.holders.getIndexByKey("group",e)}getHoldersByNozzle(e){return this.holderContainer.holders.getIndexByKey("nozzle",e)}get pumpsByNozzle(){return this.pumpContainer.models.idx.byNozzle}get pumpPaths(){return this.pumpContainer.models.data.map(e=>e.path)}get boards(){return this.boardContainer.boardList}async init(){this.logger.debug(`initializing assembly ${this.id}`)}async ready(){var e;(e=this.troubleContainer)==null||e.troubles.increment(),i.ExtensionManager[i.EXTENSION_FEATURE_FLAG_RESOLVER].execute(g.AssemblyFeatureFlags,this)}async load(e){this.logger.debug(`loading assembly ${this.id}`);const t=await ce();if((t==null?void 0:t.status)===200){const r=await i.KosExtensionUtils.executeDataMapperExtension({extension:g.AssemblyMapper,data:t.data,contextData:{}});e.set(Fe,r),Object.assign(this,r),Object.entries(r).forEach(([n,s])=>{i.isKosDataModel(s)&&(this.logger.debug(`adding child model ${n} from extension data`),this[i.ChildModels][n]=!0)}),e.set(Ge,t.data);for await(const n of t.data.assemblies){const{boards:s=[],holders:o={},nozzles:a=[],core:c,name:p,path:u,...h}=n;this.logger.debug(`adding assembly ${p}`),Object.keys(h).forEach(y=>{i.KosFeatureFlags.enableFeature(y)});for await(const y of s)this.logger.debug(`adding board ${y.name}`),await jt(this.boardContainer)(y);for await(const[y,P]of Object.entries(o??{}))for await(const U of P){this.logger.debug(`adding holder ${U.name}`);const Me=await Mt(y,U);this.holderContainer.holders.addModel(Me)}const _=ke(this.pumpContainer)(this.holderContainer);a.forEach(y=>{this._nozzlePaths.add(y.path);const P=_(y);y.pumps.forEach(P)})}}}};x([i.kosDependency({modelType:"trouble-container-model"})],m.prototype,"troubleContainer",2);x([i.kosChild],m.prototype,"holderContainer",2);x([i.kosChild],m.prototype,"boardContainer",2);x([i.kosChild],m.prototype,"pumpContainer",2);m=x([i.kosModel(N)],m);const Pe={registration:{[N]:{class:m,singleton:!0}},type:N,predicate:i.isKosModel(N),factory:i.Kos.Singleton.create(N)};var er=Object.getOwnPropertyDescriptor,tr=(e,t,r,n)=>{for(var s=n>1?void 0:n?er(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=a(s)||s);return s};const D=v.Availability;let ne=class{constructor(e,t,r){d(this,"id");d(this,"data");d(this,"properties");d(this,"available");d(this,"visible");d(this,"groupId");d(this,"rawId");d(this,"altId");d(this,"type");d(this,"note");d(this,"taggedIds");d(this,"parentId");d(this,"logger");this.id=e,this.taggedIds=t.taggedIds||[],this.logger=r.logger,this.available=t.available,this.visible=t.visible,this.groupId=t.groupId,this.rawId=t.rawId,this.altId=t.altId,this.type=t.type,this.parentId=t.kosParentId,this.data=t.data,this.note=t.note,this.properties=t.properties||{}}updateModel(e){this.taggedIds=e.taggedIds||[],this.available=e.available,this.visible=e.visible,this.groupId=e.groupId,this.rawId=e.rawId,this.altId=e.altId,this.type=e.type,this.data=e.data}updateAvailability(e){this.available=e}};ne=tr([i.kosParentAware(),i.kosModel(D)],ne);const j={registration:{[D]:{class:ne,singleton:!1}},type:D,predicate:i.isKosModel(D),factory:i.Kos.Factory.create(D)},{URL:E}=i.resolveServiceUrl("NOZZLE_SERVICE"),{postModel:be,deleteModel:rr,getOne:ir}=i.ServiceFactory.build({basePath:`${E}/api/nozzle`}),He=async(e,t)=>{const r=await be({model:{},urlOverride:`${E}/api/ext/dispense/nozzle/${e}/pipeline/beverage/pour`,ordered:!0,tracker:t});return r!=null&&r.data&&i.FutureManager.initiateFuture(r.data),r},je=async(e,t,r)=>{const n=await be({model:{},urlOverride:`${E}/api/ext/dispense/nozzle/${t}/pipeline/beverage/fixed/${e}`,ordered:!0,tracker:r});return n!=null&&n.data&&i.FutureManager.initiateFuture(n.data),n},se=async e=>await ir({urlOverride:`${E}${e}/pipeline/beverage/availability`}),Ve=async(e,t)=>await be({model:t,urlOverride:`${E}/api/ext/dispense/nozzle/${e}/pipeline/beverage/select`}),Ye=async e=>await rr({id:e,urlOverride:`${E}/api/ext/dispense/nozzle/${e}/pipeline/beverage/select`});var nr=Object.defineProperty,sr=Object.getOwnPropertyDescriptor,B=(e,t,r,n)=>{for(var s=n>1?void 0:n?sr(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&nr(t,r,s),s};const z=v.Nozzle,or=i.createPropKey("beverageTopicPrefix"),K=e=>e.onPourStart!==void 0&&e.onPourCancel!==void 0&&e.onPourProgress!==void 0,we="/kos/nozzle/pour/started",ar="/kos/nozzle/pour/progress",ee="/kos/nozzle/pour/cancel";let f=class{constructor(e,t,r){d(this,"id");d(this,"path");d(this,"logger");d(this,"name");d(this,"_selectedBeverage");d(this,"_selectedBrand");d(this,"_additionalItems");d(this,"_availabilityItems");d(this,"futureHandler");d(this,"currentState",l.IDLE);d(this,"beverageTopicPrefix");d(this,"topicPrefix");d(this,"urlPrefix");this.id=e,this.path=t.path,this.name=t.name,this.beverageTopicPrefix=t.beverageTopicPrefix,this.topicPrefix=t.topicPrefix,this.urlPrefix=t.urlPrefix,this._selectedBeverage=void 0,this._selectedBrand=void 0,this._additionalItems=[],this.futureHandler=new i.MultipleFutureHandler(this),this._availabilityItems=new i.KosModelContainer({indexMap:{byGroup:"groupId",byParent:"parentId"},parentId:e}),this.logger=r.logger}get beverages(){return this._availabilityItems.getIndexByKey("byGroup","beverages")}get brands(){return this._availabilityItems.getIndexByKey("byGroup","brands")}get visibleBrands(){return this.brands.filter(e=>e.visible)}get visibleBeverages(){return this.beverages.filter(e=>e.visible)}get isPouring(){var e;return!!(this.futureHandler.getFuture()&&!((e=this.futureHandler.getFuture())!=null&&e.endState))||this.currentState===l.POUR_STARTING||this.currentState===l.POURING||this.currentState===l.POUR_CANCELING}get canPour(){return!!this._selectedBeverage&&this._selectedBeverage.available&&this.currentState===l.IDLE}get selectedPourable(){return{beverage:this._selectedBeverage,additional:this._additionalItems}}get future(){return this.futureHandler.getFuture()}get pourProgress(){var e;return((e=this.future)==null?void 0:e.progress)??0}updateModel(){}setSelectedBrand(e){this._selectedBrand=e,this._selectedBeverage=void 0}get selectedBrand(){return this._selectedBrand}async setSelectedPourable({beverage:e,additional:t,context:r}){if(!e){const c=await Ye(this.name);if((c==null?void 0:c.status)!==200)throw new Error("Failed to clear pourable");this._selectedBeverage=void 0;return}if(e===this._selectedBeverage&&i.arraysEqual(this._additionalItems,t)){this.logger.info("No change in selected pourable");return}this._selectedBeverage=e,this._additionalItems=t;let n=await i.ExtensionManager.dataMapper.executeMapper(g.SelectedPourableMapper,{beverage:e,additional:t,context:r});const s={bevId:e.rawId};(!n||Object.keys(n).length===0)&&(this.logger.info(`No selected pourable mapper defined, using the default payload ${s}`),n=s);const o=n??s,a=await Ve(this.name,o);if((a==null?void 0:a.status)!==200)throw new Error("Failed to select pourable")}getGroupAvailabilityItems(e){return this._availabilityItems.getIndexByKey("byGroup",e)}getAvailabilityByParent(e){return this._availabilityItems.getIndexByKey("byParent",e)}updateIfCurrent(e,t){this.currentState===e&&i.kosAction(()=>{this.currentState=t})}onFutureUpdate(e){i.getAllKosCompanionModels(this).forEach(n=>{K(n)&&n.onPourProgress(e)});const r={nozzleId:this.id,progress:e.progress,status:e.status,clientData:e.clientData,futureId:e.futureId,remainingTimeMs:e.remainingTimeMs,endState:e.endState,reason:e.reason,timeRemaining:e.timeRemaining};i.EventBus.publish(ar,r),e.endState&&i.kosAction(()=>{this.currentState=l.IDLE})}async pour(e){var t;try{if(this.currentState===l.IDLE){if(this.updateIfCurrent(l.IDLE,l.POUR_STARTING),!e)throw new Error("No tracker provided");const r=await He(this.name,e);this.updateIfCurrent(l.POUR_STARTING,l.POURING),i.getAllKosCompanionModels(this).forEach(s=>{var o;K(s)&&((o=s.onPourStart)==null||o.call(s))});const n={nozzleId:this.id,type:"free"};if(i.EventBus.publish(we,n),(t=r==null?void 0:r.data)!=null&&t.endState){this.updateIfCurrent(l.POURING,l.IDLE);const s={nozzleId:this.id};i.EventBus.publish(ee,s)}return r}else throw new Error(`Cannot pour in state ${this.currentState}`)}catch(r){throw this.logger.error(r),this.currentState=l.IDLE,r}}async fixedPour(e,t){var r;try{if(this.currentState===l.IDLE){if(this.currentState=l.POUR_STARTING,!t)throw new Error("No tracker provided");const n=await je(e,this.name,t);this.currentState===l.POUR_STARTING&&i.kosAction(()=>{this.currentState=l.POURING}),i.getAllKosCompanionModels(this).forEach(o=>{var a;K(o)&&((a=o.onPourStart)==null||a.call(o))});const s={nozzleId:this.id,type:"fixed"};if(i.EventBus.publish(we,s),(r=n==null?void 0:n.data)!=null&&r.endState){this.updateIfCurrent(l.POURING,l.IDLE);const o={nozzleId:this.id};i.EventBus.publish(ee,o)}return n}else throw new Error(`Cannot pour in state ${this.currentState}`)}catch(n){throw this.logger.error(n),this.currentState=l.IDLE,n}}async cancelPour(){var e;if(this.currentState===l.POURING||this.currentState===l.POUR_STARTING){this.currentState=l.POUR_CANCELING,await((e=this.futureHandler.getFuture())==null?void 0:e.cancelFuture()),i.kosAction(()=>{this.currentState=l.IDLE}),i.getAllKosCompanionModels(this).forEach(r=>{var n;K(r)&&((n=r.onPourCancel)==null||n.call(r))});const t={nozzleId:this.id};i.EventBus.publish(ee,t)}else this.logger.warn(`Cannot cancel pour in state ${this.currentState}`)}updateGroupMembers(){this._availabilityItems.data.forEach(e=>{(e.taggedIds||[]).forEach(r=>{const n=this._availabilityItems.data.find(s=>s.rawId===r);n&&n.parentId!==e.id&&(n.parentId=e.id,this._availabilityItems.updateModel(n))})})}async reload(){this.logger.info(`reloading nozzle ${this.id}`);const e=i.KosContextManager.getContext(this.id);e!=null&&e.get(g.AvailabilityLoader);const t=await se(this.urlPrefix);if((t==null?void 0:t.status)!==200||!(t!=null&&t.data)){this.logger.error("Failed to load nozzle availability");return}const r=t==null?void 0:t.data;r&&await this.updateAvailability(r)}async load(e){var n,s;this.logger.debug(`loading nozzle ${this.id}`);const t=await se(this.urlPrefix);if((t==null?void 0:t.status)!==200)throw new Error("Failed to load nozzle availability");const r=await i.ExtensionManager.loader.executeLoader(g.AvailabilityLoader,{});e==null||e.set(g.AvailabilityLoader,r),e==null||e.set(Q.type,this);for(const o of Object.keys((n=t.data)==null?void 0:n.groups)||[])for(const a of((s=t.data)==null?void 0:s.groups[o])||[]){const c=await i.ExtensionManager.dataMapper.executeMapper(g.AvailabilityMapper,{...a,groupId:o},r),p={...a,note:a.note??void 0,kosParentId:this.id,rawId:a.id,groupId:o,data:c,properties:a.properties||{}},u=j.factory(`${this.id}-${o}-${a.id}`)(p);this._availabilityItems.addModel(u)}this.updateGroupMembers()}async updateAvailability(e){const t=i.KosContextManager.getContext(this.id),r=(t==null?void 0:t.get(g.AvailabilityLoader))||{};if(e.rebuild){this.logger.info(`Received rebuild update for nozzle ${this.path}, rebuilding entire availability set`);for(const n of Object.keys(e==null?void 0:e.groups)||[]){this._availabilityItems.getIndexByKey("group",n).filter(o=>!e.groups[n].find(a=>`${this.id}-${n}-${a.id}`===o.id)).forEach(o=>{this.logger.info(`Removing beverage ${o.id} from nozzle ${this.path} due to rebuild update`),this._availabilityItems.removeModel(o.id),i.destroyKosModel(o)});for(const o of(e==null?void 0:e.groups[n])||[]){const a=await i.ExtensionManager.dataMapper.executeMapper(g.AvailabilityMapper,{...o,groupId:n},r),c={...o,note:o.note??void 0,kosParentId:this.id,groupId:n,rawId:o.id,data:a,taggedIds:o.taggedIds,properties:o.properties||{}},p=this._availabilityItems.getModel(`${this.id}-${n}-${o.id}`);if(p)p.available!==c.available&&this.logger.info(`Updating availability of beverage ${p.id} in nozzle ${this.path} to ${c.available}`),p.updateModel(c);else{this.logger.info(`Adding beverage ${o.id} to nozzle ${this.path}`);const u=j.factory(`${this.id}-${n}-${o.id}`)(c);this._availabilityItems.addModel(u)}}}}else{this.logger.info(`Received delta update for nozzle ${this.path}, updating availability nodes`);for(const n of Object.keys(e==null?void 0:e.groups)||[])for(const s of(e==null?void 0:e.groups[n])||[]){const o=await i.ExtensionManager.dataMapper.executeMapper(g.AvailabilityMapper,{...s,groupId:n},r),a={...s,note:s.note??void 0,kosParentId:this.id,groupId:n,rawId:s.id,data:o,type:s.type,taggedIds:s.taggedIds,properties:s.properties||{}},c=this._availabilityItems.getModel(`${this.id}-${n}-${s.id}`);c&&(c.available!==a.available&&this.logger.info(`Updating availability of beverage ${c.id} in nozzle ${this.path} to ${a.available}`),c.updateModel(a))}}this.updateGroupMembers()}};B([i.kosChild],f.prototype,"_availabilityItems",2);B([i.kosFuture()],f.prototype,"pour",1);B([i.kosFuture()],f.prototype,"fixedPour",1);B([i.kosTopicHandler({topic:`${or}/availability`,websocket:!0})],f.prototype,"updateAvailability",1);f=B([i.kosModel(z)],f);const Q={registration:{[z]:{class:f,singleton:!1}},type:z,predicate:i.isKosModel(z),factory:i.Kos.Factory.create(z)};var dr=Object.defineProperty,lr=Object.getOwnPropertyDescriptor,Xe=(e,t,r,n)=>{for(var s=n>1?void 0:n?lr(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&dr(t,r,s),s};const Ze="device-assembly-model";let V=class{constructor(e,t,r){d(this,"id");d(this,"deviceNozzles");d(this,"logger");this.id=e,this.logger=r.logger,this.deviceNozzles=new i.KosModelContainer}async init(){this.logger.debug(`initializing device-assembly ${this.id}`)}getNozzle(e){return this.deviceNozzles.getModel(e)}get nozzlePaths(){return this.deviceNozzles.data.map(e=>e.path)}async load(){this.logger.debug(`loading device-assembly ${this.id}`);const e=await ce();(e==null?void 0:e.status)===200&&e.data.assemblies.map(r=>r.nozzles??[]).flat().forEach(r=>{var a;const n=r.path,s=((a=r.pipelines.find(c=>c.name==="beverage"))==null?void 0:a.topicPrefix)||"",o=Q.factory(n)({path:r.path,name:r.name,urlPrefix:r.urlPrefix,topicPrefix:r.topicPrefix,beverageTopicPrefix:s});this.deviceNozzles.addModel(o)})}};Xe([i.kosChild],V.prototype,"deviceNozzles",2);V=Xe([i.kosModel(Ze)],V);const qe=new i.SingletonKosModelRegistrationFactory({class:V,type:Ze}),{URL:Je}=i.resolveServiceUrl("GENERIC_POUR_SERVICE"),{postModel:cr}=i.ServiceFactory.build({basePath:`${Je}/api/nozzle`}),We=async(e,t)=>{const r=await cr({model:{},urlOverride:`${Je}${e}`,ordered:!0,tracker:t});return r!=null&&r.data&&i.FutureManager.initiateFuture(r.data),r};var pr=Object.defineProperty,gr=Object.getOwnPropertyDescriptor,Qe=(e,t,r,n)=>{for(var s=n>1?void 0:n?gr(t,r):t,o=e.length-1,a;o>=0;o--)(a=e[o])&&(s=(n?a(t,r,s):a(s))||s);return n&&s&&pr(t,r,s),s};const et="generic-pour-model",ur="/kos/generic/pour/started",hr="/kos/generic/pour/progress",Ce="/kos/generic/pour/cancel",te=e=>e.onPourStart!==void 0&&e.onPourCancel!==void 0&&e.onPourProgress!==void 0;let Y=class{constructor(e,t,r){d(this,"id");d(this,"currentState",l.IDLE);d(this,"servicePathFactory");d(this,"pourType");d(this,"logger");d(this,"futureHandler");d(this,"selectedId");this.id=e,this.logger=r.logger,this.futureHandler=new i.FutureHandler(this),this.servicePathFactory=t.servicePathFactory,this.pourType=t.pourType||"free",this.selectedId=t.selectedId}get servicePath(){return this.selectedId?this.servicePathFactory(this.selectedId):""}async pour(e){var t;try{if(this.currentState===l.IDLE){if(this.updateIfCurrent(l.IDLE,l.POUR_STARTING),!e)throw new Error("No tracker provided");const r=await We(this.servicePath,e);this.updateIfCurrent(l.POUR_STARTING,l.POURING),i.getAllKosCompanionModels(this).forEach(s=>{var o;te(s)&&((o=s.onPourStart)==null||o.call(s))});const n={pourTarget:this.id,type:this.pourType};if(i.EventBus.publish(ur,n),(t=r==null?void 0:r.data)!=null&&t.endState){this.updateIfCurrent(l.POURING,l.IDLE);const s={pourTarget:this.id};i.EventBus.publish(Ce,s)}return r}else throw new Error(`Cannot pour in state ${this.currentState}`)}catch(r){throw this.logger.error(r),this.currentState=l.IDLE,r}}async cancelPour(){var e;if(this.currentState===l.POURING||this.currentState===l.POUR_STARTING){this.currentState=l.POUR_CANCELING,await((e=this.futureHandler.getFuture())==null?void 0:e.cancelFuture()),i.kosAction(()=>{this.currentState=l.IDLE}),i.getAllKosCompanionModels(this).forEach(r=>{var n;te(r)&&((n=r.onPourCancel)==null||n.call(r))});const t={pourTarget:this.id};i.EventBus.publish(Ce,t)}this.currentState===l.IDLE?this.logger.info("Pour already idle, nothing to cancel."):this.logger.warn(`Cannot cancel pour in state ${this.currentState}`)}updateIfCurrent(e,t){this.currentState===e&&i.kosAction(()=>{this.currentState=t})}get isPouring(){var e;return!!(this.futureHandler.getFuture()&&!((e=this.futureHandler.getFuture())!=null&&e.endState))||this.currentState===l.POUR_STARTING||this.currentState===l.POURING||this.currentState===l.POUR_CANCELING}get canPour(){return this.currentState===l.IDLE}get future(){return this.futureHandler.getFuture()}get pourProgress(){var e;return((e=this.future)==null?void 0:e.progress)??0}onFutureUpdate(e){i.getAllKosCompanionModels(this).forEach(r=>{te(r)&&r.onPourProgress(e)});const t={pourTarget:this.id,progress:e.progress,status:e.status,clientData:e.clientData,futureId:e.futureId,remainingTimeMs:e.remainingTimeMs,endState:e.endState,reason:e.reason,timeRemaining:e.timeRemaining};i.EventBus.publish(hr,t),e.endState&&i.kosAction(()=>{this.currentState=l.IDLE})}async init(){this.logger.debug(`initializing generic-pour ${this.id}`)}async load(){this.logger.debug(`loading generic-pour ${this.id}`)}};Qe([i.kosFuture()],Y.prototype,"pour",1);Y=Qe([i.kosModel(et)],Y);const yr=new i.KosModelRegistrationFactory({class:Y,type:et}),oe={...de.registration,...ae.registration,...Ie.registration,...le.registration,...Q.registration,...fe.registration,...J.registration,...j.registration,...Pe.registration,...ye.registration},tt=e=>()=>(i.registerCoreModels(e)(),qe.register(),Object.keys(oe).forEach(t=>{const r=oe[t];i.registerLegacyModel(e)(t,r)}),i.ExtensionManager[i.EXTENSION_TROUBLE_DATA_MAPPER].register("FirmwareUpdateInProgressTrouble",async t=>{var r;if((r=t.data)!=null&&r.deviceId){const{model:n}=i.getKosModelSync(Pe.type);if(n){const s=n.boards.find(o=>o.id===t.data.deviceId)?i.getKosModelSync(t.data.deviceId).model:void 0;return{devices:s?s.name:""}}}return{}}),{preload:i.RegistrationManager.model.preloadModel(e),model:i.RegistrationManager.model.register(e),companion:i.RegistrationManager.companion.register(e),legacy:i.RegistrationManager.model.registerLegacyModel(e)}),I={...i.KosModelRegistry};I.dispense={models:tt(I)};I.preload=i.RegistrationManager.model.preloadModel(I);I.model=i.RegistrationManager.model.register(I);I.companion=i.RegistrationManager.companion.register(I);I.legacy=i.RegistrationManager.model.registerLegacyModel(I);const Ir=I;exports.Assembly=Pe;exports.Availability=j;exports.Board=he;exports.BoardContainer=ye;exports.CONTEXT_ASSEMBLY_DATA=Fe;exports.CONTEXT_ASSEMBLY_RAW_DATA=Ge;exports.DeviceAssembly=qe;exports.DispenseModelType=v;exports.ExtensionType=g;exports.GenericPour=yr;exports.Holder=le;exports.HolderContainer=Ie;exports.Ingredient=ae;exports.IngredientContainer=de;exports.KosModelRegistry=Ir;exports.Nozzle=Q;exports.PourState=l;exports.Pump=fe;exports.PumpContainer=J;exports.PumpIndex=ue;exports.TOPIC_BOARD_LINKED=pe;exports.TOPIC_BOARD_UNLINKED=ge;exports.addAssignment=vt;exports.assignHolderIngredient=Ae;exports.clearPourable=Ye;exports.deleteAssignment=mt;exports.getAssembly=ce;exports.getAssignments=It;exports.getAvailability=se;exports.getHolders=ut;exports.getIngredients=Re;exports.getIntentVolume=Ke;exports.kosModels=oe;exports.pourNamedPourable=je;exports.pourOnTarget=We;exports.pourPourable=He;exports.registerDispenseModels=tt;exports.replaceLine=De;exports.selectPourable=Ve;exports.sendIntent=Ue;exports.sendRfidOverride=Le;exports.unassignHolderIngredient=Ne;
2
+ //# sourceMappingURL=dispense-registration-manager-oEcu0aLL.cjs.map