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