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

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-C7GGaZ47.js +2673 -0
  2. package/dispense-registration-manager-C7GGaZ47.js.map +1 -0
  3. package/dispense-registration-manager-lQhkTFKW.cjs +2671 -0
  4. package/dispense-registration-manager-lQhkTFKW.cjs.map +1 -0
  5. package/extension-utils-50g2ril2.cjs +500 -0
  6. package/extension-utils-50g2ril2.cjs.map +1 -0
  7. package/extension-utils-Dt00FOJq.js +501 -0
  8. package/extension-utils-Dt00FOJq.js.map +1 -0
  9. package/extensions/control-pour-extension.d.ts +70 -0
  10. package/extensions/control-pour-extension.d.ts.map +1 -0
  11. package/extensions/index.d.ts +2 -0
  12. package/extensions/index.d.ts.map +1 -0
  13. package/index.cjs +142 -1
  14. package/index.cjs.map +1 -1
  15. package/index.d.ts +2 -1
  16. package/index.d.ts.map +1 -1
  17. package/index.js +133 -103
  18. package/index.js.map +1 -1
  19. package/kos-models.json +180 -0
  20. package/models/models/assembly/assembly-model.d.ts +4 -0
  21. package/models/models/assembly/assembly-model.d.ts.map +1 -1
  22. package/models/models/assembly/pump-utils.d.ts.map +1 -1
  23. package/models/models/availability/availability-model.d.ts.map +1 -1
  24. package/models/models/board/board-container-model.d.ts +4 -0
  25. package/models/models/board/board-container-model.d.ts.map +1 -1
  26. package/models/models/board/board-model.d.ts +4 -0
  27. package/models/models/board/board-model.d.ts.map +1 -1
  28. package/models/models/device-assembly/device-assembly-model.d.ts +4 -0
  29. package/models/models/device-assembly/device-assembly-model.d.ts.map +1 -1
  30. package/models/models/generic-pour/generic-pour-model.d.ts +54 -13
  31. package/models/models/generic-pour/generic-pour-model.d.ts.map +1 -1
  32. package/models/models/generic-pour/index.d.ts +2 -2
  33. package/models/models/generic-pour/index.d.ts.map +1 -1
  34. package/models/models/generic-pour/types/index.d.ts +1 -0
  35. package/models/models/holder/holder-model.d.ts.map +1 -1
  36. package/models/models/holder-container/holder-container-model.d.ts.map +1 -1
  37. package/models/models/ingredient/ingredient-model.d.ts.map +1 -1
  38. package/models/models/ingredient-container/ingredient-container-model.d.ts.map +1 -1
  39. package/models/models/nozzle/index.d.ts +1 -1
  40. package/models/models/nozzle/index.d.ts.map +1 -1
  41. package/models/models/nozzle/nozzle-model.d.ts +28 -9
  42. package/models/models/nozzle/nozzle-model.d.ts.map +1 -1
  43. package/models/models/nozzle/types/index.d.ts +8 -0
  44. package/models/models/pump/pump-model.d.ts.map +1 -1
  45. package/models/models/pump/types/index.d.ts +7 -2
  46. package/models/models/pump-container/pump-container-model.d.ts.map +1 -1
  47. package/models/models/types/assembly.d.ts +4 -0
  48. package/models/models/types/assembly.d.ts.map +1 -1
  49. package/models/models/types/intent.d.ts +98 -0
  50. package/models/models/types/intent.d.ts.map +1 -1
  51. package/models/models/types/pouring.d.ts +1 -3
  52. package/models/models/types/pouring.d.ts.map +1 -1
  53. package/models/utils/dispense-registration-manager.d.ts +2 -2
  54. package/models/utils/extension-utils.d.ts +90 -18
  55. package/models/utils/extension-utils.d.ts.map +1 -1
  56. package/models/utils/openapi-index.d.ts +2 -0
  57. package/models/utils/openapi-index.d.ts.map +1 -0
  58. package/models/utils/service.d.ts +16 -12
  59. package/models/utils/service.d.ts.map +1 -1
  60. package/models/utils/services/dispense/1.6.5/openapi.d.ts +845 -0
  61. package/models/utils/services/dispense/1.6.5/service.d.ts +122 -0
  62. package/models/utils/services/dispense/1.6.5/service.d.ts.map +1 -0
  63. package/models/utils/services/dispense/1.8.1/openapi.d.ts +1653 -0
  64. package/models/utils/services/dispense/1.8.1/service.d.ts +122 -0
  65. package/models/utils/services/dispense/1.8.1/service.d.ts.map +1 -0
  66. package/models/utils/services/dispense/daily/openapi.d.ts +1820 -0
  67. package/models/utils/services/dispense/daily/service.d.ts +122 -0
  68. package/models/utils/services/dispense/daily/service.d.ts.map +1 -0
  69. package/models/utils/services-index.d.ts +4 -0
  70. package/models/utils/services-index.d.ts.map +1 -0
  71. package/models.cjs +47 -1
  72. package/models.cjs.map +1 -1
  73. package/models.js +40 -37
  74. package/package.json +19 -2
  75. package/pump-provider-CBFev3qg.cjs +1824 -0
  76. package/pump-provider-CBFev3qg.cjs.map +1 -0
  77. package/pump-provider-DyxEmFRT.js +1825 -0
  78. package/pump-provider-DyxEmFRT.js.map +1 -0
  79. package/ui/contexts/cui-kit/cui-kit.d.ts +4 -4
  80. package/ui/contexts/cui-kit/cui-kit.d.ts.map +1 -1
  81. package/ui/hooks/cui-kit/dispense-topics.d.ts +47 -0
  82. package/ui/hooks/cui-kit/dispense-topics.d.ts.map +1 -0
  83. package/ui/hooks/cui-kit/use-beverages.d.ts +3 -2
  84. package/ui/hooks/cui-kit/use-beverages.d.ts.map +1 -1
  85. package/ui/hooks/cui-kit/use-brands.d.ts +1 -1
  86. package/ui/hooks/cui-kit/use-brands.d.ts.map +1 -1
  87. package/ui/hooks/cui-kit/use-cui-kit.d.ts +3 -2
  88. package/ui/hooks/cui-kit/use-cui-kit.d.ts.map +1 -1
  89. package/ui/hooks/cui-kit/use-dispense-lifecycle.d.ts +2 -1
  90. package/ui/hooks/cui-kit/use-dispense-lifecycle.d.ts.map +1 -1
  91. package/ui/hooks/cui-kit/use-flavors.d.ts +1 -1
  92. package/ui/hooks/cui-kit/use-flavors.d.ts.map +1 -1
  93. package/ui/hooks/generic-pour/use-generic-pour.d.ts +3 -2
  94. package/ui/hooks/generic-pour/use-generic-pour.d.ts.map +1 -1
  95. package/ui/hooks/nozzle-pour/use-nozzle-pour.d.ts +6 -2
  96. package/ui/hooks/nozzle-pour/use-nozzle-pour.d.ts.map +1 -1
  97. package/ui/hooks/pour/use-pour.d.ts +8 -3
  98. package/ui/hooks/pour/use-pour.d.ts.map +1 -1
  99. package/ui/hooks/utils/pour-strategy/hold-to-pour-strategy.d.ts.map +1 -1
  100. package/ui/hooks/utils/pour-strategy/pour-strategy.d.ts +2 -9
  101. package/ui/hooks/utils/pour-strategy/pour-strategy.d.ts.map +1 -1
  102. package/ui/hooks/utils/pour-strategy/tap-to-pour-strategy.d.ts.map +1 -1
  103. package/ui/index.d.ts +1 -0
  104. package/ui/index.d.ts.map +1 -1
  105. package/ui/utils/pour-context.d.ts +8 -0
  106. package/ui/utils/pour-context.d.ts.map +1 -0
  107. package/ui.cjs +73 -1
  108. package/ui.cjs.map +1 -1
  109. package/ui.js +66 -65
  110. package/dispense-registration-manager-B6nEgoFC.js +0 -1960
  111. package/dispense-registration-manager-B6nEgoFC.js.map +0 -1
  112. package/dispense-registration-manager-CFnZNxso.cjs +0 -2
  113. package/dispense-registration-manager-CFnZNxso.cjs.map +0 -1
  114. package/extension-utils-CtCTSFBg.js +0 -381
  115. package/extension-utils-CtCTSFBg.js.map +0 -1
  116. package/extension-utils-DupW7Vca.cjs +0 -2
  117. package/extension-utils-DupW7Vca.cjs.map +0 -1
  118. package/pump-provider-BWzCQ8mL.js +0 -1238
  119. package/pump-provider-BWzCQ8mL.js.map +0 -1
  120. package/pump-provider-vk4pL4O3.cjs +0 -2
  121. package/pump-provider-vk4pL4O3.cjs.map +0 -1
