@spree/sdk 0.7.1 → 0.8.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.
package/README.md CHANGED
@@ -58,6 +58,7 @@ All Store API resources are available directly on the client:
58
58
  client.products.list() // Products
59
59
  client.cart.create() // Cart
60
60
  client.orders.complete(id, opt) // Checkout
61
+ client.customers.create(params) // Registration
61
62
  client.customer.get(opt) // Account
62
63
  ```
63
64
 
@@ -96,7 +97,7 @@ const newTokens = await client.auth.refresh({ token });
96
97
  ### 3. Register New Customer
97
98
 
98
99
  ```typescript
99
- const { token, user } = await client.auth.register({
100
+ const { token, user } = await client.customers.create({
100
101
  email: 'new@example.com',
101
102
  password: 'password123',
102
103
  password_confirmation: 'password123',
@@ -27,26 +27,6 @@ interface ErrorResponse {
27
27
  details?: Record<string, string[]>;
28
28
  };
29
29
  }
30
- interface AuthTokens {
31
- token: string;
32
- user: {
33
- id: string;
34
- email: string;
35
- first_name: string | null;
36
- last_name: string | null;
37
- };
38
- }
39
- interface LoginCredentials {
40
- email: string;
41
- password: string;
42
- }
43
- interface RegisterParams {
44
- email: string;
45
- password: string;
46
- password_confirmation: string;
47
- first_name?: string;
48
- last_name?: string;
49
- }
50
30
  interface ListParams {
51
31
  page?: number;
52
32
  limit?: number;
@@ -190,6 +170,8 @@ type Customer = {
190
170
  email: string;
191
171
  first_name: string | null;
192
172
  last_name: string | null;
173
+ phone: string | null;
174
+ accepts_email_marketing: boolean;
193
175
  created_at: string;
194
176
  updated_at: string;
195
177
  addresses: Array<Address>;
@@ -825,6 +807,30 @@ type Wishlist = {
825
807
  items?: Array<WishedItem>;
826
808
  };
827
809
 
810
+ interface AuthTokens {
811
+ token: string;
812
+ user: {
813
+ id: string;
814
+ email: string;
815
+ first_name: string | null;
816
+ last_name: string | null;
817
+ };
818
+ }
819
+ interface LoginCredentials {
820
+ email: string;
821
+ password: string;
822
+ }
823
+ interface RegisterParams {
824
+ email: string;
825
+ password: string;
826
+ password_confirmation: string;
827
+ first_name?: string;
828
+ last_name?: string;
829
+ phone?: string;
830
+ accepts_email_marketing?: boolean;
831
+ /** Arbitrary key-value metadata (stored, not returned in responses) */
832
+ metadata?: Record<string, unknown>;
833
+ }
828
834
  interface ProductListParams extends ListParams {
829
835
  /** Sort: 'price', '-price', 'best_selling', 'name', '-name', '-available_on', 'available_on' */
830
836
  sort?: string;
@@ -986,4 +992,4 @@ interface ProductFiltersParams {
986
992
  q?: Record<string, unknown>;
987
993
  }
988
994
 
989
- export { type Image as $, type AuthTokens as A, type CreatePaymentSetupSessionParams as B, type Country as C, type PaymentSetupSession as D, type CompletePaymentSetupSessionParams as E, type WishedItem as F, type GiftCard as G, type RetryConfig as H, type Asset as I, type AvailabilityFilter as J, type Base as K, type LoginCredentials as L, type Market as M, type CustomerReturn as N, type Order as O, type ProductListParams as P, type Digital as Q, type RequestFn as R, type Shipment as S, type Taxonomy as T, type UpdateOrderParams as U, type DigitalLink as V, type Wishlist as W, type ErrorResponse as X, type Export as Y, type FilterOption as Z, type GiftCardBatch as _, type RegisterParams as a, type Import as a0, type ImportRow as a1, type Invitation as a2, type LineItem as a3, type LineItemInput as a4, type LocaleDefaults as a5, type Metafield as a6, type NewsletterSubscriber as a7, type OptionFilter as a8, type OptionFilterOption as a9, type Variant as aA, type TaxonFilter as aB, type TaxonFilterOption as aC, type OptionType as aa, type OptionValue as ab, type OrderPromotion as ac, type PaginationMeta as ad, type PaymentSource as ae, type Price as af, type PriceRangeFilter as ag, type ProductFilter as ah, type Promotion as ai, type Refund as aj, type Reimbursement as ak, type Report as al, type ReturnAuthorization as am, type ReturnItem as an, type ShippingCategory as ao, type ShippingMethod as ap, type ShippingRate as aq, type SortOption as ar, SpreeError as as, type State as at, type StockItem as au, type StockLocation as av, type StockMovement as aw, type StockTransfer as ax, type StoreCredit as ay, type TaxCategory as az, type RequestOptions as b, type PaginatedResponse as c, type Product as d, type ProductFiltersParams as e, type ProductFiltersResponse as f, type ListParams as g, type TaxonListParams as h, type Taxon as i, type ListResponse as j, type Currency as k, type Locale as l, type CreateCartParams as m, type AddLineItemParams as n, type UpdateLineItemParams as o, type Payment as p, type PaymentMethod as q, type CreatePaymentSessionParams as r, type PaymentSession as s, type UpdatePaymentSessionParams as t, type CompletePaymentSessionParams as u, type Customer as v, type Address as w, type AddressParams as x, type CreditCard as y, type OrderListParams as z };
995
+ export { type Image as $, type AuthTokens as A, type CreatePaymentSetupSessionParams as B, type Country as C, type PaymentSetupSession as D, type CompletePaymentSetupSessionParams as E, type WishedItem as F, type GiftCard as G, type RetryConfig as H, type Asset as I, type AvailabilityFilter as J, type Base as K, type LoginCredentials as L, type Market as M, type CustomerReturn as N, type Order as O, type ProductListParams as P, type Digital as Q, type RequestFn as R, type Shipment as S, type Taxonomy as T, type UpdateOrderParams as U, type DigitalLink as V, type Wishlist as W, type ErrorResponse as X, type Export as Y, type FilterOption as Z, type GiftCardBatch as _, type RequestOptions as a, type Import as a0, type ImportRow as a1, type Invitation as a2, type LineItem as a3, type LineItemInput as a4, type LocaleDefaults as a5, type Metafield as a6, type NewsletterSubscriber as a7, type OptionFilter as a8, type OptionFilterOption as a9, type Variant as aA, type TaxonFilter as aB, type TaxonFilterOption as aC, type OptionType as aa, type OptionValue as ab, type OrderPromotion as ac, type PaginationMeta as ad, type PaymentSource as ae, type Price as af, type PriceRangeFilter as ag, type ProductFilter as ah, type Promotion as ai, type Refund as aj, type Reimbursement as ak, type Report as al, type ReturnAuthorization as am, type ReturnItem as an, type ShippingCategory as ao, type ShippingMethod as ap, type ShippingRate as aq, type SortOption as ar, SpreeError as as, type State as at, type StockItem as au, type StockLocation as av, type StockMovement as aw, type StockTransfer as ax, type StoreCredit as ay, type TaxCategory as az, type PaginatedResponse as b, type Product as c, type ProductFiltersParams as d, type ProductFiltersResponse as e, type ListParams as f, type TaxonListParams as g, type Taxon as h, type ListResponse as i, type Currency as j, type Locale as k, type CreateCartParams as l, type AddLineItemParams as m, type UpdateLineItemParams as n, type Payment as o, type PaymentMethod as p, type CreatePaymentSessionParams as q, type PaymentSession as r, type UpdatePaymentSessionParams as s, type CompletePaymentSessionParams as t, type RegisterParams as u, type Customer as v, type Address as w, type AddressParams as x, type CreditCard as y, type OrderListParams as z };
@@ -27,26 +27,6 @@ interface ErrorResponse {
27
27
  details?: Record<string, string[]>;
28
28
  };
29
29
  }
30
- interface AuthTokens {
31
- token: string;
32
- user: {
33
- id: string;
34
- email: string;
35
- first_name: string | null;
36
- last_name: string | null;
37
- };
38
- }
39
- interface LoginCredentials {
40
- email: string;
41
- password: string;
42
- }
43
- interface RegisterParams {
44
- email: string;
45
- password: string;
46
- password_confirmation: string;
47
- first_name?: string;
48
- last_name?: string;
49
- }
50
30
  interface ListParams {
51
31
  page?: number;
52
32
  limit?: number;
@@ -190,6 +170,8 @@ type Customer = {
190
170
  email: string;
191
171
  first_name: string | null;
192
172
  last_name: string | null;
173
+ phone: string | null;
174
+ accepts_email_marketing: boolean;
193
175
  created_at: string;
194
176
  updated_at: string;
195
177
  addresses: Array<Address>;
@@ -825,6 +807,30 @@ type Wishlist = {
825
807
  items?: Array<WishedItem>;
826
808
  };
827
809
 
810
+ interface AuthTokens {
811
+ token: string;
812
+ user: {
813
+ id: string;
814
+ email: string;
815
+ first_name: string | null;
816
+ last_name: string | null;
817
+ };
818
+ }
819
+ interface LoginCredentials {
820
+ email: string;
821
+ password: string;
822
+ }
823
+ interface RegisterParams {
824
+ email: string;
825
+ password: string;
826
+ password_confirmation: string;
827
+ first_name?: string;
828
+ last_name?: string;
829
+ phone?: string;
830
+ accepts_email_marketing?: boolean;
831
+ /** Arbitrary key-value metadata (stored, not returned in responses) */
832
+ metadata?: Record<string, unknown>;
833
+ }
828
834
  interface ProductListParams extends ListParams {
829
835
  /** Sort: 'price', '-price', 'best_selling', 'name', '-name', '-available_on', 'available_on' */
830
836
  sort?: string;
@@ -986,4 +992,4 @@ interface ProductFiltersParams {
986
992
  q?: Record<string, unknown>;
987
993
  }
988
994
 
989
- export { type Image as $, type AuthTokens as A, type CreatePaymentSetupSessionParams as B, type Country as C, type PaymentSetupSession as D, type CompletePaymentSetupSessionParams as E, type WishedItem as F, type GiftCard as G, type RetryConfig as H, type Asset as I, type AvailabilityFilter as J, type Base as K, type LoginCredentials as L, type Market as M, type CustomerReturn as N, type Order as O, type ProductListParams as P, type Digital as Q, type RequestFn as R, type Shipment as S, type Taxonomy as T, type UpdateOrderParams as U, type DigitalLink as V, type Wishlist as W, type ErrorResponse as X, type Export as Y, type FilterOption as Z, type GiftCardBatch as _, type RegisterParams as a, type Import as a0, type ImportRow as a1, type Invitation as a2, type LineItem as a3, type LineItemInput as a4, type LocaleDefaults as a5, type Metafield as a6, type NewsletterSubscriber as a7, type OptionFilter as a8, type OptionFilterOption as a9, type Variant as aA, type TaxonFilter as aB, type TaxonFilterOption as aC, type OptionType as aa, type OptionValue as ab, type OrderPromotion as ac, type PaginationMeta as ad, type PaymentSource as ae, type Price as af, type PriceRangeFilter as ag, type ProductFilter as ah, type Promotion as ai, type Refund as aj, type Reimbursement as ak, type Report as al, type ReturnAuthorization as am, type ReturnItem as an, type ShippingCategory as ao, type ShippingMethod as ap, type ShippingRate as aq, type SortOption as ar, SpreeError as as, type State as at, type StockItem as au, type StockLocation as av, type StockMovement as aw, type StockTransfer as ax, type StoreCredit as ay, type TaxCategory as az, type RequestOptions as b, type PaginatedResponse as c, type Product as d, type ProductFiltersParams as e, type ProductFiltersResponse as f, type ListParams as g, type TaxonListParams as h, type Taxon as i, type ListResponse as j, type Currency as k, type Locale as l, type CreateCartParams as m, type AddLineItemParams as n, type UpdateLineItemParams as o, type Payment as p, type PaymentMethod as q, type CreatePaymentSessionParams as r, type PaymentSession as s, type UpdatePaymentSessionParams as t, type CompletePaymentSessionParams as u, type Customer as v, type Address as w, type AddressParams as x, type CreditCard as y, type OrderListParams as z };
995
+ export { type Image as $, type AuthTokens as A, type CreatePaymentSetupSessionParams as B, type Country as C, type PaymentSetupSession as D, type CompletePaymentSetupSessionParams as E, type WishedItem as F, type GiftCard as G, type RetryConfig as H, type Asset as I, type AvailabilityFilter as J, type Base as K, type LoginCredentials as L, type Market as M, type CustomerReturn as N, type Order as O, type ProductListParams as P, type Digital as Q, type RequestFn as R, type Shipment as S, type Taxonomy as T, type UpdateOrderParams as U, type DigitalLink as V, type Wishlist as W, type ErrorResponse as X, type Export as Y, type FilterOption as Z, type GiftCardBatch as _, type RequestOptions as a, type Import as a0, type ImportRow as a1, type Invitation as a2, type LineItem as a3, type LineItemInput as a4, type LocaleDefaults as a5, type Metafield as a6, type NewsletterSubscriber as a7, type OptionFilter as a8, type OptionFilterOption as a9, type Variant as aA, type TaxonFilter as aB, type TaxonFilterOption as aC, type OptionType as aa, type OptionValue as ab, type OrderPromotion as ac, type PaginationMeta as ad, type PaymentSource as ae, type Price as af, type PriceRangeFilter as ag, type ProductFilter as ah, type Promotion as ai, type Refund as aj, type Reimbursement as ak, type Report as al, type ReturnAuthorization as am, type ReturnItem as an, type ShippingCategory as ao, type ShippingMethod as ap, type ShippingRate as aq, type SortOption as ar, SpreeError as as, type State as at, type StockItem as au, type StockLocation as av, type StockMovement as aw, type StockTransfer as ax, type StoreCredit as ay, type TaxCategory as az, type PaginatedResponse as b, type Product as c, type ProductFiltersParams as d, type ProductFiltersResponse as e, type ListParams as f, type TaxonListParams as g, type Taxon as h, type ListResponse as i, type Currency as j, type Locale as k, type CreateCartParams as l, type AddLineItemParams as m, type UpdateLineItemParams as n, type Payment as o, type PaymentMethod as p, type CreatePaymentSessionParams as q, type PaymentSession as r, type UpdatePaymentSessionParams as s, type CompletePaymentSessionParams as t, type RegisterParams as u, type Customer as v, type Address as w, type AddressParams as x, type CreditCard as y, type OrderListParams as z };
package/dist/index.cjs CHANGED
@@ -174,10 +174,6 @@ var StoreClient = class {
174
174
  * Login with email and password
175
175
  */
176
176
  login: (credentials) => this.request("POST", "/auth/login", { body: credentials }),
177
- /**
178
- * Register a new customer account
179
- */
180
- register: (params) => this.request("POST", "/auth/register", { body: params }),
181
177
  /**
182
178
  * Refresh access token (requires valid Bearer token)
183
179
  */
@@ -568,6 +564,12 @@ var StoreClient = class {
568
564
  // ============================================
569
565
  // Customer
570
566
  // ============================================
567
+ customers = {
568
+ /**
569
+ * Register a new customer account
570
+ */
571
+ create: (params) => this.request("POST", "/customers", { body: params })
572
+ };
571
573
  customer = {
572
574
  /**
573
575
  * Get current customer profile
@@ -1 +1 @@
1
- {"version":3,"sources":["../../sdk-core/src/request.ts","../../sdk-core/src/params.ts","../../sdk-core/src/helpers.ts","../src/store-client.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ErrorResponse, LocaleDefaults } from './types';\n\nexport interface RetryConfig {\n /** Maximum number of retries (default: 2) */\n maxRetries?: number;\n /** HTTP status codes to retry on (default: [429, 500, 502, 503, 504]) */\n retryOnStatus?: number[];\n /** Base delay in ms for exponential backoff (default: 300) */\n baseDelay?: number;\n /** Maximum delay in ms (default: 10000) */\n maxDelay?: number;\n /** Whether to retry on network errors (default: true) */\n retryOnNetworkError?: boolean;\n}\n\nexport interface RequestOptions {\n /** Bearer token for authenticated requests */\n token?: string;\n /** Order token for guest checkout */\n orderToken?: string;\n /** Locale for translated content (e.g., 'en', 'fr') */\n locale?: string;\n /** Currency for prices (e.g., 'USD', 'EUR') */\n currency?: string;\n /** Country ISO code for market resolution (e.g., 'US', 'DE') */\n country?: string;\n /** Idempotency key for safe retries of mutating requests (max 255 characters) */\n idempotencyKey?: string;\n /** Custom headers */\n headers?: Record<string, string>;\n}\n\nexport interface InternalRequestOptions extends RequestOptions {\n body?: unknown;\n params?: Record<string, string | number | boolean | (string | number)[] | undefined>;\n}\n\nexport class SpreeError extends Error {\n public readonly code: string;\n public readonly status: number;\n public readonly details?: Record<string, string[]>;\n\n constructor(response: ErrorResponse, status: number) {\n super(response.error.message);\n this.name = 'SpreeError';\n this.code = response.error.code;\n this.status = status;\n this.details = response.error.details;\n }\n}\n\nexport type RequestFn = <T>(\n method: string,\n path: string,\n options?: InternalRequestOptions\n) => Promise<T>;\n\nfunction calculateDelay(attempt: number, config: Required<RetryConfig>): number {\n const exponentialDelay = config.baseDelay * Math.pow(2, attempt);\n const jitter = Math.random() * config.baseDelay;\n return Math.min(exponentialDelay + jitter, config.maxDelay);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction generateIdempotencyKey(): string {\n return `spree-sdk-retry-${crypto.randomUUID()}`;\n}\n\nfunction shouldRetryOnStatus(method: string, status: number, config: Required<RetryConfig>, hasIdempotencyKey: boolean): boolean {\n const isIdempotent = method === 'GET' || method === 'HEAD' || hasIdempotencyKey;\n if (isIdempotent) {\n return config.retryOnStatus.includes(status);\n }\n return status === 429;\n}\n\nfunction shouldRetryOnNetworkError(method: string, config: Required<RetryConfig>, hasIdempotencyKey: boolean): boolean {\n if (!config.retryOnNetworkError) return false;\n return method === 'GET' || method === 'HEAD' || hasIdempotencyKey;\n}\n\nexport interface RequestConfig {\n baseUrl: string;\n fetchFn: typeof fetch;\n retryConfig: Required<RetryConfig> | false;\n}\n\nexport interface AuthConfig {\n headerName: string;\n headerValue: string;\n}\n\n/**\n * Creates a bound request function for a specific API scope (store or admin).\n */\nexport function createRequestFn(\n config: RequestConfig,\n basePath: string,\n auth: AuthConfig,\n defaults?: LocaleDefaults\n): RequestFn {\n return async function request<T>(\n method: string,\n path: string,\n options: InternalRequestOptions = {}\n ): Promise<T> {\n const { token, orderToken, idempotencyKey, headers = {}, body, params } = options;\n\n // Per-request options override client-level defaults\n const locale = options.locale ?? defaults?.locale;\n const currency = options.currency ?? defaults?.currency;\n const country = options.country ?? defaults?.country;\n\n // Build URL with query params\n const url = new URL(`${config.baseUrl}${basePath}${path}`);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value.forEach((v) => url.searchParams.append(key, String(v)));\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n });\n }\n // Build headers\n const requestHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...headers,\n };\n\n if (auth.headerName && auth.headerValue) {\n requestHeaders[auth.headerName] = auth.headerValue;\n }\n\n if (token) {\n requestHeaders['Authorization'] = `Bearer ${token}`;\n }\n\n if (orderToken) {\n requestHeaders['x-spree-order-token'] = orderToken;\n }\n\n if (locale) {\n requestHeaders['x-spree-locale'] = locale;\n }\n\n if (currency) {\n requestHeaders['x-spree-currency'] = currency;\n }\n\n if (country) {\n requestHeaders['x-spree-country'] = country;\n }\n\n // Auto-generate idempotency key for mutating requests when retries are enabled (Stripe-style).\n // User-supplied keys take precedence over auto-generated ones.\n const isMutating = method !== 'GET' && method !== 'HEAD';\n const effectiveIdempotencyKey = idempotencyKey ?? (isMutating && config.retryConfig ? generateIdempotencyKey() : undefined);\n\n if (effectiveIdempotencyKey) {\n requestHeaders['Idempotency-Key'] = effectiveIdempotencyKey;\n }\n\n const hasIdempotencyKey = !!effectiveIdempotencyKey;\n const maxAttempts = config.retryConfig ? config.retryConfig.maxRetries + 1 : 1;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const response = await config.fetchFn(url.toString(), {\n method,\n headers: requestHeaders,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const isLastAttempt = attempt >= maxAttempts - 1;\n\n if (!isLastAttempt && config.retryConfig && shouldRetryOnStatus(method, response.status, config.retryConfig, hasIdempotencyKey)) {\n const retryAfter = response.headers.get('Retry-After');\n const delay = retryAfter\n ? Math.min(parseInt(retryAfter, 10) * 1000, config.retryConfig.maxDelay)\n : calculateDelay(attempt, config.retryConfig);\n await sleep(delay);\n continue;\n }\n\n const errorBody = await response.json() as ErrorResponse;\n throw new SpreeError(errorBody, response.status);\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n } catch (error) {\n if (error instanceof SpreeError) {\n throw error;\n }\n\n const isLastAttempt = attempt >= maxAttempts - 1;\n\n if (!isLastAttempt && config.retryConfig && shouldRetryOnNetworkError(method, config.retryConfig, hasIdempotencyKey)) {\n const delay = calculateDelay(attempt, config.retryConfig);\n await sleep(delay);\n continue;\n }\n\n throw error;\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw new Error('Unexpected end of retry loop');\n };\n}\n","/**\n * Keys that are passed through to the API without wrapping in q[...].\n */\nconst PASSTHROUGH_KEYS = new Set(['page', 'limit', 'expand', 'sort', 'fields']);\n\ntype ParamValue = string | number | boolean | (string | number)[] | undefined;\n\n/**\n * Transforms flat SDK params into Ransack-compatible query params.\n *\n * - `page`, `limit`, `expand`, `sort` pass through unchanged\n * - Keys already in `q[...]` format pass through (backward compat)\n * - All other keys are wrapped: `name_cont` → `q[name_cont]`\n */\nexport function transformListParams(\n params: Record<string, unknown>\n): Record<string, ParamValue> {\n const result: Record<string, ParamValue> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n\n if (PASSTHROUGH_KEYS.has(key)) {\n // Join arrays for passthrough keys (e.g., expand: ['variants', 'images'] → 'variants,images')\n result[key] = Array.isArray(value) ? (value as (string | number)[]).join(',') : value as ParamValue;\n continue;\n }\n\n // Backward compat: already-wrapped q[...] keys pass through\n if (key.startsWith('q[')) {\n result[key] = value as ParamValue;\n continue;\n }\n\n // Array values get [] suffix automatically: `foo: [1,2]` → `q[foo][]`\n if (Array.isArray(value)) {\n const base = key.endsWith('[]') ? key.slice(0, -2) : key;\n result[`q[${base}][]`] = value as ParamValue;\n } else {\n result[`q[${key}]`] = value as ParamValue;\n }\n }\n\n return result;\n}\n","/** Serialize expand/fields arrays into comma-separated query params */\nexport function getParams(params?: { expand?: string[]; fields?: string[] }): Record<string, string> | undefined {\n if (!params) return undefined;\n const result: Record<string, string> = {};\n if (params.expand?.length) result.expand = params.expand.join(',');\n if (params.fields?.length) result.fields = params.fields.join(',');\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/** Resolve retry config with defaults */\nexport interface ResolvedRetryConfig {\n maxRetries: number;\n retryOnStatus: number[];\n baseDelay: number;\n maxDelay: number;\n retryOnNetworkError: boolean;\n}\n\nexport function resolveRetryConfig(retry?: import('./request').RetryConfig | false): ResolvedRetryConfig | false {\n if (retry === false) return false;\n return {\n maxRetries: retry?.maxRetries ?? 2,\n retryOnStatus: retry?.retryOnStatus ?? [429, 500, 502, 503, 504],\n baseDelay: retry?.baseDelay ?? 300,\n maxDelay: retry?.maxDelay ?? 10000,\n retryOnNetworkError: retry?.retryOnNetworkError ?? true,\n };\n}\n","import type { RequestFn, RequestOptions } from '@spree/sdk-core';\nimport { transformListParams, getParams } from '@spree/sdk-core';\nimport type {\n ListResponse,\n PaginatedResponse,\n ListParams,\n AuthTokens,\n LoginCredentials,\n RegisterParams,\n AddressParams,\n} from '@spree/sdk-core';\nimport type {\n ProductListParams,\n ProductFiltersParams,\n ProductFiltersResponse,\n TaxonListParams,\n OrderListParams,\n CreateCartParams,\n AddLineItemParams,\n UpdateLineItemParams,\n UpdateOrderParams,\n CreatePaymentSessionParams,\n UpdatePaymentSessionParams,\n CompletePaymentSessionParams,\n CreatePaymentSetupSessionParams,\n CompletePaymentSetupSessionParams,\n CreditCard,\n GiftCard,\n Product,\n Order,\n Country,\n Currency,\n Locale,\n Market,\n Taxonomy,\n Taxon,\n Payment,\n PaymentMethod,\n PaymentSession,\n PaymentSetupSession,\n Shipment,\n Wishlist,\n WishedItem,\n Address,\n Customer,\n} from './types';\n\nexport class StoreClient {\n private readonly request: RequestFn;\n\n constructor(request: RequestFn) {\n this.request = request;\n }\n\n // ============================================\n // Authentication\n // ============================================\n\n readonly auth = {\n /**\n * Login with email and password\n */\n login: (credentials: LoginCredentials): Promise<AuthTokens> =>\n this.request<AuthTokens>('POST', '/auth/login', { body: credentials }),\n\n /**\n * Register a new customer account\n */\n register: (params: RegisterParams): Promise<AuthTokens> =>\n this.request<AuthTokens>('POST', '/auth/register', { body: params }),\n\n /**\n * Refresh access token (requires valid Bearer token)\n */\n refresh: (options: RequestOptions): Promise<AuthTokens> =>\n this.request<AuthTokens>('POST', '/auth/refresh', options),\n };\n\n // ============================================\n // Products\n // ============================================\n\n readonly products = {\n /**\n * List products\n */\n list: (\n params?: ProductListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Product>> =>\n this.request<PaginatedResponse<Product>>('GET', '/products', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a product by ID or slug\n */\n get: (\n idOrSlug: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Product> =>\n this.request<Product>('GET', `/products/${idOrSlug}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Get available filters for products\n * Returns filter options (price range, availability, option types, taxons) with counts\n */\n filters: (\n params?: ProductFiltersParams,\n options?: RequestOptions\n ): Promise<ProductFiltersResponse> =>\n this.request<ProductFiltersResponse>('GET', '/products/filters', {\n ...options,\n params: params as Record<string, string | number | undefined>,\n }),\n };\n\n // ============================================\n // Taxonomies & Taxons\n // ============================================\n\n readonly taxonomies = {\n /**\n * List taxonomies\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Taxonomy>> =>\n this.request<PaginatedResponse<Taxonomy>>('GET', '/taxonomies', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a taxonomy by ID\n */\n get: (\n id: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Taxonomy> =>\n this.request<Taxonomy>('GET', `/taxonomies/${id}`, {\n ...options,\n params: getParams(params),\n }),\n };\n\n readonly taxons = {\n /**\n * List taxons\n */\n list: (\n params?: TaxonListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Taxon>> =>\n this.request<PaginatedResponse<Taxon>>('GET', '/taxons', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a taxon by ID or permalink\n */\n get: (\n idOrPermalink: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Taxon> =>\n this.request<Taxon>('GET', `/taxons/${idOrPermalink}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Nested resource: Products in a taxon\n */\n products: {\n /**\n * List products in a taxon\n * @param taxonId - Taxon ID (prefix_id) or permalink\n */\n list: (\n taxonId: string,\n params?: ProductListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Product>> =>\n this.request<PaginatedResponse<Product>>(\n 'GET',\n `/taxons/${taxonId}/products`,\n {\n ...options,\n params: transformListParams({ ...params }),\n }\n ),\n },\n };\n\n // ============================================\n // Countries, Currencies & Locales\n // ============================================\n\n readonly countries = {\n /**\n * List countries available in the store\n * Each country includes currency and default_locale derived from its market\n */\n list: (options?: RequestOptions): Promise<ListResponse<Country>> =>\n this.request<ListResponse<Country>>('GET', '/countries', options),\n\n /**\n * Get a country by ISO code\n * Use `?expand=states` to expand states for address forms\n * @param iso - ISO 3166-1 alpha-2 code (e.g., \"US\", \"DE\")\n */\n get: (\n iso: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Country> =>\n this.request<Country>('GET', `/countries/${iso}`, {\n ...options,\n params: getParams(params),\n }),\n };\n\n readonly currencies = {\n /**\n * List currencies supported by the store (derived from markets)\n */\n list: (options?: RequestOptions): Promise<ListResponse<Currency>> =>\n this.request<ListResponse<Currency>>('GET', '/currencies', options),\n };\n\n readonly locales = {\n /**\n * List locales supported by the store (derived from markets)\n */\n list: (options?: RequestOptions): Promise<ListResponse<Locale>> =>\n this.request<ListResponse<Locale>>('GET', '/locales', options),\n };\n\n // ============================================\n // Markets\n // ============================================\n\n readonly markets = {\n /**\n * List all markets for the current store\n */\n list: (options?: RequestOptions): Promise<ListResponse<Market>> =>\n this.request<ListResponse<Market>>('GET', '/markets', options),\n\n /**\n * Get a market by prefixed ID\n * @param id - Market prefixed ID (e.g., \"mkt_k5nR8xLq\")\n */\n get: (id: string, options?: RequestOptions): Promise<Market> =>\n this.request<Market>('GET', `/markets/${id}`, options),\n\n /**\n * Resolve which market applies for a given country\n * @param country - ISO 3166-1 alpha-2 code (e.g., \"DE\", \"US\")\n */\n resolve: (country: string, options?: RequestOptions): Promise<Market> =>\n this.request<Market>('GET', '/markets/resolve', {\n ...options,\n params: { country },\n }),\n\n /**\n * Nested resource: Countries in a market\n */\n countries: {\n /**\n * List countries belonging to a market\n * @param marketId - Market prefixed ID\n */\n list: (\n marketId: string,\n options?: RequestOptions\n ): Promise<ListResponse<Country>> =>\n this.request<ListResponse<Country>>(\n 'GET',\n `/markets/${marketId}/countries`,\n options\n ),\n\n /**\n * Get a country by ISO code within a market\n * @param marketId - Market prefixed ID\n * @param iso - Country ISO code (e.g., \"DE\")\n */\n get: (\n marketId: string,\n iso: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Country> =>\n this.request<Country>(\n 'GET',\n `/markets/${marketId}/countries/${iso}`,\n { ...options, params: getParams(params) }\n ),\n },\n };\n\n // ============================================\n // Cart (convenience wrapper for current incomplete order)\n // ============================================\n\n readonly cart = {\n /**\n * Get current cart (returns null if none exists)\n * Pass orderToken for guest checkout, or use JWT for authenticated users\n */\n get: (options?: RequestOptions): Promise<Order & { token: string }> =>\n this.request<Order & { token: string }>('GET', '/cart', options),\n\n /**\n * Create a new cart\n * @param params - Optional cart parameters (e.g., metadata)\n */\n create: (params?: CreateCartParams, options?: RequestOptions): Promise<Order & { token: string }> =>\n this.request<Order & { token: string }>('POST', '/cart', {\n ...options,\n body: params,\n }),\n\n /**\n * Associate a guest cart with the currently authenticated user\n * Requires both JWT token (for authentication) and orderToken (to identify the cart)\n * @param options - Must include both `token` (JWT) and `orderToken` (guest cart token)\n */\n associate: (options: RequestOptions): Promise<Order & { token: string }> =>\n this.request<Order & { token: string }>('PATCH', '/cart/associate', options),\n };\n\n // ============================================\n // Orders (individual order management & checkout)\n // ============================================\n\n readonly orders = {\n /**\n * Get an order by ID or number\n */\n get: (\n idOrNumber: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('GET', `/orders/${idOrNumber}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Update an order\n */\n update: (\n idOrNumber: string,\n params: UpdateOrderParams,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('PATCH', `/orders/${idOrNumber}`, {\n ...options,\n body: params,\n }),\n\n /**\n * Advance order to next checkout step\n */\n next: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('PATCH', `/orders/${idOrNumber}/next`, options),\n\n /**\n * Advance through all checkout steps\n */\n advance: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${idOrNumber}/advance`,\n options\n ),\n\n /**\n * Complete the order\n */\n complete: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${idOrNumber}/complete`,\n options\n ),\n\n /**\n * Add store credit to order\n */\n addStoreCredit: (\n idOrNumber: string,\n amount?: number,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('POST', `/orders/${idOrNumber}/store_credits`, {\n ...options,\n body: amount ? { amount } : undefined,\n }),\n\n /**\n * Remove store credit from order\n */\n removeStoreCredit: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'DELETE',\n `/orders/${idOrNumber}/store_credits`,\n options\n ),\n\n /**\n * Nested resource: Line items\n */\n lineItems: {\n /**\n * Add a line item to an order.\n * Returns the updated order with recalculated totals.\n */\n create: (\n orderId: string,\n params: AddLineItemParams,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('POST', `/orders/${orderId}/line_items`, {\n ...options,\n body: params,\n }),\n\n /**\n * Update a line item quantity.\n * Returns the updated order with recalculated totals.\n */\n update: (\n orderId: string,\n lineItemId: string,\n params: UpdateLineItemParams,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${orderId}/line_items/${lineItemId}`,\n { ...options, body: params }\n ),\n\n /**\n * Remove a line item from an order.\n * Returns the updated order with recalculated totals.\n */\n delete: (\n orderId: string,\n lineItemId: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'DELETE',\n `/orders/${orderId}/line_items/${lineItemId}`,\n options\n ),\n },\n\n /**\n * Nested resource: Payments\n */\n payments: {\n /**\n * List payments for an order\n */\n list: (\n orderId: string,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Payment>> =>\n this.request<PaginatedResponse<Payment>>(\n 'GET',\n `/orders/${orderId}/payments`,\n options\n ),\n\n /**\n * Get a payment by ID\n */\n get: (\n orderId: string,\n paymentId: string,\n options?: RequestOptions\n ): Promise<Payment> =>\n this.request<Payment>(\n 'GET',\n `/orders/${orderId}/payments/${paymentId}`,\n options\n ),\n },\n\n /**\n * Nested resource: Payment methods\n */\n paymentMethods: {\n /**\n * List available payment methods for an order\n */\n list: (\n orderId: string,\n options?: RequestOptions\n ): Promise<ListResponse<PaymentMethod>> =>\n this.request<ListResponse<PaymentMethod>>(\n 'GET',\n `/orders/${orderId}/payment_methods`,\n options\n ),\n },\n\n /**\n * Nested resource: Payment sessions\n */\n paymentSessions: {\n /**\n * Create a payment session for an order\n * Delegates to the payment gateway to initialize a provider-specific session\n */\n create: (\n orderId: string,\n params: CreatePaymentSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'POST',\n `/orders/${orderId}/payment_sessions`,\n { ...options, body: params }\n ),\n\n /**\n * Get a payment session by ID\n */\n get: (\n orderId: string,\n sessionId: string,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'GET',\n `/orders/${orderId}/payment_sessions/${sessionId}`,\n options\n ),\n\n /**\n * Update a payment session\n * Delegates to the payment gateway to sync changes with the provider\n */\n update: (\n orderId: string,\n sessionId: string,\n params: UpdatePaymentSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'PATCH',\n `/orders/${orderId}/payment_sessions/${sessionId}`,\n { ...options, body: params }\n ),\n\n /**\n * Complete a payment session\n * Confirms the payment with the provider, triggering capture/authorization\n */\n complete: (\n orderId: string,\n sessionId: string,\n params?: CompletePaymentSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'PATCH',\n `/orders/${orderId}/payment_sessions/${sessionId}/complete`,\n { ...options, body: params }\n ),\n },\n\n /**\n * Nested resource: Coupon codes\n */\n couponCodes: {\n /**\n * Apply a coupon code to an order\n */\n apply: (\n orderId: string,\n code: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('POST', `/orders/${orderId}/coupon_codes`, {\n ...options,\n body: { code },\n }),\n\n /**\n * Remove a coupon code from an order\n * @param promotionId - The promotion prefix_id (e.g., 'promo_xxx')\n */\n remove: (\n orderId: string,\n promotionId: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'DELETE',\n `/orders/${orderId}/coupon_codes/${promotionId}`,\n options\n ),\n },\n\n /**\n * Nested resource: Shipments\n */\n shipments: {\n /**\n * List shipments for an order\n */\n list: (\n orderId: string,\n options?: RequestOptions\n ): Promise<ListResponse<Shipment>> =>\n this.request<ListResponse<Shipment>>(\n 'GET',\n `/orders/${orderId}/shipments`,\n options\n ),\n\n /**\n * Select a shipping rate for a shipment.\n * Returns the updated order with recalculated totals.\n */\n update: (\n orderId: string,\n shipmentId: string,\n params: { selected_shipping_rate_id: string },\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${orderId}/shipments/${shipmentId}`,\n { ...options, body: params }\n ),\n },\n };\n\n // ============================================\n // Customer\n // ============================================\n\n readonly customer = {\n /**\n * Get current customer profile\n */\n get: (options?: RequestOptions): Promise<Customer> =>\n this.request<Customer>('GET', '/customer', options),\n\n /**\n * Update current customer profile\n */\n update: (\n params: {\n first_name?: string\n last_name?: string\n email?: string\n password?: string\n password_confirmation?: string\n accepts_email_marketing?: boolean\n phone?: string\n },\n options?: RequestOptions\n ): Promise<Customer> =>\n this.request<Customer>('PATCH', '/customer', {\n ...options,\n body: params,\n }),\n\n /**\n * Nested resource: Addresses\n */\n addresses: {\n /**\n * List customer addresses\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Address>> =>\n this.request<PaginatedResponse<Address>>(\n 'GET',\n '/customer/addresses',\n { ...options, params: transformListParams({ ...params }) }\n ),\n\n /**\n * Get an address by ID\n */\n get: (id: string, options?: RequestOptions): Promise<Address> =>\n this.request<Address>('GET', `/customer/addresses/${id}`, options),\n\n /**\n * Create an address\n */\n create: (\n params: AddressParams,\n options?: RequestOptions\n ): Promise<Address> =>\n this.request<Address>('POST', '/customer/addresses', {\n ...options,\n body: params,\n }),\n\n /**\n * Update an address\n */\n update: (\n id: string,\n params: Partial<AddressParams>,\n options?: RequestOptions\n ): Promise<Address> =>\n this.request<Address>('PATCH', `/customer/addresses/${id}`, {\n ...options,\n body: params,\n }),\n\n /**\n * Delete an address\n */\n delete: (id: string, options?: RequestOptions): Promise<void> =>\n this.request<void>('DELETE', `/customer/addresses/${id}`, options),\n\n /**\n * Mark an address as default billing or shipping\n */\n markAsDefault: (\n id: string,\n kind: 'billing' | 'shipping',\n options?: RequestOptions\n ): Promise<Address> =>\n this.request<Address>('PATCH', `/customer/addresses/${id}/mark_as_default`, {\n ...options,\n body: { kind },\n }),\n },\n\n /**\n * Nested resource: Credit Cards\n */\n creditCards: {\n /**\n * List customer credit cards\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<CreditCard>> =>\n this.request<PaginatedResponse<CreditCard>>(\n 'GET',\n '/customer/credit_cards',\n { ...options, params: transformListParams({ ...params }) }\n ),\n\n /**\n * Get a credit card by ID\n */\n get: (id: string, options?: RequestOptions): Promise<CreditCard> =>\n this.request<CreditCard>('GET', `/customer/credit_cards/${id}`, options),\n\n /**\n * Delete a credit card\n */\n delete: (id: string, options?: RequestOptions): Promise<void> =>\n this.request<void>('DELETE', `/customer/credit_cards/${id}`, options),\n },\n\n /**\n * Nested resource: Gift Cards\n */\n giftCards: {\n /**\n * List customer gift cards\n * Returns gift cards associated with the current user, ordered by newest first\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<GiftCard>> =>\n this.request<PaginatedResponse<GiftCard>>(\n 'GET',\n '/customer/gift_cards',\n { ...options, params: transformListParams({ ...params }) }\n ),\n\n /**\n * Get a gift card by ID\n */\n get: (id: string, options?: RequestOptions): Promise<GiftCard> =>\n this.request<GiftCard>('GET', `/customer/gift_cards/${id}`, options),\n },\n\n /**\n * Nested resource: Orders (customer order history)\n */\n orders: {\n /**\n * List orders for the authenticated customer\n */\n list: (\n params?: OrderListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Order>> =>\n this.request<PaginatedResponse<Order>>('GET', '/customer/orders', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n },\n\n /**\n * Nested resource: Payment Setup Sessions (save payment methods for future use)\n */\n paymentSetupSessions: {\n /**\n * Create a payment setup session\n * Delegates to the payment gateway to initialize a setup flow for saving a payment method\n */\n create: (\n params: CreatePaymentSetupSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSetupSession> =>\n this.request<PaymentSetupSession>(\n 'POST',\n '/customer/payment_setup_sessions',\n { ...options, body: params }\n ),\n\n /**\n * Get a payment setup session by ID\n */\n get: (id: string, options?: RequestOptions): Promise<PaymentSetupSession> =>\n this.request<PaymentSetupSession>('GET', `/customer/payment_setup_sessions/${id}`, options),\n\n /**\n * Complete a payment setup session\n * Confirms the setup with the provider, resulting in a saved payment method\n */\n complete: (\n id: string,\n params?: CompletePaymentSetupSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSetupSession> =>\n this.request<PaymentSetupSession>(\n 'PATCH',\n `/customer/payment_setup_sessions/${id}/complete`,\n { ...options, body: params }\n ),\n },\n };\n\n // ============================================\n // Wishlists\n // ============================================\n\n readonly wishlists = {\n /**\n * List wishlists\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Wishlist>> =>\n this.request<PaginatedResponse<Wishlist>>('GET', '/wishlists', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a wishlist by ID\n */\n get: (\n id: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Wishlist> =>\n this.request<Wishlist>('GET', `/wishlists/${id}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Create a wishlist\n */\n create: (\n params: { name: string; is_private?: boolean; is_default?: boolean },\n options?: RequestOptions\n ): Promise<Wishlist> =>\n this.request<Wishlist>('POST', '/wishlists', {\n ...options,\n body: params,\n }),\n\n /**\n * Update a wishlist\n */\n update: (\n id: string,\n params: { name?: string; is_private?: boolean; is_default?: boolean },\n options?: RequestOptions\n ): Promise<Wishlist> =>\n this.request<Wishlist>('PATCH', `/wishlists/${id}`, {\n ...options,\n body: params,\n }),\n\n /**\n * Delete a wishlist\n */\n delete: (id: string, options?: RequestOptions): Promise<void> =>\n this.request<void>('DELETE', `/wishlists/${id}`, options),\n\n /**\n * Nested resource: Wishlist items\n */\n items: {\n /**\n * Add an item to a wishlist\n */\n create: (\n wishlistId: string,\n params: { variant_id: string; quantity?: number },\n options?: RequestOptions\n ): Promise<WishedItem> =>\n this.request<WishedItem>('POST', `/wishlists/${wishlistId}/items`, {\n ...options,\n body: params,\n }),\n\n /**\n * Update a wishlist item\n */\n update: (\n wishlistId: string,\n itemId: string,\n params: { quantity: number },\n options?: RequestOptions\n ): Promise<WishedItem> =>\n this.request<WishedItem>(\n 'PATCH',\n `/wishlists/${wishlistId}/items/${itemId}`,\n { ...options, body: params }\n ),\n\n /**\n * Remove an item from a wishlist\n */\n delete: (\n wishlistId: string,\n itemId: string,\n options?: RequestOptions\n ): Promise<void> =>\n this.request<void>(\n 'DELETE',\n `/wishlists/${wishlistId}/items/${itemId}`,\n options\n ),\n },\n };\n}\n","import { createRequestFn, resolveRetryConfig } from '@spree/sdk-core';\nimport type { RetryConfig, RequestConfig, LocaleDefaults } from '@spree/sdk-core';\nimport { StoreClient } from './store-client';\n\nexport interface ClientConfig {\n /** Base URL of the Spree API (e.g., 'https://api.mystore.com') */\n baseUrl: string;\n /** Publishable API key for Store API access */\n publishableKey: string;\n /** Custom fetch implementation (optional, defaults to global fetch) */\n fetch?: typeof fetch;\n /** Retry configuration. Enabled by default. Pass false to disable. */\n retry?: RetryConfig | false;\n /** Default locale for API requests (e.g., 'fr') */\n locale?: string;\n /** Default currency for API requests (e.g., 'EUR') */\n currency?: string;\n /** Default country ISO code for market resolution (e.g., 'FR') */\n country?: string;\n}\n\nexport interface Client extends StoreClient {\n /** Set default locale for all subsequent requests */\n setLocale(locale: string): void;\n /** Set default currency for all subsequent requests */\n setCurrency(currency: string): void;\n /** Set default country for all subsequent requests */\n setCountry(country: string): void;\n}\n\n/**\n * Create a new Spree Store SDK client.\n *\n * Returns a flat client with all store resources directly accessible:\n * ```ts\n * const client = createClient({ baseUrl: '...', publishableKey: '...' })\n * client.products.list()\n * client.cart.create()\n * client.orders.get('order_1')\n * ```\n */\nexport function createClient(config: ClientConfig): Client {\n const baseUrl = config.baseUrl.replace(/\\/$/, '');\n const fetchFn = config.fetch || fetch.bind(globalThis);\n\n const defaults: LocaleDefaults = {\n locale: config.locale,\n currency: config.currency,\n country: config.country,\n };\n\n const retryConfig = resolveRetryConfig(config.retry);\n\n const requestConfig: RequestConfig = { baseUrl, fetchFn, retryConfig };\n\n const requestFn = createRequestFn(\n requestConfig,\n '/api/v3/store',\n { headerName: 'x-spree-api-key', headerValue: config.publishableKey },\n defaults\n );\n\n const storeClient = new StoreClient(requestFn);\n\n // Build the flat client by spreading StoreClient's prototype methods/properties\n // and adding locale/currency/country setters\n const client = Object.create(storeClient) as Client;\n\n client.setLocale = (locale: string) => {\n defaults.locale = locale;\n };\n client.setCurrency = (currency: string) => {\n defaults.currency = currency;\n };\n client.setCountry = (country: string) => {\n defaults.country = country;\n };\n\n return client;\n}\n"]}
1
+ {"version":3,"sources":["../../sdk-core/src/request.ts","../../sdk-core/src/params.ts","../../sdk-core/src/helpers.ts","../src/store-client.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ErrorResponse, LocaleDefaults } from './types';\n\nexport interface RetryConfig {\n /** Maximum number of retries (default: 2) */\n maxRetries?: number;\n /** HTTP status codes to retry on (default: [429, 500, 502, 503, 504]) */\n retryOnStatus?: number[];\n /** Base delay in ms for exponential backoff (default: 300) */\n baseDelay?: number;\n /** Maximum delay in ms (default: 10000) */\n maxDelay?: number;\n /** Whether to retry on network errors (default: true) */\n retryOnNetworkError?: boolean;\n}\n\nexport interface RequestOptions {\n /** Bearer token for authenticated requests */\n token?: string;\n /** Order token for guest checkout */\n orderToken?: string;\n /** Locale for translated content (e.g., 'en', 'fr') */\n locale?: string;\n /** Currency for prices (e.g., 'USD', 'EUR') */\n currency?: string;\n /** Country ISO code for market resolution (e.g., 'US', 'DE') */\n country?: string;\n /** Idempotency key for safe retries of mutating requests (max 255 characters) */\n idempotencyKey?: string;\n /** Custom headers */\n headers?: Record<string, string>;\n}\n\nexport interface InternalRequestOptions extends RequestOptions {\n body?: unknown;\n params?: Record<string, string | number | boolean | (string | number)[] | undefined>;\n}\n\nexport class SpreeError extends Error {\n public readonly code: string;\n public readonly status: number;\n public readonly details?: Record<string, string[]>;\n\n constructor(response: ErrorResponse, status: number) {\n super(response.error.message);\n this.name = 'SpreeError';\n this.code = response.error.code;\n this.status = status;\n this.details = response.error.details;\n }\n}\n\nexport type RequestFn = <T>(\n method: string,\n path: string,\n options?: InternalRequestOptions\n) => Promise<T>;\n\nfunction calculateDelay(attempt: number, config: Required<RetryConfig>): number {\n const exponentialDelay = config.baseDelay * Math.pow(2, attempt);\n const jitter = Math.random() * config.baseDelay;\n return Math.min(exponentialDelay + jitter, config.maxDelay);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction generateIdempotencyKey(): string {\n return `spree-sdk-retry-${crypto.randomUUID()}`;\n}\n\nfunction shouldRetryOnStatus(method: string, status: number, config: Required<RetryConfig>, hasIdempotencyKey: boolean): boolean {\n const isIdempotent = method === 'GET' || method === 'HEAD' || hasIdempotencyKey;\n if (isIdempotent) {\n return config.retryOnStatus.includes(status);\n }\n return status === 429;\n}\n\nfunction shouldRetryOnNetworkError(method: string, config: Required<RetryConfig>, hasIdempotencyKey: boolean): boolean {\n if (!config.retryOnNetworkError) return false;\n return method === 'GET' || method === 'HEAD' || hasIdempotencyKey;\n}\n\nexport interface RequestConfig {\n baseUrl: string;\n fetchFn: typeof fetch;\n retryConfig: Required<RetryConfig> | false;\n}\n\nexport interface AuthConfig {\n headerName: string;\n headerValue: string;\n}\n\n/**\n * Creates a bound request function for a specific API scope (store or admin).\n */\nexport function createRequestFn(\n config: RequestConfig,\n basePath: string,\n auth: AuthConfig,\n defaults?: LocaleDefaults\n): RequestFn {\n return async function request<T>(\n method: string,\n path: string,\n options: InternalRequestOptions = {}\n ): Promise<T> {\n const { token, orderToken, idempotencyKey, headers = {}, body, params } = options;\n\n // Per-request options override client-level defaults\n const locale = options.locale ?? defaults?.locale;\n const currency = options.currency ?? defaults?.currency;\n const country = options.country ?? defaults?.country;\n\n // Build URL with query params\n const url = new URL(`${config.baseUrl}${basePath}${path}`);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value.forEach((v) => url.searchParams.append(key, String(v)));\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n });\n }\n // Build headers\n const requestHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...headers,\n };\n\n if (auth.headerName && auth.headerValue) {\n requestHeaders[auth.headerName] = auth.headerValue;\n }\n\n if (token) {\n requestHeaders['Authorization'] = `Bearer ${token}`;\n }\n\n if (orderToken) {\n requestHeaders['x-spree-order-token'] = orderToken;\n }\n\n if (locale) {\n requestHeaders['x-spree-locale'] = locale;\n }\n\n if (currency) {\n requestHeaders['x-spree-currency'] = currency;\n }\n\n if (country) {\n requestHeaders['x-spree-country'] = country;\n }\n\n // Auto-generate idempotency key for mutating requests when retries are enabled (Stripe-style).\n // User-supplied keys take precedence over auto-generated ones.\n const isMutating = method !== 'GET' && method !== 'HEAD';\n const effectiveIdempotencyKey = idempotencyKey ?? (isMutating && config.retryConfig ? generateIdempotencyKey() : undefined);\n\n if (effectiveIdempotencyKey) {\n requestHeaders['Idempotency-Key'] = effectiveIdempotencyKey;\n }\n\n const hasIdempotencyKey = !!effectiveIdempotencyKey;\n const maxAttempts = config.retryConfig ? config.retryConfig.maxRetries + 1 : 1;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const response = await config.fetchFn(url.toString(), {\n method,\n headers: requestHeaders,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const isLastAttempt = attempt >= maxAttempts - 1;\n\n if (!isLastAttempt && config.retryConfig && shouldRetryOnStatus(method, response.status, config.retryConfig, hasIdempotencyKey)) {\n const retryAfter = response.headers.get('Retry-After');\n const delay = retryAfter\n ? Math.min(parseInt(retryAfter, 10) * 1000, config.retryConfig.maxDelay)\n : calculateDelay(attempt, config.retryConfig);\n await sleep(delay);\n continue;\n }\n\n const errorBody = await response.json() as ErrorResponse;\n throw new SpreeError(errorBody, response.status);\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n } catch (error) {\n if (error instanceof SpreeError) {\n throw error;\n }\n\n const isLastAttempt = attempt >= maxAttempts - 1;\n\n if (!isLastAttempt && config.retryConfig && shouldRetryOnNetworkError(method, config.retryConfig, hasIdempotencyKey)) {\n const delay = calculateDelay(attempt, config.retryConfig);\n await sleep(delay);\n continue;\n }\n\n throw error;\n }\n }\n\n // This should never be reached, but TypeScript needs it\n throw new Error('Unexpected end of retry loop');\n };\n}\n","/**\n * Keys that are passed through to the API without wrapping in q[...].\n */\nconst PASSTHROUGH_KEYS = new Set(['page', 'limit', 'expand', 'sort', 'fields']);\n\ntype ParamValue = string | number | boolean | (string | number)[] | undefined;\n\n/**\n * Transforms flat SDK params into Ransack-compatible query params.\n *\n * - `page`, `limit`, `expand`, `sort` pass through unchanged\n * - Keys already in `q[...]` format pass through (backward compat)\n * - All other keys are wrapped: `name_cont` → `q[name_cont]`\n */\nexport function transformListParams(\n params: Record<string, unknown>\n): Record<string, ParamValue> {\n const result: Record<string, ParamValue> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n\n if (PASSTHROUGH_KEYS.has(key)) {\n // Join arrays for passthrough keys (e.g., expand: ['variants', 'images'] → 'variants,images')\n result[key] = Array.isArray(value) ? (value as (string | number)[]).join(',') : value as ParamValue;\n continue;\n }\n\n // Backward compat: already-wrapped q[...] keys pass through\n if (key.startsWith('q[')) {\n result[key] = value as ParamValue;\n continue;\n }\n\n // Array values get [] suffix automatically: `foo: [1,2]` → `q[foo][]`\n if (Array.isArray(value)) {\n const base = key.endsWith('[]') ? key.slice(0, -2) : key;\n result[`q[${base}][]`] = value as ParamValue;\n } else {\n result[`q[${key}]`] = value as ParamValue;\n }\n }\n\n return result;\n}\n","/** Serialize expand/fields arrays into comma-separated query params */\nexport function getParams(params?: { expand?: string[]; fields?: string[] }): Record<string, string> | undefined {\n if (!params) return undefined;\n const result: Record<string, string> = {};\n if (params.expand?.length) result.expand = params.expand.join(',');\n if (params.fields?.length) result.fields = params.fields.join(',');\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/** Resolve retry config with defaults */\nexport interface ResolvedRetryConfig {\n maxRetries: number;\n retryOnStatus: number[];\n baseDelay: number;\n maxDelay: number;\n retryOnNetworkError: boolean;\n}\n\nexport function resolveRetryConfig(retry?: import('./request').RetryConfig | false): ResolvedRetryConfig | false {\n if (retry === false) return false;\n return {\n maxRetries: retry?.maxRetries ?? 2,\n retryOnStatus: retry?.retryOnStatus ?? [429, 500, 502, 503, 504],\n baseDelay: retry?.baseDelay ?? 300,\n maxDelay: retry?.maxDelay ?? 10000,\n retryOnNetworkError: retry?.retryOnNetworkError ?? true,\n };\n}\n","import type { RequestFn, RequestOptions } from '@spree/sdk-core';\nimport { transformListParams, getParams } from '@spree/sdk-core';\nimport type {\n ListResponse,\n PaginatedResponse,\n ListParams,\n AddressParams,\n} from '@spree/sdk-core';\nimport type {\n AuthTokens,\n LoginCredentials,\n RegisterParams,\n ProductListParams,\n ProductFiltersParams,\n ProductFiltersResponse,\n TaxonListParams,\n OrderListParams,\n CreateCartParams,\n AddLineItemParams,\n UpdateLineItemParams,\n UpdateOrderParams,\n CreatePaymentSessionParams,\n UpdatePaymentSessionParams,\n CompletePaymentSessionParams,\n CreatePaymentSetupSessionParams,\n CompletePaymentSetupSessionParams,\n CreditCard,\n GiftCard,\n Product,\n Order,\n Country,\n Currency,\n Locale,\n Market,\n Taxonomy,\n Taxon,\n Payment,\n PaymentMethod,\n PaymentSession,\n PaymentSetupSession,\n Shipment,\n Wishlist,\n WishedItem,\n Address,\n Customer,\n} from './types';\n\nexport class StoreClient {\n private readonly request: RequestFn;\n\n constructor(request: RequestFn) {\n this.request = request;\n }\n\n // ============================================\n // Authentication\n // ============================================\n\n readonly auth = {\n /**\n * Login with email and password\n */\n login: (credentials: LoginCredentials): Promise<AuthTokens> =>\n this.request<AuthTokens>('POST', '/auth/login', { body: credentials }),\n\n /**\n * Refresh access token (requires valid Bearer token)\n */\n refresh: (options: RequestOptions): Promise<AuthTokens> =>\n this.request<AuthTokens>('POST', '/auth/refresh', options),\n };\n\n // ============================================\n // Products\n // ============================================\n\n readonly products = {\n /**\n * List products\n */\n list: (\n params?: ProductListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Product>> =>\n this.request<PaginatedResponse<Product>>('GET', '/products', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a product by ID or slug\n */\n get: (\n idOrSlug: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Product> =>\n this.request<Product>('GET', `/products/${idOrSlug}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Get available filters for products\n * Returns filter options (price range, availability, option types, taxons) with counts\n */\n filters: (\n params?: ProductFiltersParams,\n options?: RequestOptions\n ): Promise<ProductFiltersResponse> =>\n this.request<ProductFiltersResponse>('GET', '/products/filters', {\n ...options,\n params: params as Record<string, string | number | undefined>,\n }),\n };\n\n // ============================================\n // Taxonomies & Taxons\n // ============================================\n\n readonly taxonomies = {\n /**\n * List taxonomies\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Taxonomy>> =>\n this.request<PaginatedResponse<Taxonomy>>('GET', '/taxonomies', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a taxonomy by ID\n */\n get: (\n id: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Taxonomy> =>\n this.request<Taxonomy>('GET', `/taxonomies/${id}`, {\n ...options,\n params: getParams(params),\n }),\n };\n\n readonly taxons = {\n /**\n * List taxons\n */\n list: (\n params?: TaxonListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Taxon>> =>\n this.request<PaginatedResponse<Taxon>>('GET', '/taxons', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a taxon by ID or permalink\n */\n get: (\n idOrPermalink: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Taxon> =>\n this.request<Taxon>('GET', `/taxons/${idOrPermalink}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Nested resource: Products in a taxon\n */\n products: {\n /**\n * List products in a taxon\n * @param taxonId - Taxon ID (prefix_id) or permalink\n */\n list: (\n taxonId: string,\n params?: ProductListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Product>> =>\n this.request<PaginatedResponse<Product>>(\n 'GET',\n `/taxons/${taxonId}/products`,\n {\n ...options,\n params: transformListParams({ ...params }),\n }\n ),\n },\n };\n\n // ============================================\n // Countries, Currencies & Locales\n // ============================================\n\n readonly countries = {\n /**\n * List countries available in the store\n * Each country includes currency and default_locale derived from its market\n */\n list: (options?: RequestOptions): Promise<ListResponse<Country>> =>\n this.request<ListResponse<Country>>('GET', '/countries', options),\n\n /**\n * Get a country by ISO code\n * Use `?expand=states` to expand states for address forms\n * @param iso - ISO 3166-1 alpha-2 code (e.g., \"US\", \"DE\")\n */\n get: (\n iso: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Country> =>\n this.request<Country>('GET', `/countries/${iso}`, {\n ...options,\n params: getParams(params),\n }),\n };\n\n readonly currencies = {\n /**\n * List currencies supported by the store (derived from markets)\n */\n list: (options?: RequestOptions): Promise<ListResponse<Currency>> =>\n this.request<ListResponse<Currency>>('GET', '/currencies', options),\n };\n\n readonly locales = {\n /**\n * List locales supported by the store (derived from markets)\n */\n list: (options?: RequestOptions): Promise<ListResponse<Locale>> =>\n this.request<ListResponse<Locale>>('GET', '/locales', options),\n };\n\n // ============================================\n // Markets\n // ============================================\n\n readonly markets = {\n /**\n * List all markets for the current store\n */\n list: (options?: RequestOptions): Promise<ListResponse<Market>> =>\n this.request<ListResponse<Market>>('GET', '/markets', options),\n\n /**\n * Get a market by prefixed ID\n * @param id - Market prefixed ID (e.g., \"mkt_k5nR8xLq\")\n */\n get: (id: string, options?: RequestOptions): Promise<Market> =>\n this.request<Market>('GET', `/markets/${id}`, options),\n\n /**\n * Resolve which market applies for a given country\n * @param country - ISO 3166-1 alpha-2 code (e.g., \"DE\", \"US\")\n */\n resolve: (country: string, options?: RequestOptions): Promise<Market> =>\n this.request<Market>('GET', '/markets/resolve', {\n ...options,\n params: { country },\n }),\n\n /**\n * Nested resource: Countries in a market\n */\n countries: {\n /**\n * List countries belonging to a market\n * @param marketId - Market prefixed ID\n */\n list: (\n marketId: string,\n options?: RequestOptions\n ): Promise<ListResponse<Country>> =>\n this.request<ListResponse<Country>>(\n 'GET',\n `/markets/${marketId}/countries`,\n options\n ),\n\n /**\n * Get a country by ISO code within a market\n * @param marketId - Market prefixed ID\n * @param iso - Country ISO code (e.g., \"DE\")\n */\n get: (\n marketId: string,\n iso: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Country> =>\n this.request<Country>(\n 'GET',\n `/markets/${marketId}/countries/${iso}`,\n { ...options, params: getParams(params) }\n ),\n },\n };\n\n // ============================================\n // Cart (convenience wrapper for current incomplete order)\n // ============================================\n\n readonly cart = {\n /**\n * Get current cart (returns null if none exists)\n * Pass orderToken for guest checkout, or use JWT for authenticated users\n */\n get: (options?: RequestOptions): Promise<Order & { token: string }> =>\n this.request<Order & { token: string }>('GET', '/cart', options),\n\n /**\n * Create a new cart\n * @param params - Optional cart parameters (e.g., metadata)\n */\n create: (params?: CreateCartParams, options?: RequestOptions): Promise<Order & { token: string }> =>\n this.request<Order & { token: string }>('POST', '/cart', {\n ...options,\n body: params,\n }),\n\n /**\n * Associate a guest cart with the currently authenticated user\n * Requires both JWT token (for authentication) and orderToken (to identify the cart)\n * @param options - Must include both `token` (JWT) and `orderToken` (guest cart token)\n */\n associate: (options: RequestOptions): Promise<Order & { token: string }> =>\n this.request<Order & { token: string }>('PATCH', '/cart/associate', options),\n };\n\n // ============================================\n // Orders (individual order management & checkout)\n // ============================================\n\n readonly orders = {\n /**\n * Get an order by ID or number\n */\n get: (\n idOrNumber: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('GET', `/orders/${idOrNumber}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Update an order\n */\n update: (\n idOrNumber: string,\n params: UpdateOrderParams,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('PATCH', `/orders/${idOrNumber}`, {\n ...options,\n body: params,\n }),\n\n /**\n * Advance order to next checkout step\n */\n next: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('PATCH', `/orders/${idOrNumber}/next`, options),\n\n /**\n * Advance through all checkout steps\n */\n advance: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${idOrNumber}/advance`,\n options\n ),\n\n /**\n * Complete the order\n */\n complete: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${idOrNumber}/complete`,\n options\n ),\n\n /**\n * Add store credit to order\n */\n addStoreCredit: (\n idOrNumber: string,\n amount?: number,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('POST', `/orders/${idOrNumber}/store_credits`, {\n ...options,\n body: amount ? { amount } : undefined,\n }),\n\n /**\n * Remove store credit from order\n */\n removeStoreCredit: (\n idOrNumber: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'DELETE',\n `/orders/${idOrNumber}/store_credits`,\n options\n ),\n\n /**\n * Nested resource: Line items\n */\n lineItems: {\n /**\n * Add a line item to an order.\n * Returns the updated order with recalculated totals.\n */\n create: (\n orderId: string,\n params: AddLineItemParams,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('POST', `/orders/${orderId}/line_items`, {\n ...options,\n body: params,\n }),\n\n /**\n * Update a line item quantity.\n * Returns the updated order with recalculated totals.\n */\n update: (\n orderId: string,\n lineItemId: string,\n params: UpdateLineItemParams,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${orderId}/line_items/${lineItemId}`,\n { ...options, body: params }\n ),\n\n /**\n * Remove a line item from an order.\n * Returns the updated order with recalculated totals.\n */\n delete: (\n orderId: string,\n lineItemId: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'DELETE',\n `/orders/${orderId}/line_items/${lineItemId}`,\n options\n ),\n },\n\n /**\n * Nested resource: Payments\n */\n payments: {\n /**\n * List payments for an order\n */\n list: (\n orderId: string,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Payment>> =>\n this.request<PaginatedResponse<Payment>>(\n 'GET',\n `/orders/${orderId}/payments`,\n options\n ),\n\n /**\n * Get a payment by ID\n */\n get: (\n orderId: string,\n paymentId: string,\n options?: RequestOptions\n ): Promise<Payment> =>\n this.request<Payment>(\n 'GET',\n `/orders/${orderId}/payments/${paymentId}`,\n options\n ),\n },\n\n /**\n * Nested resource: Payment methods\n */\n paymentMethods: {\n /**\n * List available payment methods for an order\n */\n list: (\n orderId: string,\n options?: RequestOptions\n ): Promise<ListResponse<PaymentMethod>> =>\n this.request<ListResponse<PaymentMethod>>(\n 'GET',\n `/orders/${orderId}/payment_methods`,\n options\n ),\n },\n\n /**\n * Nested resource: Payment sessions\n */\n paymentSessions: {\n /**\n * Create a payment session for an order\n * Delegates to the payment gateway to initialize a provider-specific session\n */\n create: (\n orderId: string,\n params: CreatePaymentSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'POST',\n `/orders/${orderId}/payment_sessions`,\n { ...options, body: params }\n ),\n\n /**\n * Get a payment session by ID\n */\n get: (\n orderId: string,\n sessionId: string,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'GET',\n `/orders/${orderId}/payment_sessions/${sessionId}`,\n options\n ),\n\n /**\n * Update a payment session\n * Delegates to the payment gateway to sync changes with the provider\n */\n update: (\n orderId: string,\n sessionId: string,\n params: UpdatePaymentSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'PATCH',\n `/orders/${orderId}/payment_sessions/${sessionId}`,\n { ...options, body: params }\n ),\n\n /**\n * Complete a payment session\n * Confirms the payment with the provider, triggering capture/authorization\n */\n complete: (\n orderId: string,\n sessionId: string,\n params?: CompletePaymentSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSession> =>\n this.request<PaymentSession>(\n 'PATCH',\n `/orders/${orderId}/payment_sessions/${sessionId}/complete`,\n { ...options, body: params }\n ),\n },\n\n /**\n * Nested resource: Coupon codes\n */\n couponCodes: {\n /**\n * Apply a coupon code to an order\n */\n apply: (\n orderId: string,\n code: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>('POST', `/orders/${orderId}/coupon_codes`, {\n ...options,\n body: { code },\n }),\n\n /**\n * Remove a coupon code from an order\n * @param promotionId - The promotion prefix_id (e.g., 'promo_xxx')\n */\n remove: (\n orderId: string,\n promotionId: string,\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'DELETE',\n `/orders/${orderId}/coupon_codes/${promotionId}`,\n options\n ),\n },\n\n /**\n * Nested resource: Shipments\n */\n shipments: {\n /**\n * List shipments for an order\n */\n list: (\n orderId: string,\n options?: RequestOptions\n ): Promise<ListResponse<Shipment>> =>\n this.request<ListResponse<Shipment>>(\n 'GET',\n `/orders/${orderId}/shipments`,\n options\n ),\n\n /**\n * Select a shipping rate for a shipment.\n * Returns the updated order with recalculated totals.\n */\n update: (\n orderId: string,\n shipmentId: string,\n params: { selected_shipping_rate_id: string },\n options?: RequestOptions\n ): Promise<Order> =>\n this.request<Order>(\n 'PATCH',\n `/orders/${orderId}/shipments/${shipmentId}`,\n { ...options, body: params }\n ),\n },\n };\n\n // ============================================\n // Customer\n // ============================================\n\n readonly customers = {\n /**\n * Register a new customer account\n */\n create: (params: RegisterParams): Promise<AuthTokens> =>\n this.request<AuthTokens>('POST', '/customers', { body: params }),\n };\n\n readonly customer = {\n /**\n * Get current customer profile\n */\n get: (options?: RequestOptions): Promise<Customer> =>\n this.request<Customer>('GET', '/customer', options),\n\n /**\n * Update current customer profile\n */\n update: (\n params: {\n first_name?: string\n last_name?: string\n email?: string\n password?: string\n password_confirmation?: string\n /** Required when changing email or password */\n current_password?: string\n accepts_email_marketing?: boolean\n phone?: string\n /** Arbitrary key-value metadata (stored, not returned in responses) */\n metadata?: Record<string, unknown>\n },\n options?: RequestOptions\n ): Promise<Customer> =>\n this.request<Customer>('PATCH', '/customer', {\n ...options,\n body: params,\n }),\n\n /**\n * Nested resource: Addresses\n */\n addresses: {\n /**\n * List customer addresses\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Address>> =>\n this.request<PaginatedResponse<Address>>(\n 'GET',\n '/customer/addresses',\n { ...options, params: transformListParams({ ...params }) }\n ),\n\n /**\n * Get an address by ID\n */\n get: (id: string, options?: RequestOptions): Promise<Address> =>\n this.request<Address>('GET', `/customer/addresses/${id}`, options),\n\n /**\n * Create an address\n */\n create: (\n params: AddressParams,\n options?: RequestOptions\n ): Promise<Address> =>\n this.request<Address>('POST', '/customer/addresses', {\n ...options,\n body: params,\n }),\n\n /**\n * Update an address\n */\n update: (\n id: string,\n params: Partial<AddressParams>,\n options?: RequestOptions\n ): Promise<Address> =>\n this.request<Address>('PATCH', `/customer/addresses/${id}`, {\n ...options,\n body: params,\n }),\n\n /**\n * Delete an address\n */\n delete: (id: string, options?: RequestOptions): Promise<void> =>\n this.request<void>('DELETE', `/customer/addresses/${id}`, options),\n\n /**\n * Mark an address as default billing or shipping\n */\n markAsDefault: (\n id: string,\n kind: 'billing' | 'shipping',\n options?: RequestOptions\n ): Promise<Address> =>\n this.request<Address>('PATCH', `/customer/addresses/${id}/mark_as_default`, {\n ...options,\n body: { kind },\n }),\n },\n\n /**\n * Nested resource: Credit Cards\n */\n creditCards: {\n /**\n * List customer credit cards\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<CreditCard>> =>\n this.request<PaginatedResponse<CreditCard>>(\n 'GET',\n '/customer/credit_cards',\n { ...options, params: transformListParams({ ...params }) }\n ),\n\n /**\n * Get a credit card by ID\n */\n get: (id: string, options?: RequestOptions): Promise<CreditCard> =>\n this.request<CreditCard>('GET', `/customer/credit_cards/${id}`, options),\n\n /**\n * Delete a credit card\n */\n delete: (id: string, options?: RequestOptions): Promise<void> =>\n this.request<void>('DELETE', `/customer/credit_cards/${id}`, options),\n },\n\n /**\n * Nested resource: Gift Cards\n */\n giftCards: {\n /**\n * List customer gift cards\n * Returns gift cards associated with the current user, ordered by newest first\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<GiftCard>> =>\n this.request<PaginatedResponse<GiftCard>>(\n 'GET',\n '/customer/gift_cards',\n { ...options, params: transformListParams({ ...params }) }\n ),\n\n /**\n * Get a gift card by ID\n */\n get: (id: string, options?: RequestOptions): Promise<GiftCard> =>\n this.request<GiftCard>('GET', `/customer/gift_cards/${id}`, options),\n },\n\n /**\n * Nested resource: Orders (customer order history)\n */\n orders: {\n /**\n * List orders for the authenticated customer\n */\n list: (\n params?: OrderListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Order>> =>\n this.request<PaginatedResponse<Order>>('GET', '/customer/orders', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n },\n\n /**\n * Nested resource: Payment Setup Sessions (save payment methods for future use)\n */\n paymentSetupSessions: {\n /**\n * Create a payment setup session\n * Delegates to the payment gateway to initialize a setup flow for saving a payment method\n */\n create: (\n params: CreatePaymentSetupSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSetupSession> =>\n this.request<PaymentSetupSession>(\n 'POST',\n '/customer/payment_setup_sessions',\n { ...options, body: params }\n ),\n\n /**\n * Get a payment setup session by ID\n */\n get: (id: string, options?: RequestOptions): Promise<PaymentSetupSession> =>\n this.request<PaymentSetupSession>('GET', `/customer/payment_setup_sessions/${id}`, options),\n\n /**\n * Complete a payment setup session\n * Confirms the setup with the provider, resulting in a saved payment method\n */\n complete: (\n id: string,\n params?: CompletePaymentSetupSessionParams,\n options?: RequestOptions\n ): Promise<PaymentSetupSession> =>\n this.request<PaymentSetupSession>(\n 'PATCH',\n `/customer/payment_setup_sessions/${id}/complete`,\n { ...options, body: params }\n ),\n },\n };\n\n // ============================================\n // Wishlists\n // ============================================\n\n readonly wishlists = {\n /**\n * List wishlists\n */\n list: (\n params?: ListParams,\n options?: RequestOptions\n ): Promise<PaginatedResponse<Wishlist>> =>\n this.request<PaginatedResponse<Wishlist>>('GET', '/wishlists', {\n ...options,\n params: transformListParams({ ...params }),\n }),\n\n /**\n * Get a wishlist by ID\n */\n get: (\n id: string,\n params?: { expand?: string[]; fields?: string[] },\n options?: RequestOptions\n ): Promise<Wishlist> =>\n this.request<Wishlist>('GET', `/wishlists/${id}`, {\n ...options,\n params: getParams(params),\n }),\n\n /**\n * Create a wishlist\n */\n create: (\n params: { name: string; is_private?: boolean; is_default?: boolean },\n options?: RequestOptions\n ): Promise<Wishlist> =>\n this.request<Wishlist>('POST', '/wishlists', {\n ...options,\n body: params,\n }),\n\n /**\n * Update a wishlist\n */\n update: (\n id: string,\n params: { name?: string; is_private?: boolean; is_default?: boolean },\n options?: RequestOptions\n ): Promise<Wishlist> =>\n this.request<Wishlist>('PATCH', `/wishlists/${id}`, {\n ...options,\n body: params,\n }),\n\n /**\n * Delete a wishlist\n */\n delete: (id: string, options?: RequestOptions): Promise<void> =>\n this.request<void>('DELETE', `/wishlists/${id}`, options),\n\n /**\n * Nested resource: Wishlist items\n */\n items: {\n /**\n * Add an item to a wishlist\n */\n create: (\n wishlistId: string,\n params: { variant_id: string; quantity?: number },\n options?: RequestOptions\n ): Promise<WishedItem> =>\n this.request<WishedItem>('POST', `/wishlists/${wishlistId}/items`, {\n ...options,\n body: params,\n }),\n\n /**\n * Update a wishlist item\n */\n update: (\n wishlistId: string,\n itemId: string,\n params: { quantity: number },\n options?: RequestOptions\n ): Promise<WishedItem> =>\n this.request<WishedItem>(\n 'PATCH',\n `/wishlists/${wishlistId}/items/${itemId}`,\n { ...options, body: params }\n ),\n\n /**\n * Remove an item from a wishlist\n */\n delete: (\n wishlistId: string,\n itemId: string,\n options?: RequestOptions\n ): Promise<void> =>\n this.request<void>(\n 'DELETE',\n `/wishlists/${wishlistId}/items/${itemId}`,\n options\n ),\n },\n };\n}\n","import { createRequestFn, resolveRetryConfig } from '@spree/sdk-core';\nimport type { RetryConfig, RequestConfig, LocaleDefaults } from '@spree/sdk-core';\nimport { StoreClient } from './store-client';\n\nexport interface ClientConfig {\n /** Base URL of the Spree API (e.g., 'https://api.mystore.com') */\n baseUrl: string;\n /** Publishable API key for Store API access */\n publishableKey: string;\n /** Custom fetch implementation (optional, defaults to global fetch) */\n fetch?: typeof fetch;\n /** Retry configuration. Enabled by default. Pass false to disable. */\n retry?: RetryConfig | false;\n /** Default locale for API requests (e.g., 'fr') */\n locale?: string;\n /** Default currency for API requests (e.g., 'EUR') */\n currency?: string;\n /** Default country ISO code for market resolution (e.g., 'FR') */\n country?: string;\n}\n\nexport interface Client extends StoreClient {\n /** Set default locale for all subsequent requests */\n setLocale(locale: string): void;\n /** Set default currency for all subsequent requests */\n setCurrency(currency: string): void;\n /** Set default country for all subsequent requests */\n setCountry(country: string): void;\n}\n\n/**\n * Create a new Spree Store SDK client.\n *\n * Returns a flat client with all store resources directly accessible:\n * ```ts\n * const client = createClient({ baseUrl: '...', publishableKey: '...' })\n * client.products.list()\n * client.cart.create()\n * client.orders.get('order_1')\n * ```\n */\nexport function createClient(config: ClientConfig): Client {\n const baseUrl = config.baseUrl.replace(/\\/$/, '');\n const fetchFn = config.fetch || fetch.bind(globalThis);\n\n const defaults: LocaleDefaults = {\n locale: config.locale,\n currency: config.currency,\n country: config.country,\n };\n\n const retryConfig = resolveRetryConfig(config.retry);\n\n const requestConfig: RequestConfig = { baseUrl, fetchFn, retryConfig };\n\n const requestFn = createRequestFn(\n requestConfig,\n '/api/v3/store',\n { headerName: 'x-spree-api-key', headerValue: config.publishableKey },\n defaults\n );\n\n const storeClient = new StoreClient(requestFn);\n\n // Build the flat client by spreading StoreClient's prototype methods/properties\n // and adding locale/currency/country setters\n const client = Object.create(storeClient) as Client;\n\n client.setLocale = (locale: string) => {\n defaults.locale = locale;\n };\n client.setCurrency = (currency: string) => {\n defaults.currency = currency;\n };\n client.setCountry = (country: string) => {\n defaults.country = country;\n };\n\n return client;\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RequestFn, L as LoginCredentials, A as AuthTokens, a as RegisterParams, b as RequestOptions, P as ProductListParams, c as PaginatedResponse, d as Product, e as ProductFiltersParams, f as ProductFiltersResponse, g as ListParams, T as Taxonomy, h as TaxonListParams, i as Taxon, j as ListResponse, C as Country, k as Currency, l as Locale, M as Market, O as Order, m as CreateCartParams, U as UpdateOrderParams, n as AddLineItemParams, o as UpdateLineItemParams, p as Payment, q as PaymentMethod, r as CreatePaymentSessionParams, s as PaymentSession, t as UpdatePaymentSessionParams, u as CompletePaymentSessionParams, S as Shipment, v as Customer, w as Address, x as AddressParams, y as CreditCard, G as GiftCard, z as OrderListParams, B as CreatePaymentSetupSessionParams, D as PaymentSetupSession, E as CompletePaymentSetupSessionParams, W as Wishlist, F as WishedItem, H as RetryConfig } from './index-CgJG4R8P.cjs';
2
- export { I as Asset, J as AvailabilityFilter, K as Base, N as CustomerReturn, Q as Digital, V as DigitalLink, X as ErrorResponse, Y as Export, Z as FilterOption, _ as GiftCardBatch, $ as Image, a0 as Import, a1 as ImportRow, a2 as Invitation, a3 as LineItem, a4 as LineItemInput, a5 as LocaleDefaults, a6 as Metafield, a7 as NewsletterSubscriber, a8 as OptionFilter, a9 as OptionFilterOption, aa as OptionType, ab as OptionValue, ac as OrderPromotion, ad as PaginationMeta, ae as PaymentSource, af as Price, ag as PriceRangeFilter, ah as ProductFilter, ai as Promotion, aj as Refund, ak as Reimbursement, al as Report, am as ReturnAuthorization, an as ReturnItem, ao as ShippingCategory, ap as ShippingMethod, aq as ShippingRate, ar as SortOption, as as SpreeError, at as State, au as StockItem, av as StockLocation, aw as StockMovement, ax as StockTransfer, I as StoreAsset, ay as StoreCredit, N as StoreCustomerReturn, Q as StoreDigital, V as StoreDigitalLink, _ as StoreGiftCardBatch, $ as StoreImage, a3 as StoreLineItem, a6 as StoreMetafield, aa as StoreOptionType, ab as StoreOptionValue, ac as StoreOrderPromotion, ae as StorePaymentSource, af as StorePrice, ai as StorePromotion, aj as StoreRefund, ak as StoreReimbursement, am as StoreReturnAuthorization, an as StoreReturnItem, ao as StoreShippingCategory, ap as StoreShippingMethod, aq as StoreShippingRate, at as StoreState, au as StoreStockItem, av as StoreStockLocation, ay as StoreStoreCredit, az as StoreTaxCategory, aA as StoreVariant, az as TaxCategory, aB as TaxonFilter, aC as TaxonFilterOption, aA as Variant } from './index-CgJG4R8P.cjs';
1
+ import { R as RequestFn, L as LoginCredentials, A as AuthTokens, a as RequestOptions, P as ProductListParams, b as PaginatedResponse, c as Product, d as ProductFiltersParams, e as ProductFiltersResponse, f as ListParams, T as Taxonomy, g as TaxonListParams, h as Taxon, i as ListResponse, C as Country, j as Currency, k as Locale, M as Market, O as Order, l as CreateCartParams, U as UpdateOrderParams, m as AddLineItemParams, n as UpdateLineItemParams, o as Payment, p as PaymentMethod, q as CreatePaymentSessionParams, r as PaymentSession, s as UpdatePaymentSessionParams, t as CompletePaymentSessionParams, S as Shipment, u as RegisterParams, v as Customer, w as Address, x as AddressParams, y as CreditCard, G as GiftCard, z as OrderListParams, B as CreatePaymentSetupSessionParams, D as PaymentSetupSession, E as CompletePaymentSetupSessionParams, W as Wishlist, F as WishedItem, H as RetryConfig } from './index-CM4b4ZtS.cjs';
2
+ export { I as Asset, J as AvailabilityFilter, K as Base, N as CustomerReturn, Q as Digital, V as DigitalLink, X as ErrorResponse, Y as Export, Z as FilterOption, _ as GiftCardBatch, $ as Image, a0 as Import, a1 as ImportRow, a2 as Invitation, a3 as LineItem, a4 as LineItemInput, a5 as LocaleDefaults, a6 as Metafield, a7 as NewsletterSubscriber, a8 as OptionFilter, a9 as OptionFilterOption, aa as OptionType, ab as OptionValue, ac as OrderPromotion, ad as PaginationMeta, ae as PaymentSource, af as Price, ag as PriceRangeFilter, ah as ProductFilter, ai as Promotion, aj as Refund, ak as Reimbursement, al as Report, am as ReturnAuthorization, an as ReturnItem, ao as ShippingCategory, ap as ShippingMethod, aq as ShippingRate, ar as SortOption, as as SpreeError, at as State, au as StockItem, av as StockLocation, aw as StockMovement, ax as StockTransfer, I as StoreAsset, ay as StoreCredit, N as StoreCustomerReturn, Q as StoreDigital, V as StoreDigitalLink, _ as StoreGiftCardBatch, $ as StoreImage, a3 as StoreLineItem, a6 as StoreMetafield, aa as StoreOptionType, ab as StoreOptionValue, ac as StoreOrderPromotion, ae as StorePaymentSource, af as StorePrice, ai as StorePromotion, aj as StoreRefund, ak as StoreReimbursement, am as StoreReturnAuthorization, an as StoreReturnItem, ao as StoreShippingCategory, ap as StoreShippingMethod, aq as StoreShippingRate, at as StoreState, au as StoreStockItem, av as StoreStockLocation, ay as StoreStoreCredit, az as StoreTaxCategory, aA as StoreVariant, az as TaxCategory, aB as TaxonFilter, aC as TaxonFilterOption, aA as Variant } from './index-CM4b4ZtS.cjs';
3
3
 
4
4
  declare class StoreClient {
5
5
  private readonly request;
@@ -9,10 +9,6 @@ declare class StoreClient {
9
9
  * Login with email and password
10
10
  */
11
11
  login: (credentials: LoginCredentials) => Promise<AuthTokens>;
12
- /**
13
- * Register a new customer account
14
- */
15
- register: (params: RegisterParams) => Promise<AuthTokens>;
16
12
  /**
17
13
  * Refresh access token (requires valid Bearer token)
18
14
  */
@@ -288,6 +284,12 @@ declare class StoreClient {
288
284
  }, options?: RequestOptions) => Promise<Order>;
289
285
  };
290
286
  };
287
+ readonly customers: {
288
+ /**
289
+ * Register a new customer account
290
+ */
291
+ create: (params: RegisterParams) => Promise<AuthTokens>;
292
+ };
291
293
  readonly customer: {
292
294
  /**
293
295
  * Get current customer profile
@@ -302,8 +304,12 @@ declare class StoreClient {
302
304
  email?: string;
303
305
  password?: string;
304
306
  password_confirmation?: string;
307
+ /** Required when changing email or password */
308
+ current_password?: string;
305
309
  accepts_email_marketing?: boolean;
306
310
  phone?: string;
311
+ /** Arbitrary key-value metadata (stored, not returned in responses) */
312
+ metadata?: Record<string, unknown>;
307
313
  }, options?: RequestOptions) => Promise<Customer>;
308
314
  /**
309
315
  * Nested resource: Addresses
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RequestFn, L as LoginCredentials, A as AuthTokens, a as RegisterParams, b as RequestOptions, P as ProductListParams, c as PaginatedResponse, d as Product, e as ProductFiltersParams, f as ProductFiltersResponse, g as ListParams, T as Taxonomy, h as TaxonListParams, i as Taxon, j as ListResponse, C as Country, k as Currency, l as Locale, M as Market, O as Order, m as CreateCartParams, U as UpdateOrderParams, n as AddLineItemParams, o as UpdateLineItemParams, p as Payment, q as PaymentMethod, r as CreatePaymentSessionParams, s as PaymentSession, t as UpdatePaymentSessionParams, u as CompletePaymentSessionParams, S as Shipment, v as Customer, w as Address, x as AddressParams, y as CreditCard, G as GiftCard, z as OrderListParams, B as CreatePaymentSetupSessionParams, D as PaymentSetupSession, E as CompletePaymentSetupSessionParams, W as Wishlist, F as WishedItem, H as RetryConfig } from './index-CgJG4R8P.js';
2
- export { I as Asset, J as AvailabilityFilter, K as Base, N as CustomerReturn, Q as Digital, V as DigitalLink, X as ErrorResponse, Y as Export, Z as FilterOption, _ as GiftCardBatch, $ as Image, a0 as Import, a1 as ImportRow, a2 as Invitation, a3 as LineItem, a4 as LineItemInput, a5 as LocaleDefaults, a6 as Metafield, a7 as NewsletterSubscriber, a8 as OptionFilter, a9 as OptionFilterOption, aa as OptionType, ab as OptionValue, ac as OrderPromotion, ad as PaginationMeta, ae as PaymentSource, af as Price, ag as PriceRangeFilter, ah as ProductFilter, ai as Promotion, aj as Refund, ak as Reimbursement, al as Report, am as ReturnAuthorization, an as ReturnItem, ao as ShippingCategory, ap as ShippingMethod, aq as ShippingRate, ar as SortOption, as as SpreeError, at as State, au as StockItem, av as StockLocation, aw as StockMovement, ax as StockTransfer, I as StoreAsset, ay as StoreCredit, N as StoreCustomerReturn, Q as StoreDigital, V as StoreDigitalLink, _ as StoreGiftCardBatch, $ as StoreImage, a3 as StoreLineItem, a6 as StoreMetafield, aa as StoreOptionType, ab as StoreOptionValue, ac as StoreOrderPromotion, ae as StorePaymentSource, af as StorePrice, ai as StorePromotion, aj as StoreRefund, ak as StoreReimbursement, am as StoreReturnAuthorization, an as StoreReturnItem, ao as StoreShippingCategory, ap as StoreShippingMethod, aq as StoreShippingRate, at as StoreState, au as StoreStockItem, av as StoreStockLocation, ay as StoreStoreCredit, az as StoreTaxCategory, aA as StoreVariant, az as TaxCategory, aB as TaxonFilter, aC as TaxonFilterOption, aA as Variant } from './index-CgJG4R8P.js';
1
+ import { R as RequestFn, L as LoginCredentials, A as AuthTokens, a as RequestOptions, P as ProductListParams, b as PaginatedResponse, c as Product, d as ProductFiltersParams, e as ProductFiltersResponse, f as ListParams, T as Taxonomy, g as TaxonListParams, h as Taxon, i as ListResponse, C as Country, j as Currency, k as Locale, M as Market, O as Order, l as CreateCartParams, U as UpdateOrderParams, m as AddLineItemParams, n as UpdateLineItemParams, o as Payment, p as PaymentMethod, q as CreatePaymentSessionParams, r as PaymentSession, s as UpdatePaymentSessionParams, t as CompletePaymentSessionParams, S as Shipment, u as RegisterParams, v as Customer, w as Address, x as AddressParams, y as CreditCard, G as GiftCard, z as OrderListParams, B as CreatePaymentSetupSessionParams, D as PaymentSetupSession, E as CompletePaymentSetupSessionParams, W as Wishlist, F as WishedItem, H as RetryConfig } from './index-CM4b4ZtS.js';
2
+ export { I as Asset, J as AvailabilityFilter, K as Base, N as CustomerReturn, Q as Digital, V as DigitalLink, X as ErrorResponse, Y as Export, Z as FilterOption, _ as GiftCardBatch, $ as Image, a0 as Import, a1 as ImportRow, a2 as Invitation, a3 as LineItem, a4 as LineItemInput, a5 as LocaleDefaults, a6 as Metafield, a7 as NewsletterSubscriber, a8 as OptionFilter, a9 as OptionFilterOption, aa as OptionType, ab as OptionValue, ac as OrderPromotion, ad as PaginationMeta, ae as PaymentSource, af as Price, ag as PriceRangeFilter, ah as ProductFilter, ai as Promotion, aj as Refund, ak as Reimbursement, al as Report, am as ReturnAuthorization, an as ReturnItem, ao as ShippingCategory, ap as ShippingMethod, aq as ShippingRate, ar as SortOption, as as SpreeError, at as State, au as StockItem, av as StockLocation, aw as StockMovement, ax as StockTransfer, I as StoreAsset, ay as StoreCredit, N as StoreCustomerReturn, Q as StoreDigital, V as StoreDigitalLink, _ as StoreGiftCardBatch, $ as StoreImage, a3 as StoreLineItem, a6 as StoreMetafield, aa as StoreOptionType, ab as StoreOptionValue, ac as StoreOrderPromotion, ae as StorePaymentSource, af as StorePrice, ai as StorePromotion, aj as StoreRefund, ak as StoreReimbursement, am as StoreReturnAuthorization, an as StoreReturnItem, ao as StoreShippingCategory, ap as StoreShippingMethod, aq as StoreShippingRate, at as StoreState, au as StoreStockItem, av as StoreStockLocation, ay as StoreStoreCredit, az as StoreTaxCategory, aA as StoreVariant, az as TaxCategory, aB as TaxonFilter, aC as TaxonFilterOption, aA as Variant } from './index-CM4b4ZtS.js';
3
3
 
4
4
  declare class StoreClient {
5
5
  private readonly request;
@@ -9,10 +9,6 @@ declare class StoreClient {
9
9
  * Login with email and password
10
10
  */
11
11
  login: (credentials: LoginCredentials) => Promise<AuthTokens>;
12
- /**
13
- * Register a new customer account
14
- */
15
- register: (params: RegisterParams) => Promise<AuthTokens>;
16
12
  /**
17
13
  * Refresh access token (requires valid Bearer token)
18
14
  */
@@ -288,6 +284,12 @@ declare class StoreClient {
288
284
  }, options?: RequestOptions) => Promise<Order>;
289
285
  };
290
286
  };
287
+ readonly customers: {
288
+ /**
289
+ * Register a new customer account
290
+ */
291
+ create: (params: RegisterParams) => Promise<AuthTokens>;
292
+ };
291
293
  readonly customer: {
292
294
  /**
293
295
  * Get current customer profile
@@ -302,8 +304,12 @@ declare class StoreClient {
302
304
  email?: string;
303
305
  password?: string;
304
306
  password_confirmation?: string;
307
+ /** Required when changing email or password */
308
+ current_password?: string;
305
309
  accepts_email_marketing?: boolean;
306
310
  phone?: string;
311
+ /** Arbitrary key-value metadata (stored, not returned in responses) */
312
+ metadata?: Record<string, unknown>;
307
313
  }, options?: RequestOptions) => Promise<Customer>;
308
314
  /**
309
315
  * Nested resource: Addresses