@rovela-ai/sdk 0.6.1 → 0.7.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 (127) hide show
  1. package/dist/admin/api/discounts.d.ts +53 -0
  2. package/dist/admin/api/discounts.d.ts.map +1 -0
  3. package/dist/admin/api/discounts.js +325 -0
  4. package/dist/admin/api/discounts.js.map +1 -0
  5. package/dist/admin/api/index.d.ts +1 -0
  6. package/dist/admin/api/index.d.ts.map +1 -1
  7. package/dist/admin/api/index.js +2 -0
  8. package/dist/admin/api/index.js.map +1 -1
  9. package/dist/admin/api/orders.js +1 -1
  10. package/dist/admin/api/orders.js.map +1 -1
  11. package/dist/admin/api/settings.d.ts.map +1 -1
  12. package/dist/admin/api/settings.js +10 -0
  13. package/dist/admin/api/settings.js.map +1 -1
  14. package/dist/admin/components/CustomerAddressPanel.d.ts.map +1 -1
  15. package/dist/admin/components/CustomerAddressPanel.js +13 -6
  16. package/dist/admin/components/CustomerAddressPanel.js.map +1 -1
  17. package/dist/admin/components/DiscountsManager.d.ts +5 -0
  18. package/dist/admin/components/DiscountsManager.d.ts.map +1 -0
  19. package/dist/admin/components/DiscountsManager.js +363 -0
  20. package/dist/admin/components/DiscountsManager.js.map +1 -0
  21. package/dist/admin/components/ShippingSettings.d.ts.map +1 -1
  22. package/dist/admin/components/ShippingSettings.js +19 -2
  23. package/dist/admin/components/ShippingSettings.js.map +1 -1
  24. package/dist/admin/components/StoreSettings.d.ts.map +1 -1
  25. package/dist/admin/components/StoreSettings.js +8 -1
  26. package/dist/admin/components/StoreSettings.js.map +1 -1
  27. package/dist/admin/components/TaxSettings.d.ts.map +1 -1
  28. package/dist/admin/components/TaxSettings.js +8 -3
  29. package/dist/admin/components/TaxSettings.js.map +1 -1
  30. package/dist/admin/components/index.d.ts +2 -0
  31. package/dist/admin/components/index.d.ts.map +1 -1
  32. package/dist/admin/components/index.js +1 -0
  33. package/dist/admin/components/index.js.map +1 -1
  34. package/dist/admin/hooks/index.d.ts +2 -0
  35. package/dist/admin/hooks/index.d.ts.map +1 -1
  36. package/dist/admin/hooks/index.js +1 -0
  37. package/dist/admin/hooks/index.js.map +1 -1
  38. package/dist/admin/hooks/useAdminDiscounts.d.ts +12 -0
  39. package/dist/admin/hooks/useAdminDiscounts.d.ts.map +1 -0
  40. package/dist/admin/hooks/useAdminDiscounts.js +77 -0
  41. package/dist/admin/hooks/useAdminDiscounts.js.map +1 -0
  42. package/dist/admin/index.d.ts +3 -3
  43. package/dist/admin/index.d.ts.map +1 -1
  44. package/dist/admin/index.js +2 -2
  45. package/dist/admin/index.js.map +1 -1
  46. package/dist/admin/types.d.ts +72 -0
  47. package/dist/admin/types.d.ts.map +1 -1
  48. package/dist/auth/components/AddressForm.d.ts.map +1 -1
  49. package/dist/auth/components/AddressForm.js +22 -7
  50. package/dist/auth/components/AddressForm.js.map +1 -1
  51. package/dist/checkout/api/checkout.d.ts.map +1 -1
  52. package/dist/checkout/api/checkout.js +15 -2
  53. package/dist/checkout/api/checkout.js.map +1 -1
  54. package/dist/checkout/api/discount.d.ts +47 -0
  55. package/dist/checkout/api/discount.d.ts.map +1 -0
  56. package/dist/checkout/api/discount.js +77 -0
  57. package/dist/checkout/api/discount.js.map +1 -0
  58. package/dist/checkout/api/index.d.ts +1 -0
  59. package/dist/checkout/api/index.d.ts.map +1 -1
  60. package/dist/checkout/api/index.js +1 -0
  61. package/dist/checkout/api/index.js.map +1 -1
  62. package/dist/checkout/api/manual.d.ts.map +1 -1
  63. package/dist/checkout/api/manual.js +64 -130
  64. package/dist/checkout/api/manual.js.map +1 -1
  65. package/dist/checkout/api/shipping.d.ts.map +1 -1
  66. package/dist/checkout/api/shipping.js +19 -27
  67. package/dist/checkout/api/shipping.js.map +1 -1
  68. package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -1
  69. package/dist/checkout/components/CheckoutFlow.js +89 -9
  70. package/dist/checkout/components/CheckoutFlow.js.map +1 -1
  71. package/dist/checkout/components/OrderSummary.d.ts +1 -1
  72. package/dist/checkout/components/OrderSummary.d.ts.map +1 -1
  73. package/dist/checkout/components/OrderSummary.js +3 -3
  74. package/dist/checkout/components/OrderSummary.js.map +1 -1
  75. package/dist/checkout/components/ShippingForm.d.ts.map +1 -1
  76. package/dist/checkout/components/ShippingForm.js +42 -13
  77. package/dist/checkout/components/ShippingForm.js.map +1 -1
  78. package/dist/checkout/constants.d.ts +38 -0
  79. package/dist/checkout/constants.d.ts.map +1 -1
  80. package/dist/checkout/constants.js +39 -0
  81. package/dist/checkout/constants.js.map +1 -1
  82. package/dist/checkout/hooks/useCheckout.d.ts.map +1 -1
  83. package/dist/checkout/hooks/useCheckout.js +2 -0
  84. package/dist/checkout/hooks/useCheckout.js.map +1 -1
  85. package/dist/checkout/server/checkout-customer.d.ts +30 -0
  86. package/dist/checkout/server/checkout-customer.d.ts.map +1 -0
  87. package/dist/checkout/server/checkout-customer.js +47 -0
  88. package/dist/checkout/server/checkout-customer.js.map +1 -0
  89. package/dist/checkout/server/create-checkout-session.d.ts.map +1 -1
  90. package/dist/checkout/server/create-checkout-session.js +149 -9
  91. package/dist/checkout/server/create-checkout-session.js.map +1 -1
  92. package/dist/checkout/server/discounts.d.ts +75 -0
  93. package/dist/checkout/server/discounts.d.ts.map +1 -0
  94. package/dist/checkout/server/discounts.js +294 -0
  95. package/dist/checkout/server/discounts.js.map +1 -0
  96. package/dist/checkout/server/handle-webhook.js +23 -1
  97. package/dist/checkout/server/handle-webhook.js.map +1 -1
  98. package/dist/checkout/server/index.d.ts +4 -0
  99. package/dist/checkout/server/index.d.ts.map +1 -1
  100. package/dist/checkout/server/index.js +4 -0
  101. package/dist/checkout/server/index.js.map +1 -1
  102. package/dist/checkout/server/order-service.d.ts.map +1 -1
  103. package/dist/checkout/server/order-service.js +60 -10
  104. package/dist/checkout/server/order-service.js.map +1 -1
  105. package/dist/checkout/server/pricing.d.ts +164 -0
  106. package/dist/checkout/server/pricing.d.ts.map +1 -0
  107. package/dist/checkout/server/pricing.js +309 -0
  108. package/dist/checkout/server/pricing.js.map +1 -0
  109. package/dist/checkout/types.d.ts +8 -0
  110. package/dist/checkout/types.d.ts.map +1 -1
  111. package/dist/core/StoreSettingsProvider.d.ts +4 -0
  112. package/dist/core/StoreSettingsProvider.d.ts.map +1 -1
  113. package/dist/core/StoreSettingsProvider.js +6 -0
  114. package/dist/core/StoreSettingsProvider.js.map +1 -1
  115. package/dist/core/api/settings.d.ts +1 -0
  116. package/dist/core/api/settings.d.ts.map +1 -1
  117. package/dist/core/api/settings.js +2 -0
  118. package/dist/core/api/settings.js.map +1 -1
  119. package/dist/core/db/queries.d.ts +267 -19
  120. package/dist/core/db/queries.d.ts.map +1 -1
  121. package/dist/core/db/queries.js +297 -0
  122. package/dist/core/db/queries.js.map +1 -1
  123. package/dist/core/db/schema.d.ts +618 -0
  124. package/dist/core/db/schema.d.ts.map +1 -1
  125. package/dist/core/db/schema.js +78 -0
  126. package/dist/core/db/schema.js.map +1 -1
  127. package/package.json +5 -1
