@zappie/sdk 0.1.1 → 0.1.2
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 +6 -0
- package/dist/cart/errors.js +13 -0
- package/dist/cart/errors.js.map +7 -0
- package/dist/cart/index.js +768 -0
- package/dist/cart/index.js.map +7 -0
- package/dist/cart/item.js +12 -1
- package/dist/cart/item.js.map +7 -1
- package/dist/cart/preview.js +32 -0
- package/dist/cart/preview.js.map +7 -0
- package/dist/cart/price.js +25 -0
- package/dist/cart/price.js.map +7 -0
- package/dist/cart/quote-client.js +76 -0
- package/dist/cart/quote-client.js.map +7 -0
- package/dist/cart/quote-response.js +178 -0
- package/dist/cart/quote-response.js.map +7 -0
- package/dist/cart/reconcile.js +108 -0
- package/dist/cart/reconcile.js.map +7 -0
- package/dist/cart/source-menu.js +21 -0
- package/dist/cart/source-menu.js.map +7 -0
- package/dist/cart/storage.js +174 -0
- package/dist/cart/storage.js.map +7 -0
- package/dist/cart/types.js +1 -0
- package/dist/cart/types.js.map +7 -0
- package/dist/cart/validate.js +265 -0
- package/dist/cart/validate.js.map +7 -0
- package/dist/cart/wire.js +42 -0
- package/dist/cart/wire.js.map +7 -0
- package/dist/cart/working-set.js +80 -0
- package/dist/cart/working-set.js.map +7 -0
- package/dist/checkout/client.js +102 -0
- package/dist/checkout/client.js.map +7 -0
- package/dist/checkout/error.js +21 -0
- package/dist/checkout/error.js.map +7 -0
- package/dist/checkout/index.js +13 -1
- package/dist/checkout/index.js.map +7 -1
- package/dist/checkout/readiness.js +36 -0
- package/dist/checkout/readiness.js.map +7 -0
- package/dist/checkout/sdk.js +9 -0
- package/dist/checkout/sdk.js.map +7 -0
- package/dist/checkout/session.js +58 -0
- package/dist/checkout/session.js.map +7 -0
- package/dist/checkout/types.js +1 -0
- package/dist/checkout/types.js.map +7 -0
- package/dist/client.js +253 -0
- package/dist/client.js.map +7 -0
- package/dist/config/index.js +13 -1
- package/dist/config/index.js.map +7 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +7 -0
- package/dist/customer/client.js +149 -0
- package/dist/customer/client.js.map +7 -0
- package/dist/customer/error.js +20 -0
- package/dist/customer/error.js.map +7 -0
- package/dist/customer/index.js +8 -3
- package/dist/customer/index.js.map +7 -1
- package/dist/customer/navigation.js +45 -0
- package/dist/customer/navigation.js.map +7 -0
- package/dist/customer/react.js +67 -2
- package/dist/customer/react.js.map +7 -1
- package/dist/customer/request.js +37 -0
- package/dist/customer/request.js.map +7 -0
- package/dist/customer/sdk.js +6 -0
- package/dist/customer/sdk.js.map +7 -0
- package/dist/customer/types.js +1 -0
- package/dist/customer/types.js.map +7 -0
- package/dist/customer/watch-order.js +80 -0
- package/dist/customer/watch-order.js.map +7 -0
- package/dist/debug.js +78 -1
- package/dist/debug.js.map +7 -1
- package/dist/errors.js +69 -0
- package/dist/errors.js.map +7 -0
- package/dist/index.js +29 -1
- package/dist/index.js.map +7 -1
- package/dist/internal/abort.js +29 -0
- package/dist/internal/abort.js.map +7 -0
- package/dist/internal/cache.js +142 -0
- package/dist/internal/cache.js.map +7 -0
- package/dist/internal/customer-http.js +74 -0
- package/dist/internal/customer-http.js.map +7 -0
- package/dist/internal/digest.js +15 -0
- package/dist/internal/digest.js.map +7 -0
- package/dist/internal/emitter.js +27 -0
- package/dist/internal/emitter.js.map +7 -0
- package/dist/internal/money-math.js +30 -0
- package/dist/internal/money-math.js.map +7 -0
- package/dist/internal.js +9 -1
- package/dist/internal.js.map +7 -1
- package/dist/models.js +1 -0
- package/dist/models.js.map +7 -0
- package/dist/money.js +58 -0
- package/dist/money.js.map +7 -0
- package/dist/persist/catalogue.js +206 -2
- package/dist/persist/catalogue.js.map +7 -1
- package/dist/places/client.js +97 -0
- package/dist/places/client.js.map +7 -0
- package/dist/places/error.js +20 -0
- package/dist/places/error.js.map +7 -0
- package/dist/places/index.js +8 -1
- package/dist/places/index.js.map +7 -1
- package/dist/places/request.js +40 -0
- package/dist/places/request.js.map +7 -0
- package/dist/places/sdk.js +10 -0
- package/dist/places/sdk.js.map +7 -0
- package/dist/places/search.js +80 -0
- package/dist/places/search.js.map +7 -0
- package/dist/places/types.js +1 -0
- package/dist/places/types.js.map +7 -0
- package/dist/react/cart.js +30 -0
- package/dist/react/cart.js.map +7 -0
- package/dist/react/hooks.js +91 -0
- package/dist/react/hooks.js.map +7 -0
- package/dist/react/index.js +18 -1
- package/dist/react/index.js.map +7 -1
- package/dist/react/provider.js +34 -0
- package/dist/react/provider.js.map +7 -0
- package/dist/server/index.js +32 -2
- package/dist/server/index.js.map +7 -1
- package/dist/server/storefront-url/build-v1.js +75 -0
- package/dist/server/storefront-url/build-v1.js.map +7 -0
- package/dist/server/storefront-url/build-v2.js +79 -0
- package/dist/server/storefront-url/build-v2.js.map +7 -0
- package/dist/server/storefront-url/build.js +19 -0
- package/dist/server/storefront-url/build.js.map +7 -0
- package/dist/server/storefront-url/contract.js +25 -0
- package/dist/server/storefront-url/contract.js.map +7 -0
- package/dist/server/storefront-url/index.js +16 -0
- package/dist/server/storefront-url/index.js.map +7 -0
- package/dist/server/storefront-url/installation.js +58 -0
- package/dist/server/storefront-url/installation.js.map +7 -0
- package/dist/server/storefront-url/params.js +72 -0
- package/dist/server/storefront-url/params.js.map +7 -0
- package/dist/server/storefront-url/parse-v1.js +135 -0
- package/dist/server/storefront-url/parse-v1.js.map +7 -0
- package/dist/server/storefront-url/parse-v2.js +139 -0
- package/dist/server/storefront-url/parse-v2.js.map +7 -0
- package/dist/server/storefront-url/parse.js +9 -0
- package/dist/server/storefront-url/parse.js.map +7 -0
- package/dist/server/storefront-url/redirect.js +30 -0
- package/dist/server/storefront-url/redirect.js.map +7 -0
- package/dist/server/storefront-url/sign-in.js +17 -0
- package/dist/server/storefront-url/sign-in.js.map +7 -0
- package/dist/server/storefront-url/types.js +55 -0
- package/dist/server/storefront-url/types.js.map +7 -0
- package/dist/server/storefront-url/url.js +61 -0
- package/dist/server/storefront-url/url.js.map +7 -0
- package/dist/server/webhook.js +96 -0
- package/dist/server/webhook.js.map +7 -0
- package/dist/site-config/helpers.js +59 -0
- package/dist/site-config/helpers.js.map +7 -0
- package/dist/site-config/sections.js +105 -0
- package/dist/site-config/sections.js.map +7 -0
- package/dist/site-config/types.js +31 -0
- package/dist/site-config/types.js.map +7 -0
- package/dist/site-config/validate.js +165 -0
- package/dist/site-config/validate.js.map +7 -0
- package/dist/template/index.js +46 -3
- package/dist/template/index.js.map +7 -1
- package/dist/template/react.js +81 -2
- package/dist/template/react.js.map +7 -1
- package/dist/testing/index.js +451 -2
- package/dist/testing/index.js.map +7 -1
- package/dist/transport/category-page.js +21 -2
- package/dist/transport/category-page.js.map +7 -1
- package/dist/transport/mappers.js +326 -0
- package/dist/transport/mappers.js.map +7 -0
- package/dist/transport/rest.js +313 -0
- package/dist/transport/rest.js.map +7 -0
- package/dist/transport/search.js +32 -2
- package/dist/transport/search.js.map +7 -1
- package/dist/transport/selected-menu.js +79 -2
- package/dist/transport/selected-menu.js.map +7 -1
- package/dist/transport/store.js +120 -2
- package/dist/transport/store.js.map +7 -1
- package/dist/transport/types.js +1 -0
- package/dist/transport/types.js.map +7 -0
- package/dist/url/index.js +16 -2
- package/dist/url/index.js.map +7 -1
- package/dist/visits/index.js +62 -1
- package/dist/visits/index.js.map +7 -1
- package/dist/visits/page-views.js +103 -0
- package/dist/visits/page-views.js.map +7 -0
- package/package.json +3 -3
- package/dist/cart/quote.js +0 -1
- package/dist/cart/quote.js.map +0 -1
- package/dist/chunk-I55A5QXJ.js +0 -2
- package/dist/chunk-I55A5QXJ.js.map +0 -1
- package/dist/chunk-LFBQICYU.js +0 -2
- package/dist/chunk-LFBQICYU.js.map +0 -1
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/internal/customer-http.ts","../../src/customer/error.ts","../../src/customer/navigation.ts","../../src/customer/request.ts","../../src/customer/watch-order.ts","../../src/customer/client.ts"],"names":["stableErrorCode","status","apiError","response","fallback","body","envelope","value","wait","ms","signal","resolve","reject","timer","aborted","requestWithRetry","fetcher","input","init","message","attempt","cause","ZappieError","CustomerError","apiCode","param","issues","safeReturnTo","currentPath","signIn","path","link","signOut","form","createCustomerRequest","base","unauthorized","final","watchOrder","id","read","options","controller","pollMs","source","failures","stopped","stop","publish","order","poll","failure","connect","event","next","DEFAULT_CUSTOMER_BASE","DEFAULT_SESSION_PATH","same","left","right","createCustomer","sessionPath","customer","state","listeners","update","nextState","listener","request","readOrder","pending","check","refresh","recheck","returnTo","query","suffix","watchOptions"],"mappings":"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","file":"index.js","sourcesContent":["// Isolated customer-facing bundles import the installed core so error identity is shared.\n// eslint-disable-next-line no-restricted-imports\nimport { ZappieError } from \"@zappie/sdk\";\n\nexport type ApiErrorDetails = {\n apiCode: string;\n message: string;\n param?: string;\n issues?: unknown;\n};\n\nexport function stableErrorCode(status: number) {\n if (status === 400 || status === 422) {\n return \"invalid_request\" as const;\n }\n if (status === 401) {\n return \"unauthorized\" as const;\n }\n if (status === 404) {\n return \"not_found\" as const;\n }\n if (status === 429) {\n return \"rate_limited\" as const;\n }\n return \"server_error\" as const;\n}\n\nexport async function apiError(\n response: Response,\n fallback: string,\n): Promise<ApiErrorDetails> {\n const body = await response.json().catch(() => ({}));\n const envelope = body && typeof body === \"object\" ? body : {};\n const value =\n \"error\" in envelope && envelope.error && typeof envelope.error === \"object\"\n ? envelope.error\n : {};\n return {\n apiCode:\n \"code\" in value && typeof value.code === \"string\"\n ? value.code\n : \"server_error\",\n message:\n \"message\" in value && typeof value.message === \"string\"\n ? value.message\n : fallback,\n ...(\"param\" in value && typeof value.param === \"string\"\n ? { param: value.param }\n : {}),\n ...(\"issues\" in value ? { issues: value.issues } : {}),\n };\n}\n\nexport function wait(ms: number, signal?: AbortSignal): Promise<void> {\n signal?.throwIfAborted();\n return new Promise((resolve, reject) => {\n const done = () => {\n signal?.removeEventListener(\"abort\", aborted);\n resolve();\n };\n const timer = setTimeout(done, ms);\n const aborted = () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", aborted);\n reject(signal?.reason ?? new DOMException(\"Aborted\", \"AbortError\"));\n };\n signal?.addEventListener(\"abort\", aborted, { once: true });\n });\n}\n\nexport async function requestWithRetry(\n fetcher: typeof fetch,\n input: string,\n init: RequestInit,\n message: string,\n): Promise<Response> {\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n return await fetcher(input, {\n ...init,\n credentials: \"same-origin\",\n headers: { Accept: \"application/json\", ...init.headers },\n });\n } catch (cause) {\n if (init.signal?.aborted) {\n throw init.signal.reason ?? cause;\n }\n if (attempt === 1) {\n throw new ZappieError(\"network_error\", message, {\n cause,\n retryable: true,\n });\n }\n await wait(400, init.signal ?? undefined);\n }\n }\n throw new ZappieError(\"network_error\", message, { retryable: true });\n}\n","import { stableErrorCode } from \"../internal/customer-http\";\nimport { ZappieError } from \"./sdk\";\n\n/**\n * A customer API failure with its HTTP status, API code and optional validation issues.\n * Statuses 429 and 5xx are marked retryable.\n */\nexport class CustomerError extends ZappieError {\n readonly issues?: unknown;\n\n constructor(\n status: number,\n readonly apiCode: string,\n message: string,\n param?: string,\n issues?: unknown,\n ) {\n super(stableErrorCode(status), message, {\n status,\n retryable: status === 429 || status >= 500,\n ...(param !== undefined ? { param } : {}),\n });\n if (issues !== undefined) {\n this.issues = issues;\n }\n }\n}\n","export function safeReturnTo(value: string | undefined): string {\n if (!value || !value.startsWith(\"/\") || value.startsWith(\"//\")) {\n return \"/\";\n }\n if (value.startsWith(\"/\\\\\")) {\n return \"/\";\n }\n return value;\n}\n\nexport function currentPath(): string {\n if (typeof location === \"undefined\") {\n return \"/\";\n }\n return location.pathname + location.search;\n}\n\nexport function signIn(path: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n const link = document.createElement(\"a\");\n link.href = `/_zappie/login?return=${encodeURIComponent(path)}`;\n link.target = \"_top\";\n link.click();\n}\n\nexport function signOut(path: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n const form = document.createElement(\"form\");\n form.method = \"POST\";\n form.action = path;\n form.target = \"_top\";\n form.hidden = true;\n document.body.appendChild(form);\n form.submit();\n form.remove();\n}\n","import { apiError, requestWithRetry } from \"../internal/customer-http\";\nimport { CustomerError } from \"./error\";\n\nexport type CustomerRequest = <T>(\n path: string,\n init?: RequestInit,\n) => Promise<T>;\n\nexport function createCustomerRequest(\n base: string,\n fetcher: typeof fetch,\n unauthorized: () => void,\n): CustomerRequest {\n return async <T>(path: string, init: RequestInit = {}): Promise<T> => {\n const response = await requestWithRetry(\n fetcher,\n base + path,\n init,\n \"Could not reach the customer service\",\n );\n if (response.status === 401) {\n unauthorized();\n }\n if (!response.ok) {\n const value = await apiError(\n response,\n `The customer service answered ${response.status}`,\n );\n throw new CustomerError(\n response.status,\n value.apiCode,\n value.message,\n value.param,\n value.issues,\n );\n }\n if (response.status === 204) {\n return undefined as T;\n }\n return (await response.json()) as T;\n };\n}\n","import { wait } from \"../internal/customer-http\";\nimport { CustomerError } from \"./error\";\nimport type { CustomerOrder, WatchOrderOptions } from \"./types\";\n\nconst final = new Set([\"completed\", \"cancelled\", \"rejected\"]);\n\ntype ReadOrder = (id: string, signal?: AbortSignal) => Promise<CustomerOrder>;\n\nexport function watchOrder(\n base: string,\n id: string,\n read: ReadOrder,\n options: WatchOrderOptions,\n): () => void {\n const controller = new AbortController();\n const pollMs = options.pollMs ?? 15_000;\n let source: EventSource | undefined;\n let failures = 0;\n let stopped = false;\n const stop = () => {\n if (stopped) {\n return;\n }\n stopped = true;\n source?.close();\n controller.abort();\n options.signal?.removeEventListener(\"abort\", stop);\n };\n const publish = (order: CustomerOrder) => {\n options.onOrder(order);\n if (final.has(order.status)) {\n stop();\n }\n };\n const poll = async () => {\n while (!stopped) {\n try {\n publish(await read(id, controller.signal));\n } catch (failure) {\n if (\n failure instanceof CustomerError &&\n failure.status !== undefined &&\n failure.status >= 400 &&\n failure.status < 500\n ) {\n stop();\n return;\n }\n }\n if (!stopped) {\n await wait(pollMs, controller.signal).catch(() => undefined);\n }\n }\n };\n const connect = () => {\n if (stopped || typeof EventSource === \"undefined\") {\n void poll();\n return;\n }\n source = new EventSource(\n `${base}/me/orders/${encodeURIComponent(id)}/events`,\n );\n source.addEventListener(\"status\", (event) => {\n failures = 0;\n let next: CustomerOrder;\n try {\n next = JSON.parse((event as MessageEvent).data) as CustomerOrder;\n } catch {\n return;\n }\n publish(next);\n });\n source.onerror = () => {\n source?.close();\n failures++;\n if (failures >= 2) {\n void poll();\n } else {\n connect();\n }\n };\n };\n options.signal?.addEventListener(\"abort\", stop, { once: true });\n if (options.signal?.aborted) {\n stop();\n } else {\n connect();\n }\n return stop;\n}\n","import { apiError, requestWithRetry } from \"../internal/customer-http\";\nimport { CustomerError } from \"./error\";\nimport { currentPath, safeReturnTo, signIn, signOut } from \"./navigation\";\nimport { createCustomerRequest } from \"./request\";\nimport type {\n AuthState,\n CreateAddress,\n CustomerClientOptions,\n CustomerListener,\n CustomerOrder,\n CustomerProfile,\n OrdersPage,\n SavedAddress,\n SessionCustomer,\n WatchOrderOptions,\n} from \"./types\";\nimport { watchOrder } from \"./watch-order\";\n\nconst DEFAULT_CUSTOMER_BASE = \"/_zappie/api\";\nconst DEFAULT_SESSION_PATH = \"/_zappie/session\";\n\nfunction same(\n left: SessionCustomer | null,\n right: SessionCustomer | null,\n): boolean {\n return (\n left?.id === right?.id &&\n left?.given_name === right?.given_name &&\n left?.phone_masked === right?.phone_masked\n );\n}\n\n/**\n * Create a client for customer sessions, saved addresses and orders.\n * Browser visibility and pageshow events refresh the session. Call dispose when you stop using the client.\n *\n * @param options - Endpoint overrides, fetch implementation and optional initial customer.\n * @returns A customer client with session subscriptions and sign-in and sign-out navigation.\n */\nexport function createCustomer(options: CustomerClientOptions = {}) {\n const base = (options.customerBase ?? DEFAULT_CUSTOMER_BASE).replace(\n /\\/+$/,\n \"\",\n );\n const sessionPath = options.sessionPath ?? DEFAULT_SESSION_PATH;\n const fetcher = options.fetch ?? globalThis.fetch;\n let customer = options.initialCustomer ?? null;\n let state: AuthState =\n options.initialCustomer === undefined\n ? \"unknown\"\n : customer\n ? \"authenticated\"\n : \"anonymous\";\n const listeners = new Set<CustomerListener>();\n const update = (next: SessionCustomer | null, nextState: AuthState) => {\n if (state === nextState && same(customer, next)) {\n return;\n }\n state = nextState;\n customer = next;\n globalThis.__zappieEmit?.(\"auth:changed\", { state, customer });\n for (const listener of listeners) {\n listener(state, customer);\n }\n };\n const request = createCustomerRequest(base, fetcher, () => {\n update(null, \"anonymous\");\n });\n const readOrder = (id: string, signal?: AbortSignal) =>\n request<CustomerOrder>(`/me/orders/${encodeURIComponent(id)}`, {\n method: \"GET\",\n ...(signal ? { signal } : {}),\n });\n let pending: Promise<SessionCustomer | null> | undefined;\n const check = async (): Promise<SessionCustomer | null> => {\n const response = await requestWithRetry(\n fetcher,\n sessionPath,\n { method: \"GET\", cache: \"no-store\" },\n \"Could not check the customer session\",\n );\n if (!response.ok) {\n const value = await apiError(\n response,\n `The session service answered ${response.status}`,\n );\n throw new CustomerError(\n response.status,\n value.apiCode,\n value.message,\n value.param,\n value.issues,\n );\n }\n const body = (await response.json()) as {\n customer?: SessionCustomer | null;\n };\n const next = body.customer ?? null;\n update(next, next ? \"authenticated\" : \"anonymous\");\n return next;\n };\n // Overlapping checks share one request, so a slower stale answer can't land last.\n const refresh = (): Promise<SessionCustomer | null> => {\n pending ??= check().finally(() => {\n pending = undefined;\n });\n return pending;\n };\n const recheck = () => {\n if (\n typeof document === \"undefined\" ||\n document.visibilityState === \"visible\"\n ) {\n void refresh().catch(() => undefined);\n }\n };\n if (typeof document !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", recheck);\n }\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"pageshow\", recheck);\n }\n return {\n get state() {\n return state;\n },\n get customer() {\n return customer;\n },\n session: refresh,\n /** Stops the visibility and back/forward-cache re-checks and drops listeners. */\n dispose() {\n if (typeof document !== \"undefined\") {\n document.removeEventListener(\"visibilitychange\", recheck);\n }\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"pageshow\", recheck);\n }\n listeners.clear();\n },\n onChange(listener: CustomerListener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n signIn(returnTo?: string) {\n signIn(safeReturnTo(returnTo ?? currentPath()));\n },\n signOut() {\n signOut(\"/_zappie/logout\");\n },\n profile: () => request<CustomerProfile>(\"/me\", { method: \"GET\" }),\n async addresses() {\n const result = await request<{ addresses: SavedAddress[] }>(\n \"/me/addresses\",\n { method: \"GET\" },\n );\n return result.addresses;\n },\n addAddress: (body: CreateAddress) =>\n request<SavedAddress>(\"/me/addresses\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n }),\n removeAddress: (id: string) =>\n request<void>(`/me/addresses/${encodeURIComponent(id)}`, {\n method: \"DELETE\",\n }),\n orders(options: { cursor?: string; limit?: number } = {}) {\n const query = new URLSearchParams();\n if (options.limit !== undefined) {\n query.set(\"limit\", String(options.limit));\n }\n if (options.cursor !== undefined) {\n query.set(\"cursor\", options.cursor);\n }\n const suffix = query.size > 0 ? `?${query}` : \"\";\n return request<OrdersPage>(`/me/orders${suffix}`, { method: \"GET\" });\n },\n order: (id: string) => readOrder(id),\n watchOrder(id: string, watchOptions: WatchOrderOptions) {\n return watchOrder(base, id, readOrder, watchOptions);\n },\n };\n}\n\n/**\n * The session, profile, address and order operations returned by createCustomer.\n */\nexport type CustomerClient = ReturnType<typeof createCustomer>;\n"]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/customer/index.ts"],
|
|
4
|
+
"sourcesContent": ["export { createCustomer } from \"./client\";\nexport type { CustomerClient } from \"./client\";\nexport { CustomerError } from \"./error\";\nexport type * from \"./types\";\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,sBAAsB;AAE/B,SAAS,qBAAqB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// src/customer/navigation.ts
|
|
2
|
+
function safeReturnTo(value) {
|
|
3
|
+
if (!value || !value.startsWith("/") || value.startsWith("//")) {
|
|
4
|
+
return "/";
|
|
5
|
+
}
|
|
6
|
+
if (value.startsWith("/\\")) {
|
|
7
|
+
return "/";
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function currentPath() {
|
|
12
|
+
if (typeof location === "undefined") {
|
|
13
|
+
return "/";
|
|
14
|
+
}
|
|
15
|
+
return location.pathname + location.search;
|
|
16
|
+
}
|
|
17
|
+
function signIn(path) {
|
|
18
|
+
if (typeof document === "undefined") {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const link = document.createElement("a");
|
|
22
|
+
link.href = `/_zappie/login?return=${encodeURIComponent(path)}`;
|
|
23
|
+
link.target = "_top";
|
|
24
|
+
link.click();
|
|
25
|
+
}
|
|
26
|
+
function signOut(path) {
|
|
27
|
+
if (typeof document === "undefined") {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const form = document.createElement("form");
|
|
31
|
+
form.method = "POST";
|
|
32
|
+
form.action = path;
|
|
33
|
+
form.target = "_top";
|
|
34
|
+
form.hidden = true;
|
|
35
|
+
document.body.appendChild(form);
|
|
36
|
+
form.submit();
|
|
37
|
+
form.remove();
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
currentPath,
|
|
41
|
+
safeReturnTo,
|
|
42
|
+
signIn,
|
|
43
|
+
signOut
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/customer/navigation.ts"],
|
|
4
|
+
"sourcesContent": ["export function safeReturnTo(value: string | undefined): string {\n if (!value || !value.startsWith(\"/\") || value.startsWith(\"//\")) {\n return \"/\";\n }\n if (value.startsWith(\"/\\\\\")) {\n return \"/\";\n }\n return value;\n}\n\nexport function currentPath(): string {\n if (typeof location === \"undefined\") {\n return \"/\";\n }\n return location.pathname + location.search;\n}\n\nexport function signIn(path: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n const link = document.createElement(\"a\");\n link.href = `/_zappie/login?return=${encodeURIComponent(path)}`;\n link.target = \"_top\";\n link.click();\n}\n\nexport function signOut(path: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n const form = document.createElement(\"form\");\n form.method = \"POST\";\n form.action = path;\n form.target = \"_top\";\n form.hidden = true;\n document.body.appendChild(form);\n form.submit();\n form.remove();\n}\n"],
|
|
5
|
+
"mappings": ";AAAO,SAAS,aAAa,OAAmC;AAC9D,MAAI,CAAC,SAAS,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,IAAI,GAAG;AAC9D,WAAO;AAAA,EACT;AACA,MAAI,MAAM,WAAW,KAAK,GAAG;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,cAAsB;AACpC,MAAI,OAAO,aAAa,aAAa;AACnC,WAAO;AAAA,EACT;AACA,SAAO,SAAS,WAAW,SAAS;AACtC;AAEO,SAAS,OAAO,MAAoB;AACzC,MAAI,OAAO,aAAa,aAAa;AACnC;AAAA,EACF;AACA,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO,yBAAyB,mBAAmB,IAAI,CAAC;AAC7D,OAAK,SAAS;AACd,OAAK,MAAM;AACb;AAEO,SAAS,QAAQ,MAAoB;AAC1C,MAAI,OAAO,aAAa,aAAa;AACnC;AAAA,EACF;AACA,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,SAAS;AACd,WAAS,KAAK,YAAY,IAAI;AAC9B,OAAK,OAAO;AACZ,OAAK,OAAO;AACd;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/customer/react.js
CHANGED
|
@@ -1,3 +1,68 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
// src/customer/react.tsx
|
|
4
|
+
import {
|
|
5
|
+
createContext,
|
|
6
|
+
useCallback,
|
|
7
|
+
useContext,
|
|
8
|
+
useEffect,
|
|
9
|
+
useMemo,
|
|
10
|
+
useSyncExternalStore
|
|
11
|
+
} from "react";
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
var CustomerContext = createContext(null);
|
|
14
|
+
function CustomerProvider({
|
|
15
|
+
client,
|
|
16
|
+
children
|
|
17
|
+
}) {
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (client.state === "unknown") {
|
|
20
|
+
void client.session().catch(() => void 0);
|
|
21
|
+
}
|
|
22
|
+
}, [client]);
|
|
23
|
+
return /* @__PURE__ */ jsx(CustomerContext.Provider, { value: client, children });
|
|
24
|
+
}
|
|
25
|
+
function useClient() {
|
|
26
|
+
const client = useContext(CustomerContext);
|
|
27
|
+
if (!client) {
|
|
28
|
+
throw new Error("CustomerProvider is missing");
|
|
29
|
+
}
|
|
30
|
+
return client;
|
|
31
|
+
}
|
|
32
|
+
function key(client) {
|
|
33
|
+
const customer = client.customer;
|
|
34
|
+
return [
|
|
35
|
+
client.state,
|
|
36
|
+
customer?.id,
|
|
37
|
+
customer?.given_name,
|
|
38
|
+
customer?.phone_masked
|
|
39
|
+
].join(":");
|
|
40
|
+
}
|
|
41
|
+
function useAuth() {
|
|
42
|
+
const client = useClient();
|
|
43
|
+
const subscribe = useCallback(
|
|
44
|
+
(notify) => client.onChange(() => notify()),
|
|
45
|
+
[client]
|
|
46
|
+
);
|
|
47
|
+
const snapshot = useCallback(() => key(client), [client]);
|
|
48
|
+
const value = useSyncExternalStore(subscribe, snapshot, snapshot);
|
|
49
|
+
return useMemo(
|
|
50
|
+
() => ({
|
|
51
|
+
state: client.state,
|
|
52
|
+
customer: client.customer,
|
|
53
|
+
signIn: client.signIn,
|
|
54
|
+
signOut: client.signOut,
|
|
55
|
+
refresh: client.session
|
|
56
|
+
}),
|
|
57
|
+
[client, value]
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
function useCustomer() {
|
|
61
|
+
return useAuth().customer;
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
CustomerProvider,
|
|
65
|
+
useAuth,
|
|
66
|
+
useCustomer
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/customer/react.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\";\n\nimport type { CustomerClient, SessionCustomer } from \"@zappie/sdk/customer\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useSyncExternalStore,\n} from \"react\";\n\nconst CustomerContext = createContext<CustomerClient | null>(null);\n\n/**\n * Provide a customer client to descendant hooks and check its session if the state is unknown.\n * You remain responsible for disposing the client when it is no longer needed.\n */\nexport function CustomerProvider({\n client,\n children,\n}: {\n client: CustomerClient;\n children: ReactNode;\n}) {\n useEffect(() => {\n if (client.state === \"unknown\") {\n void client.session().catch(() => undefined);\n }\n }, [client]);\n return (\n <CustomerContext.Provider value={client}>\n {children}\n </CustomerContext.Provider>\n );\n}\n\nfunction useClient(): CustomerClient {\n const client = useContext(CustomerContext);\n if (!client) {\n throw new Error(\"CustomerProvider is missing\");\n }\n return client;\n}\n\nfunction key(client: CustomerClient): string {\n const customer = client.customer;\n return [\n client.state,\n customer?.id,\n customer?.given_name,\n customer?.phone_masked,\n ].join(\":\");\n}\n\n/**\n * Subscribe to the nearest CustomerProvider and return auth state, customer and session actions.\n * Throws if you have not mounted a CustomerProvider.\n */\nexport function useAuth() {\n const client = useClient();\n const subscribe = useCallback(\n (notify: () => void) => client.onChange(() => notify()),\n [client],\n );\n const snapshot = useCallback(() => key(client), [client]);\n // The server reads the same client state, so an initialCustomer renders signed in on both sides.\n const value = useSyncExternalStore(subscribe, snapshot, snapshot);\n return useMemo(\n () => ({\n state: client.state,\n customer: client.customer,\n signIn: client.signIn,\n signOut: client.signOut,\n refresh: client.session,\n }),\n [client, value],\n );\n}\n\n/**\n * Subscribe to the nearest CustomerProvider and return its session customer, or null.\n * Throws if you have not mounted a CustomerProvider.\n */\nexport function useCustomer(): SessionCustomer | null {\n return useAuth().customer;\n}\n"],
|
|
5
|
+
"mappings": ";;;AAGA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAqBH;AAnBJ,IAAM,kBAAkB,cAAqC,IAAI;AAM1D,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;AACD,YAAU,MAAM;AACd,QAAI,OAAO,UAAU,WAAW;AAC9B,WAAK,OAAO,QAAQ,EAAE,MAAM,MAAM,MAAS;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AACX,SACE,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,QAC9B,UACH;AAEJ;AAEA,SAAS,YAA4B;AACnC,QAAM,SAAS,WAAW,eAAe;AACzC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,IAAI,QAAgC;AAC3C,QAAM,WAAW,OAAO;AACxB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,EACZ,EAAE,KAAK,GAAG;AACZ;AAMO,SAAS,UAAU;AACxB,QAAM,SAAS,UAAU;AACzB,QAAM,YAAY;AAAA,IAChB,CAAC,WAAuB,OAAO,SAAS,MAAM,OAAO,CAAC;AAAA,IACtD,CAAC,MAAM;AAAA,EACT;AACA,QAAM,WAAW,YAAY,MAAM,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC;AAExD,QAAM,QAAQ,qBAAqB,WAAW,UAAU,QAAQ;AAChE,SAAO;AAAA,IACL,OAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,SAAS,OAAO;AAAA,IAClB;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,EAChB;AACF;AAMO,SAAS,cAAsC;AACpD,SAAO,QAAQ,EAAE;AACnB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// src/customer/request.ts
|
|
2
|
+
import { apiError, requestWithRetry } from "../internal/customer-http.js";
|
|
3
|
+
import { CustomerError } from "./error.js";
|
|
4
|
+
function createCustomerRequest(base, fetcher, unauthorized) {
|
|
5
|
+
return async (path, init = {}) => {
|
|
6
|
+
const response = await requestWithRetry(
|
|
7
|
+
fetcher,
|
|
8
|
+
base + path,
|
|
9
|
+
init,
|
|
10
|
+
"Could not reach the customer service"
|
|
11
|
+
);
|
|
12
|
+
if (response.status === 401) {
|
|
13
|
+
unauthorized();
|
|
14
|
+
}
|
|
15
|
+
if (!response.ok) {
|
|
16
|
+
const value = await apiError(
|
|
17
|
+
response,
|
|
18
|
+
`The customer service answered ${response.status}`
|
|
19
|
+
);
|
|
20
|
+
throw new CustomerError(
|
|
21
|
+
response.status,
|
|
22
|
+
value.apiCode,
|
|
23
|
+
value.message,
|
|
24
|
+
value.param,
|
|
25
|
+
value.issues
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
if (response.status === 204) {
|
|
29
|
+
return void 0;
|
|
30
|
+
}
|
|
31
|
+
return await response.json();
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
createCustomerRequest
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/customer/request.ts"],
|
|
4
|
+
"sourcesContent": ["import { apiError, requestWithRetry } from \"../internal/customer-http\";\nimport { CustomerError } from \"./error\";\n\nexport type CustomerRequest = <T>(\n path: string,\n init?: RequestInit,\n) => Promise<T>;\n\nexport function createCustomerRequest(\n base: string,\n fetcher: typeof fetch,\n unauthorized: () => void,\n): CustomerRequest {\n return async <T>(path: string, init: RequestInit = {}): Promise<T> => {\n const response = await requestWithRetry(\n fetcher,\n base + path,\n init,\n \"Could not reach the customer service\",\n );\n if (response.status === 401) {\n unauthorized();\n }\n if (!response.ok) {\n const value = await apiError(\n response,\n `The customer service answered ${response.status}`,\n );\n throw new CustomerError(\n response.status,\n value.apiCode,\n value.message,\n value.param,\n value.issues,\n );\n }\n if (response.status === 204) {\n return undefined as T;\n }\n return (await response.json()) as T;\n };\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,UAAU,wBAAwB;AAC3C,SAAS,qBAAqB;AAOvB,SAAS,sBACd,MACA,SACA,cACiB;AACjB,SAAO,OAAU,MAAc,OAAoB,CAAC,MAAkB;AACpE,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,IACF;AACA,QAAI,SAAS,WAAW,KAAK;AAC3B,mBAAa;AAAA,IACf;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM;AAAA,QAClB;AAAA,QACA,iCAAiC,SAAS,MAAM;AAAA,MAClD;AACA,YAAM,IAAI;AAAA,QACR,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AACA,QAAI,SAAS,WAAW,KAAK;AAC3B,aAAO;AAAA,IACT;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/customer/sdk.ts"],
|
|
4
|
+
"sourcesContent": ["// The isolated customer bundle imports the installed core so errors retain their identity.\n// eslint-disable-next-line no-restricted-imports\nexport { ZappieError } from \"@zappie/sdk\";\n"],
|
|
5
|
+
"mappings": ";AAEA,SAAS,mBAAmB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// src/customer/watch-order.ts
|
|
2
|
+
import { wait } from "../internal/customer-http.js";
|
|
3
|
+
import { CustomerError } from "./error.js";
|
|
4
|
+
var final = /* @__PURE__ */ new Set(["completed", "cancelled", "rejected"]);
|
|
5
|
+
function watchOrder(base, id, read, options) {
|
|
6
|
+
const controller = new AbortController();
|
|
7
|
+
const pollMs = options.pollMs ?? 15e3;
|
|
8
|
+
let source;
|
|
9
|
+
let failures = 0;
|
|
10
|
+
let stopped = false;
|
|
11
|
+
const stop = () => {
|
|
12
|
+
if (stopped) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
stopped = true;
|
|
16
|
+
source?.close();
|
|
17
|
+
controller.abort();
|
|
18
|
+
options.signal?.removeEventListener("abort", stop);
|
|
19
|
+
};
|
|
20
|
+
const publish = (order) => {
|
|
21
|
+
options.onOrder(order);
|
|
22
|
+
if (final.has(order.status)) {
|
|
23
|
+
stop();
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const poll = async () => {
|
|
27
|
+
while (!stopped) {
|
|
28
|
+
try {
|
|
29
|
+
publish(await read(id, controller.signal));
|
|
30
|
+
} catch (failure) {
|
|
31
|
+
if (failure instanceof CustomerError && failure.status !== void 0 && failure.status >= 400 && failure.status < 500) {
|
|
32
|
+
stop();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!stopped) {
|
|
37
|
+
await wait(pollMs, controller.signal).catch(() => void 0);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const connect = () => {
|
|
42
|
+
if (stopped || typeof EventSource === "undefined") {
|
|
43
|
+
void poll();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
source = new EventSource(
|
|
47
|
+
`${base}/me/orders/${encodeURIComponent(id)}/events`
|
|
48
|
+
);
|
|
49
|
+
source.addEventListener("status", (event) => {
|
|
50
|
+
failures = 0;
|
|
51
|
+
let next;
|
|
52
|
+
try {
|
|
53
|
+
next = JSON.parse(event.data);
|
|
54
|
+
} catch {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
publish(next);
|
|
58
|
+
});
|
|
59
|
+
source.onerror = () => {
|
|
60
|
+
source?.close();
|
|
61
|
+
failures++;
|
|
62
|
+
if (failures >= 2) {
|
|
63
|
+
void poll();
|
|
64
|
+
} else {
|
|
65
|
+
connect();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
options.signal?.addEventListener("abort", stop, { once: true });
|
|
70
|
+
if (options.signal?.aborted) {
|
|
71
|
+
stop();
|
|
72
|
+
} else {
|
|
73
|
+
connect();
|
|
74
|
+
}
|
|
75
|
+
return stop;
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
watchOrder
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=watch-order.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/customer/watch-order.ts"],
|
|
4
|
+
"sourcesContent": ["import { wait } from \"../internal/customer-http\";\nimport { CustomerError } from \"./error\";\nimport type { CustomerOrder, WatchOrderOptions } from \"./types\";\n\nconst final = new Set([\"completed\", \"cancelled\", \"rejected\"]);\n\ntype ReadOrder = (id: string, signal?: AbortSignal) => Promise<CustomerOrder>;\n\nexport function watchOrder(\n base: string,\n id: string,\n read: ReadOrder,\n options: WatchOrderOptions,\n): () => void {\n const controller = new AbortController();\n const pollMs = options.pollMs ?? 15_000;\n let source: EventSource | undefined;\n let failures = 0;\n let stopped = false;\n const stop = () => {\n if (stopped) {\n return;\n }\n stopped = true;\n source?.close();\n controller.abort();\n options.signal?.removeEventListener(\"abort\", stop);\n };\n const publish = (order: CustomerOrder) => {\n options.onOrder(order);\n if (final.has(order.status)) {\n stop();\n }\n };\n const poll = async () => {\n while (!stopped) {\n try {\n publish(await read(id, controller.signal));\n } catch (failure) {\n if (\n failure instanceof CustomerError &&\n failure.status !== undefined &&\n failure.status >= 400 &&\n failure.status < 500\n ) {\n stop();\n return;\n }\n }\n if (!stopped) {\n await wait(pollMs, controller.signal).catch(() => undefined);\n }\n }\n };\n const connect = () => {\n if (stopped || typeof EventSource === \"undefined\") {\n void poll();\n return;\n }\n source = new EventSource(\n `${base}/me/orders/${encodeURIComponent(id)}/events`,\n );\n source.addEventListener(\"status\", (event) => {\n failures = 0;\n let next: CustomerOrder;\n try {\n next = JSON.parse((event as MessageEvent).data) as CustomerOrder;\n } catch {\n return;\n }\n publish(next);\n });\n source.onerror = () => {\n source?.close();\n failures++;\n if (failures >= 2) {\n void poll();\n } else {\n connect();\n }\n };\n };\n options.signal?.addEventListener(\"abort\", stop, { once: true });\n if (options.signal?.aborted) {\n stop();\n } else {\n connect();\n }\n return stop;\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAG9B,IAAM,QAAQ,oBAAI,IAAI,CAAC,aAAa,aAAa,UAAU,CAAC;AAIrD,SAAS,WACd,MACA,IACA,MACA,SACY;AACZ,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,SAAS,QAAQ,UAAU;AACjC,MAAI;AACJ,MAAI,WAAW;AACf,MAAI,UAAU;AACd,QAAM,OAAO,MAAM;AACjB,QAAI,SAAS;AACX;AAAA,IACF;AACA,cAAU;AACV,YAAQ,MAAM;AACd,eAAW,MAAM;AACjB,YAAQ,QAAQ,oBAAoB,SAAS,IAAI;AAAA,EACnD;AACA,QAAM,UAAU,CAAC,UAAyB;AACxC,YAAQ,QAAQ,KAAK;AACrB,QAAI,MAAM,IAAI,MAAM,MAAM,GAAG;AAC3B,WAAK;AAAA,IACP;AAAA,EACF;AACA,QAAM,OAAO,YAAY;AACvB,WAAO,CAAC,SAAS;AACf,UAAI;AACF,gBAAQ,MAAM,KAAK,IAAI,WAAW,MAAM,CAAC;AAAA,MAC3C,SAAS,SAAS;AAChB,YACE,mBAAmB,iBACnB,QAAQ,WAAW,UACnB,QAAQ,UAAU,OAClB,QAAQ,SAAS,KACjB;AACA,eAAK;AACL;AAAA,QACF;AAAA,MACF;AACA,UAAI,CAAC,SAAS;AACZ,cAAM,KAAK,QAAQ,WAAW,MAAM,EAAE,MAAM,MAAM,MAAS;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,MAAM;AACpB,QAAI,WAAW,OAAO,gBAAgB,aAAa;AACjD,WAAK,KAAK;AACV;AAAA,IACF;AACA,aAAS,IAAI;AAAA,MACX,GAAG,IAAI,cAAc,mBAAmB,EAAE,CAAC;AAAA,IAC7C;AACA,WAAO,iBAAiB,UAAU,CAAC,UAAU;AAC3C,iBAAW;AACX,UAAI;AACJ,UAAI;AACF,eAAO,KAAK,MAAO,MAAuB,IAAI;AAAA,MAChD,QAAQ;AACN;AAAA,MACF;AACA,cAAQ,IAAI;AAAA,IACd,CAAC;AACD,WAAO,UAAU,MAAM;AACrB,cAAQ,MAAM;AACd;AACA,UAAI,YAAY,GAAG;AACjB,aAAK,KAAK;AAAA,MACZ,OAAO;AACL,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACA,UAAQ,QAAQ,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;AAC9D,MAAI,QAAQ,QAAQ,SAAS;AAC3B,SAAK;AAAA,EACP,OAAO;AACL,YAAQ;AAAA,EACV;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/debug.js
CHANGED
|
@@ -1 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
// src/debug.ts
|
|
2
|
+
var VERSION = true ? "0.1.2" : "0.0.0-development";
|
|
3
|
+
function installDebug(client) {
|
|
4
|
+
if (typeof window === "undefined" || client.mode !== "test") {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const events = [];
|
|
8
|
+
let quote;
|
|
9
|
+
const emit = (name, detail) => {
|
|
10
|
+
const event = { name, detail, at: (/* @__PURE__ */ new Date()).toISOString() };
|
|
11
|
+
events.push(event);
|
|
12
|
+
window.dispatchEvent(new CustomEvent("zappie:event", { detail: event }));
|
|
13
|
+
};
|
|
14
|
+
globalThis.__zappieEmit = emit;
|
|
15
|
+
window.__zappie = {
|
|
16
|
+
version: VERSION,
|
|
17
|
+
store: client.config.store,
|
|
18
|
+
async catalogue() {
|
|
19
|
+
await client.cart.hydrate();
|
|
20
|
+
const branch = (await client.store.get()).branches.find(
|
|
21
|
+
(value) => value.id === client.cart.getSnapshot().branchId
|
|
22
|
+
);
|
|
23
|
+
return { branch, menu: await client.menu.get({ branch: branch.id }) };
|
|
24
|
+
},
|
|
25
|
+
cart: Object.assign(() => client.cart.getSnapshot(), {
|
|
26
|
+
async inject(input) {
|
|
27
|
+
await client.cart.hydrate();
|
|
28
|
+
if (input.lines.length > 100 || input.lines.some(
|
|
29
|
+
(line) => !Number.isInteger(line.quantity ?? 1) || (line.quantity ?? 1) < 1 || (line.quantity ?? 1) > 99
|
|
30
|
+
)) {
|
|
31
|
+
throw new Error(
|
|
32
|
+
"Use up to 100 cart lines with whole quantities from 1 to 99."
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
const snapshot = client.cart.getSnapshot();
|
|
36
|
+
const value = {
|
|
37
|
+
v: 1,
|
|
38
|
+
menuVersion: client._internal.cartCatalogue().version,
|
|
39
|
+
updatedAt: Date.now(),
|
|
40
|
+
fulfilment: snapshot.fulfilment,
|
|
41
|
+
promoCode: snapshot.promoCode,
|
|
42
|
+
lines: input.lines.map((line, index) => ({
|
|
43
|
+
...line,
|
|
44
|
+
id: `debug_${index}`,
|
|
45
|
+
name: line.itemId,
|
|
46
|
+
quantity: line.quantity ?? 1,
|
|
47
|
+
choices: (line.choices ?? []).map((choice) => ({
|
|
48
|
+
...choice,
|
|
49
|
+
quantity: choice.quantity ?? 1
|
|
50
|
+
})),
|
|
51
|
+
inputs: line.inputs ?? {},
|
|
52
|
+
addedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
53
|
+
}))
|
|
54
|
+
};
|
|
55
|
+
const scope = client.config.cart?.storageScope;
|
|
56
|
+
(client.config.storage ?? window.localStorage).setItem(
|
|
57
|
+
`zappie:cart:v1:${client.config.store}:${snapshot.branchId}${scope ? `:${scope}` : ""}`,
|
|
58
|
+
JSON.stringify(value)
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}),
|
|
62
|
+
quote: () => quote,
|
|
63
|
+
events
|
|
64
|
+
};
|
|
65
|
+
client.on("add_to_cart", (detail) => emit("add_to_cart", detail));
|
|
66
|
+
client.cart.subscribe(() => {
|
|
67
|
+
const state = client.cart.state;
|
|
68
|
+
const next = "quote" in state ? state.quote : void 0;
|
|
69
|
+
if (next && next !== quote) {
|
|
70
|
+
quote = next;
|
|
71
|
+
emit("quote", next);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
installDebug
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=debug.js.map
|
package/dist/debug.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/debug.ts"],
|
|
4
|
+
"sourcesContent": ["import type { StoredLine } from \"./cart/storage\";\nimport type { CartLineInput, Quote } from \"./cart/types\";\nimport type { Zappie } from \"./client\";\nimport type { Branch, Menu } from \"./models\";\n\n// Inline like VERSION in index.ts: tsup fills in the version from package.json.\ndeclare const __ZAPPIE_SDK_VERSION__: string | undefined;\nconst VERSION =\n typeof __ZAPPIE_SDK_VERSION__ === \"string\"\n ? __ZAPPIE_SDK_VERSION__\n : \"0.0.0-development\";\n\nexport type DebugEvent = {\n name: string;\n detail: unknown;\n at: string;\n};\n\nexport type ZappieDebug = {\n version: string;\n store: string;\n /** Read this cart's branch and full menu through its client. */\n catalogue(): Promise<{ menu: Menu; branch: Branch }>;\n cart: (() => ReturnType<Zappie[\"cart\"][\"getSnapshot\"]>) & {\n /**\n * Save test cart lines for the next reload. Reload to reconcile them with today's menu.\n * Your unitPrice is only a local estimate, like a price edited in browser storage.\n * The server re-prices every line and never trusts this estimate.\n */\n inject(input: {\n lines: (CartLineInput & Pick<StoredLine, \"unitPrice\">)[];\n }): Promise<void>;\n };\n quote: () => Quote | undefined;\n events: DebugEvent[];\n};\n\ndeclare global {\n interface Window {\n __zappie?: ZappieDebug;\n }\n // On globalThis so the lazy checkout and customer entries can reach it\n // with the shortest possible call; in a browser it is window's.\n var __zappieEmit: ((name: string, detail: unknown) => void) | undefined;\n}\n\nexport function installDebug(client: Zappie) {\n if (typeof window === \"undefined\" || client.mode !== \"test\") {\n return;\n }\n const events: DebugEvent[] = [];\n let quote: Quote | undefined;\n const emit = (name: string, detail: unknown) => {\n const event = { name, detail, at: new Date().toISOString() };\n events.push(event);\n window.dispatchEvent(new CustomEvent(\"zappie:event\", { detail: event }));\n };\n globalThis.__zappieEmit = emit;\n window.__zappie = {\n version: VERSION,\n store: client.config.store,\n async catalogue() {\n await client.cart.hydrate();\n const branch = (await client.store.get()).branches.find(\n (value) => value.id === client.cart.getSnapshot().branchId,\n )!;\n return { branch, menu: await client.menu.get({ branch: branch.id }) };\n },\n cart: Object.assign(() => client.cart.getSnapshot(), {\n async inject(input: {\n lines: (CartLineInput & Pick<StoredLine, \"unitPrice\">)[];\n }) {\n await client.cart.hydrate();\n if (\n input.lines.length > 100 ||\n input.lines.some(\n (line) =>\n !Number.isInteger(line.quantity ?? 1) ||\n (line.quantity ?? 1) < 1 ||\n (line.quantity ?? 1) > 99,\n )\n ) {\n throw new Error(\n \"Use up to 100 cart lines with whole quantities from 1 to 99.\",\n );\n }\n const snapshot = client.cart.getSnapshot();\n const value = {\n v: 1,\n menuVersion: client._internal.cartCatalogue()!.version,\n updatedAt: Date.now(),\n fulfilment: snapshot.fulfilment,\n promoCode: snapshot.promoCode,\n lines: input.lines.map((line, index) => ({\n ...line,\n id: `debug_${index}`,\n name: line.itemId,\n quantity: line.quantity ?? 1,\n choices: (line.choices ?? []).map((choice) => ({\n ...choice,\n quantity: choice.quantity ?? 1,\n })),\n inputs: line.inputs ?? {},\n addedAt: new Date().toISOString(),\n })),\n };\n const scope = client.config.cart?.storageScope;\n (client.config.storage ?? window.localStorage).setItem(\n `zappie:cart:v1:${client.config.store}:${snapshot.branchId}${scope ? `:${scope}` : \"\"}`,\n JSON.stringify(value),\n );\n },\n }),\n quote: () => quote,\n events,\n };\n client.on(\"add_to_cart\", (detail) => emit(\"add_to_cart\", detail));\n client.cart.subscribe(() => {\n const state = client.cart.state;\n const next = \"quote\" in state ? state.quote : undefined;\n if (next && next !== quote) {\n quote = next;\n emit(\"quote\", next);\n }\n });\n}\n"],
|
|
5
|
+
"mappings": ";AAOA,IAAM,UACJ,OACI,UACA;AAoCC,SAAS,aAAa,QAAgB;AAC3C,MAAI,OAAO,WAAW,eAAe,OAAO,SAAS,QAAQ;AAC3D;AAAA,EACF;AACA,QAAM,SAAuB,CAAC;AAC9B,MAAI;AACJ,QAAM,OAAO,CAAC,MAAc,WAAoB;AAC9C,UAAM,QAAQ,EAAE,MAAM,QAAQ,KAAI,oBAAI,KAAK,GAAE,YAAY,EAAE;AAC3D,WAAO,KAAK,KAAK;AACjB,WAAO,cAAc,IAAI,YAAY,gBAAgB,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EACzE;AACA,aAAW,eAAe;AAC1B,SAAO,WAAW;AAAA,IAChB,SAAS;AAAA,IACT,OAAO,OAAO,OAAO;AAAA,IACrB,MAAM,YAAY;AAChB,YAAM,OAAO,KAAK,QAAQ;AAC1B,YAAM,UAAU,MAAM,OAAO,MAAM,IAAI,GAAG,SAAS;AAAA,QACjD,CAAC,UAAU,MAAM,OAAO,OAAO,KAAK,YAAY,EAAE;AAAA,MACpD;AACA,aAAO,EAAE,QAAQ,MAAM,MAAM,OAAO,KAAK,IAAI,EAAE,QAAQ,OAAO,GAAG,CAAC,EAAE;AAAA,IACtE;AAAA,IACA,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK,YAAY,GAAG;AAAA,MACnD,MAAM,OAAO,OAEV;AACD,cAAM,OAAO,KAAK,QAAQ;AAC1B,YACE,MAAM,MAAM,SAAS,OACrB,MAAM,MAAM;AAAA,UACV,CAAC,SACC,CAAC,OAAO,UAAU,KAAK,YAAY,CAAC,MACnC,KAAK,YAAY,KAAK,MACtB,KAAK,YAAY,KAAK;AAAA,QAC3B,GACA;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,WAAW,OAAO,KAAK,YAAY;AACzC,cAAM,QAAQ;AAAA,UACZ,GAAG;AAAA,UACH,aAAa,OAAO,UAAU,cAAc,EAAG;AAAA,UAC/C,WAAW,KAAK,IAAI;AAAA,UACpB,YAAY,SAAS;AAAA,UACrB,WAAW,SAAS;AAAA,UACpB,OAAO,MAAM,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,YACvC,GAAG;AAAA,YACH,IAAI,SAAS,KAAK;AAAA,YAClB,MAAM,KAAK;AAAA,YACX,UAAU,KAAK,YAAY;AAAA,YAC3B,UAAU,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,YAAY;AAAA,cAC7C,GAAG;AAAA,cACH,UAAU,OAAO,YAAY;AAAA,YAC/B,EAAE;AAAA,YACF,QAAQ,KAAK,UAAU,CAAC;AAAA,YACxB,UAAS,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC,EAAE;AAAA,QACJ;AACA,cAAM,QAAQ,OAAO,OAAO,MAAM;AAClC,SAAC,OAAO,OAAO,WAAW,OAAO,cAAc;AAAA,UAC7C,kBAAkB,OAAO,OAAO,KAAK,IAAI,SAAS,QAAQ,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,UACrF,KAAK,UAAU,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,OAAO,MAAM;AAAA,IACb;AAAA,EACF;AACA,SAAO,GAAG,eAAe,CAAC,WAAW,KAAK,eAAe,MAAM,CAAC;AAChE,SAAO,KAAK,UAAU,MAAM;AAC1B,UAAM,QAAQ,OAAO,KAAK;AAC1B,UAAM,OAAO,WAAW,QAAQ,MAAM,QAAQ;AAC9C,QAAI,QAAQ,SAAS,OAAO;AAC1B,cAAQ;AACR,WAAK,SAAS,IAAI;AAAA,IACpB;AAAA,EACF,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
var codes = [
|
|
3
|
+
"network_error",
|
|
4
|
+
"timeout",
|
|
5
|
+
"rate_limited",
|
|
6
|
+
"unauthorized",
|
|
7
|
+
"forbidden_origin",
|
|
8
|
+
"not_found",
|
|
9
|
+
"store_not_found",
|
|
10
|
+
"branch_not_found",
|
|
11
|
+
"item_not_found",
|
|
12
|
+
"cart_invalid",
|
|
13
|
+
"invalid_request",
|
|
14
|
+
"version_unsupported",
|
|
15
|
+
"server_error"
|
|
16
|
+
];
|
|
17
|
+
var ZappieError = class extends Error {
|
|
18
|
+
constructor(code, message, details = {}) {
|
|
19
|
+
super(message, { cause: details.cause });
|
|
20
|
+
this.code = code;
|
|
21
|
+
this.name = "ZappieError";
|
|
22
|
+
if (details.status !== void 0) {
|
|
23
|
+
this.status = details.status;
|
|
24
|
+
}
|
|
25
|
+
if (details.param !== void 0) {
|
|
26
|
+
this.param = details.param;
|
|
27
|
+
}
|
|
28
|
+
if (details.requestId !== void 0) {
|
|
29
|
+
this.requestId = details.requestId;
|
|
30
|
+
}
|
|
31
|
+
this.docUrl = details.docUrl ?? `https://docs.zappie.ai/errors#${code}`;
|
|
32
|
+
this.retryable = details.retryable ?? ["network_error", "timeout", "rate_limited", "server_error"].includes(
|
|
33
|
+
code
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
function isZappieError(error) {
|
|
38
|
+
return error instanceof ZappieError;
|
|
39
|
+
}
|
|
40
|
+
function asError(error) {
|
|
41
|
+
return isZappieError(error) ? error : new ZappieError("network_error", "The storefront request failed", {
|
|
42
|
+
cause: error
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function wireError(value, status, requestId) {
|
|
46
|
+
const envelope = value && typeof value === "object" ? value : {};
|
|
47
|
+
const e = envelope.error && typeof envelope.error === "object" ? envelope.error : {};
|
|
48
|
+
const fallback = status === 401 ? "unauthorized" : status === 403 ? "forbidden_origin" : status === 404 ? "not_found" : status === 429 ? "rate_limited" : status >= 500 ? "server_error" : "invalid_request";
|
|
49
|
+
const known = typeof e.code === "string" && codes.includes(e.code);
|
|
50
|
+
const code = known ? e.code : e.code ? "server_error" : fallback;
|
|
51
|
+
const message = typeof e.message === "string" ? e.message : "The storefront request failed";
|
|
52
|
+
return new ZappieError(
|
|
53
|
+
code,
|
|
54
|
+
!known && e.code ? `${String(e.code)}: ${message}` : message,
|
|
55
|
+
{
|
|
56
|
+
status,
|
|
57
|
+
...requestId ? { requestId } : {},
|
|
58
|
+
...typeof e.param === "string" ? { param: e.param } : {},
|
|
59
|
+
...typeof e.doc_url === "string" ? { docUrl: e.doc_url } : {}
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
ZappieError,
|
|
65
|
+
asError,
|
|
66
|
+
isZappieError,
|
|
67
|
+
wireError
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/errors.ts"],
|
|
4
|
+
"sourcesContent": ["/** Stable public error codes. */\nexport type ZappieErrorCode =\n | \"network_error\"\n | \"timeout\"\n | \"rate_limited\"\n | \"unauthorized\"\n | \"forbidden_origin\"\n | \"not_found\"\n | \"store_not_found\"\n | \"branch_not_found\"\n | \"item_not_found\"\n | \"cart_invalid\"\n | \"invalid_request\"\n | \"version_unsupported\"\n | \"server_error\";\nconst codes: readonly string[] = [\n \"network_error\",\n \"timeout\",\n \"rate_limited\",\n \"unauthorized\",\n \"forbidden_origin\",\n \"not_found\",\n \"store_not_found\",\n \"branch_not_found\",\n \"item_not_found\",\n \"cart_invalid\",\n \"invalid_request\",\n \"version_unsupported\",\n \"server_error\",\n];\n/** Context attached to an SDK failure. */\nexport type ErrorDetails = {\n status?: number;\n param?: string;\n docUrl?: string;\n requestId?: string;\n retryable?: boolean;\n cause?: unknown;\n};\n/** An SDK error you can handle by its stable code. */\nexport class ZappieError extends Error {\n readonly status?: number;\n readonly param?: string;\n readonly docUrl: string;\n readonly requestId?: string;\n readonly retryable: boolean;\n constructor(\n readonly code: ZappieErrorCode,\n message: string,\n details: ErrorDetails = {},\n ) {\n super(message, { cause: details.cause });\n this.name = \"ZappieError\";\n if (details.status !== undefined) {\n this.status = details.status;\n }\n if (details.param !== undefined) {\n this.param = details.param;\n }\n if (details.requestId !== undefined) {\n this.requestId = details.requestId;\n }\n this.docUrl = details.docUrl ?? `https://docs.zappie.ai/errors#${code}`;\n this.retryable =\n details.retryable ??\n [\"network_error\", \"timeout\", \"rate_limited\", \"server_error\"].includes(\n code,\n );\n }\n}\n/** Check whether a thrown value is a ZappieError. */\nexport function isZappieError(error: unknown): error is ZappieError {\n return error instanceof ZappieError;\n}\nexport function asError(error: unknown): ZappieError {\n return isZappieError(error)\n ? error\n : new ZappieError(\"network_error\", \"The storefront request failed\", {\n cause: error,\n });\n}\nexport function wireError(\n value: unknown,\n status: number,\n requestId?: string,\n): ZappieError {\n const envelope =\n value && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : {};\n const e =\n envelope.error && typeof envelope.error === \"object\"\n ? (envelope.error as Record<string, unknown>)\n : {};\n const fallback =\n status === 401\n ? \"unauthorized\"\n : status === 403\n ? \"forbidden_origin\"\n : status === 404\n ? \"not_found\"\n : status === 429\n ? \"rate_limited\"\n : status >= 500\n ? \"server_error\"\n : \"invalid_request\";\n const known = typeof e.code === \"string\" && codes.includes(e.code);\n const code = known\n ? (e.code as ZappieErrorCode)\n : e.code\n ? \"server_error\"\n : fallback;\n const message =\n typeof e.message === \"string\" ? e.message : \"The storefront request failed\";\n return new ZappieError(\n code,\n !known && e.code ? `${String(e.code)}: ${message}` : message,\n {\n status,\n ...(requestId ? { requestId } : {}),\n ...(typeof e.param === \"string\" ? { param: e.param } : {}),\n ...(typeof e.doc_url === \"string\" ? { docUrl: e.doc_url } : {}),\n },\n );\n}\n"],
|
|
5
|
+
"mappings": ";AAeA,IAAM,QAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,IAAM,cAAN,cAA0B,MAAM;AAAA,EAMrC,YACW,MACT,SACA,UAAwB,CAAC,GACzB;AACA,UAAM,SAAS,EAAE,OAAO,QAAQ,MAAM,CAAC;AAJ9B;AAKT,SAAK,OAAO;AACZ,QAAI,QAAQ,WAAW,QAAW;AAChC,WAAK,SAAS,QAAQ;AAAA,IACxB;AACA,QAAI,QAAQ,UAAU,QAAW;AAC/B,WAAK,QAAQ,QAAQ;AAAA,IACvB;AACA,QAAI,QAAQ,cAAc,QAAW;AACnC,WAAK,YAAY,QAAQ;AAAA,IAC3B;AACA,SAAK,SAAS,QAAQ,UAAU,iCAAiC,IAAI;AACrE,SAAK,YACH,QAAQ,aACR,CAAC,iBAAiB,WAAW,gBAAgB,cAAc,EAAE;AAAA,MAC3D;AAAA,IACF;AAAA,EACJ;AACF;AAEO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AACO,SAAS,QAAQ,OAA6B;AACnD,SAAO,cAAc,KAAK,IACtB,QACA,IAAI,YAAY,iBAAiB,iCAAiC;AAAA,IAChE,OAAO;AAAA,EACT,CAAC;AACP;AACO,SAAS,UACd,OACA,QACA,WACa;AACb,QAAM,WACJ,SAAS,OAAO,UAAU,WACrB,QACD,CAAC;AACP,QAAM,IACJ,SAAS,SAAS,OAAO,SAAS,UAAU,WACvC,SAAS,QACV,CAAC;AACP,QAAM,WACJ,WAAW,MACP,iBACA,WAAW,MACT,qBACA,WAAW,MACT,cACA,WAAW,MACT,iBACA,UAAU,MACR,iBACA;AACd,QAAM,QAAQ,OAAO,EAAE,SAAS,YAAY,MAAM,SAAS,EAAE,IAAI;AACjE,QAAM,OAAO,QACR,EAAE,OACH,EAAE,OACA,iBACA;AACN,QAAM,UACJ,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AAC9C,SAAO,IAAI;AAAA,IACT;AAAA,IACA,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,CAAC,KAAK,OAAO,KAAK;AAAA,IACrD;AAAA,MACE;AAAA,MACA,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MACjC,GAAI,OAAO,EAAE,UAAU,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAAA,MACxD,GAAI,OAAO,EAAE,YAAY,WAAW,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/D;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { createZappie } from "./client.js";
|
|
3
|
+
import { API_VERSION } from "./config.js";
|
|
4
|
+
import { ZappieError, isZappieError } from "./errors.js";
|
|
5
|
+
export * from "./models.js";
|
|
6
|
+
import { format, money } from "./money.js";
|
|
7
|
+
import { RestTransport } from "./transport/rest.js";
|
|
8
|
+
import { ZappieCartError } from "./cart/errors.js";
|
|
9
|
+
import { previewItem } from "./cart/preview.js";
|
|
10
|
+
import { estimateUnitPrice } from "./cart/price.js";
|
|
11
|
+
import { resolveSourceMenu } from "./cart/source-menu.js";
|
|
12
|
+
import { validateLine } from "./cart/validate.js";
|
|
13
|
+
var VERSION = true ? "0.1.2" : "0.0.0-development";
|
|
14
|
+
export {
|
|
15
|
+
API_VERSION,
|
|
16
|
+
RestTransport,
|
|
17
|
+
VERSION,
|
|
18
|
+
ZappieCartError,
|
|
19
|
+
ZappieError,
|
|
20
|
+
createZappie,
|
|
21
|
+
estimateUnitPrice,
|
|
22
|
+
format,
|
|
23
|
+
isZappieError,
|
|
24
|
+
money,
|
|
25
|
+
previewItem,
|
|
26
|
+
resolveSourceMenu,
|
|
27
|
+
validateLine
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.js.map
|