@zappie/theme-base 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @zappie/theme-base
2
2
 
3
+ ## 0.1.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 86f1426: Checkout opens through `redirectToCheckout`, which refuses any URL that isn't Zappie's checkout.
8
+ - Updated dependencies [8ea70dc]
9
+ - Updated dependencies [ea37bcf]
10
+ - @zappie/sdk@0.2.0
11
+ - @zappie/foundations@0.1.11
12
+
3
13
  ## 0.1.6
4
14
 
5
15
  ### Patch Changes
package/dist/checkout.js CHANGED
@@ -5,6 +5,7 @@ import {
5
5
  CheckoutError,
6
6
  checkoutFulfilment as wireCheckoutFulfilment
7
7
  } from "@zappie/sdk/checkout";
8
+ import { redirectToCheckout } from "@zappie/sdk/redirect";
8
9
  import { currentSource } from "@zappie/sdk/visits";
9
10
  import {
10
11
  createContext,
@@ -120,7 +121,7 @@ function createSdkCheckoutHandoff({
120
121
  };
121
122
  try {
122
123
  const session = await checkout.open(request, attempt.key);
123
- location.assign(session.url);
124
+ redirectToCheckout(session.url);
124
125
  } catch (failure) {
125
126
  if (failure instanceof CheckoutError && failure.apiCode === "customer_required") {
126
127
  await handoff.signIn();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/checkout.tsx"],
4
- "sourcesContent": ["\"use client\";\n\nimport type { CartModule } from \"@zappie/sdk\";\nimport {\n CheckoutError,\n checkoutFulfilment as wireCheckoutFulfilment,\n type CheckoutClient,\n type CheckoutRequest,\n} from \"@zappie/sdk/checkout\";\nimport type { CustomerClient, SessionCustomer } from \"@zappie/sdk/customer\";\nimport { currentSource } from \"@zappie/sdk/visits\";\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\n\nexport type CheckoutPayload = ReturnType<CartModule[\"toCheckoutPayload\"]>;\nexport type CheckoutHandoff = {\n contactPhone?: boolean;\n customer: { name?: string; phoneLast4?: string } | null;\n signIn(): Promise<void> | void;\n pay(\n payload: CheckoutPayload,\n details?: { contactPhone?: string },\n ): Promise<void>;\n};\n\nconst subscriptions = new WeakMap<\n CheckoutHandoff,\n (listener: () => void) => () => void\n>();\nconst Context = createContext<CheckoutHandoff | null>(null);\nconst idle = () => () => {};\n\nexport function CheckoutHandoffProvider({\n handoff,\n children,\n}: {\n handoff: CheckoutHandoff;\n children: ReactNode;\n}) {\n const subscribe = useCallback(\n (listener: () => void) => (subscriptions.get(handoff) ?? idle)(listener),\n [handoff],\n );\n const read = useCallback(() => handoff.customer, [handoff]);\n const customer = useSyncExternalStore(subscribe, read, read);\n const value = useMemo<CheckoutHandoff>(\n () => ({\n ...(handoff.contactPhone !== undefined\n ? { contactPhone: handoff.contactPhone }\n : {}),\n customer,\n signIn: () => handoff.signIn(),\n pay: (payload, details) =>\n details ? handoff.pay(payload, details) : handoff.pay(payload),\n }),\n [customer, handoff],\n );\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\nexport function useCheckoutHandoff() {\n const handoff = useContext(Context);\n if (!handoff) {\n throw new Error(\"useCheckoutHandoff requires CheckoutHandoffProvider\");\n }\n return handoff;\n}\n\nfunction customerName(customer: SessionCustomer | null) {\n if (!customer) {\n return null;\n }\n const digits = customer.phone_masked?.replace(/\\D/g, \"\") ?? \"\";\n return {\n ...(customer.given_name ? { name: customer.given_name } : {}),\n ...(digits.length >= 4 ? { phoneLast4: digits.slice(-4) } : {}),\n };\n}\n\nfunction checkoutFulfilment(payload: CheckoutPayload) {\n const fulfilment = wireCheckoutFulfilment(payload.fulfilment);\n if (fulfilment.type === \"delivery\") {\n return { ...fulfilment, type: \"delivery\" } as const;\n }\n if (fulfilment.type === \"pickup\") {\n return { ...fulfilment, type: \"pickup\" } as const;\n }\n throw new Error(\"Dine-in checkout is unavailable\");\n}\n\nexport function createSdkCheckoutHandoff({\n customer,\n checkout,\n branchId,\n returnUrl,\n cancelUrl,\n attribution = currentSource,\n}: {\n customer: CustomerClient;\n checkout: CheckoutClient;\n branchId: string;\n returnUrl?: string;\n cancelUrl?: string;\n attribution?: () => { source: string; campaign: string };\n}): CheckoutHandoff {\n let source = customer.customer;\n let current = customerName(source);\n // One attempt per cart and phone: a retry reuses the key and the exact body,\n // because the API refuses a reused key whose body changed.\n let attempt:\n | {\n digest: string;\n key: string;\n returnUrl: string;\n cancelUrl: string;\n source: string;\n campaign: string;\n }\n | undefined;\n const readCustomer = () => {\n if (source !== customer.customer) {\n source = customer.customer;\n current = customerName(source);\n }\n return current;\n };\n const handoff: CheckoutHandoff = {\n contactPhone: true,\n get customer() {\n return readCustomer();\n },\n signIn() {\n customer.signIn();\n },\n async pay(payload, details) {\n const contactPhone =\n details?.contactPhone?.trim().replace(/\\s+/g, \"\") ?? \"\";\n const digest = JSON.stringify({ payload, contactPhone });\n if (attempt?.digest !== digest) {\n const visit = attribution();\n attempt = {\n digest,\n key: crypto.randomUUID(),\n returnUrl: returnUrl ?? `${location.origin}/checkout/return`,\n cancelUrl: cancelUrl ?? location.href,\n source: visit.source,\n campaign: visit.campaign,\n };\n }\n const request: CheckoutRequest = {\n branch_id: branchId,\n menu_version: payload.menu_version,\n lines: payload.lines,\n fulfilment: checkoutFulfilment(payload),\n ...(contactPhone ? { contact_phone: contactPhone } : {}),\n ...(payload.promo_code ? { promo_code: payload.promo_code } : {}),\n ...(attempt.source ? { source: attempt.source } : {}),\n ...(attempt.campaign ? { campaign: attempt.campaign } : {}),\n return_url: attempt.returnUrl,\n cancel_url: attempt.cancelUrl,\n };\n try {\n const session = await checkout.open(request, attempt.key);\n location.assign(session.url);\n } catch (failure) {\n if (\n failure instanceof CheckoutError &&\n failure.apiCode === \"customer_required\"\n ) {\n await handoff.signIn();\n return;\n }\n throw failure;\n }\n },\n };\n subscriptions.set(handoff, (listener) => {\n const unsubscribe = customer.onChange((_state, next) => {\n source = next;\n current = customerName(next);\n listener();\n });\n // Without a CustomerProvider nothing else asks who is signed in.\n if (customer.state === \"unknown\") {\n void customer.session().catch(() => undefined);\n }\n return unsubscribe;\n });\n return handoff;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\";\n\nimport type { CartModule } from \"@zappie/sdk\";\nimport {\n CheckoutError,\n checkoutFulfilment as wireCheckoutFulfilment,\n type CheckoutClient,\n type CheckoutRequest,\n} from \"@zappie/sdk/checkout\";\nimport type { CustomerClient, SessionCustomer } from \"@zappie/sdk/customer\";\nimport { redirectToCheckout } from \"@zappie/sdk/redirect\";\nimport { currentSource } from \"@zappie/sdk/visits\";\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\n\nexport type CheckoutPayload = ReturnType<CartModule[\"toCheckoutPayload\"]>;\nexport type CheckoutHandoff = {\n contactPhone?: boolean;\n customer: { name?: string; phoneLast4?: string } | null;\n signIn(): Promise<void> | void;\n pay(\n payload: CheckoutPayload,\n details?: { contactPhone?: string },\n ): Promise<void>;\n};\n\nconst subscriptions = new WeakMap<\n CheckoutHandoff,\n (listener: () => void) => () => void\n>();\nconst Context = createContext<CheckoutHandoff | null>(null);\nconst idle = () => () => {};\n\nexport function CheckoutHandoffProvider({\n handoff,\n children,\n}: {\n handoff: CheckoutHandoff;\n children: ReactNode;\n}) {\n const subscribe = useCallback(\n (listener: () => void) => (subscriptions.get(handoff) ?? idle)(listener),\n [handoff],\n );\n const read = useCallback(() => handoff.customer, [handoff]);\n const customer = useSyncExternalStore(subscribe, read, read);\n const value = useMemo<CheckoutHandoff>(\n () => ({\n ...(handoff.contactPhone !== undefined\n ? { contactPhone: handoff.contactPhone }\n : {}),\n customer,\n signIn: () => handoff.signIn(),\n pay: (payload, details) =>\n details ? handoff.pay(payload, details) : handoff.pay(payload),\n }),\n [customer, handoff],\n );\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\nexport function useCheckoutHandoff() {\n const handoff = useContext(Context);\n if (!handoff) {\n throw new Error(\"useCheckoutHandoff requires CheckoutHandoffProvider\");\n }\n return handoff;\n}\n\nfunction customerName(customer: SessionCustomer | null) {\n if (!customer) {\n return null;\n }\n const digits = customer.phone_masked?.replace(/\\D/g, \"\") ?? \"\";\n return {\n ...(customer.given_name ? { name: customer.given_name } : {}),\n ...(digits.length >= 4 ? { phoneLast4: digits.slice(-4) } : {}),\n };\n}\n\nfunction checkoutFulfilment(payload: CheckoutPayload) {\n const fulfilment = wireCheckoutFulfilment(payload.fulfilment);\n if (fulfilment.type === \"delivery\") {\n return { ...fulfilment, type: \"delivery\" } as const;\n }\n if (fulfilment.type === \"pickup\") {\n return { ...fulfilment, type: \"pickup\" } as const;\n }\n throw new Error(\"Dine-in checkout is unavailable\");\n}\n\nexport function createSdkCheckoutHandoff({\n customer,\n checkout,\n branchId,\n returnUrl,\n cancelUrl,\n attribution = currentSource,\n}: {\n customer: CustomerClient;\n checkout: CheckoutClient;\n branchId: string;\n returnUrl?: string;\n cancelUrl?: string;\n attribution?: () => { source: string; campaign: string };\n}): CheckoutHandoff {\n let source = customer.customer;\n let current = customerName(source);\n // One attempt per cart and phone: a retry reuses the key and the exact body,\n // because the API refuses a reused key whose body changed.\n let attempt:\n | {\n digest: string;\n key: string;\n returnUrl: string;\n cancelUrl: string;\n source: string;\n campaign: string;\n }\n | undefined;\n const readCustomer = () => {\n if (source !== customer.customer) {\n source = customer.customer;\n current = customerName(source);\n }\n return current;\n };\n const handoff: CheckoutHandoff = {\n contactPhone: true,\n get customer() {\n return readCustomer();\n },\n signIn() {\n customer.signIn();\n },\n async pay(payload, details) {\n const contactPhone =\n details?.contactPhone?.trim().replace(/\\s+/g, \"\") ?? \"\";\n const digest = JSON.stringify({ payload, contactPhone });\n if (attempt?.digest !== digest) {\n const visit = attribution();\n attempt = {\n digest,\n key: crypto.randomUUID(),\n returnUrl: returnUrl ?? `${location.origin}/checkout/return`,\n cancelUrl: cancelUrl ?? location.href,\n source: visit.source,\n campaign: visit.campaign,\n };\n }\n const request: CheckoutRequest = {\n branch_id: branchId,\n menu_version: payload.menu_version,\n lines: payload.lines,\n fulfilment: checkoutFulfilment(payload),\n ...(contactPhone ? { contact_phone: contactPhone } : {}),\n ...(payload.promo_code ? { promo_code: payload.promo_code } : {}),\n ...(attempt.source ? { source: attempt.source } : {}),\n ...(attempt.campaign ? { campaign: attempt.campaign } : {}),\n return_url: attempt.returnUrl,\n cancel_url: attempt.cancelUrl,\n };\n try {\n const session = await checkout.open(request, attempt.key);\n redirectToCheckout(session.url);\n } catch (failure) {\n if (\n failure instanceof CheckoutError &&\n failure.apiCode === \"customer_required\"\n ) {\n await handoff.signIn();\n return;\n }\n throw failure;\n }\n },\n };\n subscriptions.set(handoff, (listener) => {\n const unsubscribe = customer.onChange((_state, next) => {\n source = next;\n current = customerName(next);\n listener();\n });\n // Without a CustomerProvider nothing else asks who is signed in.\n if (customer.state === \"unknown\") {\n void customer.session().catch(() => undefined);\n }\n return unsubscribe;\n });\n return handoff;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zappie/theme-base",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "The base storefront theme Zappie's own storefront app renders, built only from Zappie's public packages.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -54,8 +54,8 @@
54
54
  "CHANGELOG.md"
55
55
  ],
56
56
  "dependencies": {
57
- "@zappie/foundations": "^0.1.10",
58
- "@zappie/sdk": "^0.1.24",
57
+ "@zappie/foundations": "^0.1.11",
58
+ "@zappie/sdk": "^0.2.0",
59
59
  "@zappie/tokens": "^0.1.3"
60
60
  },
61
61
  "peerDependencies": {