@@ -0,0 +1,164 @@
1
+ /**
2
+ * @rovela/sdk/checkout/server/pricing
3
+ *
4
+ * THE PRICING CORE — the single server-side pipeline that computes an order's
5
+ * final price. Payment processors (Stripe, manual methods, future providers)
6
+ * only ever COLLECT the amount this module computes; none of them is a
7
+ * source of truth for money.
8
+ *
9
+ * MONEY-INTEGRITY RULES (apply to every checkout path):
10
+ * 1. Item prices come from the DATABASE (products / product_variants), never
11
+ * from the client. A client price above the catalog price is tolerated on
12
+ * the Stripe path (configurator surcharges); a client price BELOW it is a
13
+ * tamper and rejects the checkout. The manual path is fully strict.
14
+ * 2. Manual zone shipping is re-derived server-side from the selected rate
15
+ * id; Shippo quotes (ephemeral) are sanity-bounded.
16
+ * 3. Tax is computed by ONE canonical formula: taxable base =
17
+ * subtotal − discount + shipping, honoring `taxIncludedInPrices`.
18
+ * 4. Discounts (Phase 2 — native discounts engine) are applied between
19
+ * re-pricing and shipping; `discountCents` is 0 until then.
20
+ *
21
+ * All amounts in this module are integer CENTS. DB decimals (dollars) are
22
+ * converted at the boundary via `dollarsToCents`.
23
+ */
24
+ import type { StoreSettingsData } from '../../core/db/queries';
25
+ import type { Address } from '../../core/types';
26
+ import type { CheckoutApiError, CheckoutLineItem, ShippingOption } from '../types';
27
+ import type { AppliedDiscount } from './discounts';
28
+ /**
29
+ * Thrown by the pricing pipeline when an input fails validation (tampered
30
+ * price, unknown product, stale shipping selection…). API routes map it to a
31
+ * 4xx `CheckoutApiError`; anything else stays a 500.
32
+ */
33
+ export declare class PricingError extends Error {
34
+ readonly code: CheckoutApiError['code'];
35
+ readonly status: number;
36
+ constructor(message: string, code?: CheckoutApiError['code'], status?: number);
37
+ }
38
+ export interface QuoteItemInput {
39
+ productId?: string;
40
+ variantId?: string;
41
+ /** Client display name — server name wins; kept for diagnostics only. */
42
+ name?: string;
43
+ /** Client-claimed unit price in CENTS — validated, never trusted downward. */
44
+ price?: number;
45
+ quantity: number;
46
+ description?: string;
47
+ image?: string;
48
+ }
49
+ export interface RepricedItems {
50
+ lines: CheckoutLineItem[];
51
+ subtotalCents: number;
52
+ /** productId → categoryId, for category-scoped discounts. */
53
+ categoryByProductId: Record<string, string | null>;
54
+ }
55
+ export interface ShippingResolution {
56
+ shippingCents: number;
57
+ shippingMethodName?: string;
58
+ carrier?: string;
59
+ shippoRateId?: string;
60
+ }
61
+ export interface TaxResolution {
62
+ taxCents: number;
63
+ taxRate: number;
64
+ taxZoneId: string | null;
65
+ taxZoneName: string | null;
66
+ taxIncludedInPrices: boolean;
67
+ }
68
+ export interface QuoteInput {
69
+ items: QuoteItemInput[];
70
+ shippingAddress?: Address | null;
71
+ selectedShipping?: ShippingOption | null;
72
+ /**
73
+ * Pricing strictness for item re-pricing:
74
+ * - 'strict' — client prices ignored entirely (manual/unsupervised paths).
75
+ * - 'floor' — client price accepted when >= the catalog price
76
+ * (configurator surcharges); below = reject (Stripe path).
77
+ */
78
+ pricingMode?: 'strict' | 'floor';
79
+ /** Redemption code entered by the shopper (native discounts engine). */
80
+ discountCode?: string | null;
81
+ /** Trusted (session-resolved) customer — group gating + discount eligibility. */
82
+ customerId?: string | null;
83
+ customerGroupId?: string | null;
84
+ /** Contact email — once-per-customer discount checks for guests. */
85
+ customerEmail?: string | null;
86
+ }
87
+ export interface Quote {
88
+ lines: CheckoutLineItem[];
89
+ subtotalCents: number;
90
+ /** Total product+order discount (native discounts engine), ≤ subtotal. */
91
+ discountCents: number;
92
+ /** Every applied discount (code + automatics), for records + display. */
93
+ appliedDiscounts: AppliedDiscount[];
94
+ /** The validated redemption code, when one was applied. */
95
+ discountCode: string | null;
96
+ /** True when an applied discount zeroed the shipping cost. */
97
+ freeShippingApplied: boolean;
98
+ shippingCents: number;
99
+ shippingMethodName?: string;
100
+ carrier?: string;
101
+ shippoRateId?: string;
102
+ taxCents: number;
103
+ taxRate: number;
104
+ taxZoneId: string | null;
105
+ taxZoneName: string | null;
106
+ taxIncludedInPrices: boolean;
107
+ totalCents: number;
108
+ /** Uppercase ISO currency (from store settings). */
109
+ currency: string;
110
+ }
111
+ /** Dollars (decimal string from the DB) → integer cents. */
112
+ export declare function dollarsToCents(decimal: string | null | undefined): number | null;
113
+ /**
114
+ * Re-price every cart line from the database.
115
+ *
116
+ * Every line MUST reference a real, active catalog product by UUID. The
117
+ * server's catalog price is the floor:
118
+ * - 'strict' mode uses the catalog price unconditionally.
119
+ * - 'floor' mode accepts a HIGHER client price (configurator/add-on
120
+ * surcharges priced client-side) but rejects a lower one as tampering.
121
+ */
122
+ export declare function repriceItems(items: QuoteItemInput[], pricingMode?: 'strict' | 'floor'): Promise<RepricedItems>;
123
+ /**
124
+ * Validate/re-derive the checkout's shipping selection server-side.
125
+ *
126
+ * Manual zone rates are deterministic — the server recomputes the price for
127
+ * the selected option id and uses ITS number (unknown id = tampered/stale →
128
+ * reject). Shippo rates are ephemeral live quotes served by our own
129
+ * /api/checkout/shipping moments earlier — accepted with sanity bounds, the
130
+ * rate id stored for reconciliation.
131
+ */
132
+ export declare function resolveShippingSelection(params: {
133
+ selection: ShippingOption;
134
+ country: string;
135
+ subtotalCents: number;
136
+ }): Promise<ShippingResolution>;
137
+ /**
138
+ * Compute tax for an order. Canonical taxable base:
139
+ * `subtotal − discount + shipping`.
140
+ *
141
+ * - tax-INCLUSIVE stores (`taxIncludedInPrices: true`): tax is EXTRACTED from
142
+ * the base for display (`base − base/divisor`) and does NOT add to the total.
143
+ * - tax-EXCLUSIVE stores: tax is `base × rate` and ADDS to the total.
144
+ */
145
+ export declare function resolveTax(params: {
146
+ subtotalCents: number;
147
+ discountCents?: number;
148
+ shippingCents?: number;
149
+ country?: string | null;
150
+ state?: string | null;
151
+ taxIncludedInPrices: boolean;
152
+ }): Promise<TaxResolution>;
153
+ /**
154
+ * Build the authoritative Quote for a checkout: re-priced items → discounts
155
+ * (Phase 2) → shipping → tax → total. Both the manual payment path and the
156
+ * Stripe session path consume this; the processor only collects
157
+ * `quote.totalCents`.
158
+ *
159
+ * Throws `PricingError` on any invalid/tampered input.
160
+ */
161
+ export declare function buildQuote(input: QuoteInput, context?: {
162
+ settings?: StoreSettingsData | null;
163
+ }): Promise<Quote>;
164
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../../src/checkout/server/pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * @rovela/sdk/checkout/server/pricing
3
+ *
4
+ * THE PRICING CORE — the single server-side pipeline that computes an order's
5
+ * final price. Payment processors (Stripe, manual methods, future providers)
6
+ * only ever COLLECT the amount this module computes; none of them is a
7
+ * source of truth for money.
8
+ *
9
+ * MONEY-INTEGRITY RULES (apply to every checkout path):
10
+ * 1. Item prices come from the DATABASE (products / product_variants), never
11
+ * from the client. A client price above the catalog price is tolerated on
12
+ * the Stripe path (configurator surcharges); a client price BELOW it is a
13
+ * tamper and rejects the checkout. The manual path is fully strict.
14
+ * 2. Manual zone shipping is re-derived server-side from the selected rate
15
+ * id; Shippo quotes (ephemeral) are sanity-bounded.
16
+ * 3. Tax is computed by ONE canonical formula: taxable base =
17
+ * subtotal − discount + shipping, honoring `taxIncludedInPrices`.
18
+ * 4. Discounts (Phase 2 — native discounts engine) are applied between
19
+ * re-pricing and shipping; `discountCents` is 0 until then.
20
+ *
21
+ * All amounts in this module are integer CENTS. DB decimals (dollars) are
22
+ * converted at the boundary via `dollarsToCents`.
23
+ */
24
+ import { findSettings, findProductById, findVariantById, findShippingOptionsForCountry, findTaxRateForAddress, } from '../../core/db/queries';
25
+ import { evaluateDiscounts } from './discounts';
26
+ // =============================================================================
27
+ // Errors
28
+ // =============================================================================
29
+ /**
30
+ * Thrown by the pricing pipeline when an input fails validation (tampered
31
+ * price, unknown product, stale shipping selection…). API routes map it to a
32
+ * 4xx `CheckoutApiError`; anything else stays a 500.
33
+ */
34
+ export class PricingError extends Error {
35
+ code;
36
+ status;
37
+ constructor(message, code = 'INVALID_REQUEST', status = 400) {
38
+ super(message);
39
+ this.code = code;
40
+ this.status = status;
41
+ this.name = 'PricingError';
42
+ }
43
+ }
44
+ // =============================================================================
45
+ // Helpers
46
+ // =============================================================================
47
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
48
+ /** Dollars (decimal string from the DB) → integer cents. */
49
+ export function dollarsToCents(decimal) {
50
+ if (decimal == null)
51
+ return null;
52
+ const n = Number.parseFloat(decimal);
53
+ if (!Number.isFinite(n))
54
+ return null;
55
+ return Math.round(n * 100);
56
+ }
57
+ // =============================================================================
58
+ // 1. Item re-pricing
59
+ // =============================================================================
60
+ /**
61
+ * Re-price every cart line from the database.
62
+ *
63
+ * Every line MUST reference a real, active catalog product by UUID. The
64
+ * server's catalog price is the floor:
65
+ * - 'strict' mode uses the catalog price unconditionally.
66
+ * - 'floor' mode accepts a HIGHER client price (configurator/add-on
67
+ * surcharges priced client-side) but rejects a lower one as tampering.
68
+ */
69
+ export async function repriceItems(items, pricingMode = 'strict') {
70
+ if (!items || !Array.isArray(items) || items.length === 0) {
71
+ throw new PricingError('No items provided', 'EMPTY_CART');
72
+ }
73
+ const lines = [];
74
+ const categoryByProductId = {};
75
+ let subtotalCents = 0;
76
+ for (const item of items) {
77
+ const quantity = Number(item.quantity);
78
+ if (!Number.isInteger(quantity) || quantity < 1 || quantity > 999) {
79
+ throw new PricingError('Invalid item quantity');
80
+ }
81
+ if (!item.productId || !UUID_RE.test(item.productId)) {
82
+ throw new PricingError('Invalid item: unknown product');
83
+ }
84
+ const product = await findProductById(item.productId);
85
+ if (!product || product.status !== 'active') {
86
+ throw new PricingError('Invalid item: product unavailable');
87
+ }
88
+ let serverUnitCents = dollarsToCents(product.price);
89
+ let name = product.name;
90
+ let variantId;
91
+ if (item.variantId && UUID_RE.test(item.variantId)) {
92
+ const variant = await findVariantById(item.variantId);
93
+ if (!variant || variant.productId !== product.id) {
94
+ throw new PricingError('Invalid item variant');
95
+ }
96
+ const variantCents = dollarsToCents(variant.price);
97
+ if (variantCents != null)
98
+ serverUnitCents = variantCents;
99
+ name = `${product.name} - ${variant.name}`;
100
+ variantId = variant.id;
101
+ }
102
+ else if (item.variantId) {
103
+ // Non-UUID variant refs (configurator lines) can't be re-priced from a
104
+ // variant row: 'floor' mode falls back to the product base price with
105
+ // the client surcharge allowed; 'strict' mode rejects.
106
+ if (pricingMode === 'strict') {
107
+ throw new PricingError('Invalid item variant');
108
+ }
109
+ variantId = item.variantId;
110
+ }
111
+ if (serverUnitCents == null || serverUnitCents <= 0) {
112
+ throw new PricingError('Invalid item: product has no price');
113
+ }
114
+ let unitCents = serverUnitCents;
115
+ if (pricingMode === 'floor' && typeof item.price === 'number') {
116
+ const clientCents = Math.round(item.price);
117
+ if (!Number.isFinite(clientCents) || clientCents < serverUnitCents) {
118
+ throw new PricingError('Cart prices are out of date. Please refresh the page and try again.');
119
+ }
120
+ // Client price >= catalog price: accept (configurator surcharges).
121
+ unitCents = clientCents;
122
+ }
123
+ subtotalCents += unitCents * quantity;
124
+ categoryByProductId[product.id] =
125
+ product.categoryId ?? null;
126
+ lines.push({
127
+ productId: product.id,
128
+ variantId,
129
+ name,
130
+ description: item.description,
131
+ price: unitCents,
132
+ quantity,
133
+ image: item.image || product.images?.[0],
134
+ });
135
+ }
136
+ return { lines, subtotalCents, categoryByProductId };
137
+ }
138
+ // =============================================================================
139
+ // 2. Shipping resolution
140
+ // =============================================================================
141
+ /**
142
+ * Validate/re-derive the checkout's shipping selection server-side.
143
+ *
144
+ * Manual zone rates are deterministic — the server recomputes the price for
145
+ * the selected option id and uses ITS number (unknown id = tampered/stale →
146
+ * reject). Shippo rates are ephemeral live quotes served by our own
147
+ * /api/checkout/shipping moments earlier — accepted with sanity bounds, the
148
+ * rate id stored for reconciliation.
149
+ */
150
+ export async function resolveShippingSelection(params) {
151
+ const { selection: sel, country, subtotalCents } = params;
152
+ if (!sel?.id) {
153
+ throw new PricingError('A shipping method is required');
154
+ }
155
+ if (sel.source === 'shippo') {
156
+ const price = Number(sel.price);
157
+ if (!Number.isFinite(price) || price < 0 || price > 1_000_000) {
158
+ throw new PricingError('Invalid shipping selection');
159
+ }
160
+ return {
161
+ shippingCents: Math.round(price),
162
+ shippingMethodName: [sel.carrierName, sel.name].filter(Boolean).join(' - ') || sel.name,
163
+ carrier: sel.carrierCode || sel.carrierId || undefined,
164
+ shippoRateId: sel.id,
165
+ };
166
+ }
167
+ // Manual zone rate. NOTE: findShippingOptionsForCountry returns prices in
168
+ // DOLLARS (DB storage unit); the public shipping API multiplies by 100
169
+ // before serving the client. Convert here the same way.
170
+ const grouped = await findShippingOptionsForCountry(country, subtotalCents / 100);
171
+ const flat = grouped.flatMap((g) => g.options);
172
+ const match = flat.find((o) => o.id === sel.id);
173
+ if (!match) {
174
+ throw new PricingError('Selected shipping method is no longer available');
175
+ }
176
+ return {
177
+ shippingCents: Math.round((Number(match.price) || 0) * 100),
178
+ shippingMethodName: [match.carrierName, match.name].filter(Boolean).join(' - ') || match.name,
179
+ carrier: match.carrierCode || match.carrierId || undefined,
180
+ };
181
+ }
182
+ // =============================================================================
183
+ // 3. Tax — the ONE canonical formula
184
+ // =============================================================================
185
+ /**
186
+ * Compute tax for an order. Canonical taxable base:
187
+ * `subtotal − discount + shipping`.
188
+ *
189
+ * - tax-INCLUSIVE stores (`taxIncludedInPrices: true`): tax is EXTRACTED from
190
+ * the base for display (`base − base/divisor`) and does NOT add to the total.
191
+ * - tax-EXCLUSIVE stores: tax is `base × rate` and ADDS to the total.
192
+ */
193
+ export async function resolveTax(params) {
194
+ const { subtotalCents, discountCents = 0, shippingCents = 0, country, state, taxIncludedInPrices, } = params;
195
+ const empty = {
196
+ taxCents: 0,
197
+ taxRate: 0,
198
+ taxZoneId: null,
199
+ taxZoneName: null,
200
+ taxIncludedInPrices,
201
+ };
202
+ if (!country)
203
+ return empty;
204
+ const taxMatch = await findTaxRateForAddress(country, state || undefined);
205
+ const rate = taxMatch?.taxRate ?? 0;
206
+ if (rate <= 0)
207
+ return empty;
208
+ const taxableCents = Math.max(0, subtotalCents - discountCents + shippingCents);
209
+ const taxCents = taxIncludedInPrices
210
+ ? Math.round(taxableCents - taxableCents / (1 + rate / 100))
211
+ : Math.round(taxableCents * (rate / 100));
212
+ return {
213
+ taxCents,
214
+ taxRate: rate,
215
+ taxZoneId: taxMatch?.zoneId ?? null,
216
+ taxZoneName: taxMatch?.zoneName ?? null,
217
+ taxIncludedInPrices,
218
+ };
219
+ }
220
+ // =============================================================================
221
+ // The Quote — full pipeline
222
+ // =============================================================================
223
+ /**
224
+ * Build the authoritative Quote for a checkout: re-priced items → discounts
225
+ * (Phase 2) → shipping → tax → total. Both the manual payment path and the
226
+ * Stripe session path consume this; the processor only collects
227
+ * `quote.totalCents`.
228
+ *
229
+ * Throws `PricingError` on any invalid/tampered input.
230
+ */
231
+ export async function buildQuote(input, context) {
232
+ const settings = context?.settings !== undefined ? context.settings : await findSettings();
233
+ // 1. Items — server re-price.
234
+ const { lines, subtotalCents, categoryByProductId } = await repriceItems(input.items, input.pricingMode ?? 'strict');
235
+ // 2. Discounts — the native engine. An entered code that fails validation
236
+ // HARD-FAILS the quote (the checkout UI pre-validates via the preview
237
+ // endpoint, so reaching here with a bad code means a stale/tampered
238
+ // submission). Automatic discounts degrade silently.
239
+ const evaluation = await evaluateDiscounts({
240
+ lines,
241
+ subtotalCents,
242
+ categoryByProductId,
243
+ code: input.discountCode ?? null,
244
+ customerId: input.customerId ?? null,
245
+ customerGroupId: input.customerGroupId ?? null,
246
+ customerEmail: input.customerEmail ?? null,
247
+ });
248
+ if (input.discountCode && evaluation.codeError) {
249
+ throw new PricingError(evaluation.codeError.message);
250
+ }
251
+ const discountCents = Math.min(evaluation.discountCents, subtotalCents);
252
+ // 3. Shipping.
253
+ const shippingEnabled = settings?.shippingEnabled ?? true;
254
+ let shipping = { shippingCents: 0 };
255
+ if (shippingEnabled) {
256
+ const a = input.shippingAddress;
257
+ if (!a)
258
+ throw new PricingError('Shipping address is required');
259
+ if (!a.firstName || !a.lastName || !a.line1 || !a.city || !a.postalCode || !a.country) {
260
+ throw new PricingError('Complete shipping address is required');
261
+ }
262
+ if (!input.selectedShipping?.id) {
263
+ throw new PricingError('A shipping method is required');
264
+ }
265
+ shipping = await resolveShippingSelection({
266
+ selection: input.selectedShipping,
267
+ country: a.country,
268
+ subtotalCents,
269
+ });
270
+ // A free-shipping discount zeroes the cost but keeps the chosen method.
271
+ if (evaluation.freeShipping && shipping.shippingCents > 0) {
272
+ shipping = { ...shipping, shippingCents: 0 };
273
+ }
274
+ }
275
+ // 4. Tax — canonical formula on subtotal − discount + shipping.
276
+ const taxIncludedInPrices = settings?.taxIncludedInPrices ?? true;
277
+ const tax = await resolveTax({
278
+ subtotalCents,
279
+ discountCents,
280
+ shippingCents: shipping.shippingCents,
281
+ country: input.shippingAddress?.country ?? null,
282
+ state: input.shippingAddress?.state ?? null,
283
+ taxIncludedInPrices,
284
+ });
285
+ // 5. Total.
286
+ const baseCents = subtotalCents - discountCents + shipping.shippingCents;
287
+ const totalCents = taxIncludedInPrices ? baseCents : baseCents + tax.taxCents;
288
+ const appliedCode = evaluation.applied.find((a) => a.method === 'code')?.code ?? null;
289
+ return {
290
+ lines,
291
+ subtotalCents,
292
+ discountCents,
293
+ appliedDiscounts: evaluation.applied,
294
+ discountCode: appliedCode,
295
+ freeShippingApplied: evaluation.freeShipping,
296
+ shippingCents: shipping.shippingCents,
297
+ shippingMethodName: shipping.shippingMethodName,
298
+ carrier: shipping.carrier,
299
+ shippoRateId: shipping.shippoRateId,
300
+ taxCents: tax.taxCents,
301
+ taxRate: tax.taxRate,
302
+ taxZoneId: tax.taxZoneId,
303
+ taxZoneName: tax.taxZoneName,
304
+ taxIncludedInPrices,
305
+ totalCents,
306
+ currency: (settings?.storeCurrency || process.env.STORE_CURRENCY || 'USD').toUpperCase(),
307
+ };
308
+ }
309
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../../src/checkout/server/pricing.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,10 @@ export interface CheckoutSessionRequest {
37
37
  customerEmail?: string;
38
38
  /** Store customer ID (if authenticated) */
39
39
  customerId?: string;
40
+ /** Trusted customer-group id (session-resolved by the route, never client). */
41
+ customerGroupId?: string;
42
+ /** Redemption code entered in checkout (validated by the discounts engine). */
43
+ discountCode?: string;
40
44
  /**
41
45
  * Pre-collected shipping address from pre-checkout flow.
42
46
  * When provided, this address is attached to the payment intent
@@ -104,6 +108,8 @@ export interface CreateOrderParams {
104
108
  stripePromotionCodeId?: string;
105
109
  /** Total amount in cents */
106
110
  total: number;
111
+ /** Uppercase ISO currency snapshot (e.g. 'EUR'). Falls back to store settings. */
112
+ currency?: string;
107
113
  /** Shipping address */
108
114
  shippingAddress: Address;
109
115
  /** Billing address (optional) */
@@ -508,6 +514,8 @@ export interface UseCheckoutOptions {
508
514
  * When provided, creates a fixed shipping rate in Stripe instead of letting customer choose.
509
515
  */
510
516
  selectedShipping?: ShippingOption;
517
+ /** Applied discount code (validated via /api/checkout/discount beforehand). */
518
+ discountCode?: string;
511
519
  /** Callback on successful session creation (before redirect) */
512
520
  onSuccess?: (session: CheckoutSessionResponse) => void;
513
521
  /** Callback on error */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checkout/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAM5C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,eAAe;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,cAAc,CAAA;IACjC,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAA;CACZ;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,IAAI,EACA,YAAY,GACZ,iBAAiB,GACjB,uBAAuB,GACvB,uBAAuB,GACvB,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,yBAAyB,CAAA;CAC9B;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,mCAAmC;IACnC,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,uBAAuB;IACvB,eAAe,EAAE,OAAO,CAAA;IACxB,iCAAiC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;OAIG;IACH,qBAAqB,EAAE,MAAM,CAAA;IAC7B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAA;IACjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE;QACV,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAMD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AAEtF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAA;IACV,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oCAAoC;IACpC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAA;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,0DAA0D;IAC1D,OAAO,EAAE,eAAe,CAAA;IACxB,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC;QACX,qBAAqB;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,eAAe;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAC,CAAA;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,oDAAoD;IACpD,OAAO,EAAE,+BAA+B,EAAE,CAAA;IAC1C,sDAAsD;IACtD,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,yBAAyB;IACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACzB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,GAAG,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,IAAI,EAAE,YAAY,CAAA;IAClB,qBAAqB;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,uBAAuB;IACvB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,mDAAmD;IACnD,cAAc,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,+BAA+B;IAC/B,gBAAgB,EAAE,cAAc,GAAG,IAAI,CAAA;IACvC,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,mBAAmB;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,iBAAiB;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,mCAAmC;IACnC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mBAAmB;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,OAAO,EAAE,+BAA+B,EAAE,CAAA;IAC1C,gCAAgC;IAChC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IACtC,0CAA0C;IAC1C,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;IAC1C,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAA;IACvC,qBAAqB;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,uBAAuB;IACvB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,mDAAmD;IACnD,cAAc,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,oEAAoE;IACpE,iBAAiB,EAAE,+BAA+B,EAAE,CAAA;IACpD,+BAA+B;IAC/B,gBAAgB,EAAE,cAAc,GAAG,IAAI,CAAA;IACvC,2CAA2C;IAC3C,iBAAiB,EAAE,OAAO,CAAA;IAC1B,iCAAiC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAA;IACrB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAA;IACX,mDAAmD;IACnD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,sDAAsD;IACtD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,gDAAgD;IAChD,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,cAAc,CAAA;IACjC,gEAAgE;IAChE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACtD,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAI5C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B;;;;OAIG;IACH,cAAc,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,sCAAsC;IACtC,SAAS,EAAE,OAAO,CAAA;IAClB,0BAA0B;IAC1B,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC9B,wBAAwB;IACxB,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checkout/types.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,8 @@ export interface StoreSettings {
37
37
  logoUrl: string | null;
38
38
  storeCurrency: string;
39
39
  storeTimezone: string;
40
+ /** ISO 3166-1 alpha-2 home country (e.g. 'FR'). null = unset (forms fall back to 'US'). */
41
+ storeCountry: string | null;
40
42
  taxEnabled: boolean;
41
43
  taxRate: number;
42
44
  shippingEnabled: boolean;
@@ -53,6 +55,8 @@ export interface StoreSettingsContextValue {
53
55
  logoUrl: string | null;
54
56
  /** Store currency code (USD, EUR, etc.) */
55
57
  currency: string;
58
+ /** Store home country (ISO 3166-1 alpha-2, e.g. 'FR') — null when unset */
59
+ country: string | null;
56
60
  /** Store locale for formatting */
57
61
  locale: string;
58
62
  /** Support email */
@@ -1 +1 @@
1
- {"version":3,"file":"StoreSettingsProvider.d.ts","sourceRoot":"","sources":["../../src/core/StoreSettingsProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAMd,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,+EAA+E;IAC/E,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,2BAA2B;IAC3B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAA;IAC/C,yDAAyD;IACzD,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,KAAK,MAAM,CAAA;IACjF,mCAAmC;IACnC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,SAAS,CAAA;IACnB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACxC,kDAAkD;IAClD,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AA2CD,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,eAAe,EACf,QAAQ,GACT,EAAE,0BAA0B,2CA6H5B;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,IAAI,yBAAyB,CAW5D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,yBAAyB,GAAG,IAAI,CAE3E"}
1
+ {"version":3,"file":"StoreSettingsProvider.d.ts","sourceRoot":"","sources":["../../src/core/StoreSettingsProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAMd,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,2FAA2F;IAC3F,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,+EAA+E;IAC/E,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,2BAA2B;IAC3B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAA;IAC/C,yDAAyD;IACzD,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,KAAK,MAAM,CAAA;IACjF,mCAAmC;IACnC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,SAAS,CAAA;IACnB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACxC,kDAAkD;IAClD,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AA+CD,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,eAAe,EACf,QAAQ,GACT,EAAE,0BAA0B,2CA+H5B;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,IAAI,yBAAyB,CAW5D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,yBAAyB,GAAG,IAAI,CAE3E"}
@@ -42,6 +42,7 @@ const DEFAULT_SETTINGS = {
42
42
  logoUrl: null,
43
43
  storeCurrency: 'USD',
44
44
  storeTimezone: 'America/New_York',
45
+ storeCountry: null,
45
46
  taxEnabled: false,
46
47
  taxRate: 0,
47
48
  shippingEnabled: true,
@@ -59,6 +60,9 @@ const CURRENCY_LOCALES = {
59
60
  CAD: 'en-CA',
60
61
  AUD: 'en-AU',
61
62
  JPY: 'en-US', // English formatting for JPY
63
+ AED: 'en-AE',
64
+ INR: 'en-IN', // lakh/crore grouping
65
+ CNY: 'en-US', // English formatting for CNY (renders as CN¥)
62
66
  };
63
67
  // =============================================================================
64
68
  // Context
@@ -87,6 +91,7 @@ export function StoreSettingsProvider({ children, initialSettings, fallback, })
87
91
  logoUrl: data.settings?.logoUrl ?? DEFAULT_SETTINGS.logoUrl,
88
92
  storeCurrency: data.settings?.storeCurrency || DEFAULT_SETTINGS.storeCurrency,
89
93
  storeTimezone: data.settings?.storeTimezone || DEFAULT_SETTINGS.storeTimezone,
94
+ storeCountry: data.settings?.storeCountry ?? DEFAULT_SETTINGS.storeCountry,
90
95
  taxEnabled: data.settings?.taxEnabled ?? DEFAULT_SETTINGS.taxEnabled,
91
96
  taxRate: data.settings?.taxRate ?? DEFAULT_SETTINGS.taxRate,
92
97
  shippingEnabled: data.settings?.shippingEnabled ?? DEFAULT_SETTINGS.shippingEnabled,
@@ -153,6 +158,7 @@ export function StoreSettingsProvider({ children, initialSettings, fallback, })
153
158
  storeName: settings?.storeName || fallback?.storeName || DEFAULT_SETTINGS.storeName,
154
159
  logoUrl: settings?.logoUrl ?? DEFAULT_SETTINGS.logoUrl,
155
160
  currency: settings?.storeCurrency || fallback?.currency || DEFAULT_SETTINGS.storeCurrency,
161
+ country: settings?.storeCountry ?? null,
156
162
  locale: CURRENCY_LOCALES[settings?.storeCurrency || ''] || fallback?.locale || DEFAULT_LOCALE,
157
163
  supportEmail: settings?.storeEmail || fallback?.supportEmail || '',
158
164
  isLoading,