@tagadapay/headless-sdk 1.6.0 → 1.8.0-rc.0

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 (125) hide show
  1. package/README.md +1 -186
  2. package/package.json +6 -11
  3. package/dist/core/client.d.ts +0 -54
  4. package/dist/core/client.d.ts.map +0 -1
  5. package/dist/core/client.js +0 -67
  6. package/dist/core/client.js.map +0 -1
  7. package/dist/core/errors.d.ts +0 -46
  8. package/dist/core/errors.d.ts.map +0 -1
  9. package/dist/core/errors.js +0 -57
  10. package/dist/core/errors.js.map +0 -1
  11. package/dist/core/helpers/autocomplete.d.ts +0 -89
  12. package/dist/core/helpers/autocomplete.d.ts.map +0 -1
  13. package/dist/core/helpers/autocomplete.js +0 -186
  14. package/dist/core/helpers/autocomplete.js.map +0 -1
  15. package/dist/core/helpers/countries.d.ts +0 -45
  16. package/dist/core/helpers/countries.d.ts.map +0 -1
  17. package/dist/core/helpers/countries.js +0 -65
  18. package/dist/core/helpers/countries.js.map +0 -1
  19. package/dist/core/helpers/currency.d.ts +0 -26
  20. package/dist/core/helpers/currency.d.ts.map +0 -1
  21. package/dist/core/helpers/currency.js +0 -72
  22. package/dist/core/helpers/currency.js.map +0 -1
  23. package/dist/core/helpers/index.d.ts +0 -5
  24. package/dist/core/helpers/index.d.ts.map +0 -1
  25. package/dist/core/helpers/index.js +0 -5
  26. package/dist/core/helpers/index.js.map +0 -1
  27. package/dist/core/helpers/iso3166.d.ts +0 -28
  28. package/dist/core/helpers/iso3166.d.ts.map +0 -1
  29. package/dist/core/helpers/iso3166.js +0 -84
  30. package/dist/core/helpers/iso3166.js.map +0 -1
  31. package/dist/core/http.d.ts +0 -27
  32. package/dist/core/http.d.ts.map +0 -1
  33. package/dist/core/http.js +0 -116
  34. package/dist/core/http.js.map +0 -1
  35. package/dist/core/index.d.ts +0 -12
  36. package/dist/core/index.d.ts.map +0 -1
  37. package/dist/core/index.js +0 -11
  38. package/dist/core/index.js.map +0 -1
  39. package/dist/core/modules/catalog.d.ts +0 -27
  40. package/dist/core/modules/catalog.d.ts.map +0 -1
  41. package/dist/core/modules/catalog.js +0 -38
  42. package/dist/core/modules/catalog.js.map +0 -1
  43. package/dist/core/modules/checkout.d.ts +0 -249
  44. package/dist/core/modules/checkout.d.ts.map +0 -1
  45. package/dist/core/modules/checkout.js +0 -448
  46. package/dist/core/modules/checkout.js.map +0 -1
  47. package/dist/core/modules/customer.d.ts +0 -33
  48. package/dist/core/modules/customer.d.ts.map +0 -1
  49. package/dist/core/modules/customer.js +0 -53
  50. package/dist/core/modules/customer.js.map +0 -1
  51. package/dist/core/modules/offers.d.ts +0 -137
  52. package/dist/core/modules/offers.d.ts.map +0 -1
  53. package/dist/core/modules/offers.js +0 -141
  54. package/dist/core/modules/offers.js.map +0 -1
  55. package/dist/core/modules/payment.d.ts +0 -298
  56. package/dist/core/modules/payment.d.ts.map +0 -1
  57. package/dist/core/modules/payment.js +0 -701
  58. package/dist/core/modules/payment.js.map +0 -1
  59. package/dist/core/types.d.ts +0 -460
  60. package/dist/core/types.d.ts.map +0 -1
  61. package/dist/core/types.js +0 -5
  62. package/dist/core/types.js.map +0 -1
  63. package/dist/index.d.ts.map +0 -1
  64. package/dist/index.js.map +0 -1
  65. package/dist/react/hooks/useCatalog.d.ts +0 -25
  66. package/dist/react/hooks/useCatalog.d.ts.map +0 -1
  67. package/dist/react/hooks/useCatalog.js +0 -58
  68. package/dist/react/hooks/useCatalog.js.map +0 -1
  69. package/dist/react/hooks/useCheckout.d.ts +0 -58
  70. package/dist/react/hooks/useCheckout.d.ts.map +0 -1
  71. package/dist/react/hooks/useCheckout.js +0 -168
  72. package/dist/react/hooks/useCheckout.js.map +0 -1
  73. package/dist/react/hooks/useCustomer.d.ts +0 -28
  74. package/dist/react/hooks/useCustomer.d.ts.map +0 -1
  75. package/dist/react/hooks/useCustomer.js +0 -77
  76. package/dist/react/hooks/useCustomer.js.map +0 -1
  77. package/dist/react/hooks/useGoogleAutocomplete.d.ts +0 -26
  78. package/dist/react/hooks/useGoogleAutocomplete.d.ts.map +0 -1
  79. package/dist/react/hooks/useGoogleAutocomplete.js +0 -70
  80. package/dist/react/hooks/useGoogleAutocomplete.js.map +0 -1
  81. package/dist/react/hooks/useISOData.d.ts +0 -23
  82. package/dist/react/hooks/useISOData.d.ts.map +0 -1
  83. package/dist/react/hooks/useISOData.js +0 -63
  84. package/dist/react/hooks/useISOData.js.map +0 -1
  85. package/dist/react/hooks/useOffers.d.ts +0 -134
  86. package/dist/react/hooks/useOffers.d.ts.map +0 -1
  87. package/dist/react/hooks/useOffers.js +0 -171
  88. package/dist/react/hooks/useOffers.js.map +0 -1
  89. package/dist/react/hooks/usePayment.d.ts +0 -108
  90. package/dist/react/hooks/usePayment.d.ts.map +0 -1
  91. package/dist/react/hooks/usePayment.js +0 -233
  92. package/dist/react/hooks/usePayment.js.map +0 -1
  93. package/dist/react/index.d.ts +0 -20
  94. package/dist/react/index.d.ts.map +0 -1
  95. package/dist/react/index.js +0 -11
  96. package/dist/react/index.js.map +0 -1
  97. package/dist/react/internal/redirectGuard.d.ts +0 -9
  98. package/dist/react/internal/redirectGuard.d.ts.map +0 -1
  99. package/dist/react/internal/redirectGuard.js +0 -25
  100. package/dist/react/internal/redirectGuard.js.map +0 -1
  101. package/dist/react/provider.d.ts +0 -31
  102. package/dist/react/provider.d.ts.map +0 -1
  103. package/dist/react/provider.js +0 -32
  104. package/dist/react/provider.js.map +0 -1
  105. package/dist/stripe/StripeExpressButton.d.ts +0 -30
  106. package/dist/stripe/StripeExpressButton.d.ts.map +0 -1
  107. package/dist/stripe/StripeExpressButton.js +0 -32
  108. package/dist/stripe/StripeExpressButton.js.map +0 -1
  109. package/dist/stripe/StripeExpressCheckout.d.ts +0 -98
  110. package/dist/stripe/StripeExpressCheckout.d.ts.map +0 -1
  111. package/dist/stripe/StripeExpressCheckout.js +0 -198
  112. package/dist/stripe/StripeExpressCheckout.js.map +0 -1
  113. package/dist/stripe/index.d.ts +0 -8
  114. package/dist/stripe/index.d.ts.map +0 -1
  115. package/dist/stripe/index.js +0 -15
  116. package/dist/stripe/index.js.map +0 -1
  117. package/dist/stripe/useStripeExpress.d.ts +0 -54
  118. package/dist/stripe/useStripeExpress.d.ts.map +0 -1
  119. package/dist/stripe/useStripeExpress.js +0 -126
  120. package/dist/stripe/useStripeExpress.js.map +0 -1
  121. package/dist/tagada-headless-react.min.js +0 -8
  122. package/dist/tagada-headless-react.min.js.map +0 -7
  123. package/dist/tagada-headless.js +0 -2070
  124. package/dist/tagada-headless.min.js +0 -8
  125. package/dist/tagada-headless.min.js.map +0 -7