@@ -1,2 +0,0 @@
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 u=(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))(u||{}),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 oe={registration:{[O]:{class:re,singleton:!1}},type:O,predicate:i.isKosModel(O),factory:i.Kos.Factory.create(O)},{URL:Ce}=i.resolveServiceUrl("INGREDIENT_SERVICE"),{getOne:ot}=i.ServiceFactory.build({basePath:`${Ce}/api/ext/dispense/ingredients`}),Se=async()=>await ot({urlOverride:`${Ce}/api/ext/dispense/ingredients`});var at=Object.defineProperty,dt=Object.getOwnPropertyDescriptor,Re=(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:u.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 Se();if((t==null?void 0:t.status)!==200)throw new Error("Failed to load ingredients");const r=await i.KosExtensionUtils.executeLoaderExtension({context:e,extension:u.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:u.IngredientMapper,data:a,contextData:r}),p=await i.KosExtensionUtils.executePropertyMapperExtension({extension:u.IngredientTypeMapper,data:a,contextData:r}),g={...a,type:p||a.type,...c,data:c},h=oe.factory(a.id)(g);this.ingredients.addModel(h)}}};Re([i.kosChild],k.prototype,"ingredients",2);k=Re([i.kosModel(w)],k);const ae={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:$e,deleteModel:pt}=i.ServiceFactory.build({basePath:`${X}/api/kos/holders`}),gt=i.KosLog.createLogger({name:"holder-service",group:"Services"}),ut=async()=>await ct({}),Te=async(e,t)=>{if(!e||!t)throw new Error("Missing holderPath or ingredientId");return await $e({model:{holderPath:e,ingredientId:t},urlOverride:`${X}/api/ext/dispense/assignments`})},Ae=async e=>{if(!e)throw new Error("Missing holderPath");return await pt({id:e,urlOverride:`${X}/api/ext/dispense/assignments/${e}`})},Ne=async e=>{if(!e)throw new Error("Missing holderPath");return gt.debug(`sending POST request to /api/ext/dispense/pumpEvents/replaceLine/${e}`),await $e({model:{},urlOverride:`${X}/api/ext/dispense/pumpEvents/replaceLine/${e}`})},{URL:F}=i.resolveServiceUrl("ASSIGNMENT_SERVICE"),{getAll:ht,postModel:De,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 De({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 De({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,Ee=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:g},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=g,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 Ee.error(`Failed to perform rfid override on holder ${this.id}`,t),t}}async assignIngredient(e){try{e?await Te(this.path,e):await Ae(this.path),i.kosAction(()=>{this.ingredientId=e})}catch(t){throw Ee.error(`Failed to perform assign ingredient to holder ${this.id}`,t),t}}get shouldDefer(){return this.troubles.some(e=>e.shouldDefer)}async replaceLine(){await Ne(this.path)}};Z([i.kosChild],b.prototype,"pumps",2);Z([i.kosDependency({modelType:ae.type})],b.prototype,"ingredientContainer",2);Z([i.kosDependency({modelType:i.TroubleContainer.type})],b.prototype,"troubleContainer",2);b=Z([i.kosModel(C)],b);const de={registration:{[C]:{class:b,singleton:!1}},type:C,predicate:i.isKosModel(C),factory:i.Kos.Factory.create(C)},Mt=async(e,t)=>{var Me;const r=i.ExtensionManager.propertyMapper.executeMapper(u.HolderIngredientMapper,t),n=i.ExtensionManager.propertyMapper.executeMapper(u.HolderTypeMapper,t)||t.ingType,s=await i.KosExtensionUtils.executeDataMapperExtension({extension:u.HolderMapper,data:t,contextData:{}}),{name:o,path:a,ingredientId:c,ingType:p,ingSource:g,slice:h,..._}=t,y={..._,...s},P=h||{pos:0},U={name:o,path:a,ingredientId:r||c,ingredientType:n||p,ingredientSource:g,enjoyByDate:(Me=t.container)!=null&&Me.enjoyByDate?new Date(t.container.enjoyByDate):void 0,slice:P,group:e,data:y};return de.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"}),le=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",ce="/kos/hardware/board/linked",pe="/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:u.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 ${ce} event ${t}`),t?this.updateBoard(t):this.logger.debug("- boardLinkEvent is undefined")}handleBoardUnlinkEvent(t){this.logger.debug(`handling ${pe} 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:ce,websocket:!0})],exports.BoardContainerModel.prototype,"handleBoardLinkEvent",1);q([i.kosTopicHandler({lifecycle:i.DependencyLifecycle.INIT,topic:pe,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,ze=(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 ge=(e=>(e.byBoard="byBoard",e.byType="byType",e.byNozzle="byNozzle",e))(ge||{});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:u.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(){}};ze([i.kosChild],H.prototype,"pumps",2);H=ze([i.kosModel(R)],H);const J={registration:{[R]:{class:H,singleton:!0}},type:R,predicate:i.isKosModel(R),factory:i.Kos.Singleton.create(R)},xe=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 xe(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(ge.byBoard,r).map(c=>xe(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",_e=(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,_e(t,this)}updateModel(e){_e(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 ue={registration:{[$]:{class:ie,singleton:!1}},type:$,predicate:i.isKosModel($),factory:i.Kos.Factory.create($)},he={registration:{[S]:{class:exports.BoardContainerModel,singleton:!0},...ue.registration},type:S,predicate:i.isKosModel(S),factory:i.Kos.Singleton.create(S)};var Lt=Object.defineProperty,zt=Object.getOwnPropertyDescriptor,W=(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&&Lt(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:u.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 g=s.pumps.getModel(p.path);g&&(g.ingredientId=p.ingredientId,g.inserted=p.inserted,g.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 ye={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:u.BoardMapper,data:e,contextData:{}}),{type:r,name:n,path:s,linked:o,instanceId:a,...c}=e,p={...c,...t},g={type:r,name:n,path:s,linked:o,instanceId:a,...p},h=ue.factory(e.path)(g);return h.updateModel(g),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:Ie}=i.resolveServiceUrl("PUMP_SERVICE"),{postModel:Vt,getOne:Yt}=i.ServiceFactory.build({basePath:`${Ie}/api/kos/holders`});i.KosLog.createLogger({name:"pump-service",group:"Services"});const Be=async({intent:e,pumpId:t,tracker:r})=>{const n=`${Ie}/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},Ue=async(e,t)=>{const r=`${Ie}/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,ve=(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 z=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:g,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=!!g,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 Ue(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 Be({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}}};ve([i.kosDependency({modelType:i.TroubleContainer.type})],z.prototype,"troubleContainer",2);ve([i.kosFuture()],z.prototype,"performIntent",1);z=ve([i.kosModel(A)],z);const me={registration:{[A]:{class:z,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=me.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 g=s.holderPath,h={...p,childPump:!0,holderPath:g,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",ke="assembly-data",Fe="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=ye.factory({}),this.boardContainer=he.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(u.AssemblyFeatureFlags,this)}async load(e){this.logger.debug(`loading assembly ${this.id}`);const t=await le();if((t==null?void 0:t.status)===200){const r=await i.KosExtensionUtils.executeDataMapperExtension({extension:u.AssemblyMapper,data:t.data,contextData:{}});e.set(ke,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(Fe,t.data);for await(const n of t.data.assemblies){const{boards:s=[],holders:o={},nozzles:a=[],core:c,name:p,path:g,...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 be=await Mt(y,U);this.holderContainer.holders.addModel(be)}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 fe={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:Pe,deleteModel:rr,getOne:ir}=i.ServiceFactory.build({basePath:`${E}/api/nozzle`}),Ge=async(e,t)=>{const r=await Pe({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},He=async(e,t,r)=>{const n=await Pe({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},je=async e=>await ir({urlOverride:`${E}${e}/pipeline/beverage/availability`}),Ve=async(e,t)=>await Pe({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 L=v.Nozzle,or=i.createPropKey("beverageTopicPrefix"),K=e=>e.onPourStart!==void 0&&e.onPourCancel!==void 0&&e.onPourProgress!==void 0,Oe="/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(u.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 Ge(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(Oe,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 He(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(Oe,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 load(e){var n,s;this.logger.debug(`loading nozzle ${this.id}`);const t=await je(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(u.AvailabilityLoader,{});e==null||e.set(u.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(u.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||{}},g=j.factory(`${this.id}-${o}-${a.id}`)(p);this._availabilityItems.addModel(g)}this.updateGroupMembers()}async updateAvailability(e){const t=i.KosContextManager.getContext(this.id),r=(t==null?void 0:t.get(u.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(u.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 g=j.factory(`${this.id}-${n}-${o.id}`)(c);this._availabilityItems.addModel(g)}}}}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(u.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(L)],f);const Q={registration:{[L]:{class:f,singleton:!1}},type:L,predicate:i.isKosModel(L),factory:i.Kos.Factory.create(L)};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 le();(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",we="/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(we,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(we,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}),se={...ae.registration,...oe.registration,...ye.registration,...de.registration,...Q.registration,...me.registration,...J.registration,...j.registration,...fe.registration,...he.registration},tt=e=>()=>(i.registerCoreModels(e)(),qe.register(),Object.keys(se).forEach(t=>{const r=se[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(fe.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=fe;exports.Availability=j;exports.Board=ue;exports.BoardContainer=he;exports.CONTEXT_ASSEMBLY_DATA=ke;exports.CONTEXT_ASSEMBLY_RAW_DATA=Fe;exports.DeviceAssembly=qe;exports.DispenseModelType=v;exports.ExtensionType=u;exports.GenericPour=yr;exports.Holder=de;exports.HolderContainer=ye;exports.Ingredient=oe;exports.IngredientContainer=ae;exports.KosModelRegistry=Ir;exports.Nozzle=Q;exports.PourState=l;exports.Pump=me;exports.PumpContainer=J;exports.PumpIndex=ge;exports.TOPIC_BOARD_LINKED=ce;exports.TOPIC_BOARD_UNLINKED=pe;exports.addAssignment=vt;exports.assignHolderIngredient=Te;exports.clearPourable=Ye;exports.deleteAssignment=mt;exports.getAssembly=le;exports.getAssignments=It;exports.getAvailability=je;exports.getHolders=ut;exports.getIngredients=Se;exports.getIntentVolume=Ue;exports.kosModels=se;exports.pourNamedPourable=He;exports.pourOnTarget=We;exports.pourPourable=Ge;exports.registerDispenseModels=tt;exports.replaceLine=Ne;exports.selectPourable=Ve;exports.sendIntent=Be;exports.sendRfidOverride=Le;exports.unassignHolderIngredient=Ae;
2
- //# sourceMappingURL=dispense-registration-manager-CFnZNxso.cjs.map