@zappie/sdk 0.1.1 → 0.1.3

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 (188) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cart/errors.js +13 -0
  3. package/dist/cart/errors.js.map +7 -0
  4. package/dist/cart/index.js +768 -0
  5. package/dist/cart/index.js.map +7 -0
  6. package/dist/cart/item.js +12 -1
  7. package/dist/cart/item.js.map +7 -1
  8. package/dist/cart/preview.js +32 -0
  9. package/dist/cart/preview.js.map +7 -0
  10. package/dist/cart/price.js +25 -0
  11. package/dist/cart/price.js.map +7 -0
  12. package/dist/cart/quote-client.js +76 -0
  13. package/dist/cart/quote-client.js.map +7 -0
  14. package/dist/cart/quote-response.js +178 -0
  15. package/dist/cart/quote-response.js.map +7 -0
  16. package/dist/cart/reconcile.js +108 -0
  17. package/dist/cart/reconcile.js.map +7 -0
  18. package/dist/cart/source-menu.js +21 -0
  19. package/dist/cart/source-menu.js.map +7 -0
  20. package/dist/cart/storage.js +174 -0
  21. package/dist/cart/storage.js.map +7 -0
  22. package/dist/cart/types.js +1 -0
  23. package/dist/cart/types.js.map +7 -0
  24. package/dist/cart/validate.js +265 -0
  25. package/dist/cart/validate.js.map +7 -0
  26. package/dist/cart/wire.js +42 -0
  27. package/dist/cart/wire.js.map +7 -0
  28. package/dist/cart/working-set.js +80 -0
  29. package/dist/cart/working-set.js.map +7 -0
  30. package/dist/checkout/client.js +102 -0
  31. package/dist/checkout/client.js.map +7 -0
  32. package/dist/checkout/error.js +21 -0
  33. package/dist/checkout/error.js.map +7 -0
  34. package/dist/checkout/index.js +13 -1
  35. package/dist/checkout/index.js.map +7 -1
  36. package/dist/checkout/readiness.js +36 -0
  37. package/dist/checkout/readiness.js.map +7 -0
  38. package/dist/checkout/sdk.js +9 -0
  39. package/dist/checkout/sdk.js.map +7 -0
  40. package/dist/checkout/session.js +58 -0
  41. package/dist/checkout/session.js.map +7 -0
  42. package/dist/checkout/types.js +1 -0
  43. package/dist/checkout/types.js.map +7 -0
  44. package/dist/client.js +253 -0
  45. package/dist/client.js.map +7 -0
  46. package/dist/config/index.js +13 -1
  47. package/dist/config/index.js.map +7 -0
  48. package/dist/config.js +28 -0
  49. package/dist/config.js.map +7 -0
  50. package/dist/customer/client.js +149 -0
  51. package/dist/customer/client.js.map +7 -0
  52. package/dist/customer/error.js +20 -0
  53. package/dist/customer/error.js.map +7 -0
  54. package/dist/customer/index.js +8 -3
  55. package/dist/customer/index.js.map +7 -1
  56. package/dist/customer/navigation.js +45 -0
  57. package/dist/customer/navigation.js.map +7 -0
  58. package/dist/customer/react.js +67 -2
  59. package/dist/customer/react.js.map +7 -1
  60. package/dist/customer/request.js +37 -0
  61. package/dist/customer/request.js.map +7 -0
  62. package/dist/customer/sdk.js +6 -0
  63. package/dist/customer/sdk.js.map +7 -0
  64. package/dist/customer/types.js +1 -0
  65. package/dist/customer/types.js.map +7 -0
  66. package/dist/customer/watch-order.js +80 -0
  67. package/dist/customer/watch-order.js.map +7 -0
  68. package/dist/debug.js +78 -1
  69. package/dist/debug.js.map +7 -1
  70. package/dist/errors.js +69 -0
  71. package/dist/errors.js.map +7 -0
  72. package/dist/index.js +29 -1
  73. package/dist/index.js.map +7 -1
  74. package/dist/internal/abort.js +29 -0
  75. package/dist/internal/abort.js.map +7 -0
  76. package/dist/internal/cache.js +142 -0
  77. package/dist/internal/cache.js.map +7 -0
  78. package/dist/internal/customer-http.js +74 -0
  79. package/dist/internal/customer-http.js.map +7 -0
  80. package/dist/internal/digest.js +15 -0
  81. package/dist/internal/digest.js.map +7 -0
  82. package/dist/internal/emitter.js +27 -0
  83. package/dist/internal/emitter.js.map +7 -0
  84. package/dist/internal/money-math.js +30 -0
  85. package/dist/internal/money-math.js.map +7 -0
  86. package/dist/internal.js +9 -1
  87. package/dist/internal.js.map +7 -1
  88. package/dist/models.js +1 -0
  89. package/dist/models.js.map +7 -0
  90. package/dist/money.js +58 -0
  91. package/dist/money.js.map +7 -0
  92. package/dist/persist/catalogue.js +206 -2
  93. package/dist/persist/catalogue.js.map +7 -1
  94. package/dist/places/client.js +97 -0
  95. package/dist/places/client.js.map +7 -0
  96. package/dist/places/error.js +20 -0
  97. package/dist/places/error.js.map +7 -0
  98. package/dist/places/index.js +8 -1
  99. package/dist/places/index.js.map +7 -1
  100. package/dist/places/request.js +40 -0
  101. package/dist/places/request.js.map +7 -0
  102. package/dist/places/sdk.js +10 -0
  103. package/dist/places/sdk.js.map +7 -0
  104. package/dist/places/search.js +80 -0
  105. package/dist/places/search.js.map +7 -0
  106. package/dist/places/types.js +1 -0
  107. package/dist/places/types.js.map +7 -0
  108. package/dist/react/cart.js +30 -0
  109. package/dist/react/cart.js.map +7 -0
  110. package/dist/react/hooks.js +91 -0
  111. package/dist/react/hooks.js.map +7 -0
  112. package/dist/react/index.js +18 -1
  113. package/dist/react/index.js.map +7 -1
  114. package/dist/react/provider.js +34 -0
  115. package/dist/react/provider.js.map +7 -0
  116. package/dist/server/index.js +32 -2
  117. package/dist/server/index.js.map +7 -1
  118. package/dist/server/storefront-url/build-v1.js +75 -0
  119. package/dist/server/storefront-url/build-v1.js.map +7 -0
  120. package/dist/server/storefront-url/build-v2.js +79 -0
  121. package/dist/server/storefront-url/build-v2.js.map +7 -0
  122. package/dist/server/storefront-url/build.js +19 -0
  123. package/dist/server/storefront-url/build.js.map +7 -0
  124. package/dist/server/storefront-url/contract.js +25 -0
  125. package/dist/server/storefront-url/contract.js.map +7 -0
  126. package/dist/server/storefront-url/index.js +16 -0
  127. package/dist/server/storefront-url/index.js.map +7 -0
  128. package/dist/server/storefront-url/installation.js +58 -0
  129. package/dist/server/storefront-url/installation.js.map +7 -0
  130. package/dist/server/storefront-url/params.js +72 -0
  131. package/dist/server/storefront-url/params.js.map +7 -0
  132. package/dist/server/storefront-url/parse-v1.js +135 -0
  133. package/dist/server/storefront-url/parse-v1.js.map +7 -0
  134. package/dist/server/storefront-url/parse-v2.js +139 -0
  135. package/dist/server/storefront-url/parse-v2.js.map +7 -0
  136. package/dist/server/storefront-url/parse.js +9 -0
  137. package/dist/server/storefront-url/parse.js.map +7 -0
  138. package/dist/server/storefront-url/redirect.js +30 -0
  139. package/dist/server/storefront-url/redirect.js.map +7 -0
  140. package/dist/server/storefront-url/sign-in.js +17 -0
  141. package/dist/server/storefront-url/sign-in.js.map +7 -0
  142. package/dist/server/storefront-url/types.js +55 -0
  143. package/dist/server/storefront-url/types.js.map +7 -0
  144. package/dist/server/storefront-url/url.js +61 -0
  145. package/dist/server/storefront-url/url.js.map +7 -0
  146. package/dist/server/webhook.js +96 -0
  147. package/dist/server/webhook.js.map +7 -0
  148. package/dist/site-config/helpers.js +59 -0
  149. package/dist/site-config/helpers.js.map +7 -0
  150. package/dist/site-config/sections.js +105 -0
  151. package/dist/site-config/sections.js.map +7 -0
  152. package/dist/site-config/types.js +31 -0
  153. package/dist/site-config/types.js.map +7 -0
  154. package/dist/site-config/validate.js +165 -0
  155. package/dist/site-config/validate.js.map +7 -0
  156. package/dist/template/index.js +46 -3
  157. package/dist/template/index.js.map +7 -1
  158. package/dist/template/react.js +81 -2
  159. package/dist/template/react.js.map +7 -1
  160. package/dist/testing/index.js +451 -2
  161. package/dist/testing/index.js.map +7 -1
  162. package/dist/transport/category-page.js +21 -2
  163. package/dist/transport/category-page.js.map +7 -1
  164. package/dist/transport/mappers.js +336 -0
  165. package/dist/transport/mappers.js.map +7 -0
  166. package/dist/transport/rest.js +313 -0
  167. package/dist/transport/rest.js.map +7 -0
  168. package/dist/transport/search.js +32 -2
  169. package/dist/transport/search.js.map +7 -1
  170. package/dist/transport/selected-menu.js +79 -2
  171. package/dist/transport/selected-menu.js.map +7 -1
  172. package/dist/transport/store.js +118 -2
  173. package/dist/transport/store.js.map +7 -1
  174. package/dist/transport/types.js +1 -0
  175. package/dist/transport/types.js.map +7 -0
  176. package/dist/url/index.js +16 -2
  177. package/dist/url/index.js.map +7 -1
  178. package/dist/visits/index.js +62 -1
  179. package/dist/visits/index.js.map +7 -1
  180. package/dist/visits/page-views.js +103 -0
  181. package/dist/visits/page-views.js.map +7 -0
  182. package/package.json +3 -3
  183. package/dist/cart/quote.js +0 -1
  184. package/dist/cart/quote.js.map +0 -1
  185. package/dist/chunk-I55A5QXJ.js +0 -2
  186. package/dist/chunk-I55A5QXJ.js.map +0 -1
  187. package/dist/chunk-LFBQICYU.js +0 -2
  188. package/dist/chunk-LFBQICYU.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cart/errors.ts","../src/cart/price.ts","../src/cart/source-menu.ts","../src/cart/validate.ts","../src/cart/reconcile.ts","../src/cart/storage.ts","../src/cart/wire.ts","../src/cart/index.ts","../src/cart/working-set.ts","../src/config.ts","../src/internal/abort.ts","../src/internal/cache.ts","../src/internal/emitter.ts","../src/transport/rest.ts","../src/client.ts","../src/cart/preview.ts","../src/index.ts"],"names":["ZappieCartError","ZappieError","issues","estimateUnitPrice","item","line","variant","v","extras","selected","group","g","choice","c","multiplyMoney","sumMoney","resolveSourceMenu","menu","itemId","menuId","categories","sources","placements","candidates","source","p","id","issue","code","message","fixes","groupId","effectiveGroups","input","ids","required","min","max","rule","chosen","normalizeInput","inactive","resolveVariant","attrs","matches","validInput","kind","value","validateLine","raw","ctx","quantity","step","lower","upper","nearest","groups","missing","choices","text","hybrid","isInput","fix","count","sum","n","lineInput","freezeLine","reconcile","lines","branch","currency","previous","priced","result","old","i","variantId","unitPrice","money","linePriced","format","pending","l","storedMoney","parseCart","t","validFulfilment","f","a","s","createCartStorage","provided","warn","storage","initialized","failed","warned","memory","warning","access","fn","fallback","key","area","prefix","current","ttl","keys","_","index","wireLine","wireFulfilment","EMPTY_CART","deepFreeze","child","identity","b","createCart","deps","config","menus","store","events","snapshot","updatedAt","timer","revision","quoteRevision","moveSequence","refreshSequence","mounted","detach","hydration","lifecycle","legacy","listeners","scope","keyFor","readSaved","quotes","loadingQuotes","quoteClient","createQuoteClient","error","publish","patch","asError","attention","quote","cancel","persist","schedule","cart","recompute","subtotal","changed","choose","found","load","writeBack","saved","idle","fulfilment","ensure","loaded","migrated","refresh","seq","request","rev","candidate","validated","addedAt","problems","byte","offMenu","branchId","version","life","target","inputs","onStorage","event","cached","onFocus","active","existing","lineId","duplicate","oldKey","oldLines","kept","dropped","opts","body","attempt","local","remote","q","problem","accepted","blocking","reader","createWorkingSet","compose","metadata","items","category","m","peek","fresh","response","API_VERSION","validateConfig","secret","match","abortReason","signal","throwIfAborted","delay","ms","resolve","reject","abort","REFRESH_BACKOFF_MS","EMPTY","Cache","onError","etag","entry","loader","age","background","flight","controller","loading","done","finish","callback","createEmitter","set","payload","MAX_RETRY_WAIT_MS","RestTransport","url","init","path","retry","seconds","wait","tooLong","errorBody","wireError","cause","payloadKey","mapper","mapStore","record","list","hours","mapMoney","opt","isString","isBoolean","cursor","seen","output","query","page","mapMenu","section","mapItem","buildClient","mode","transport","cache","resolveBranch","requested","hydratedBranch","branchKey","menuKey","categoryId","readItem","itemValues","peekItem","complete","requestSignal","workingSet","setLegacyReader","cartCatalogue","createZappie","client","installDebug","previewQuantity","previewItem","choiceId","selection","total","VERSION"],"mappings":"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","file":"chunk-LFBQICYU.js","sourcesContent":["import { ZappieError } from \"../errors\";\nimport type { CartIssue } from \"./types\";\nexport class ZappieCartError extends ZappieError {\n constructor(readonly issues: CartIssue[]) {\n super(\"cart_invalid\", issues[0]?.message ?? \"The cart needs attention\");\n this.name = \"ZappieCartError\";\n }\n}\n","import { ZappieError } from \"../errors\";\nimport { multiplyMoney, sumMoney } from \"../internal/money-math\";\nimport type { Item } from \"../models\";\nimport type { CartLine } from \"./types\";\n/**\n * Estimate one item's price from its selected variant and non-attribute option quantities.\n * Uses the item price when no variant is selected and throws if a selected variant or option is missing.\n *\n * @param item - The catalogue item containing prices and options.\n * @param line - The variant and choices to price. Each option quantity is treated as at least one.\n * @returns A local unit-price estimate. Use a server quote for checkout totals.\n */\nexport function estimateUnitPrice(\n item: Item,\n line: Pick<CartLine, \"choices\" | \"variantId\">,\n) {\n const variant = line.variantId\n ? item.variants.find((v) => v.id === line.variantId)\n : undefined;\n if (line.variantId && !variant) {\n throw new ZappieError(\"invalid_request\", \"The selected variant is missing\");\n }\n const extras = line.choices.flatMap((selected) => {\n const group = item.optionGroups.find((g) => g.id === selected.groupId);\n const choice = group?.choices.find((c) => c.id === selected.choiceId);\n if (!group || !choice) {\n throw new ZappieError(\n \"invalid_request\",\n \"The selected option is missing\",\n );\n }\n return group.isAttribute\n ? []\n : [multiplyMoney(choice.price, Math.max(selected.quantity, 1))];\n });\n return sumMoney(extras, variant?.price ?? item.price);\n}\n","import type { Menu } from \"../models\";\n/** Never guess the first of several menus: their schedules may differ. */\nexport function resolveSourceMenu(\n menu: Menu,\n itemId: string,\n menuId?: string,\n): string | undefined {\n const categories = menu.categories.filter((c) => c.itemIds.includes(itemId));\n const sources = menu.menus ?? [\n { id: menu.id, categoryIds: menu.categories.map((c) => c.id) },\n ];\n const placements = menu.items[itemId]?.placements;\n const candidates = sources.filter(\n (source) =>\n (!placements ||\n placements.some(\n (p) =>\n p.menuId === source.id && source.categoryIds.includes(p.categoryId),\n )) &&\n source.categoryIds.some((id) => categories.some((c) => c.id === id)),\n );\n if (menuId !== undefined) {\n return typeof menuId === \"string\" &&\n menuId.trim().length > 0 &&\n menuId.length <= 256 &&\n candidates.some((source) => source.id === menuId)\n ? menuId\n : undefined;\n }\n return candidates.length === 1 ? candidates[0]!.id : undefined;\n}\n","import type { Branch, Item, Menu, OptionGroup } from \"../models\";\nimport { resolveSourceMenu } from \"./source-menu\";\nimport type { CartFix, CartIssue, CartIssueCode, CartLineInput } from \"./types\";\nexport function issue(\n code: CartIssueCode,\n message: string,\n fixes: CartFix[] = [],\n groupId?: string,\n): CartIssue {\n return {\n code,\n severity: \"blocking\",\n message,\n fixes,\n source: \"local\",\n ...(groupId ? { groupId } : {}),\n };\n}\n/** Conditions override base rules in declaration order, exactly like resolveEffectiveAddons. */\nexport function effectiveGroups(\n item: Item,\n input: CartLineInput,\n): OptionGroup[] {\n const selected = new Map<string, Set<string>>();\n for (const choice of input.choices ?? []) {\n const ids = selected.get(choice.groupId) ?? new Set<string>();\n ids.add(choice.choiceId);\n selected.set(choice.groupId, ids);\n }\n return item.optionGroups.map((group) => {\n let required = group.required;\n let { min, max } = group.selection;\n for (const rule of group.conditions ?? []) {\n const chosen = selected.get(rule.groupId) ?? new Set<string>();\n const matches = rule.count\n ? rule.count.op === \"eq\"\n ? chosen.size === rule.count.value\n : rule.count.op === \"gte\"\n ? chosen.size >= rule.count.value\n : chosen.size <= rule.count.value\n : chosen.size > 0 &&\n rule.choiceIds.length > 0 &&\n (rule.match === \"all\"\n ? rule.choiceIds.every((id) => chosen.has(id))\n : rule.choiceIds.some((id) => chosen.has(id)));\n if (!matches) {\n continue;\n }\n required = rule.setRequired ?? required;\n min = rule.setMin ?? min;\n if (rule.setMax != null) {\n max = rule.setMax > 0 ? rule.setMax : undefined;\n }\n }\n return {\n ...group,\n required,\n selection: { min, ...(max !== undefined ? { max } : {}) },\n };\n });\n}\nexport function normalizeInput(\n item: Item,\n input: CartLineInput,\n): CartLineInput {\n const inactive = new Set(\n item.optionGroups.filter((g) => g.isAvailable === false).map((g) => g.id),\n );\n return {\n ...input,\n quantity: input.quantity ?? item.quantity.min,\n choices: (input.choices ?? [])\n .filter((c) => !inactive.has(c.groupId))\n .map((c) => ({ ...c, quantity: c.quantity ?? 1 })),\n inputs: Object.fromEntries(\n Object.entries(input.inputs ?? {}).filter(([id]) => !inactive.has(id)),\n ),\n };\n}\nexport function resolveVariant(item: Item, input: CartLineInput) {\n const attrs = item.optionGroups.filter((g) => g.isAttribute);\n const matches = item.variants.filter(\n (variant) =>\n (!input.variantId || variant.id === input.variantId) &&\n attrs.every((group) => {\n const selected =\n input.choices?.filter((c) => c.groupId === group.id) ?? [];\n return (\n selected.length === 1 &&\n variant.attributeChoices[group.id] === selected[0]!.choiceId\n );\n }),\n );\n return matches.length === 1 ? matches[0] : undefined;\n}\nfunction validInput(kind: OptionGroup[\"kind\"], value: string): boolean {\n switch (kind) {\n case \"number\":\n return Number.isFinite(Number(value));\n case \"date\":\n return (\n /^\\d{4}-\\d{2}-\\d{2}$/.test(value) &&\n Number.isFinite(Date.parse(value)) &&\n new Date(value).toISOString().slice(0, 10) === value\n );\n case \"time\":\n return /^([01]\\d|2[0-3]):[0-5]\\d(:[0-5]\\d)?$/.test(value);\n case \"toggle\":\n return [\"true\", \"false\"].includes(value.toLowerCase());\n default:\n return true;\n }\n}\n/**\n * Check a cart line against catalogue membership, availability, quantities and option rules.\n * Applies conditional group rules and checks that the selection resolves to an available variant.\n *\n * @param item - The current item, or undefined if it is no longer available.\n * @param raw - The shopper's proposed line.\n * @param ctx - The menu and branch context for validation.\n * @returns Local blocking issues with suggested fixes, or an empty array for a valid line.\n */\nexport function validateLine(\n item: Item | undefined,\n raw: CartLineInput,\n ctx: { menu: Menu; branch: Branch },\n): CartIssue[] {\n if (\n !item ||\n item.id !== raw.itemId ||\n !Object.hasOwn(ctx.menu.items, raw.itemId)\n ) {\n return [\n issue(\"item_unavailable\", \"This item is no longer on the menu\", [\n { action: \"remove_line\" },\n ]),\n ];\n }\n const issues: CartIssue[] = [];\n if (!resolveSourceMenu(ctx.menu, raw.itemId, raw.menuId)) {\n // Shoppers can't pick a menu from the cart, so the message names the fix.\n issues.push(\n issue(\n \"item_unavailable\",\n raw.menuId === undefined\n ? `${item.name} is on more than one menu. Remove it and add it again from the menu you want.`\n : `${item.name} is no longer on the menu it was added from.`,\n [{ action: \"remove_line\" }],\n ),\n );\n }\n if (!item.isAvailable) {\n issues.push(\n issue(\"item_unavailable\", `${item.name} is unavailable`, [\n { action: \"remove_line\" },\n ]),\n );\n }\n const input = normalizeInput(item, raw);\n const quantity = input.quantity!;\n const { min, step } = item.quantity;\n const max = Math.min(item.quantity.max ?? 99, 99);\n if (\n !Number.isInteger(quantity) ||\n quantity < min ||\n quantity > max ||\n quantity % step !== 0\n ) {\n const lower = Math.ceil(min / step) * step;\n const upper = Math.floor(max / step) * step;\n const nearest = Math.max(\n lower,\n Math.min(\n upper,\n Math.round((Number.isFinite(quantity) ? quantity : min) / step) * step,\n ),\n );\n issues.push(\n issue(\n \"quantity_limit\",\n `Choose a valid quantity of ${item.name} (${min}–${max}, step ${step})`,\n lower <= upper ? [{ action: \"set_quantity\", quantity: nearest }] : [],\n ),\n );\n }\n if ((input.note?.length ?? 0) > 280) {\n issues.push(issue(\"option_limit\", \"Notes must be at most 280 characters\"));\n }\n for (const choice of input.choices ?? []) {\n if (!item.optionGroups.some((g) => g.id === choice.groupId)) {\n issues.push(\n issue(\n \"option_unavailable\",\n \"This option group no longer exists\",\n [{ action: \"remove_line\" }],\n choice.groupId,\n ),\n );\n }\n }\n for (const id of Object.keys(input.inputs ?? {})) {\n if (!item.optionGroups.some((g) => g.id === id)) {\n issues.push(\n issue(\n \"option_unavailable\",\n \"This input group no longer exists\",\n [{ action: \"remove_line\" }],\n id,\n ),\n );\n }\n }\n const groups = effectiveGroups(item, input);\n const missing = groups.filter(\n (g) =>\n g.isAvailable !== false &&\n g.required &&\n !(input.choices ?? []).some((c) => c.groupId === g.id) &&\n !(input.inputs?.[g.id] ?? \"\").trim(),\n );\n // The host reports missing required groups before checking counts of selected options.\n if (missing.length) {\n return [\n ...issues,\n ...missing.map((g) =>\n issue(\n \"option_required\",\n `Choose ${g.name}`,\n [{ action: \"choose_option\", groupId: g.id }],\n g.id,\n ),\n ),\n ];\n }\n for (const group of groups) {\n if (group.isAvailable === false) {\n continue;\n }\n const choices = input.choices?.filter((c) => c.groupId === group.id) ?? [];\n const text = input.inputs?.[group.id] ?? \"\";\n const value = text.trim();\n const hybrid = group.isInformational && group.kind === \"select\";\n const isInput =\n group.kind !== \"select\" || (hybrid && !group.choices.length);\n const fix: CartFix[] = [{ action: \"choose_option\", groupId: group.id }];\n if (group.required && !choices.length && !value) {\n issues.push(\n issue(\"option_required\", `Choose ${group.name}`, fix, group.id),\n );\n }\n if (value && ((!isInput && !hybrid) || choices.length > 0)) {\n issues.push(\n issue(\n \"option_limit\",\n `Choose either an option or a response for ${group.name}`,\n fix,\n group.id,\n ),\n );\n }\n if (\n (isInput || hybrid) &&\n (text.length > (group.input?.maxLength ?? 500) ||\n (value && !validInput(group.kind, value)))\n ) {\n issues.push(\n issue(\n \"option_limit\",\n `Enter a valid response for ${group.name}`,\n fix,\n group.id,\n ),\n );\n }\n const count = choices.reduce((sum, c) => sum + (c.quantity ?? 1), 0);\n if (\n choices.length &&\n (isInput ||\n count < group.selection.min ||\n count > (group.selection.max ?? Infinity) ||\n new Set(choices.map((c) => c.choiceId)).size !== choices.length)\n ) {\n issues.push(\n issue(\n \"option_limit\",\n `Check the number of options for ${group.name}`,\n fix,\n group.id,\n ),\n );\n }\n for (const selected of choices) {\n const choice = group.choices.find((c) => c.id === selected.choiceId);\n if (!choice?.isAvailable) {\n issues.push(\n issue(\n \"option_unavailable\",\n `An option in ${group.name} is unavailable`,\n [\n { action: \"choose_other_option\", groupId: group.id },\n { action: \"remove_line\" },\n ],\n group.id,\n ),\n );\n }\n const n = selected.quantity ?? 1;\n if (\n !Number.isInteger(n) ||\n n < (choice?.quantity?.min ?? 1) ||\n n > (choice?.quantity?.max ?? 99)\n ) {\n issues.push(\n issue(\n \"option_limit\",\n `Check the option quantity for ${group.name}`,\n fix,\n group.id,\n ),\n );\n }\n }\n }\n const variant = resolveVariant(item, input);\n if (!variant?.isAvailable) {\n const groupId = item.optionGroups.find((g) => g.isAttribute)?.id;\n issues.push(\n issue(\n \"option_limit\",\n \"Choose an available variant\",\n groupId\n ? [{ action: \"choose_option\", groupId }]\n : [{ action: \"remove_line\" }],\n groupId,\n ),\n );\n }\n return issues;\n}\n","import { multiplyMoney } from \"../internal/money-math\";\nimport type { Branch, Menu } from \"../models\";\nimport type { Currency } from \"../money\";\nimport { format, money } from \"../money\";\nimport { estimateUnitPrice } from \"./price\";\nimport type { StoredLine } from \"./storage\";\nimport type { CartIssue, CartLine, CartLineInput } from \"./types\";\nimport {\n issue,\n normalizeInput,\n resolveVariant,\n validateLine,\n} from \"./validate\";\nexport function lineInput(line: CartLine): CartLineInput {\n return {\n itemId: line.itemId,\n ...(line.menuId !== undefined ? { menuId: line.menuId } : {}),\n quantity: line.quantity,\n choices: line.choices.map((c) => ({ ...c })),\n inputs: { ...line.inputs },\n ...(line.variantId ? { variantId: line.variantId } : {}),\n ...(line.note !== undefined ? { note: line.note } : {}),\n };\n}\nexport function freezeLine(line: CartLine): CartLine {\n return Object.freeze({\n ...line,\n choices: Object.freeze(line.choices.map((c) => Object.freeze({ ...c }))),\n inputs: Object.freeze({ ...line.inputs }),\n });\n}\nexport function reconcile(\n lines: readonly (CartLine | StoredLine)[],\n menu: Menu,\n branch: Branch,\n currency: Currency,\n previous: readonly CartIssue[] = [],\n) {\n const issues: CartIssue[] = [];\n let priced = true;\n const result = lines.map((old): CartLine => {\n const item = Object.hasOwn(menu.items, old.itemId)\n ? menu.items[old.itemId]\n : undefined;\n const raw = {\n ...old,\n choices: old.choices?.map((c) => ({ ...c })),\n inputs: { ...old.inputs },\n } as CartLineInput;\n const input = item ? normalizeInput(item, raw) : raw;\n issues.push(\n ...validateLine(item, input, { menu, branch }).map((i) => ({\n ...i,\n lineId: old.id,\n })),\n );\n const variantId =\n input.variantId ?? (item ? resolveVariant(item, input)?.id : undefined);\n let unitPrice = money(0, currency);\n let linePriced = true;\n try {\n if (!item) {\n throw new Error(\"Missing item\");\n }\n unitPrice = estimateUnitPrice(item, {\n choices: (input.choices ?? []).map((c) => ({\n ...c,\n quantity: c.quantity ?? 1,\n })),\n ...(variantId ? { variantId } : {}),\n });\n } catch {\n priced = false;\n linePriced = false;\n }\n if (\n old.unitPrice &&\n old.unitPrice.amountMinor !== unitPrice.amountMinor &&\n item &&\n linePriced\n ) {\n issues.push({\n ...issue(\n \"price_changed\",\n `${item.name} is now ${format.money(unitPrice)}`,\n [{ action: \"accept_price\" }, { action: \"remove_line\" }],\n ),\n severity: \"warning\",\n lineId: old.id,\n data: { previous: old.unitPrice, current: unitPrice },\n });\n }\n return freezeLine({\n id: old.id,\n itemId: old.itemId,\n ...(input.menuId !== undefined ? { menuId: input.menuId } : {}),\n name: item?.name ?? old.name,\n quantity: input.quantity ?? 1,\n choices: (input.choices ?? []).map((c) => ({\n ...c,\n quantity: c.quantity ?? 1,\n })),\n inputs: input.inputs ?? {},\n ...(variantId ? { variantId } : {}),\n ...(input.note !== undefined ? { note: input.note } : {}),\n unitPrice,\n lineSubtotal: multiplyMoney(unitPrice, input.quantity ?? 1),\n addedAt: old.addedAt,\n });\n });\n for (const pending of previous) {\n if (\n pending.code === \"price_changed\" &&\n result.some((l) => l.id === pending.lineId) &&\n !issues.some(\n (i) => i.code === pending.code && i.lineId === pending.lineId,\n )\n ) {\n issues.push(pending);\n }\n }\n return { lines: Object.freeze(result), issues, priced };\n}\n","import type { StorageLike } from \"../config\";\nimport type { Money } from \"../money\";\nimport { money } from \"../money\";\nimport type { CartFulfilment, CartLineInput } from \"./types\";\nexport type StoredLine = CartLineInput & {\n id: string;\n name: string;\n addedAt: string;\n unitPrice?: Money;\n};\nexport type StoredCart = {\n v: 1;\n lines: StoredLine[];\n fulfilment: CartFulfilment | null;\n promoCode: string | null;\n menuVersion: string;\n updatedAt: number;\n};\nfunction storedMoney(value: Money | undefined): Money | undefined {\n try {\n return value && money(value.amountMinor, value.currency);\n } catch {\n return undefined;\n }\n}\nexport function parseCart(raw: string): StoredCart {\n const v = JSON.parse(raw) as StoredCart;\n if (\n !v ||\n v.v !== 1 ||\n !Array.isArray(v.lines) ||\n v.lines.length > 100 ||\n !Number.isFinite(v.updatedAt) ||\n typeof v.menuVersion !== \"string\" ||\n (v.promoCode !== null && typeof v.promoCode !== \"string\")\n ) {\n throw new Error(\"Invalid saved cart\");\n }\n const ids = new Set<string>();\n for (const line of v.lines) {\n if (\n !line ||\n typeof line.id !== \"string\" ||\n ids.has(line.id) ||\n typeof line.itemId !== \"string\" ||\n typeof line.name !== \"string\" ||\n !Number.isFinite(Date.parse(line.addedAt)) ||\n !Number.isInteger(line.quantity) ||\n line.quantity! < 1 ||\n line.quantity! > 99 ||\n (line.note !== undefined &&\n (typeof line.note !== \"string\" || line.note.length > 280)) ||\n (line.menuId !== undefined &&\n (typeof line.menuId !== \"string\" ||\n !line.menuId.trim() ||\n line.menuId.length > 256)) ||\n (line.variantId !== undefined && typeof line.variantId !== \"string\")\n ) {\n throw new Error(\"Invalid saved cart line\");\n }\n ids.add(line.id);\n if (\n !Array.isArray(line.choices) ||\n line.choices.length > 1000 ||\n line.choices.some(\n (c) =>\n !c ||\n typeof c.groupId !== \"string\" ||\n typeof c.choiceId !== \"string\" ||\n !Number.isInteger(c.quantity) ||\n c.quantity! < 1 ||\n c.quantity! > 99,\n )\n ) {\n throw new Error(\"Invalid saved choices\");\n }\n if (\n !line.inputs ||\n typeof line.inputs !== \"object\" ||\n Array.isArray(line.inputs) ||\n Object.values(line.inputs).some((t) => typeof t !== \"string\")\n ) {\n throw new Error(\"Invalid saved inputs\");\n }\n }\n if (v.fulfilment !== null && !validFulfilment(v.fulfilment)) {\n throw new Error(\"Invalid saved fulfilment\");\n }\n return {\n v: 1,\n lines: v.lines.map((l) => {\n const unitPrice = storedMoney(l.unitPrice);\n return {\n id: l.id,\n itemId: l.itemId,\n ...(l.menuId !== undefined ? { menuId: l.menuId } : {}),\n name: l.name,\n addedAt: l.addedAt,\n ...(unitPrice ? { unitPrice } : {}),\n quantity: l.quantity!,\n choices: l.choices!,\n inputs: l.inputs!,\n ...(l.variantId ? { variantId: l.variantId } : {}),\n ...(l.note !== undefined ? { note: l.note } : {}),\n };\n }),\n fulfilment: v.fulfilment,\n promoCode: v.promoCode,\n menuVersion: v.menuVersion,\n updatedAt: v.updatedAt,\n };\n}\nexport function validFulfilment(f: CartFulfilment): boolean {\n if (\n !f ||\n ![\"pickup\", \"delivery\", \"dine_in\"].includes(f.type) ||\n typeof f.branchId !== \"string\"\n ) {\n return false;\n }\n if (\n \"scheduledFor\" in f &&\n f.scheduledFor !== undefined &&\n !Number.isFinite(Date.parse(f.scheduledFor))\n ) {\n return false;\n }\n if (f.type === \"delivery\") {\n const a = f.address;\n if (!a || typeof a.line1 !== \"string\" || !a.line1.trim()) {\n return false;\n }\n if (\n [a.line2, a.city, a.placeId, a.instructions].some(\n (s) => s !== undefined && typeof s !== \"string\",\n )\n ) {\n return false;\n }\n if (\n a.coordinates &&\n (!Number.isFinite(a.coordinates.lat) ||\n !Number.isFinite(a.coordinates.lng) ||\n Math.abs(a.coordinates.lat) > 90 ||\n Math.abs(a.coordinates.lng) > 180)\n ) {\n return false;\n }\n }\n return (\n f.type !== \"dine_in\" || f.table === undefined || typeof f.table === \"string\"\n );\n}\n/** Lazy access: constructing a client or rendering it never reads browser storage. */\nexport function createCartStorage(\n provided: StorageLike | undefined,\n warn: (message: string) => void,\n) {\n let storage: StorageLike | undefined;\n let initialized = false;\n let failed = false;\n let warned = false;\n const memory = new Map<string, string>();\n const warning = (message: string) => {\n if (!warned) {\n warned = true;\n warn(message);\n }\n };\n const access = <T>(fn: (storage: StorageLike) => T, fallback: () => T): T => {\n try {\n if (!initialized) {\n initialized = true;\n storage =\n provided ??\n (typeof window === \"undefined\" ? undefined : window.localStorage);\n }\n if (storage && !failed) {\n return fn(storage);\n }\n } catch {\n failed = true;\n warning(\"Cart storage unavailable; using memory for this client\");\n }\n return fallback();\n };\n return {\n warning,\n read(key: string): string | null {\n return access(\n (s) => {\n const value = s.getItem(key);\n if (value !== null) {\n memory.set(key, value);\n } else {\n memory.delete(key);\n }\n return value;\n },\n () => memory.get(key) ?? null,\n );\n },\n write(key: string, value: string) {\n memory.set(key, value);\n access(\n (s) => s.setItem(key, value),\n () => {},\n );\n },\n remove(key: string) {\n memory.delete(key);\n access(\n (s) => s.removeItem(key),\n () => {},\n );\n },\n accepts(area: Storage | null) {\n return !failed && (!area || area === storage);\n },\n sweep(prefix: string, current: string, ttl: number) {\n access(\n (s) => {\n const keys = Array.from({ length: s.length ?? 0 }, (_, index) =>\n s.key?.(index),\n );\n for (const key of keys) {\n if (!key || key === current || !key.startsWith(prefix)) {\n continue;\n }\n try {\n const raw = s.getItem(key);\n if (raw && Date.now() - parseCart(raw).updatedAt > ttl) {\n s.removeItem(key);\n }\n } catch {\n // A malformed sibling belongs to this cart namespace and cannot be restored.\n s.removeItem(key);\n }\n }\n },\n () => {},\n );\n },\n };\n}\n","import type {\n CartFulfilment,\n CartLine,\n WireFulfilment,\n WireLine,\n} from \"./types\";\nexport function wireLine(line: CartLine): WireLine {\n return {\n line_id: line.id,\n item_id: line.itemId,\n ...(line.menuId !== undefined ? { menu_id: line.menuId } : {}),\n quantity: line.quantity,\n ...(line.variantId ? { variant_id: line.variantId } : {}),\n options: line.choices.map((c) => ({\n group_id: c.groupId,\n choice_id: c.choiceId,\n quantity: c.quantity,\n })),\n inputs: { ...line.inputs },\n ...(line.note !== undefined ? { note: line.note } : {}),\n };\n}\n/**\n * Convert a cart fulfilment selection to the API field names used by quotes and checkout.\n * Includes delivery address details, a schedule or a dine-in table when present.\n *\n * @param f - The shopper's selected fulfilment.\n * @returns Fulfilment fields without the branch ID. Checkout sessions accept pickup or delivery only.\n */\nexport function wireFulfilment(f: CartFulfilment): WireFulfilment {\n return {\n type: f.type,\n ...(\"scheduledFor\" in f && f.scheduledFor\n ? { scheduled_for: f.scheduledFor }\n : {}),\n ...(f.type === \"dine_in\" && f.table ? { table: f.table } : {}),\n ...(f.type === \"delivery\"\n ? {\n address: {\n line1: f.address.line1,\n ...(f.address.line2 ? { line2: f.address.line2 } : {}),\n ...(f.address.city ? { city: f.address.city } : {}),\n ...(f.address.placeId ? { place_id: f.address.placeId } : {}),\n ...(f.address.instructions\n ? { instructions: f.address.instructions }\n : {}),\n ...(f.address.coordinates\n ? {\n lat: f.address.coordinates.lat,\n lng: f.address.coordinates.lng,\n }\n : {}),\n },\n }\n : {}),\n };\n}\n","import type { MenuResource, StoreResource } from \"../client\";\nimport type { ZappieConfig } from \"../config\";\nimport { asError, ZappieError } from \"../errors\";\nimport type { createEmitter } from \"../internal/emitter\";\nimport { multiplyMoney, sumMoney } from \"../internal/money-math\";\nimport type { Branch, Menu } from \"../models\";\nimport { money } from \"../money\";\nimport type { RequestCtx, Transport } from \"../transport/types\";\nimport { ZappieCartError } from \"./errors\";\nimport { estimateUnitPrice } from \"./price\";\nimport type { QuoteClient } from \"./quote-client\";\nimport { freezeLine, lineInput, reconcile } from \"./reconcile\";\nimport type { StoredCart, StoredLine } from \"./storage\";\nimport { createCartStorage, parseCart, validFulfilment } from \"./storage\";\nimport type {\n CartIssue,\n CartLine,\n CartLineInput,\n CartModule,\n CartSnapshot,\n Quote,\n} from \"./types\";\nimport {\n issue,\n normalizeInput,\n resolveVariant,\n validateLine,\n} from \"./validate\";\nimport { wireFulfilment, wireLine } from \"./wire\";\nimport type { createWorkingSet } from \"./working-set\";\nexport const EMPTY_CART: CartSnapshot = Object.freeze({\n lines: Object.freeze([]),\n count: 0,\n subtotal: null,\n fulfilment: null,\n promoCode: null,\n state: { status: \"ready\" as const },\n issues: Object.freeze([]),\n isHydrated: false,\n});\nfunction deepFreeze<T>(value: T): T {\n if (value && typeof value === \"object\" && !Object.isFrozen(value)) {\n Object.freeze(value);\n for (const child of Object.values(value)) {\n deepFreeze(child);\n }\n }\n return value;\n}\nfunction identity(input: CartLineInput) {\n return JSON.stringify([\n input.itemId,\n input.menuId,\n input.variantId,\n input.note ?? \"\",\n [...(input.choices ?? [])].sort(\n (a, b) =>\n a.groupId.localeCompare(b.groupId) ||\n a.choiceId.localeCompare(b.choiceId),\n ),\n Object.entries(input.inputs ?? {}).sort(([a], [b]) => a.localeCompare(b)),\n ]);\n}\nexport function createCart(deps: {\n workingSet: ReturnType<typeof createWorkingSet>;\n config: ZappieConfig;\n menu: MenuResource;\n store: StoreResource;\n transport: Transport;\n context: () => RequestCtx;\n events: ReturnType<typeof createEmitter>;\n}) {\n const { config, menu: menus, store, events } = deps;\n const ttl = config.cart?.ttl ?? 7 * 24 * 60 * 60 * 1000;\n if (!Number.isFinite(ttl) || ttl <= 0) {\n throw new ZappieError(\n \"invalid_request\",\n \"Cart ttl must be positive milliseconds\",\n );\n }\n let snapshot = EMPTY_CART;\n let menu: Menu | undefined;\n let branch: Branch | undefined;\n let selected = config.branch;\n let updatedAt = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let revision = 0;\n let quoteRevision = 0;\n let moveSequence = 0;\n let refreshSequence = 0;\n let mounted = 0;\n let detach: (() => void) | undefined;\n let hydration: Promise<void> | undefined;\n let lifecycle = 0;\n let legacy:\n ((read: (key: string) => string | null) => CartLineInput[]) | undefined;\n const listeners = new Set<() => void>();\n const prefix = `zappie:cart:v1:${config.store}:`;\n const scope = config.cart?.storageScope;\n const keyFor = (id: string) => `${prefix}${id}${scope ? `:${scope}` : \"\"}`;\n const key = () => keyFor(branch!.id);\n const storage = createCartStorage(config.storage, (message) =>\n events.emit(\"warning\", { message }),\n );\n // A scoped cart adopts the branch's unscoped cart once, so only one scope inherits it.\n const readSaved = (id: string) => {\n let raw = storage.read(keyFor(id));\n if (raw === null && scope) {\n raw = storage.read(prefix + id);\n if (raw !== null) {\n storage.remove(prefix + id);\n storage.write(keyFor(id), raw);\n }\n }\n return raw;\n };\n // The quote client and response mapping load on the first quote; add/validate stay synchronous.\n let quotes: QuoteClient | undefined;\n let loadingQuotes: Promise<QuoteClient> | undefined;\n const quoteClient = () =>\n (loadingQuotes ??= import(\"./quote-client\").then(\n ({ createQuoteClient }) =>\n (quotes = createQuoteClient(deps.transport, deps.context)),\n (error: unknown) => {\n // A failed chunk load (e.g. offline) must not poison every later quote.\n loadingQuotes = undefined;\n throw error;\n },\n ));\n const publish = (patch: Partial<CartSnapshot>) => {\n snapshot = deepFreeze({\n ...snapshot,\n ...patch,\n branchId: branch?.id,\n });\n for (const fn of [...listeners]) {\n try {\n fn();\n } catch (error) {\n events.emit(\"error\", { error: asError(error) });\n }\n }\n };\n const attention = (\n issues: readonly CartIssue[],\n quote?: Quote,\n ): CartSnapshot[\"state\"] =>\n issues.some((i) => i.severity !== \"info\")\n ? { status: \"needs_attention\", issues, ...(quote ? { quote } : {}) }\n : quote\n ? { status: \"quoted\", quote }\n : { status: \"ready\" };\n const cancel = () => {\n revision++;\n quoteRevision++;\n clearTimeout(timer);\n quotes?.cancel();\n };\n const persist = () => {\n const value: StoredCart = {\n v: 1,\n lines: snapshot.lines.map((line) => ({\n ...lineInput(line),\n id: line.id,\n name: line.name,\n addedAt: line.addedAt,\n unitPrice: line.unitPrice,\n })),\n fulfilment: snapshot.fulfilment,\n promoCode: snapshot.promoCode,\n menuVersion: menu!.version,\n updatedAt,\n };\n storage.write(key(), JSON.stringify(value));\n };\n const schedule = () => {\n clearTimeout(timer);\n if (snapshot.lines.length) {\n timer = setTimeout(() => {\n void cart.quote().catch(() => {});\n }, 300);\n }\n };\n const recompute = (\n lines: readonly (CartLine | StoredLine)[],\n pending = snapshot.issues.filter((i) => i.source === \"local\"),\n patch: Partial<CartSnapshot> = {},\n ) => {\n const currency = store.peek()!.currency;\n const result = reconcile(lines, menu!, branch!, currency, pending);\n const subtotal = result.priced\n ? sumMoney(\n result.lines.map((l) => l.lineSubtotal),\n money(0, currency),\n )\n : null;\n publish({\n ...patch,\n lines: result.lines,\n count: result.lines.reduce((n, l) => n + l.quantity, 0),\n subtotal,\n issues: result.issues,\n state: attention(result.issues),\n });\n for (const i of result.issues) {\n events.emit(\"cart_issue\", { code: i.code });\n }\n };\n const changed = (\n lines: readonly (CartLine | StoredLine)[] = snapshot.lines,\n patch: Partial<CartSnapshot> = {},\n ) => {\n cancel();\n recompute(lines, undefined, patch);\n updatedAt = Date.now();\n persist();\n schedule();\n };\n const choose = (value: Menu) => {\n const found = store.peek()?.branches.find((b) => b.id === value.branchId);\n if (!found) {\n throw new ZappieError(\n \"branch_not_found\",\n \"Load the storefront branch before using its cart\",\n );\n }\n menu = value;\n branch = found;\n selected = found.id;\n };\n const load = (raw: string | null, writeBack = true) => {\n cancel();\n let saved: StoredCart | undefined;\n try {\n saved = raw ? parseCart(raw) : undefined;\n if (saved && Date.now() - saved.updatedAt > ttl) {\n saved = undefined;\n storage.remove(key());\n events.emit(\"cart_expired\", { branchId: branch!.id });\n }\n } catch {\n storage.remove(key());\n storage.warning(\"Invalid saved cart discarded\");\n }\n updatedAt = saved?.updatedAt ?? Date.now();\n const idle = Date.now() - updatedAt;\n let fulfilment = saved?.fulfilment ?? null;\n if (\n fulfilment?.branchId !== branch!.id ||\n (idle > 86_400_000 && fulfilment.type === \"delivery\")\n ) {\n fulfilment = null;\n }\n if (\n fulfilment &&\n \"scheduledFor\" in fulfilment &&\n fulfilment.scheduledFor &&\n Date.parse(fulfilment.scheduledFor) < Date.now()\n ) {\n fulfilment = { ...fulfilment };\n delete fulfilment.scheduledFor;\n }\n const lines = (saved?.lines ?? []).map((line) => ({\n ...line,\n ...(idle > 86_400_000 ? { inputs: {} } : {}),\n }));\n const result = reconcile(lines, menu!, branch!, store.peek()!.currency);\n recompute(result.lines, result.issues, {\n fulfilment,\n promoCode: saved?.promoCode ?? null,\n isHydrated: true,\n });\n // Persist privacy scrubbing and normalized prices without extending idle expiry.\n if (raw !== null && writeBack) {\n persist();\n }\n storage.sweep(prefix, key(), ttl);\n };\n const ensure = () => {\n const id =\n branch?.id ??\n store\n .peek()\n ?.branches.find(\n (b) =>\n b.id === selected ||\n b.slug === selected ||\n (!selected && b.isDefault),\n )?.id ??\n (!selected ? store.peek()?.branches[0]?.id : undefined);\n if (snapshot.isHydrated) {\n return;\n }\n const loaded = menu ?? (id ? deps.workingSet.peek(id, []) : undefined);\n if (!loaded || !store.peek()) {\n throw new ZappieError(\n \"invalid_request\",\n \"Load the store and menu before editing the cart\",\n );\n }\n choose(loaded);\n const raw = readSaved(branch!.id);\n let migrated: CartLineInput[] = [];\n if (raw === null && legacy) {\n try {\n migrated = legacy(storage.read);\n } catch {\n storage.warning(\"Invalid legacy cart discarded\");\n }\n }\n load(raw);\n if (raw === null && legacy) {\n persist();\n }\n for (const input of migrated.slice(0, 100)) {\n try {\n cart.add(input.itemId, input);\n } catch {\n events.emit(\"cart_issue\", { code: \"item_unavailable\" });\n }\n }\n };\n const refresh = async () => {\n const id = branch?.id;\n const seq = moveSequence;\n const request = ++refreshSequence;\n const rev = revision;\n if (!id || !menu) {\n return;\n }\n if (!snapshot.lines.length) {\n return;\n }\n if (menu.completeness !== \"partial\") {\n const version = await deps.transport.getMenuVersion({\n ...deps.context(),\n branchId: id,\n });\n if (version.version === menu.version) {\n return;\n }\n }\n const value = await deps.workingSet.read(\n id,\n snapshot.lines.map((l) => l.itemId),\n true,\n );\n if (\n seq !== moveSequence ||\n request !== refreshSequence ||\n rev !== revision ||\n JSON.stringify(value) === JSON.stringify(menu)\n ) {\n return;\n }\n menu = value;\n cancel();\n recompute(snapshot.lines);\n persist();\n schedule();\n };\n // Validation follows the latest copy of an item the working set holds: a\n // refreshed item can add a required option, and an add, edit or check\n // against the earlier copy would accept a line the server then rejects.\n const current = (itemId: string) => {\n const candidate = deps.workingSet.peek(branch!.id, [\n ...snapshot.lines.map((l) => l.itemId),\n itemId,\n ]);\n if (candidate.items[itemId]) {\n menu = candidate;\n }\n };\n const validated = (\n raw: CartLineInput,\n id?: string,\n addedAt?: string,\n ): CartLine => {\n current(raw.itemId);\n const item = Object.hasOwn(menu!.items, raw.itemId)\n ? menu!.items[raw.itemId]\n : undefined;\n const problems = validateLine(item, raw, { menu: menu!, branch: branch! });\n if (problems.length || !item) {\n throw new ZappieCartError(problems);\n }\n const input = normalizeInput(item, raw);\n const variant = resolveVariant(item, input)!;\n const choices = (input.choices ?? []).map((c) => ({\n ...c,\n quantity: c.quantity ?? 1,\n }));\n const unitPrice = estimateUnitPrice(item, {\n choices,\n variantId: variant.id,\n });\n return freezeLine({\n id:\n id ??\n `line_${Array.from(globalThis.crypto.getRandomValues(new Uint8Array(10)), (byte) => \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-\"[byte & 63]).join(\"\")}`,\n itemId: item.id,\n ...(input.menuId !== undefined ? { menuId: input.menuId } : {}),\n name: item.name,\n quantity: input.quantity!,\n choices,\n inputs: input.inputs ?? {},\n variantId: variant.id,\n ...(input.note !== undefined ? { note: input.note } : {}),\n unitPrice,\n lineSubtotal: multiplyMoney(unitPrice, input.quantity!),\n addedAt: addedAt ?? new Date().toISOString(),\n });\n };\n const offMenu = events.on(\"menu:updated\", ({ branchId, version }) => {\n if (branch?.id === branchId) {\n const value = menus.peek(branchId);\n if (\n value &&\n value.completeness !== \"partial\" &&\n value.version === version &&\n value.version !== menu?.version\n ) {\n refreshSequence++;\n menu = value;\n cancel();\n recompute(snapshot.lines);\n persist();\n schedule();\n }\n }\n });\n const cart: CartModule = {\n get branchId() {\n return snapshot.branchId;\n },\n get lines() {\n return snapshot.lines;\n },\n get count() {\n return snapshot.count;\n },\n get subtotal() {\n return snapshot.subtotal;\n },\n get fulfilment() {\n return snapshot.fulfilment;\n },\n get promoCode() {\n return snapshot.promoCode;\n },\n get state() {\n return snapshot.state;\n },\n get issues() {\n return snapshot.issues;\n },\n get isHydrated() {\n return snapshot.isHydrated;\n },\n getSnapshot: () => snapshot,\n subscribe(fn) {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n },\n async hydrate() {\n if (snapshot.isHydrated) {\n return refresh();\n }\n const life = lifecycle;\n hydration ??= (async () => {\n const value = await store.get();\n const target =\n value.branches.find(\n (b) => b.id === selected || b.slug === selected,\n ) ??\n (!selected\n ? (value.branches.find((b) => b.isDefault) ?? value.branches[0])\n : undefined);\n if (!target) {\n throw new ZappieError(\n \"branch_not_found\",\n \"Cart branch is unavailable\",\n );\n }\n let inputs: readonly { itemId: string }[] = snapshot.lines;\n if (!snapshot.isHydrated) {\n const raw = readSaved(target.id);\n try {\n const saved = raw ? parseCart(raw) : undefined;\n inputs =\n saved && Date.now() - saved.updatedAt <= ttl\n ? saved.lines\n : raw === null\n ? (legacy?.(storage.read) ?? [])\n : [];\n } catch {\n inputs = [];\n }\n }\n const loaded = await deps.workingSet.read(\n target.id,\n inputs.map((l) => l.itemId),\n );\n if (life !== lifecycle) {\n return;\n }\n choose(loaded);\n ensure();\n if (loaded.completeness !== \"partial\") {\n await refresh();\n }\n })().finally(() => {\n hydration = undefined;\n });\n return hydration;\n },\n mount() {\n mounted++;\n if (!detach && typeof window !== \"undefined\") {\n const onStorage = (event: StorageEvent) => {\n if (\n branch &&\n event.key === key() &&\n storage.accepts(event.storageArea)\n ) {\n const raw = event.newValue;\n let ids: string[];\n try {\n ids = raw ? parseCart(raw).lines.map((l) => l.itemId) : [];\n } catch {\n load(raw, false);\n return;\n }\n const cached = deps.workingSet.peek(branch.id, ids);\n if (\n cached.completeness !== \"partial\" ||\n ids.every((id) => cached.items[id])\n ) {\n menu = cached;\n load(raw, false);\n schedule();\n return;\n }\n const rev = revision;\n const request = ++refreshSequence;\n const life = lifecycle;\n void deps.workingSet\n .read(branch.id, ids)\n .then((value) => {\n if (\n life === lifecycle &&\n rev === revision &&\n request === refreshSequence\n ) {\n menu = value;\n load(raw, false);\n schedule();\n }\n })\n .catch((error: unknown) =>\n events.emit(\"error\", { error: asError(error) }),\n );\n }\n };\n const onFocus = () => {\n void refresh().catch((error: unknown) =>\n events.emit(\"error\", { error: asError(error) }),\n );\n };\n window.addEventListener(\"storage\", onStorage);\n window.addEventListener(\"focus\", onFocus);\n // Only browser listeners follow mounts; the menu:updated subscription lives until dispose().\n detach = () => {\n window.removeEventListener(\"storage\", onStorage);\n window.removeEventListener(\"focus\", onFocus);\n };\n }\n if (mounted === 1) {\n void cart\n .hydrate()\n .catch((error: unknown) =>\n events.emit(\"error\", { error: asError(error) }),\n );\n }\n let active = true;\n return () => {\n if (active) {\n active = false;\n mounted--;\n if (mounted === 0) {\n detach?.();\n detach = undefined;\n cancel();\n }\n }\n };\n },\n dispose() {\n lifecycle++;\n moveSequence++;\n offMenu();\n cancel();\n detach?.();\n detach = undefined;\n listeners.clear();\n },\n validate(input) {\n ensure();\n current(input.itemId);\n const problems = validateLine(\n Object.hasOwn(menu!.items, input.itemId)\n ? menu!.items[input.itemId]\n : undefined,\n input,\n { menu: menu!, branch: branch! },\n );\n return problems.length ? { ok: false, issues: problems } : { ok: true };\n },\n add(item, input = {}) {\n ensure();\n let line = validated({\n ...input,\n itemId: typeof item === \"string\" ? item : item.id,\n });\n const existing = snapshot.lines.find(\n (l) => identity(lineInput(l)) === identity(lineInput(line)),\n );\n if (existing) {\n line = validated(\n { ...lineInput(line), quantity: existing.quantity + line.quantity },\n existing.id,\n existing.addedAt,\n );\n } else if (snapshot.lines.length >= 100) {\n throw new ZappieCartError([\n issue(\"quantity_limit\", \"A cart can contain at most 100 lines\"),\n ]);\n }\n changed(\n existing\n ? snapshot.lines.map((l) => (l.id === existing.id ? line : l))\n : [...snapshot.lines, line],\n );\n events.emit(\"add_to_cart\", {\n itemId: line.itemId,\n quantity: line.quantity - (existing?.quantity ?? 0),\n value: multiplyMoney(\n line.unitPrice,\n line.quantity - (existing?.quantity ?? 0),\n ),\n });\n return line;\n },\n update(lineId, patch) {\n ensure();\n const old = snapshot.lines.find((l) => l.id === lineId);\n if (!old) {\n throw new ZappieCartError([\n issue(\"item_not_found\", \"Cart line not found\"),\n ]);\n }\n const input = { ...lineInput(old), ...patch };\n if (patch.choices && !patch.variantId) {\n delete input.variantId;\n }\n let line = validated(input, old.id, old.addedAt);\n const duplicate = snapshot.lines.find(\n (l) =>\n l.id !== lineId &&\n identity(lineInput(l)) === identity(lineInput(line)),\n );\n if (duplicate) {\n line = validated(\n { ...lineInput(line), quantity: line.quantity + duplicate.quantity },\n old.id,\n old.addedAt,\n );\n }\n changed(\n snapshot.lines\n .filter((l) => l.id !== duplicate?.id)\n .map((l) => (l.id === lineId ? line : l)),\n );\n events.emit(\"update_cart_line\", {\n lineId,\n itemId: line.itemId,\n quantity: line.quantity,\n });\n return line;\n },\n remove(lineId) {\n ensure();\n const line = snapshot.lines.find((l) => l.id === lineId);\n changed(snapshot.lines.filter((l) => l.id !== lineId));\n if (line) {\n events.emit(\"remove_from_cart\", {\n itemId: line.itemId,\n quantity: line.quantity,\n value: line.lineSubtotal,\n });\n }\n },\n clear() {\n ensure();\n changed([], { fulfilment: null, promoCode: null });\n },\n setFulfilment(value) {\n ensure();\n if (!validFulfilment(value) || value.branchId !== branch!.id) {\n throw new ZappieCartError([\n issue(\n \"fulfilment_unavailable\",\n \"Select fulfilment for the cart's branch\",\n ),\n ]);\n }\n changed(snapshot.lines, { fulfilment: structuredClone(value) });\n },\n setPromoCode(code) {\n ensure();\n changed(snapshot.lines, { promoCode: code?.trim() || null });\n },\n async moveTo(branchId) {\n ensure();\n const seq = ++moveSequence;\n cancel();\n publish({ state: attention(snapshot.issues) });\n const value = await deps.workingSet.read(\n branchId,\n snapshot.lines.map((l) => l.itemId),\n );\n if (seq !== moveSequence) {\n return;\n }\n const oldKey = key();\n const oldLines = snapshot.lines;\n choose(value);\n const kept = oldLines.filter(\n (line) =>\n !validateLine(value.items[line.itemId], lineInput(line), {\n menu: value,\n branch: branch!,\n }).length,\n );\n changed(kept, { fulfilment: null, promoCode: null });\n const dropped = oldLines\n .filter((line) => !kept.includes(line))\n .map((line) => ({\n ...issue(\n \"item_unavailable\",\n `${line.name} is unavailable at this branch`,\n ),\n severity: \"warning\" as const,\n lineId: line.id,\n }));\n const issues = [...snapshot.issues, ...dropped];\n publish({ issues, state: attention(issues) });\n if (oldKey !== key()) {\n storage.remove(oldKey);\n }\n },\n async quote(opts = {}) {\n ensure();\n clearTimeout(timer);\n if (opts.force) {\n events.emit(\"view_cart\", {});\n }\n const body = {\n branch_id: branch!.id,\n lines: snapshot.lines.map(wireLine),\n ...(snapshot.fulfilment\n ? { fulfilment: wireFulfilment(snapshot.fulfilment) }\n : {}),\n ...(snapshot.promoCode ? { promo_code: snapshot.promoCode } : {}),\n menu_version: menu!.version,\n };\n const seq = revision;\n const attempt = ++quoteRevision;\n publish({ state: { status: \"quoting\" } });\n try {\n const client = await quoteClient();\n return await client.get(body, opts.force ?? false, (quote) => {\n if (seq !== revision) {\n return;\n }\n const local = snapshot.issues.filter((i) => i.source === \"local\");\n // The server re-validates every line; a problem the cart already reports is shown once.\n const remote = quote.issues.filter(\n (q) =>\n !local.some(\n (l) =>\n l.code === q.code &&\n l.lineId === q.lineId &&\n l.groupId === q.groupId,\n ),\n );\n const issues = [...local, ...remote];\n publish({ issues, state: attention(issues, quote) });\n for (const i of remote) {\n events.emit(\"cart_issue\", { code: i.code });\n }\n // A newer server menu means local prices and the sent version are stale. Refreshing\n // reconciles them and re-quotes, so the server stops re-raising the same change.\n if (\n quote.menuVersion !== menu!.version ||\n quote.issues.some((i) => i.code === \"menu_version_stale\")\n ) {\n void refresh().catch((error: unknown) =>\n events.emit(\"error\", { error: asError(error) }),\n );\n }\n });\n } catch (error) {\n if (seq === revision && attempt === quoteRevision) {\n const local = snapshot.issues.filter((i) => i.source === \"local\");\n publish({ issues: local, state: attention(local) });\n events.emit(\"quote_failed\", { code: asError(error).code });\n }\n throw error instanceof Error && error.name === \"AbortError\"\n ? error\n : asError(error);\n }\n },\n applyFix(problem, fix = problem.fixes[0]) {\n if (\n !snapshot.issues.includes(problem) ||\n !fix ||\n !problem.fixes.some((f) => JSON.stringify(f) === JSON.stringify(fix))\n ) {\n throw new ZappieError(\n \"invalid_request\",\n \"Choose a current cart issue and one of its fixes\",\n );\n }\n switch (fix.action) {\n case \"remove_line\": {\n if (problem.lineId) {\n cart.remove(problem.lineId);\n }\n return;\n }\n case \"remove_promo\":\n cart.setPromoCode(null);\n return;\n case \"set_quantity\": {\n if (problem.lineId) {\n cart.update(problem.lineId, { quantity: fix.quantity });\n }\n return;\n }\n case \"accept_price\": {\n quotes?.accept(problem);\n const issues = snapshot.issues.filter((i) => i !== problem);\n const quote =\n \"quote\" in snapshot.state ? snapshot.state.quote : undefined;\n const accepted = quote\n ? {\n ...quote,\n issues: quote.issues.filter(\n (i) =>\n !(i.code === problem.code && i.lineId === problem.lineId),\n ),\n }\n : undefined;\n publish({ issues, state: attention(issues, accepted) });\n return;\n }\n default:\n throw new ZappieError(\n \"invalid_request\",\n `${fix.action} needs the shopper's selection; use update or setFulfilment`,\n );\n }\n },\n toCheckoutPayload() {\n ensure();\n const blocking = snapshot.issues.filter((i) => i.severity === \"blocking\");\n if (!snapshot.lines.length || !snapshot.fulfilment) {\n blocking.push(\n issue(\n \"fulfilment_unavailable\",\n \"Add items and select fulfilment before checkout\",\n ),\n );\n }\n if (blocking.length) {\n throw new ZappieCartError(blocking);\n }\n return {\n lines: snapshot.lines.map(wireLine),\n fulfilment: structuredClone(snapshot.fulfilment!),\n ...(snapshot.promoCode ? { promo_code: snapshot.promoCode } : {}),\n menu_version: menu!.version,\n };\n },\n };\n return {\n cart: Object.freeze(cart),\n cartCatalogue: () => menu,\n setLegacyReader(reader: NonNullable<typeof legacy>) {\n legacy = reader;\n },\n };\n}\n","import type { MenuResource, StoreResource } from \"../client\";\nimport { ZappieError } from \"../errors\";\nimport type { Item, Menu } from \"../models\";\nimport type { RequestCtx, Transport } from \"../transport/types\";\n\n/** Cart-only catalogue projection. Never installed in the complete-menu cache. */\nexport type CartWorkingSet = Menu & {\n kind: \"working-set\";\n completeness: \"partial\";\n};\nexport function createWorkingSet(deps: {\n menu: MenuResource;\n store: StoreResource;\n transport: Transport;\n context: () => RequestCtx;\n peekItem: (id: string, branch: string) => Item | undefined;\n readItem: (id: string, branch: string, fresh?: boolean) => Promise<Item>;\n}) {\n const compose = (\n branchId: string,\n ids: readonly string[],\n metadata?: Menu,\n ): CartWorkingSet => {\n const source = metadata ?? deps.menu.peek(branchId);\n const items = Object.fromEntries(\n [...new Set(ids)].flatMap((id) => {\n const item = deps.peekItem(id, branchId) ?? source?.items[id];\n return item ? [[id, item]] : [];\n }),\n );\n return {\n id: `branch:${branchId}`,\n name: \"Cart working set\",\n branchId,\n version: \"\",\n ...source,\n kind: \"working-set\",\n completeness: \"partial\",\n items,\n categories: (source?.categories ?? []).map((category) => ({\n ...category,\n itemIds: Object.values(items)\n .filter((item) =>\n item.placements\n ? item.placements.some(\n (p) =>\n p.categoryId === category.id &&\n (\n source?.menus ?? [\n { id: source?.id, categoryIds: [category.id] },\n ]\n ).some(\n (m) =>\n m.id === p.menuId &&\n m.categoryIds.includes(category.id),\n ),\n )\n : category.itemIds.includes(item.id),\n )\n .map((item) => item.id),\n })),\n };\n };\n const peek = (branchId: string, ids: readonly string[]) => {\n const value = deps.menu.peek(branchId);\n return value && value.completeness !== \"partial\"\n ? value\n : compose(branchId, ids);\n };\n return {\n peek,\n async read(\n branchId: string,\n ids: readonly string[],\n fresh = false,\n ): Promise<Menu> {\n const cached = peek(branchId, ids);\n if (!ids.length || (!fresh && cached.completeness !== \"partial\")) {\n return cached;\n }\n const response = fresh\n ? await deps.transport.getMenu({\n ...deps.context(),\n branchId,\n metadataOnly: true,\n })\n : undefined;\n const metadata =\n response && \"menu\" in response\n ? response.menu\n : await deps.menu.get({ branch: branchId, metadataOnly: true });\n if (metadata.branchId !== branchId) {\n throw new ZappieError(\n \"server_error\",\n \"Cart metadata belongs to another branch\",\n );\n }\n deps.menu.hydrate(metadata);\n if (metadata.completeness !== \"partial\") {\n return metadata;\n }\n await Promise.all(\n [...new Set(ids)].map(async (id) => {\n try {\n await deps.readItem(id, branchId, fresh);\n } catch (error) {\n if ((error as { code?: string }).code !== \"item_not_found\") {\n throw error;\n }\n }\n }),\n );\n return compose(branchId, ids, metadata);\n },\n };\n}\n","import { ZappieError } from \"./errors\";\nimport type { Transport } from \"./transport/types\";\n/** Release-pinned REST contract version, independent of the package version. */\nexport const API_VERSION = \"2026-10-01\";\n/** A storage adapter you can supply to save carts. */\nexport interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n /** Provide length and key to let the SDK remove expired carts for this store. */\n readonly length?: number;\n key?(index: number): string | null;\n}\n/** Settings for your storefront client. Each client keeps its own credentials and caches. */\nexport type ZappieConfig = {\n store: string;\n key: string;\n branch?: string;\n transport?: Transport;\n baseUrl?: string;\n version?: string;\n fetch?: typeof fetch;\n storage?: StorageLike;\n telemetry?: boolean;\n cart?: { ttl?: number; storageScope?: string };\n};\nexport function validateConfig(config: ZappieConfig, secret = false) {\n if (!config.store?.trim()) {\n throw new ZappieError(\"invalid_request\", \"A storefront slug is required\");\n }\n if (secret && typeof window !== \"undefined\") {\n throw new ZappieError(\n \"invalid_request\",\n \"Secret keys cannot be used in a browser\",\n );\n }\n const pattern = secret ? /^sk_(test|live)_.+$/ : /^pk_(test|live)_.+$/;\n const match = pattern.exec(config.key);\n if (!match) {\n throw new ZappieError(\n \"invalid_request\",\n secret\n ? \"A secret sk_test_ or sk_live_ key is required\"\n : \"Use a publishable pk_test_ or pk_live_ key; secret keys are never accepted by createZappie\",\n );\n }\n return match[1] as \"test\" | \"live\";\n}\n","export function abortReason(signal?: AbortSignal): unknown {\n return (\n signal?.reason ?? new DOMException(\"The request was aborted\", \"AbortError\")\n );\n}\nexport function throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw abortReason(signal);\n }\n}\nexport function delay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n throwIfAborted(signal);\n const abort = () => {\n clearTimeout(timer);\n reject(abortReason(signal));\n };\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", abort);\n resolve();\n }, ms);\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n}\n","import { asError } from \"../errors\";\nimport type { ZappieError } from \"../errors\";\nimport { abortReason, throwIfAborted } from \"./abort\";\nexport type CacheEntry<T> = {\n value?: T;\n fetchedAt: number;\n etag?: string;\n error?: ZappieError;\n failedAt?: number;\n loading: boolean;\n};\n/** After a failed background refresh, stale data is served without retrying for this long. */\nconst REFRESH_BACKOFF_MS = 10_000;\ntype Loaded<T> = { value: T; etag?: string; onStored?: () => void };\ntype Flight = {\n promise: Promise<unknown>;\n controller: AbortController;\n users: number;\n keepAlive: boolean;\n};\nconst EMPTY: CacheEntry<never> = Object.freeze({\n fetchedAt: 0,\n loading: false,\n});\n/** Client-local SWR storage. Subscribers receive stable snapshots until an entry changes. */\nexport class Cache {\n private entries = new Map<string, CacheEntry<unknown>>();\n private listeners = new Set<() => void>();\n private flights = new Map<string, Flight>();\n constructor(private onError: (error: ZappieError) => void) {}\n snapshot<T>(key: string): CacheEntry<T> {\n return (this.entries.get(key) ?? EMPTY) as CacheEntry<T>;\n }\n subscribe = (fn: () => void) => {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n };\n private notify() {\n for (const fn of [...this.listeners]) {\n fn();\n }\n }\n set<T>(key: string, value: T, etag?: string) {\n this.entries.set(key, {\n value,\n fetchedAt: Date.now(),\n loading: false,\n ...(etag !== undefined ? { etag } : {}),\n });\n this.notify();\n }\n stale(key: string) {\n const entry = this.snapshot(key);\n return entry.value !== undefined && Date.now() - entry.fetchedAt >= 60_000;\n }\n async get<T>(\n key: string,\n loader: (signal: AbortSignal, entry: CacheEntry<T>) => Promise<Loaded<T>>,\n signal?: AbortSignal,\n ): Promise<T> {\n throwIfAborted(signal);\n const entry = this.snapshot<T>(key);\n const age = Date.now() - entry.fetchedAt;\n if (entry.value !== undefined && age < 60_000) {\n return entry.value;\n }\n const background = entry.value !== undefined && age < 600_000;\n if (\n background &&\n entry.failedAt !== undefined &&\n Date.now() - entry.failedAt < REFRESH_BACKOFF_MS\n ) {\n return entry.value!;\n }\n let flight = this.flights.get(key);\n if (!flight) {\n const controller = new AbortController();\n flight = {\n controller,\n users: 0,\n keepAlive: background,\n promise: Promise.resolve(),\n };\n const current = flight;\n this.flights.set(key, current);\n const loading = { ...entry, loading: true };\n this.entries.set(key, loading);\n this.notify();\n current.promise = Promise.resolve()\n .then(() => {\n throwIfAborted(controller.signal);\n return loader(controller.signal, entry);\n })\n .then((result) => {\n if (this.entries.get(key) === loading && !controller.signal.aborted) {\n this.set(key, result.value, result.etag);\n result.onStored?.();\n }\n return result.value;\n })\n .catch((error) => {\n if (this.entries.get(key) === loading) {\n this.entries.set(\n key,\n controller.signal.aborted\n ? { ...entry, loading: false }\n : {\n ...entry,\n loading: false,\n error: asError(error),\n failedAt: Date.now(),\n },\n );\n this.notify();\n if (!controller.signal.aborted) {\n this.onError(asError(error));\n }\n }\n throw controller.signal.aborted\n ? abortReason(controller.signal)\n : asError(error);\n })\n .finally(() => {\n if (this.flights.get(key) === current) {\n this.flights.delete(key);\n }\n });\n }\n if (background) {\n flight.keepAlive = true;\n void flight.promise.catch(() => {});\n return entry.value!;\n }\n const current = flight;\n current.users++;\n return new Promise<T>((resolve, reject) => {\n let done = false;\n const finish = (callback: () => void) => {\n if (done) {\n return;\n }\n done = true;\n signal?.removeEventListener(\"abort\", abort);\n current.users--;\n callback();\n };\n const abort = () => {\n finish(() => reject(abortReason(signal)));\n if (current.users === 0 && !current.keepAlive) {\n current.controller.abort(abortReason(signal));\n if (this.flights.get(key) === current) {\n this.flights.delete(key);\n }\n }\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n current.promise.then(\n (value) => finish(() => resolve(value as T)),\n (error) => finish(() => reject(error)),\n );\n if (signal?.aborted) {\n abort();\n }\n });\n }\n}\n","import type { CartIssueCode } from \"../cart/types\";\nimport type { ZappieError } from \"../errors\";\nimport type { Money } from \"../money\";\n/** Events currently emitted by the read-only SDK. */\nexport type ZappieEvents = {\n search: { query: string; resultCount: number };\n warning: { message: string };\n cart_expired: { branchId: string };\n add_to_cart: { itemId: string; quantity: number; value: Money };\n remove_from_cart: { itemId: string; quantity: number; value: Money };\n update_cart_line: { lineId: string; itemId: string; quantity: number };\n view_cart: Record<string, never>;\n cart_issue: { code: CartIssueCode };\n quote_failed: { code: string };\n \"menu:updated\": { branchId: string; version: string };\n error: { error: ZappieError };\n};\nexport function createEmitter() {\n const listeners = new Map<\n keyof ZappieEvents,\n Set<(payload: never) => void>\n >();\n return {\n on<E extends keyof ZappieEvents>(\n event: E,\n fn: (payload: ZappieEvents[E]) => void,\n ) {\n const set = listeners.get(event) ?? new Set();\n listeners.set(event, set);\n set.add(fn as (payload: never) => void);\n return () => {\n set.delete(fn as (payload: never) => void);\n };\n },\n emit<E extends keyof ZappieEvents>(event: E, payload: ZappieEvents[E]) {\n for (const fn of [...(listeners.get(event) ?? [])]) {\n try {\n fn(payload as never);\n } catch (error) {\n console.error(\"Zappie event listener failed\", error);\n }\n }\n },\n };\n}\n","import type { QuoteRequest, WireQuote } from \"../cart/types\";\nimport { ZappieError, wireError } from \"../errors\";\nimport { delay, throwIfAborted } from \"../internal/abort\";\nimport { payloadKey } from \"../internal/digest\";\nimport { money } from \"../money\";\nimport {\n hours,\n isBoolean,\n isString,\n list,\n mapItem,\n mapMenu,\n mapMoney,\n opt,\n record,\n text,\n} from \"./mappers\";\nimport type { SelectedMenuRequest } from \"./selected-menu\";\nimport type {\n MenuResponse,\n MenuVersion,\n RequestCtx,\n SearchRequest,\n Transport,\n} from \"./types\";\n/** The longest Retry-After the SDK waits out before surfacing the error instead. */\nconst MAX_RETRY_WAIT_MS = 5_000;\n/** REST connection options. A custom fetch can provide tracing or mock responses. */\nexport type RestTransportOptions = { baseUrl?: string; fetch?: typeof fetch };\n/** REST read adapter for the versioned storefront API. */\nexport class RestTransport implements Transport {\n readonly baseUrl: string;\n private fetcher: typeof fetch;\n constructor(opts: RestTransportOptions = {}) {\n const url = new URL(opts.baseUrl ?? \"https://api.zappie.ai/storefront/v1\");\n if (\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n (url.protocol !== \"https:\" &&\n !(\n url.protocol === \"http:\" &&\n [\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(url.hostname)\n ))\n ) {\n throw new ZappieError(\n \"invalid_request\",\n \"REST baseUrl requires HTTPS, or HTTP on localhost\",\n );\n }\n this.baseUrl = url.href.replace(/\\/$/, \"\");\n // Called as this.fetcher(), a stored global fetch would run with the\n // transport as `this`, which Workers refuses (\"Illegal invocation\").\n this.fetcher =\n opts.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n private async request(\n path: string,\n ctx: RequestCtx,\n etag?: string,\n body?: QuoteRequest,\n ): Promise<Response> {\n if (typeof window !== \"undefined\" && ctx.key.startsWith(\"sk_\")) {\n throw new ZappieError(\n \"invalid_request\",\n \"Secret keys cannot be sent from a browser\",\n );\n }\n for (let attempt = 0; ; attempt++) {\n throwIfAborted(ctx.signal);\n let response: Response;\n try {\n response = await this.fetcher(this.baseUrl + path, {\n method: body ? \"POST\" : \"GET\",\n ...(body ? { body: JSON.stringify(body) } : {}),\n // Workers reject redirect: \"error\"; a redirect is still refused below\n // as a non-OK response (a 3xx, or opaqueredirect in browsers).\n redirect: \"manual\",\n headers: {\n ...(body ? { \"Content-Type\": \"application/json\" } : {}),\n ...(ctx.idempotencyKey\n ? { \"Idempotency-Key\": ctx.idempotencyKey }\n : {}),\n Authorization: `Bearer ${ctx.key}`,\n \"Zappie-Version\": ctx.version,\n ...(etag ? { \"If-None-Match\": etag } : {}),\n },\n ...(ctx.signal ? { signal: ctx.signal } : {}),\n });\n } catch (error) {\n throwIfAborted(ctx.signal);\n if (attempt >= 2) {\n throw new ZappieError(\n \"network_error\",\n \"Could not reach the storefront service\",\n { cause: error },\n );\n }\n await delay(100 * 2 ** attempt + Math.random() * 100, ctx.signal);\n continue;\n }\n if (response.ok || response.status === 304) {\n return response;\n }\n const retry = response.headers.get(\"Retry-After\");\n const seconds = retry !== null ? Number(retry) : NaN;\n const wait =\n retry !== null\n ? Number.isFinite(seconds)\n ? Math.max(0, seconds * 1000)\n : Math.max(0, Date.parse(retry) - Date.now())\n : NaN;\n // A longer wait than this is the caller's decision, not a silently stalled read.\n const tooLong = Number.isFinite(wait) && wait > MAX_RETRY_WAIT_MS;\n if (\n attempt < 2 &&\n !tooLong &&\n (response.status === 429 || response.status >= 500)\n ) {\n await response.body?.cancel();\n await delay(\n Number.isFinite(wait)\n ? wait\n : 100 * 2 ** attempt + Math.random() * 100,\n ctx.signal,\n );\n continue;\n }\n const errorBody = await response.json().catch(() => ({}));\n throw wireError(\n errorBody,\n response.status,\n response.headers.get(\"Zappie-Request-Id\") ?? undefined,\n );\n }\n }\n private async json(response: Response): Promise<unknown> {\n try {\n return await response.json();\n } catch (cause) {\n if (cause instanceof Error && cause.name === \"AbortError\") {\n throw cause;\n }\n throw new ZappieError(\n \"server_error\",\n \"The storefront service returned invalid JSON\",\n { status: response.status, cause },\n );\n }\n }\n async quote(ctx: RequestCtx, body: QuoteRequest): Promise<WireQuote> {\n const request = {\n ...ctx,\n idempotencyKey:\n ctx.idempotencyKey ?? (await payloadKey(JSON.stringify(body))),\n };\n const raw = await this.json(\n await this.request(\"/quote\", request, undefined, body),\n );\n // The cart's quote client validates and maps the response.\n return raw as WireQuote;\n }\n async getStore(ctx: RequestCtx) {\n const mapper = import(\"./store\").catch((cause) => {\n throw new ZappieError(\n \"server_error\",\n \"Could not load the storefront store mapper\",\n { cause },\n );\n });\n const response = this.request(\"/store\", ctx).then((value) =>\n this.json(value),\n );\n const [{ mapStore }, raw] = await Promise.all([mapper, response]);\n return mapStore(\n raw,\n record,\n text,\n list,\n hours,\n mapMoney,\n money,\n opt,\n isString,\n isBoolean,\n );\n }\n async getMenu(\n ctx: RequestCtx & {\n branchId: string;\n ifNoneMatch?: string;\n metadataOnly?: boolean;\n },\n ): Promise<MenuResponse> {\n let cursor: string | undefined;\n const seen = new Set<string>();\n let output: ReturnType<typeof mapMenu> | undefined;\n let etag: string | undefined;\n do {\n const query = new URLSearchParams({\n branch: ctx.branchId,\n ...(ctx.metadataOnly ? { metadata_only: \"true\" } : {}),\n ...(cursor ? { cursor } : {}),\n });\n const response = await this.request(\n `/menus?${query}`,\n ctx,\n cursor ? undefined : ctx.ifNoneMatch,\n );\n if (response.status === 304) {\n if (cursor) {\n throw new ZappieError(\n \"server_error\",\n \"Unexpected 304 on a continuation page\",\n );\n }\n return {\n notModified: true,\n ...(response.headers.get(\"ETag\")\n ? { etag: response.headers.get(\"ETag\")! }\n : {}),\n };\n }\n const raw = record(await this.json(response));\n const page = mapMenu(raw, ctx.branchId);\n if (ctx.metadataOnly) {\n if (Object.keys(page.items).length || raw.next_cursor) {\n throw new ZappieError(\"server_error\", \"Invalid metadata response\");\n }\n return { menu: { ...page, completeness: \"partial\" } };\n }\n if (!output) {\n output = page;\n etag = response.headers.get(\"ETag\") ?? undefined;\n } else {\n if (page.version !== output.version) {\n throw new ZappieError(\n \"server_error\",\n \"Menu changed while fetching pages; retry the read\",\n );\n }\n Object.assign(output.items, page.items);\n for (const category of page.categories) {\n const existing = output.categories.find((c) => c.id === category.id);\n if (existing) {\n existing.itemIds = [\n ...new Set([...existing.itemIds, ...category.itemIds]),\n ];\n } else {\n output.categories.push(category);\n }\n }\n for (const section of page.menus ?? []) {\n const existing = output.menus?.find((m) => m.id === section.id);\n if (existing) {\n existing.categoryIds = [\n ...new Set([...existing.categoryIds, ...section.categoryIds]),\n ];\n } else {\n output.menus?.push(section);\n }\n }\n }\n cursor =\n typeof raw.next_cursor === \"string\" && raw.next_cursor\n ? raw.next_cursor\n : undefined;\n if (cursor) {\n if (seen.has(cursor)) {\n throw new ZappieError(\n \"server_error\",\n \"Repeated menu pagination cursor\",\n );\n }\n seen.add(cursor);\n }\n } while (cursor);\n if (output.menus && output.menus.length > 1) {\n output.id = `branch:${ctx.branchId}`;\n output.name = \"Catalogue\";\n delete output.schedule;\n }\n for (const category of output.categories) {\n for (const id of category.itemIds) {\n if (!Object.prototype.hasOwnProperty.call(output.items, id)) {\n throw new ZappieError(\n \"server_error\",\n \"Category refers to a missing item\",\n );\n }\n }\n }\n if (Object.keys(output.items).length > 2000) {\n console.warn(\"Zappie menu contains more than 2,000 items\");\n }\n return { menu: output, ...(etag ? { etag } : {}) };\n }\n async getSelectedMenu(ctx: SelectedMenuRequest) {\n return (await import(\"./selected-menu\")).selectedMenu(\n ctx,\n (path) => this.request(path, ctx, ctx.ifNoneMatch),\n (response) => this.json(response),\n mapMenu,\n () => new ZappieError(\"server_error\", \"Invalid selected menu\"),\n );\n }\n async search(ctx: SearchRequest) {\n return (await import(\"./search\")).searchPage(\n ctx,\n async (path) => this.json(await this.request(path, ctx)),\n mapMenu,\n () => new ZappieError(\"server_error\", \"Invalid search page\"),\n );\n }\n async getCategoryPage(\n ctx: RequestCtx & {\n branchId: string;\n menuId: string;\n categoryId: string;\n cursor?: string;\n },\n ) {\n const query = new URLSearchParams({\n branch: ctx.branchId,\n ...(ctx.cursor ? { cursor: ctx.cursor } : {}),\n });\n const raw = await this.json(\n await this.request(\n `/menus/${encodeURIComponent(ctx.menuId)}/categories/${encodeURIComponent(ctx.categoryId)}/items?${query}`,\n ctx,\n ),\n );\n // Loaded on first use: only progressive catalogues read pages.\n return (await import(\"./category-page\")).categoryPage(\n record(raw),\n ctx,\n mapMenu,\n () => new ZappieError(\"server_error\", \"Invalid category page\"),\n );\n }\n async getMenuVersion(\n ctx: RequestCtx & { branchId: string },\n ): Promise<MenuVersion> {\n const value = record(\n await this.json(\n await this.request(\n `/menus/version?${new URLSearchParams({ branch: ctx.branchId })}`,\n ctx,\n ),\n ),\n );\n if (\n typeof value.menu_version !== \"string\" ||\n typeof value.availability_hash !== \"string\"\n ) {\n throw new ZappieError(\"server_error\", \"Invalid menu version response\");\n }\n return {\n version: value.menu_version,\n availabilityHash: value.availability_hash,\n };\n }\n async getItem(ctx: RequestCtx & { branchId: string; itemId: string }) {\n const item = mapItem(\n await this.json(\n await this.request(\n `/items/${encodeURIComponent(ctx.itemId)}?${new URLSearchParams({ branch: ctx.branchId })}`,\n ctx,\n ),\n ),\n );\n if (item.id !== ctx.itemId) {\n throw new ZappieError(\n \"server_error\",\n \"Item response identity does not match the request\",\n );\n }\n return item;\n }\n}\n","import { createCart } from \"./cart\";\nimport { createWorkingSet } from \"./cart/working-set\";\nimport type { ZappieConfig } from \"./config\";\nimport { API_VERSION, validateConfig } from \"./config\";\nimport { ZappieError } from \"./errors\";\nimport { Cache } from \"./internal/cache\";\nimport type { ZappieEvents } from \"./internal/emitter\";\nimport { createEmitter } from \"./internal/emitter\";\nimport type { Branch, CategoryPage, Item, Menu, Store } from \"./models\";\nimport { format } from \"./money\";\nimport { RestTransport } from \"./transport/rest\";\nimport type { MenuVersion, SearchPage } from \"./transport/types\";\n/** Optional branch selection and cancellation for resource reads. */\nexport type ReadOptions = { branch?: string; signal?: AbortSignal };\n/** Read-only store resource. */\nexport interface StoreResource {\n get(opts?: { signal?: AbortSignal }): Promise<Store>;\n peek(): Store | undefined;\n}\n/** Read-only branch catalogue and item resources. */\nexport interface MenuResource {\n search(\n query: string,\n opts?: ReadOptions & { cursor?: string },\n ): Promise<SearchPage>;\n get(opts?: ReadOptions & { metadataOnly?: boolean }): Promise<Menu>;\n page(\n menuId: string,\n categoryId: string,\n opts?: ReadOptions & { cursor?: string },\n ): Promise<CategoryPage>;\n peek(branch?: string): Menu | undefined;\n version(opts?: ReadOptions): Promise<MenuVersion>;\n item(id: string, opts?: ReadOptions): Promise<Item>;\n hydrate(menu: Menu): void;\n}\n/** A storefront client and its isolated resource state. */\nexport type Zappie = ReturnType<typeof buildClient>;\nexport function buildClient(input: ZappieConfig, secret = false) {\n const mode = validateConfig(input, secret);\n const config = Object.freeze({\n ...input,\n version: input.version ?? API_VERSION,\n telemetry: input.telemetry ?? true,\n });\n const transport =\n input.transport ??\n new RestTransport({\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n ...(input.fetch ? { fetch: input.fetch } : {}),\n });\n const events = createEmitter();\n const cache = new Cache((error) => events.emit(\"error\", { error }));\n const ctx = (signal?: AbortSignal) => ({\n key: config.key,\n version: config.version,\n ...(signal ? { signal } : {}),\n });\n const store: StoreResource = {\n get: (opts = {}) =>\n cache.get(\n \"store\",\n async (signal) => ({ value: await transport.getStore(ctx(signal)) }),\n opts.signal,\n ),\n peek: () => cache.snapshot<Store>(\"store\").value,\n };\n const resolveBranch = (value: Store, requested?: string): Branch => {\n const selected = requested ?? config.branch;\n const branch = selected\n ? value.branches.find((b) => b.id === selected || b.slug === selected)\n : (value.branches.find((b) => b.isDefault) ?? value.branches[0]);\n if (!branch) {\n throw new ZappieError(\n \"branch_not_found\",\n \"No matching storefront branch\",\n { param: \"branch\" },\n );\n }\n return branch;\n };\n let hydratedBranch: string | undefined;\n const branchKey = (requested?: string) => {\n const value = store.peek();\n if (value) {\n return resolveBranch(value, requested).id;\n }\n // A slug can't be resolved without the store. A hydrated menu is the configured\n // branch's, so a read for that branch (by slug or id) uses it rather than missing.\n const selected = requested ?? config.branch;\n if (\n hydratedBranch &&\n (selected === undefined ||\n selected === config.branch ||\n selected === hydratedBranch)\n ) {\n return hydratedBranch;\n }\n return selected ?? \"default\";\n };\n const menuKey = (requested?: string) => `menu:${branchKey(requested)}`;\n const menu: MenuResource = {\n async search(query, opts = {}) {\n if (!transport.search) {\n throw new ZappieError(\n \"invalid_request\",\n \"Transport does not support search\",\n );\n }\n const branch = resolveBranch(await store.get(opts), opts.branch);\n return transport.search({\n ...ctx(opts.signal),\n branchId: branch.id,\n query,\n ...(opts.cursor ? { cursor: opts.cursor } : {}),\n });\n },\n async get(opts = {}) {\n const branch = resolveBranch(await store.get(opts), opts.branch);\n return cache.get<Menu>(\n `menu:${branch.id}${opts.metadataOnly ? \":partial\" : \"\"}`,\n async (signal, entry) => {\n const response = await transport.getMenu({\n ...ctx(signal),\n branchId: branch.id,\n ...(opts.metadataOnly ? { metadataOnly: true } : {}),\n ...(entry.etag ? { ifNoneMatch: entry.etag } : {}),\n });\n if (\"notModified\" in response) {\n if (!entry.value) {\n throw new ZappieError(\n \"server_error\",\n \"Received 304 without a cached menu\",\n );\n }\n return {\n value: entry.value,\n ...((response.etag ?? entry.etag)\n ? { etag: response.etag ?? entry.etag }\n : {}),\n };\n }\n if (!opts.metadataOnly && response.menu.completeness === \"partial\") {\n throw new ZappieError(\n \"server_error\",\n \"Partial catalogue cannot satisfy a complete read\",\n );\n }\n if (response.menu.branchId !== branch.id) {\n throw new ZappieError(\n \"server_error\",\n \"Menu belongs to a different branch\",\n );\n }\n return {\n value: response.menu,\n etag: response.etag ?? response.menu.version,\n onStored: () => {\n if (\n entry.value &&\n entry.value.version !== response.menu.version\n ) {\n events.emit(\"menu:updated\", {\n branchId: branch.id,\n version: response.menu.version,\n });\n }\n },\n };\n },\n opts.signal,\n );\n },\n peek: (branch) =>\n cache.snapshot<Menu>(menuKey(branch)).value ??\n cache.snapshot<Menu>(`${menuKey(branch)}:partial`).value,\n async page(menuId, categoryId, opts = {}) {\n if (!transport.getCategoryPage) {\n throw new ZappieError(\n \"invalid_request\",\n \"Transport does not support category pages\",\n );\n }\n const branch = resolveBranch(await store.get(opts), opts.branch);\n return transport.getCategoryPage({\n ...ctx(opts.signal),\n branchId: branch.id,\n menuId,\n categoryId,\n ...(opts.cursor ? { cursor: opts.cursor } : {}),\n });\n },\n async version(opts = {}) {\n const branch = resolveBranch(await store.get(opts), opts.branch);\n return transport.getMenuVersion({\n ...ctx(opts.signal),\n branchId: branch.id,\n });\n },\n async item(id, opts = {}) {\n const branch = resolveBranch(await store.get(opts), opts.branch);\n if (\n !menu.peek(branch.id) ||\n menu.peek(branch.id)?.completeness === \"partial\"\n ) {\n await menu.get({ ...opts, metadataOnly: true });\n }\n return readItem(id, branch.id, false, opts.signal);\n },\n hydrate(value) {\n hydratedBranch ??= value.branchId;\n const previous = cache.snapshot<Menu>(`menu:${value.branchId}`).value;\n cache.set(\n `menu:${value.branchId}${value.completeness === \"partial\" ? \":partial\" : \"\"}`,\n value,\n value.version,\n );\n if (previous && previous.version !== value.version) {\n events.emit(\"menu:updated\", {\n branchId: value.branchId,\n version: value.version,\n });\n }\n },\n };\n const itemValues = new Map<string, Item>();\n const peekItem = (id: string, branch: string) =>\n itemValues.get(`${branch}:${id}`);\n const readItem = async (\n id: string,\n branch: string,\n fresh = false,\n signal?: AbortSignal,\n ) => {\n const complete = cache.snapshot<Menu>(`menu:${branch}`).value;\n if (!fresh && complete && Object.hasOwn(complete.items, id)) {\n return complete.items[id]!;\n }\n const load = (requestSignal = signal) =>\n transport.getItem({\n ...ctx(requestSignal),\n branchId: branch,\n itemId: id,\n });\n try {\n const value = fresh\n ? await load()\n : await cache.get(\n `item:${branch}:${id}`,\n async (requestSignal) => ({ value: await load(requestSignal) }),\n signal,\n );\n if (fresh) {\n cache.set(`item:${branch}:${id}`, value);\n }\n itemValues.set(`${branch}:${id}`, value);\n return value;\n } catch (error) {\n if ((error as { code?: string }).code === \"item_not_found\") {\n itemValues.delete(`${branch}:${id}`);\n cache.set(`item:${branch}:${id}`, undefined);\n }\n throw error;\n }\n };\n const workingSet = createWorkingSet({\n menu,\n store,\n transport,\n context: ctx,\n peekItem,\n readItem,\n });\n const { cart, setLegacyReader, cartCatalogue } = createCart({\n workingSet,\n config,\n menu,\n store,\n transport,\n context: ctx,\n events,\n });\n return Object.freeze({\n cart,\n config,\n mode,\n store,\n menu,\n format,\n on: events.on,\n _internal: {\n cartCatalogue,\n setLegacyReader,\n transport,\n cache,\n emit: events.emit,\n menuKey,\n hydrateStore: (value: Store) => cache.set(\"store\", value),\n },\n });\n}\n/** Create a client with your publishable key. Requests start when you read a resource. */\nexport function createZappie(config: ZappieConfig) {\n const client = buildClient(config);\n if (client.mode === \"test\" && typeof window !== \"undefined\") {\n void import(\"./debug\").then(({ installDebug }) => installDebug(client));\n }\n return client;\n}\nexport type { ZappieEvents };\n","import type { Item } from \"../models\";\nimport { multiplyMoney } from \"../internal/money-math\";\nimport { estimateUnitPrice } from \"./price\";\nimport { effectiveGroups, normalizeInput, resolveVariant } from \"./validate\";\nimport type { CartLineInput } from \"./types\";\nfunction previewQuantity(value: number | undefined) {\n return Number.isInteger(value) && value! >= 0 && value! <= 99 ? value! : 0;\n}\n/** Presentation preview shares the cart's conditions, exact-variant resolution and pricing. */\nexport function previewItem(item: Item, raw: CartLineInput) {\n const input = normalizeInput(item, raw);\n const groups = effectiveGroups(item, input).filter(\n (group) => group.isAvailable !== false,\n );\n const variantId = resolveVariant(item, input)?.id;\n const choices = (input.choices ?? [])\n .filter(({ groupId, choiceId }) =>\n groups.some(\n (group) =>\n group.id === groupId &&\n group.choices.some((choice) => choice.id === choiceId),\n ),\n )\n .map((selection) => ({\n ...selection,\n quantity: previewQuantity(selection.quantity),\n }));\n const unitPrice = estimateUnitPrice(item, {\n choices,\n ...(variantId ? { variantId } : {}),\n });\n const total = multiplyMoney(unitPrice, previewQuantity(input.quantity));\n return { groups, unitPrice, total };\n}\n","// tsup replaces __ZAPPIE_SDK_VERSION__ with package.json's version. Source run\n// without a build, as in a plain Node script, gets the development label.\n// Kept inline, not in a shared module, so the core chunks don't split differently.\ndeclare const __ZAPPIE_SDK_VERSION__: string | undefined;\n\n/** The installed @zappie/sdk version. */\nexport const VERSION: string =\n typeof __ZAPPIE_SDK_VERSION__ === \"string\"\n ? __ZAPPIE_SDK_VERSION__\n : \"0.0.0-development\";\nexport { createZappie } from \"./client\";\nexport type {\n MenuResource,\n ReadOptions,\n StoreResource,\n Zappie,\n ZappieEvents,\n} from \"./client\";\nexport { API_VERSION } from \"./config\";\nexport type {\n StorageLike,\n ZappieConfig as ZappieClientOptions,\n ZappieConfig,\n} from \"./config\";\nexport { ZappieError, isZappieError } from \"./errors\";\nexport type { ErrorDetails, ZappieErrorCode } from \"./errors\";\nexport * from \"./models\";\nexport { format, money } from \"./money\";\nexport type { Currency, Formatters, Money, MoneyFormatOptions } from \"./money\";\nexport { RestTransport } from \"./transport/rest\";\nexport type { RestTransportOptions } from \"./transport/rest\";\nexport type {\n MenuResponse,\n MenuVersion,\n RequestCtx,\n SearchPage,\n SearchRequest,\n Transport,\n} from \"./transport/types\";\n\nexport { ZappieCartError } from \"./cart/errors\";\nexport { previewItem } from \"./cart/preview\";\nexport { estimateUnitPrice } from \"./cart/price\";\nexport { resolveSourceMenu } from \"./cart/source-menu\";\nexport type * from \"./cart/types\";\nexport { validateLine } from \"./cart/validate\";\n"]}