@@ -1,448 +0,0 @@
1
- /**
2
- * Manages checkout sessions — load, update cart, apply promo codes, handle shipping.
3
- *
4
- * Works for both **shipped** and **digital** products:
5
- *
6
- * **Shipped products** (physical goods):
7
- * ```
8
- * updateCustomer(id, { email, firstName, lastName })
9
- * updateAddress(id, { shippingAddress: { line1, city, ... } })
10
- * getShippingRates(id)
11
- * selectShippingRate(id, rateId)
12
- * ```
13
- *
14
- * **Digital products** (no shipping needed):
15
- * ```
16
- * updateCustomer(id, { email, firstName, lastName })
17
- * updateAddress(id, { billingAddress: { line1, city, country } })
18
- * // Skip shipping rates — go straight to payment
19
- * ```
20
- */
21
- export class CheckoutModule {
22
- constructor(http, storeId, onTokenChange) {
23
- this.http = http;
24
- this.storeId = storeId;
25
- this.onTokenChange = onTokenChange;
26
- }
27
- /**
28
- * Load an existing checkout session by its checkout token.
29
- *
30
- * @param checkoutToken The checkout token (from URL param `checkoutToken`).
31
- * @param sessionToken The JWT session token (from URL param `token`). Required for auth.
32
- * @param opts.currency Optional presentment currency override (e.g. 'EUR').
33
- * Only applied when the session has no currency set yet (first load).
34
- * Once set, currency is locked to the session and this param is ignored.
35
- *
36
- * Both `checkoutToken` and `sessionToken` come from the redirect URL returned by `createSession()`.
37
- * Example URL: `/checkout?checkoutToken=abc123&token=eyJ...`
38
- */
39
- async loadSession(checkoutToken, sessionToken, opts) {
40
- if (sessionToken) {
41
- this.sessionToken = sessionToken;
42
- this.onTokenChange?.(sessionToken);
43
- }
44
- const params = { skipAsyncWait: 'false' };
45
- if (opts?.currency) {
46
- params.currency = opts.currency;
47
- }
48
- const raw = await this.http.get(`/api/v1/checkout-sessions/${checkoutToken}/v2`, {
49
- params,
50
- token: this.sessionToken,
51
- });
52
- return this.normalizeSession(raw);
53
- }
54
- /**
55
- * Create a new checkout session.
56
- *
57
- * Returns a `checkoutToken` and `sessionToken` (JWT) needed for all subsequent calls.
58
- * Also returns a `checkoutUrl` (the full Tagada-hosted checkout URL, for reference).
59
- */
60
- async createSession(opts) {
61
- const lineItems = opts.items.map((i) => ({
62
- variantId: i.variantId,
63
- priceId: i.priceId,
64
- quantity: i.quantity,
65
- }));
66
- const body = {
67
- storeId: this.storeId,
68
- lineItems,
69
- };
70
- if (opts.returnUrl)
71
- body.returnUrl = opts.returnUrl;
72
- // Always send currency in customer object (backend reads customer.currency)
73
- const customerData = {};
74
- if (opts.currency)
75
- customerData.currency = opts.currency;
76
- if (opts.customerEmail) {
77
- customerData.email = opts.customerEmail;
78
- customerData.firstName = opts.customerFirstName;
79
- customerData.lastName = opts.customerLastName;
80
- }
81
- if (Object.keys(customerData).length > 0) {
82
- body.customer = customerData;
83
- }
84
- const res = await this.http.post('/api/v1/checkout/session/init', body);
85
- const url = new URL(res.checkoutUrl);
86
- const sessionToken = url.searchParams.get('token') ?? '';
87
- this.sessionToken = sessionToken;
88
- if (sessionToken)
89
- this.onTokenChange?.(sessionToken);
90
- return {
91
- checkoutUrl: res.checkoutUrl,
92
- checkoutToken: res.checkoutToken,
93
- sessionToken,
94
- customerId: res.customerId,
95
- };
96
- }
97
- /**
98
- * Create a session and produce a self-hosted redirect URL.
99
- *
100
- * Convenience wrapper around `createSession()`. Builds a URL of the
101
- * form `${origin}${checkoutPath}?checkoutToken=...&sessionToken=...`
102
- * that you can navigate to from a Cart page. The receiving page reads
103
- * the params via {@link CheckoutModule.parseTokensFromUrl} and calls
104
- * {@link CheckoutModule.loadSession}.
105
- *
106
- * For Tagada-hosted checkouts use the `checkoutUrl` returned by
107
- * `createSession()` directly — this helper is for **self-hosted**
108
- * checkout pages.
109
- *
110
- * @example
111
- * ```ts
112
- * const { url } = await tagada.checkout.createSessionUrl({
113
- * items: [{ variantId, quantity: 1 }],
114
- * checkoutPath: '/checkout',
115
- * });
116
- * window.location.href = url;
117
- * ```
118
- */
119
- async createSessionUrl(opts) {
120
- const session = await this.createSession({
121
- items: opts.items,
122
- currency: opts.currency,
123
- returnUrl: opts.returnUrl,
124
- customerEmail: opts.customerEmail,
125
- customerFirstName: opts.customerFirstName,
126
- customerLastName: opts.customerLastName,
127
- });
128
- const origin = opts.origin ?? (typeof window !== 'undefined' ? window.location.origin : '');
129
- const checkoutPath = opts.checkoutPath ?? '/checkout';
130
- const params = new URLSearchParams({
131
- checkoutToken: session.checkoutToken,
132
- sessionToken: session.sessionToken,
133
- });
134
- const url = `${origin}${checkoutPath}?${params.toString()}`;
135
- return { ...session, url };
136
- }
137
- /**
138
- * Read `checkoutToken` and session token from a URL.
139
- *
140
- * Recognizes both the SDK convention (`?sessionToken=`) and the
141
- * Tagada-hosted convention (`?token=`), so the same checkout page
142
- * works whether the user came from `createSessionUrl()` or directly
143
- * from a Tagada-hosted redirect.
144
- *
145
- * Returns `null` if `checkoutToken` is missing.
146
- *
147
- * @example
148
- * ```ts
149
- * const tokens = CheckoutModule.parseTokensFromUrl();
150
- * if (!tokens) {
151
- * window.location.href = '/cart';
152
- * return;
153
- * }
154
- * const session = await tagada.checkout.loadSession(
155
- * tokens.checkoutToken,
156
- * tokens.sessionToken,
157
- * );
158
- * ```
159
- */
160
- static parseTokensFromUrl(url) {
161
- if (typeof url === 'undefined' && typeof window === 'undefined')
162
- return null;
163
- const href = url ?? window.location.href;
164
- let parsed;
165
- try {
166
- parsed = new URL(href);
167
- }
168
- catch {
169
- return null;
170
- }
171
- const checkoutToken = parsed.searchParams.get('checkoutToken');
172
- if (!checkoutToken)
173
- return null;
174
- const sessionToken = parsed.searchParams.get('sessionToken') ?? parsed.searchParams.get('token') ?? '';
175
- return { checkoutToken, sessionToken };
176
- }
177
- /**
178
- * Replace the cart items for an existing session.
179
- *
180
- * Returns a server-side mutation summary (counts of created/updated rows).
181
- * It does NOT return the updated `CheckoutSession` — the underlying
182
- * `POST /checkout-sessions/:id/line-items` endpoint never has and the
183
- * previous typing was a lie that quietly assigned `{ success, updated, ... }`
184
- * into a `CheckoutSession` slot in `useCheckout`.
185
- *
186
- * Call `loadSession()` after this if you need the refreshed session
187
- * (the React `useCheckout` hook does this for you).
188
- */
189
- async updateCart(sessionId, items) {
190
- return this.http.post(`/api/v1/checkout-sessions/${sessionId}/line-items`, { items }, { token: this.sessionToken });
191
- }
192
- /**
193
- * Update customer identity (email, name, phone).
194
- *
195
- * Call this before `updateAddress()` — the SDK remembers the values and
196
- * includes them automatically when addresses are submitted.
197
- *
198
- * If you prefer a single call, use `updateCustomerAndAddress()` instead.
199
- */
200
- async updateCustomer(sessionId, customer) {
201
- if (customer.email)
202
- this.customerEmail = customer.email;
203
- if (customer.firstName)
204
- this.customerFirstName = customer.firstName;
205
- if (customer.lastName)
206
- this.customerLastName = customer.lastName;
207
- if (customer.phone)
208
- this.customerPhone = customer.phone;
209
- }
210
- /**
211
- * Update shipping and/or billing address on the session.
212
- *
213
- * Automatically includes customer name/phone stored from `updateCustomer()`.
214
- * Uses the same atomic API call as the production checkout, so email,
215
- * customer name, and addresses are all persisted together.
216
- *
217
- * **Shipped products**: pass `shippingAddress`. If `billingAddress` is omitted,
218
- * the shipping address is automatically used as billing.
219
- *
220
- * **Digital products**: pass only `billingAddress` (no shipping needed).
221
- *
222
- * @example
223
- * // Shipped product — billing = shipping automatically
224
- * await checkout.updateAddress(sessionId, {
225
- * shippingAddress: { line1: '10 Rue de la Paix', city: 'Paris', postalCode: '75002', country: 'FR' },
226
- * });
227
- *
228
- * @example
229
- * // Digital product — billing only
230
- * await checkout.updateAddress(sessionId, {
231
- * billingAddress: { country: 'FR' },
232
- * });
233
- */
234
- async updateAddress(sessionId, addresses) {
235
- const shipping = this.mapAddress(addresses.shippingAddress);
236
- const billing = this.mapAddress(addresses.billingAddress);
237
- const effectiveShipping = shipping ?? billing ?? {};
238
- const effectiveBilling = billing ?? shipping;
239
- const differentBilling = !!(addresses.billingAddress && addresses.shippingAddress);
240
- await this.http.post(`/api/v1/checkout-sessions/${sessionId}/customer-and-session-info`, {
241
- checkoutSessionId: sessionId,
242
- customerData: {
243
- email: this.customerEmail,
244
- },
245
- shippingAddress: effectiveShipping,
246
- billingAddress: effectiveBilling ?? {},
247
- differentBillingAddress: differentBilling,
248
- }, { token: this.sessionToken });
249
- }
250
- /**
251
- * Set customer info + addresses in one call (mirrors production checkout).
252
- *
253
- * Equivalent to calling `updateCustomer()` then `updateAddress()`, but
254
- * in a single network request.
255
- */
256
- async updateCustomerAndAddress(sessionId, data) {
257
- if (data.customer.email)
258
- this.customerEmail = data.customer.email;
259
- if (data.customer.firstName)
260
- this.customerFirstName = data.customer.firstName;
261
- if (data.customer.lastName)
262
- this.customerLastName = data.customer.lastName;
263
- if (data.customer.phone)
264
- this.customerPhone = data.customer.phone;
265
- const shipping = this.mapAddress(data.shippingAddress);
266
- const billing = this.mapAddress(data.billingAddress);
267
- const effectiveShipping = shipping ?? billing ?? {};
268
- const effectiveBilling = billing ?? shipping;
269
- const differentBilling = !!(data.billingAddress && data.shippingAddress);
270
- await this.http.post(`/api/v1/checkout-sessions/${sessionId}/customer-and-session-info`, {
271
- checkoutSessionId: sessionId,
272
- customerData: {
273
- email: this.customerEmail,
274
- },
275
- shippingAddress: effectiveShipping,
276
- billingAddress: effectiveBilling ?? {},
277
- differentBillingAddress: differentBilling,
278
- }, { token: this.sessionToken });
279
- }
280
- /** Map an SDK Address to the API shape, injecting stored customer fields. */
281
- mapAddress(a) {
282
- if (!a)
283
- return undefined;
284
- return stripEmpty({
285
- firstName: a.firstName ?? this.customerFirstName,
286
- lastName: a.lastName ?? this.customerLastName,
287
- phone: a.phone ?? this.customerPhone,
288
- address1: a.line1,
289
- address2: a.line2,
290
- city: a.city,
291
- state: a.state,
292
- postal: a.postalCode,
293
- country: a.country,
294
- });
295
- }
296
- /** Apply a promotion code to the session. */
297
- async applyPromoCode(sessionId, code) {
298
- await this.http.post(`/api/v1/checkout-sessions/${sessionId}/promotions/apply`, { checkoutSessionId: sessionId, code }, { token: this.sessionToken });
299
- }
300
- /** Remove a promotion from the session by promotion ID. */
301
- async removePromoCode(sessionId, promotionId) {
302
- const promoId = promotionId ?? 'default';
303
- await this.http.delete(`/api/v1/checkout-sessions/${sessionId}/promotions/${promoId}`, { token: this.sessionToken });
304
- }
305
- /**
306
- * Fetch available shipping rates for the session's address.
307
- * Only relevant for **shipped products** — digital products can skip this step.
308
- *
309
- * Requires a shipping address to be set first via `updateAddress()`.
310
- * Returns an empty array if no rates are configured or address is missing.
311
- */
312
- async getShippingRates(sessionId) {
313
- const res = await this.http.get(`/api/v1/checkout-sessions/${sessionId}/shipping-rates`, { token: this.sessionToken });
314
- return (res.rates ?? []).map((r) => this.normalizeShippingRate(r));
315
- }
316
- /**
317
- * Normalize the v1 rates payload (`shippingRateName`, `estimatedDeliveryTime`)
318
- * to the SDK's `ShippingRate` shape (`name`, `estimatedDays`). Without
319
- * this the consumer's UI shows blank rate names — the demo's "Delivery"
320
- * radios were rendering only the price, no label.
321
- */
322
- normalizeShippingRate(r) {
323
- return {
324
- id: r.id,
325
- name: (r.name ?? r.shippingRateName ?? ''),
326
- description: (r.description ?? undefined),
327
- amount: (r.amount ?? 0),
328
- currency: (r.currency ?? 'USD'),
329
- estimatedDays: (r.estimatedDays ?? r.estimatedDeliveryTime ?? undefined),
330
- };
331
- }
332
- /**
333
- * Select a shipping rate for the session.
334
- * Only relevant for **shipped products** — digital products can skip this step.
335
- */
336
- async selectShippingRate(sessionId, rateId) {
337
- await this.http.post(`/api/v1/checkout-sessions/${sessionId}/shipping-rate`, { checkoutSessionId: sessionId, shippingRateId: rateId }, { token: this.sessionToken });
338
- }
339
- /**
340
- * Normalize the raw v2 API response into a cleaner CheckoutSession shape.
341
- * The raw response has nested `checkoutSession` + `summary` -- we flatten it.
342
- */
343
- normalizeSession(raw) {
344
- const cs = raw.checkoutSession;
345
- const orderSummaries = (cs.orderSummaries ?? []);
346
- const summary = (raw.summary ?? cs.summary ?? orderSummaries[0] ?? {});
347
- const lineItems = (cs.sessionLineItems ?? []);
348
- const customer = cs.customer;
349
- const sessionCurrency = (summary.currency ?? cs.selectedPresentmentCurrency)?.toUpperCase();
350
- const items = lineItems.map((li) => {
351
- const price = li.price;
352
- // The v2 endpoint returns `product` and `variant` as siblings of
353
- // `price` on each line item — not nested under `price`. Reading
354
- // them from `price.variant.product` (the old code) silently gave
355
- // back empty objects, which is why the order summary rendered
356
- // blank product names and a placeholder image instead of the
357
- // actual product art.
358
- const variant = (li.variant ?? price?.variant ?? {});
359
- const product = (li.product ?? variant.product ?? {});
360
- const currencyOpts = (price?.currencyOptions ?? {});
361
- // Pick the amount bucket matching the session's presentment currency, then fall back to first available
362
- const priceEntry = (sessionCurrency ? currencyOpts[sessionCurrency] : undefined)
363
- ?? currencyOpts[Object.keys(currencyOpts)[0]];
364
- const amount = priceEntry?.amount ?? 0;
365
- return {
366
- id: li.id,
367
- variantId: li.variantId,
368
- priceId: li.priceId,
369
- productName: (product.name ?? ''),
370
- variantName: (variant.name ?? ''),
371
- quantity: (li.quantity ?? 1),
372
- unitAmount: amount,
373
- totalAmount: amount * (li.quantity ?? 1),
374
- currency: (sessionCurrency ?? 'USD'),
375
- imageUrl: (variant.imageUrl ?? product.imageUrl ?? ''),
376
- };
377
- });
378
- const summaryItems = (summary.items ?? []);
379
- return {
380
- id: cs.id,
381
- storeId: cs.storeId,
382
- checkoutToken: cs.checkoutToken,
383
- currency: (sessionCurrency ?? 'USD'),
384
- items,
385
- totals: {
386
- subtotal: (summary.subtotalAmount ?? 0),
387
- discount: (summary.totalPromotionAmount ?? 0),
388
- shipping: (summary.shippingCost ?? 0),
389
- tax: (summary.totalTaxAmount ?? 0),
390
- total: (summary.totalAmount ?? summaryItems.reduce((s, i) => s + (i.amount ?? 0), 0)),
391
- currency: (sessionCurrency ?? 'USD'),
392
- },
393
- customer: customer
394
- ? {
395
- id: customer.id,
396
- email: customer.email,
397
- firstName: customer.firstName,
398
- lastName: customer.lastName,
399
- phone: customer.phone,
400
- }
401
- : undefined,
402
- shippingAddress: this.normalizeAddress(cs.shippingAddress),
403
- billingAddress: this.normalizeAddress(cs.billingAddress),
404
- selectedShippingRateId: (cs.shippingRateId ?? null),
405
- metadata: cs.metadata,
406
- };
407
- }
408
- /**
409
- * Map the raw API address shape (`address1`, `address2`, `postal`) onto
410
- * the SDK's `Address` shape (`line1`, `line2`, `postalCode`). Without
411
- * this, `session.shippingAddress.line1` is silently undefined after a
412
- * reload — the type was lying about the actual key names — which is
413
- * what makes the demo lose form state on refresh.
414
- */
415
- normalizeAddress(raw) {
416
- if (!raw || typeof raw !== 'object')
417
- return undefined;
418
- const a = raw;
419
- const out = {
420
- firstName: a.firstName,
421
- lastName: a.lastName,
422
- line1: (a.line1 ?? a.address1),
423
- line2: (a.line2 ?? a.address2),
424
- city: a.city,
425
- state: a.state,
426
- postalCode: (a.postalCode ?? a.postal),
427
- country: a.country,
428
- phone: a.phone,
429
- };
430
- // If every field is undefined the API returned an empty address slot.
431
- // Hand back undefined so consumers can `if (session.shippingAddress)`.
432
- return Object.values(out).some((v) => v !== undefined && v !== '') ? out : undefined;
433
- }
434
- }
435
- /**
436
- * Remove keys with empty-string / null / undefined values from an object.
437
- * Prevents sending `""` to APIs that reject empty values (e.g. Stripe `country`).
438
- */
439
- function stripEmpty(obj) {
440
- const result = {};
441
- for (const [k, v] of Object.entries(obj)) {
442
- if (v !== undefined && v !== null && v !== '') {
443
- result[k] = v;
444
- }
445
- }
446
- return (Object.keys(result).length > 0 ? result : undefined);
447
- }
448
- //# sourceMappingURL=checkout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../../src/core/modules/checkout.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { HttpClient } from '../http.js';
2
- import type { Customer, Order, Subscription } from '../types.js';
3
- /**
4
- * Customer data -- profile, orders, subscriptions.
5
- *
6
- * Requires either an API key or a session token for authentication.
7
- */
8
- export declare class CustomerModule {
9
- private readonly http;
10
- private readonly storeId;
11
- constructor(http: HttpClient, storeId: string);
12
- /** Get customer profile by ID. */
13
- getProfile(customerId: string): Promise<Customer>;
14
- /** Get customer profile by email. */
15
- getByEmail(email: string): Promise<Customer | null>;
16
- /** Update customer profile fields. */
17
- updateProfile(customerId: string, data: Partial<Pick<Customer, 'email' | 'firstName' | 'lastName' | 'phone' | 'metadata'>>): Promise<Customer>;
18
- /** List orders for a customer. */
19
- getOrders(customerId: string, opts?: {
20
- limit?: number;
21
- offset?: number;
22
- }): Promise<{
23
- orders: Order[];
24
- total: number;
25
- }>;
26
- /** Get a single order by ID. */
27
- getOrder(orderId: string): Promise<Order>;
28
- /** List subscriptions for a customer. */
29
- getSubscriptions(customerId: string): Promise<Subscription[]>;
30
- /** Get a single subscription by ID. */
31
- getSubscription(subscriptionId: string): Promise<Subscription>;
32
- }
33
- //# sourceMappingURL=customer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customer.d.ts","sourceRoot":"","sources":["../../../src/core/modules/customer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM;IAGlC,kCAAkC;IAC5B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQvD,qCAAqC;IAC/B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAYzD,sCAAsC;IAChC,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,GACvF,OAAO,CAAC,QAAQ,CAAC;IAQpB,kCAAkC;IAC5B,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAO9C,gCAAgC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAO/C,yCAAyC;IACnC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQnE,uCAAuC;IACjC,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAOrE"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Customer data -- profile, orders, subscriptions.
3
- *
4
- * Requires either an API key or a session token for authentication.
5
- */
6
- export class CustomerModule {
7
- constructor(http, storeId) {
8
- this.http = http;
9
- this.storeId = storeId;
10
- }
11
- /** Get customer profile by ID. */
12
- async getProfile(customerId) {
13
- const res = await this.http.get(`/api/v1/customers/${customerId}`, { params: { storeId: this.storeId } });
14
- return res.customer;
15
- }
16
- /** Get customer profile by email. */
17
- async getByEmail(email) {
18
- try {
19
- const res = await this.http.get('/api/v1/customers/by-email', { params: { email, storeId: this.storeId } });
20
- return res.customer;
21
- }
22
- catch {
23
- return null;
24
- }
25
- }
26
- /** Update customer profile fields. */
27
- async updateProfile(customerId, data) {
28
- const res = await this.http.patch(`/api/v1/customers/${customerId}`, { storeId: this.storeId, ...data });
29
- return res.customer;
30
- }
31
- /** List orders for a customer. */
32
- async getOrders(customerId, opts) {
33
- return this.http.get(`/api/v1/customers/${customerId}/orders`, { params: { storeId: this.storeId, limit: opts?.limit, offset: opts?.offset } });
34
- }
35
- /** Get a single order by ID. */
36
- async getOrder(orderId) {
37
- const res = await this.http.get(`/api/v1/orders/${orderId}`, {
38
- params: { storeId: this.storeId },
39
- });
40
- return res.order;
41
- }
42
- /** List subscriptions for a customer. */
43
- async getSubscriptions(customerId) {
44
- const res = await this.http.get(`/api/v1/customers/${customerId}/subscriptions`, { params: { storeId: this.storeId } });
45
- return res.subscriptions;
46
- }
47
- /** Get a single subscription by ID. */
48
- async getSubscription(subscriptionId) {
49
- const res = await this.http.get(`/api/v1/subscriptions/${subscriptionId}`, { params: { storeId: this.storeId } });
50
- return res.subscription;
51
- }
52
- }
53
- //# sourceMappingURL=customer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customer.js","sourceRoot":"","sources":["../../../src/core/modules/customer.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACzB,YACmB,IAAgB,EAChB,OAAe;QADf,SAAI,GAAJ,IAAI,CAAY;QAChB,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ,kCAAkC;IAClC,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7B,qBAAqB,UAAU,EAAE,EACjC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CACtC,CAAC;QACF,OAAO,GAAG,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7B,4BAA4B,EAC5B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAC7C,CAAC;YACF,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,aAAa,CACjB,UAAkB,EAClB,IAAwF;QAExF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAC/B,qBAAqB,UAAU,EAAE,EACjC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CACnC,CAAC;QACF,OAAO,GAAG,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,SAAS,CACb,UAAkB,EAClB,IAA0C;QAE1C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,qBAAqB,UAAU,SAAS,EACxC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAChF,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmB,kBAAkB,OAAO,EAAE,EAAE;YAC7E,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SAClC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7B,qBAAqB,UAAU,gBAAgB,EAC/C,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CACtC,CAAC;QACF,OAAO,GAAG,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7B,yBAAyB,cAAc,EAAE,EACzC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CACtC,CAAC;QACF,OAAO,GAAG,CAAC,YAAY,CAAC;IAC1B,CAAC;CACF"}