@spree/next 0.6.9 → 0.7.1
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/dist/actions/addresses.d.ts +5 -5
- package/dist/actions/addresses.js +9 -9
- package/dist/actions/addresses.js.map +1 -1
- package/dist/actions/auth.d.ts +3 -3
- package/dist/actions/auth.js +10 -10
- package/dist/actions/auth.js.map +1 -1
- package/dist/actions/cart.d.ts +7 -7
- package/dist/actions/cart.js +10 -10
- package/dist/actions/cart.js.map +1 -1
- package/dist/actions/checkout.d.ts +10 -10
- package/dist/actions/checkout.js +11 -11
- package/dist/actions/checkout.js.map +1 -1
- package/dist/actions/credit-cards.d.ts +2 -2
- package/dist/actions/credit-cards.js +6 -6
- package/dist/actions/credit-cards.js.map +1 -1
- package/dist/actions/gift-cards.d.ts +3 -3
- package/dist/actions/gift-cards.js +6 -6
- package/dist/actions/gift-cards.js.map +1 -1
- package/dist/actions/locale.js +2 -2
- package/dist/actions/locale.js.map +1 -1
- package/dist/actions/orders.d.ts +3 -3
- package/dist/actions/orders.js +6 -6
- package/dist/actions/orders.js.map +1 -1
- package/dist/actions/payment-sessions.d.ts +5 -5
- package/dist/actions/payment-sessions.js +6 -6
- package/dist/actions/payment-sessions.js.map +1 -1
- package/dist/actions/payment-setup-sessions.d.ts +4 -4
- package/dist/actions/payment-setup-sessions.js +7 -7
- package/dist/actions/payment-setup-sessions.js.map +1 -1
- package/dist/config.d.ts +3 -3
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/data/countries.d.ts +3 -3
- package/dist/data/countries.js +4 -4
- package/dist/data/countries.js.map +1 -1
- package/dist/data/currencies.d.ts +2 -2
- package/dist/data/currencies.js +3 -3
- package/dist/data/currencies.js.map +1 -1
- package/dist/data/locales.d.ts +2 -2
- package/dist/data/locales.js +3 -3
- package/dist/data/locales.js.map +1 -1
- package/dist/data/markets.d.ts +6 -6
- package/dist/data/markets.js +7 -7
- package/dist/data/markets.js.map +1 -1
- package/dist/data/products.d.ts +3 -3
- package/dist/data/products.js +5 -5
- package/dist/data/products.js.map +1 -1
- package/dist/data/taxonomies.d.ts +3 -3
- package/dist/data/taxonomies.js +4 -4
- package/dist/data/taxonomies.js.map +1 -1
- package/dist/data/taxons.d.ts +4 -4
- package/dist/data/taxons.js +5 -5
- package/dist/data/taxons.js.map +1 -1
- package/dist/index.d.ts +35 -35
- package/dist/index.js +62 -62
- package/dist/index.js.map +1 -1
- package/dist/locale.js +2 -2
- package/dist/locale.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/payment-sessions.ts","../../src/config.ts","../../src/cookies.ts"],"sourcesContent":["'use server';\n\nimport { revalidateTag } from 'next/cache';\nimport type {\n
|
|
1
|
+
{"version":3,"sources":["../../src/actions/payment-sessions.ts","../../src/config.ts","../../src/cookies.ts"],"sourcesContent":["'use server';\n\nimport { revalidateTag } from 'next/cache';\nimport type {\n PaymentSession,\n CreatePaymentSessionParams,\n UpdatePaymentSessionParams,\n CompletePaymentSessionParams,\n} from '@spree/sdk';\nimport { getClient } from '../config';\nimport { getCartToken, getAccessToken } from '../cookies';\n\nasync function getCheckoutOptions() {\n const orderToken = await getCartToken();\n const token = await getAccessToken();\n return { orderToken, token };\n}\n\n/**\n * Create a payment session for an order.\n * Delegates to the payment gateway to initialize a provider-specific session.\n */\nexport async function createPaymentSession(\n orderId: string,\n params: CreatePaymentSessionParams\n): Promise<PaymentSession> {\n const options = await getCheckoutOptions();\n const result = await getClient().orders.paymentSessions.create(orderId, params, options);\n revalidateTag('checkout');\n return result;\n}\n\n/**\n * Get a payment session by ID.\n */\nexport async function getPaymentSession(\n orderId: string,\n sessionId: string\n): Promise<PaymentSession> {\n const options = await getCheckoutOptions();\n return getClient().orders.paymentSessions.get(orderId, sessionId, options);\n}\n\n/**\n * Update a payment session.\n * Delegates to the payment gateway to sync changes with the provider.\n */\nexport async function updatePaymentSession(\n orderId: string,\n sessionId: string,\n params: UpdatePaymentSessionParams\n): Promise<PaymentSession> {\n const options = await getCheckoutOptions();\n const result = await getClient().orders.paymentSessions.update(orderId, sessionId, params, options);\n revalidateTag('checkout');\n return result;\n}\n\n/**\n * Complete a payment session.\n * Confirms the payment with the provider, triggering capture/authorization.\n */\nexport async function completePaymentSession(\n orderId: string,\n sessionId: string,\n params?: CompletePaymentSessionParams\n): Promise<PaymentSession> {\n const options = await getCheckoutOptions();\n const result = await getClient().orders.paymentSessions.complete(orderId, sessionId, params, options);\n revalidateTag('checkout');\n return result;\n}\n","import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n","import { cookies } from 'next/headers';\nimport { getConfig } from './config';\n\nconst DEFAULT_CART_COOKIE = '_spree_cart_token';\nconst DEFAULT_ACCESS_TOKEN_COOKIE = '_spree_jwt';\nconst CART_TOKEN_MAX_AGE = 60 * 60 * 24 * 30; // 30 days\nconst ACCESS_TOKEN_MAX_AGE = 60 * 60 * 24 * 7; // 7 days\n\nfunction getCartCookieName(): string {\n try {\n return getConfig().cartCookieName ?? DEFAULT_CART_COOKIE;\n } catch {\n return DEFAULT_CART_COOKIE;\n }\n}\n\nfunction getAccessTokenCookieName(): string {\n try {\n return getConfig().accessTokenCookieName ?? DEFAULT_ACCESS_TOKEN_COOKIE;\n } catch {\n return DEFAULT_ACCESS_TOKEN_COOKIE;\n }\n}\n\n// --- Cart Token ---\n\nexport async function getCartToken(): Promise<string | undefined> {\n const cookieStore = await cookies();\n return cookieStore.get(getCartCookieName())?.value;\n}\n\nexport async function setCartToken(token: string): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getCartCookieName(), token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n path: '/',\n maxAge: CART_TOKEN_MAX_AGE,\n });\n}\n\nexport async function clearCartToken(): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getCartCookieName(), '', {\n maxAge: -1,\n path: '/',\n });\n}\n\n// --- Access Token (JWT) ---\n\nexport async function getAccessToken(): Promise<string | undefined> {\n const cookieStore = await cookies();\n return cookieStore.get(getAccessTokenCookieName())?.value;\n}\n\nexport async function setAccessToken(token: string): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getAccessTokenCookieName(), token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n path: '/',\n maxAge: ACCESS_TOKEN_MAX_AGE,\n });\n}\n\nexport async function clearAccessToken(): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getAccessTokenCookieName(), '', {\n maxAge: -1,\n path: '/',\n });\n}\n"],"mappings":";;;AAEA,SAAS,qBAAqB;;;ACF9B,SAAS,oBAAiC;AAG1C,IAAI,UAAyB;AAC7B,IAAI,UAAkC;AAO/B,SAAS,cAAc,QAA+B;AAC3D,YAAU;AACV,YAAU,aAAa;AAAA,IACrB,SAAS,OAAO;AAAA,IAChB,gBAAgB,OAAO;AAAA,EACzB,CAAC;AACH;AAMO,SAAS,YAAoB;AAClC,MAAI,CAAC,SAAS;AACZ,UAAM,UAAU,QAAQ,IAAI;AAC5B,UAAM,iBAAiB,QAAQ,IAAI;AACnC,QAAI,WAAW,gBAAgB;AAC7B,oBAAc,EAAE,SAAS,eAAe,CAAC;AAAA,IAC3C,OAAO;AACL,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,YAA6B;AAC3C,MAAI,CAAC,SAAS;AACZ,cAAU;AAAA,EACZ;AACA,SAAO;AACT;;;AC/CA,SAAS,eAAe;AAGxB,IAAM,sBAAsB;AAC5B,IAAM,8BAA8B;AACpC,IAAM,qBAAqB,KAAK,KAAK,KAAK;AAC1C,IAAM,uBAAuB,KAAK,KAAK,KAAK;AAE5C,SAAS,oBAA4B;AACnC,MAAI;AACF,WAAO,UAAU,EAAE,kBAAkB;AAAA,EACvC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,2BAAmC;AAC1C,MAAI;AACF,WAAO,UAAU,EAAE,yBAAyB;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAIA,eAAsB,eAA4C;AAChE,QAAM,cAAc,MAAM,QAAQ;AAClC,SAAO,YAAY,IAAI,kBAAkB,CAAC,GAAG;AAC/C;AAuBA,eAAsB,iBAA8C;AAClE,QAAM,cAAc,MAAM,QAAQ;AAClC,SAAO,YAAY,IAAI,yBAAyB,CAAC,GAAG;AACtD;;;AF3CA,eAAe,qBAAqB;AAClC,QAAM,aAAa,MAAM,aAAa;AACtC,QAAM,QAAQ,MAAM,eAAe;AACnC,SAAO,EAAE,YAAY,MAAM;AAC7B;AAMA,eAAsB,qBACpB,SACA,QACyB;AACzB,QAAM,UAAU,MAAM,mBAAmB;AACzC,QAAM,SAAS,MAAM,UAAU,EAAE,OAAO,gBAAgB,OAAO,SAAS,QAAQ,OAAO;AACvF,gBAAc,UAAU;AACxB,SAAO;AACT;AAKA,eAAsB,kBACpB,SACA,WACyB;AACzB,QAAM,UAAU,MAAM,mBAAmB;AACzC,SAAO,UAAU,EAAE,OAAO,gBAAgB,IAAI,SAAS,WAAW,OAAO;AAC3E;AAMA,eAAsB,qBACpB,SACA,WACA,QACyB;AACzB,QAAM,UAAU,MAAM,mBAAmB;AACzC,QAAM,SAAS,MAAM,UAAU,EAAE,OAAO,gBAAgB,OAAO,SAAS,WAAW,QAAQ,OAAO;AAClG,gBAAc,UAAU;AACxB,SAAO;AACT;AAMA,eAAsB,uBACpB,SACA,WACA,QACyB;AACzB,QAAM,UAAU,MAAM,mBAAmB;AACzC,QAAM,SAAS,MAAM,UAAU,EAAE,OAAO,gBAAgB,SAAS,SAAS,WAAW,QAAQ,OAAO;AACpG,gBAAc,UAAU;AACxB,SAAO;AACT;","names":[]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { CompletePaymentSetupSessionParams,
|
|
1
|
+
import { CompletePaymentSetupSessionParams, PaymentSetupSession, CreatePaymentSetupSessionParams } from '@spree/sdk';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Create a payment setup session for saving a payment method.
|
|
5
5
|
* Delegates to the payment gateway to initialize a setup flow.
|
|
6
6
|
*/
|
|
7
|
-
declare function createPaymentSetupSession(params: CreatePaymentSetupSessionParams): Promise<
|
|
7
|
+
declare function createPaymentSetupSession(params: CreatePaymentSetupSessionParams): Promise<PaymentSetupSession>;
|
|
8
8
|
/**
|
|
9
9
|
* Get a payment setup session by ID.
|
|
10
10
|
*/
|
|
11
|
-
declare function getPaymentSetupSession(id: string): Promise<
|
|
11
|
+
declare function getPaymentSetupSession(id: string): Promise<PaymentSetupSession>;
|
|
12
12
|
/**
|
|
13
13
|
* Complete a payment setup session.
|
|
14
14
|
* Confirms the setup with the provider, resulting in a saved payment method.
|
|
15
15
|
*/
|
|
16
|
-
declare function completePaymentSetupSession(id: string, params?: CompletePaymentSetupSessionParams): Promise<
|
|
16
|
+
declare function completePaymentSetupSession(id: string, params?: CompletePaymentSetupSessionParams): Promise<PaymentSetupSession>;
|
|
17
17
|
|
|
18
18
|
export { completePaymentSetupSession, createPaymentSetupSession, getPaymentSetupSession };
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
import { SpreeError } from "@spree/sdk";
|
|
5
5
|
|
|
6
6
|
// src/config.ts
|
|
7
|
-
import {
|
|
7
|
+
import { createClient } from "@spree/sdk";
|
|
8
8
|
var _client = null;
|
|
9
9
|
var _config = null;
|
|
10
10
|
function initSpreeNext(config) {
|
|
11
11
|
_config = config;
|
|
12
|
-
_client =
|
|
12
|
+
_client = createClient({
|
|
13
13
|
baseUrl: config.baseUrl,
|
|
14
14
|
publishableKey: config.publishableKey
|
|
15
15
|
});
|
|
@@ -81,7 +81,7 @@ async function getAuthOptions() {
|
|
|
81
81
|
const now = Math.floor(Date.now() / 1e3);
|
|
82
82
|
if (exp && exp - now < 3600) {
|
|
83
83
|
try {
|
|
84
|
-
const refreshed = await getClient().
|
|
84
|
+
const refreshed = await getClient().auth.refresh({ token });
|
|
85
85
|
await setAccessToken(refreshed.token);
|
|
86
86
|
return { token: refreshed.token };
|
|
87
87
|
} catch {
|
|
@@ -101,7 +101,7 @@ async function withAuthRefresh(fn) {
|
|
|
101
101
|
} catch (error) {
|
|
102
102
|
if (error instanceof SpreeError && error.status === 401) {
|
|
103
103
|
try {
|
|
104
|
-
const refreshed = await getClient().
|
|
104
|
+
const refreshed = await getClient().auth.refresh({ token: options.token });
|
|
105
105
|
await setAccessToken(refreshed.token);
|
|
106
106
|
return await fn({ token: refreshed.token });
|
|
107
107
|
} catch {
|
|
@@ -116,17 +116,17 @@ async function withAuthRefresh(fn) {
|
|
|
116
116
|
// src/actions/payment-setup-sessions.ts
|
|
117
117
|
async function createPaymentSetupSession(params) {
|
|
118
118
|
return withAuthRefresh(async (options) => {
|
|
119
|
-
return getClient().
|
|
119
|
+
return getClient().customer.paymentSetupSessions.create(params, options);
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
122
|
async function getPaymentSetupSession(id) {
|
|
123
123
|
return withAuthRefresh(async (options) => {
|
|
124
|
-
return getClient().
|
|
124
|
+
return getClient().customer.paymentSetupSessions.get(id, options);
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
async function completePaymentSetupSession(id, params) {
|
|
128
128
|
return withAuthRefresh(async (options) => {
|
|
129
|
-
return getClient().
|
|
129
|
+
return getClient().customer.paymentSetupSessions.complete(id, params, options);
|
|
130
130
|
});
|
|
131
131
|
}
|
|
132
132
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/auth-helpers.ts","../../src/config.ts","../../src/cookies.ts","../../src/actions/payment-setup-sessions.ts"],"sourcesContent":["import { SpreeError } from '@spree/sdk';\nimport type { RequestOptions } from '@spree/sdk';\nimport { getClient } from './config';\nimport { getAccessToken, setAccessToken, clearAccessToken } from './cookies';\n\n/**\n * Get auth request options from the current JWT token.\n * Proactively refreshes the token if it expires within 1 hour.\n */\nexport async function getAuthOptions(): Promise<RequestOptions> {\n const token = await getAccessToken();\n if (!token) {\n return {};\n }\n\n // Check if token is close to expiry by decoding JWT payload\n try {\n const payload = JSON.parse(atob(token.split('.')[1]));\n const exp = payload.exp;\n const now = Math.floor(Date.now() / 1000);\n\n // Refresh if token expires in less than 1 hour\n if (exp && exp - now < 3600) {\n try {\n const refreshed = await getClient().
|
|
1
|
+
{"version":3,"sources":["../../src/auth-helpers.ts","../../src/config.ts","../../src/cookies.ts","../../src/actions/payment-setup-sessions.ts"],"sourcesContent":["import { SpreeError } from '@spree/sdk';\nimport type { RequestOptions } from '@spree/sdk';\nimport { getClient } from './config';\nimport { getAccessToken, setAccessToken, clearAccessToken } from './cookies';\n\n/**\n * Get auth request options from the current JWT token.\n * Proactively refreshes the token if it expires within 1 hour.\n */\nexport async function getAuthOptions(): Promise<RequestOptions> {\n const token = await getAccessToken();\n if (!token) {\n return {};\n }\n\n // Check if token is close to expiry by decoding JWT payload\n try {\n const payload = JSON.parse(atob(token.split('.')[1]));\n const exp = payload.exp;\n const now = Math.floor(Date.now() / 1000);\n\n // Refresh if token expires in less than 1 hour\n if (exp && exp - now < 3600) {\n try {\n const refreshed = await getClient().auth.refresh({ token });\n await setAccessToken(refreshed.token);\n return { token: refreshed.token };\n } catch {\n // Refresh failed — use existing token, it might still work\n }\n }\n } catch {\n // Can't decode JWT — use it as-is, the server will reject if invalid\n }\n\n return { token };\n}\n\n/**\n * Execute an authenticated request with automatic token refresh on 401.\n * @param fn - Function that takes RequestOptions and returns a promise\n * @returns The result of the function\n * @throws SpreeError if auth fails after refresh attempt\n */\nexport async function withAuthRefresh<T>(\n fn: (options: RequestOptions) => Promise<T>\n): Promise<T> {\n const options = await getAuthOptions();\n\n if (!options.token) {\n throw new Error('Not authenticated');\n }\n\n try {\n return await fn(options);\n } catch (error: unknown) {\n // If 401, try refreshing the token once\n if (error instanceof SpreeError && error.status === 401) {\n try {\n const refreshed = await getClient().auth.refresh({ token: options.token });\n await setAccessToken(refreshed.token);\n return await fn({ token: refreshed.token });\n } catch {\n // Refresh failed — clear token and rethrow\n await clearAccessToken();\n throw error;\n }\n }\n throw error;\n }\n}\n","import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n","import { cookies } from 'next/headers';\nimport { getConfig } from './config';\n\nconst DEFAULT_CART_COOKIE = '_spree_cart_token';\nconst DEFAULT_ACCESS_TOKEN_COOKIE = '_spree_jwt';\nconst CART_TOKEN_MAX_AGE = 60 * 60 * 24 * 30; // 30 days\nconst ACCESS_TOKEN_MAX_AGE = 60 * 60 * 24 * 7; // 7 days\n\nfunction getCartCookieName(): string {\n try {\n return getConfig().cartCookieName ?? DEFAULT_CART_COOKIE;\n } catch {\n return DEFAULT_CART_COOKIE;\n }\n}\n\nfunction getAccessTokenCookieName(): string {\n try {\n return getConfig().accessTokenCookieName ?? DEFAULT_ACCESS_TOKEN_COOKIE;\n } catch {\n return DEFAULT_ACCESS_TOKEN_COOKIE;\n }\n}\n\n// --- Cart Token ---\n\nexport async function getCartToken(): Promise<string | undefined> {\n const cookieStore = await cookies();\n return cookieStore.get(getCartCookieName())?.value;\n}\n\nexport async function setCartToken(token: string): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getCartCookieName(), token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n path: '/',\n maxAge: CART_TOKEN_MAX_AGE,\n });\n}\n\nexport async function clearCartToken(): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getCartCookieName(), '', {\n maxAge: -1,\n path: '/',\n });\n}\n\n// --- Access Token (JWT) ---\n\nexport async function getAccessToken(): Promise<string | undefined> {\n const cookieStore = await cookies();\n return cookieStore.get(getAccessTokenCookieName())?.value;\n}\n\nexport async function setAccessToken(token: string): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getAccessTokenCookieName(), token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n path: '/',\n maxAge: ACCESS_TOKEN_MAX_AGE,\n });\n}\n\nexport async function clearAccessToken(): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(getAccessTokenCookieName(), '', {\n maxAge: -1,\n path: '/',\n });\n}\n","'use server';\n\nimport type {\n PaymentSetupSession,\n CreatePaymentSetupSessionParams,\n CompletePaymentSetupSessionParams,\n} from '@spree/sdk';\nimport { withAuthRefresh } from '../auth-helpers';\nimport { getClient } from '../config';\n\n/**\n * Create a payment setup session for saving a payment method.\n * Delegates to the payment gateway to initialize a setup flow.\n */\nexport async function createPaymentSetupSession(\n params: CreatePaymentSetupSessionParams\n): Promise<PaymentSetupSession> {\n return withAuthRefresh(async (options) => {\n return getClient().customer.paymentSetupSessions.create(params, options);\n });\n}\n\n/**\n * Get a payment setup session by ID.\n */\nexport async function getPaymentSetupSession(\n id: string\n): Promise<PaymentSetupSession> {\n return withAuthRefresh(async (options) => {\n return getClient().customer.paymentSetupSessions.get(id, options);\n });\n}\n\n/**\n * Complete a payment setup session.\n * Confirms the setup with the provider, resulting in a saved payment method.\n */\nexport async function completePaymentSetupSession(\n id: string,\n params?: CompletePaymentSetupSessionParams\n): Promise<PaymentSetupSession> {\n return withAuthRefresh(async (options) => {\n return getClient().customer.paymentSetupSessions.complete(id, params, options);\n });\n}\n"],"mappings":";;;AAAA,SAAS,kBAAkB;;;ACA3B,SAAS,oBAAiC;AAG1C,IAAI,UAAyB;AAC7B,IAAI,UAAkC;AAO/B,SAAS,cAAc,QAA+B;AAC3D,YAAU;AACV,YAAU,aAAa;AAAA,IACrB,SAAS,OAAO;AAAA,IAChB,gBAAgB,OAAO;AAAA,EACzB,CAAC;AACH;AAMO,SAAS,YAAoB;AAClC,MAAI,CAAC,SAAS;AACZ,UAAM,UAAU,QAAQ,IAAI;AAC5B,UAAM,iBAAiB,QAAQ,IAAI;AACnC,QAAI,WAAW,gBAAgB;AAC7B,oBAAc,EAAE,SAAS,eAAe,CAAC;AAAA,IAC3C,OAAO;AACL,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,YAA6B;AAC3C,MAAI,CAAC,SAAS;AACZ,cAAU;AAAA,EACZ;AACA,SAAO;AACT;;;AC/CA,SAAS,eAAe;AAIxB,IAAM,8BAA8B;AACpC,IAAM,qBAAqB,KAAK,KAAK,KAAK;AAC1C,IAAM,uBAAuB,KAAK,KAAK,KAAK;AAU5C,SAAS,2BAAmC;AAC1C,MAAI;AACF,WAAO,UAAU,EAAE,yBAAyB;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AA8BA,eAAsB,iBAA8C;AAClE,QAAM,cAAc,MAAM,QAAQ;AAClC,SAAO,YAAY,IAAI,yBAAyB,CAAC,GAAG;AACtD;AAEA,eAAsB,eAAe,OAA8B;AACjE,QAAM,cAAc,MAAM,QAAQ;AAClC,cAAY,IAAI,yBAAyB,GAAG,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,QAAQ,QAAQ,IAAI,aAAa;AAAA,IACjC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACH;AAEA,eAAsB,mBAAkC;AACtD,QAAM,cAAc,MAAM,QAAQ;AAClC,cAAY,IAAI,yBAAyB,GAAG,IAAI;AAAA,IAC9C,QAAQ;AAAA,IACR,MAAM;AAAA,EACR,CAAC;AACH;;;AFjEA,eAAsB,iBAA0C;AAC9D,QAAM,QAAQ,MAAM,eAAe;AACnC,MAAI,CAAC,OAAO;AACV,WAAO,CAAC;AAAA,EACV;AAGA,MAAI;AACF,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,UAAM,MAAM,QAAQ;AACpB,UAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAGxC,QAAI,OAAO,MAAM,MAAM,MAAM;AAC3B,UAAI;AACF,cAAM,YAAY,MAAM,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,CAAC;AAC1D,cAAM,eAAe,UAAU,KAAK;AACpC,eAAO,EAAE,OAAO,UAAU,MAAM;AAAA,MAClC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO,EAAE,MAAM;AACjB;AAQA,eAAsB,gBACpB,IACY;AACZ,QAAM,UAAU,MAAM,eAAe;AAErC,MAAI,CAAC,QAAQ,OAAO;AAClB,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,MAAI;AACF,WAAO,MAAM,GAAG,OAAO;AAAA,EACzB,SAAS,OAAgB;AAEvB,QAAI,iBAAiB,cAAc,MAAM,WAAW,KAAK;AACvD,UAAI;AACF,cAAM,YAAY,MAAM,UAAU,EAAE,KAAK,QAAQ,EAAE,OAAO,QAAQ,MAAM,CAAC;AACzE,cAAM,eAAe,UAAU,KAAK;AACpC,eAAO,MAAM,GAAG,EAAE,OAAO,UAAU,MAAM,CAAC;AAAA,MAC5C,QAAQ;AAEN,cAAM,iBAAiB;AACvB,cAAM;AAAA,MACR;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;;;AGxDA,eAAsB,0BACpB,QAC8B;AAC9B,SAAO,gBAAgB,OAAO,YAAY;AACxC,WAAO,UAAU,EAAE,SAAS,qBAAqB,OAAO,QAAQ,OAAO;AAAA,EACzE,CAAC;AACH;AAKA,eAAsB,uBACpB,IAC8B;AAC9B,SAAO,gBAAgB,OAAO,YAAY;AACxC,WAAO,UAAU,EAAE,SAAS,qBAAqB,IAAI,IAAI,OAAO;AAAA,EAClE,CAAC;AACH;AAMA,eAAsB,4BACpB,IACA,QAC8B;AAC9B,SAAO,gBAAgB,OAAO,YAAY;AACxC,WAAO,UAAU,EAAE,SAAS,qBAAqB,SAAS,IAAI,QAAQ,OAAO;AAAA,EAC/E,CAAC;AACH;","names":[]}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Client } from '@spree/sdk';
|
|
2
2
|
import { SpreeNextConfig } from './types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,10 +8,10 @@ import { SpreeNextConfig } from './types.js';
|
|
|
8
8
|
*/
|
|
9
9
|
declare function initSpreeNext(config: SpreeNextConfig): void;
|
|
10
10
|
/**
|
|
11
|
-
* Get the
|
|
11
|
+
* Get the Client instance. Auto-initializes from env vars if needed.
|
|
12
12
|
* @internal
|
|
13
13
|
*/
|
|
14
|
-
declare function getClient():
|
|
14
|
+
declare function getClient(): Client;
|
|
15
15
|
/**
|
|
16
16
|
* Get the current config. Auto-initializes from env vars if needed.
|
|
17
17
|
* @internal
|
package/dist/config.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClient } from '@spree/sdk';
|
|
2
2
|
|
|
3
3
|
// src/config.ts
|
|
4
4
|
var _client = null;
|
|
5
5
|
var _config = null;
|
|
6
6
|
function initSpreeNext(config) {
|
|
7
7
|
_config = config;
|
|
8
|
-
_client =
|
|
8
|
+
_client = createClient({
|
|
9
9
|
baseUrl: config.baseUrl,
|
|
10
10
|
publishableKey: config.publishableKey
|
|
11
11
|
});
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"names":[],"mappings":";;;AAGA,IAAI,OAAA,
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"names":[],"mappings":";;;AAGA,IAAI,OAAA,GAAyB,IAAA;AAC7B,IAAI,OAAA,GAAkC,IAAA;AAO/B,SAAS,cAAc,MAAA,EAA+B;AAC3D,EAAA,OAAA,GAAU,MAAA;AACV,EAAA,OAAA,GAAU,YAAA,CAAa;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,gBAAgB,MAAA,CAAO;AAAA,GACxB,CAAA;AACH;AAMO,SAAS,SAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,aAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,qBAAA;AACnC,IAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,MAAA,aAAA,CAAc,EAAE,OAAA,EAAS,cAAA,EAAgB,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,SAAA,GAA6B;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,SAAA,EAAU;AAAA,EACZ;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,WAAA,GAAoB;AAClC,EAAA,OAAA,GAAU,IAAA;AACV,EAAA,OAAA,GAAU,IAAA;AACZ","file":"config.js","sourcesContent":["import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n"]}
|
package/dist/data/countries.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Country } from '@spree/sdk';
|
|
2
2
|
import { SpreeNextOptions } from '../types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,7 +6,7 @@ import { SpreeNextOptions } from '../types.js';
|
|
|
6
6
|
* Use ?expand=market to expand market details (currency, locale, tax_inclusive).
|
|
7
7
|
*/
|
|
8
8
|
declare function listCountries(options?: SpreeNextOptions): Promise<{
|
|
9
|
-
data:
|
|
9
|
+
data: Country[];
|
|
10
10
|
}>;
|
|
11
11
|
/**
|
|
12
12
|
* Get a country by ISO code.
|
|
@@ -15,6 +15,6 @@ declare function listCountries(options?: SpreeNextOptions): Promise<{
|
|
|
15
15
|
*/
|
|
16
16
|
declare function getCountry(iso: string, params?: {
|
|
17
17
|
expand?: string[];
|
|
18
|
-
}, options?: SpreeNextOptions): Promise<
|
|
18
|
+
}, options?: SpreeNextOptions): Promise<Country>;
|
|
19
19
|
|
|
20
20
|
export { getCountry, listCountries };
|
package/dist/data/countries.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClient } from '@spree/sdk';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
|
|
4
4
|
// src/config.ts
|
|
@@ -6,7 +6,7 @@ var _client = null;
|
|
|
6
6
|
var _config = null;
|
|
7
7
|
function initSpreeNext(config) {
|
|
8
8
|
_config = config;
|
|
9
|
-
_client =
|
|
9
|
+
_client = createClient({
|
|
10
10
|
baseUrl: config.baseUrl,
|
|
11
11
|
publishableKey: config.publishableKey
|
|
12
12
|
});
|
|
@@ -48,11 +48,11 @@ async function getLocaleOptions() {
|
|
|
48
48
|
// src/data/countries.ts
|
|
49
49
|
async function listCountries(options) {
|
|
50
50
|
const resolved = options ?? await getLocaleOptions();
|
|
51
|
-
return getClient().
|
|
51
|
+
return getClient().countries.list(resolved);
|
|
52
52
|
}
|
|
53
53
|
async function getCountry(iso, params, options) {
|
|
54
54
|
const resolved = options ?? await getLocaleOptions();
|
|
55
|
-
return getClient().
|
|
55
|
+
return getClient().countries.get(iso, params, resolved);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
export { getCountry, listCountries };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/countries.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/countries.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,GAAyB,IAAA;AAC7B,IAAI,OAAA,GAAkC,IAAA;AAO/B,SAAS,cAAc,MAAA,EAA+B;AAC3D,EAAA,OAAA,GAAU,MAAA;AACV,EAAA,OAAA,GAAU,YAAA,CAAa;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,gBAAgB,MAAA,CAAO;AAAA,GACxB,CAAA;AACH;AAMO,SAAS,SAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,aAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,qBAAA;AACnC,IAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,MAAA,aAAA,CAAc,EAAE,OAAA,EAAS,cAAA,EAAgB,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,SAAA,GAA6B;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,SAAA,EAAU;AAAA,EACZ;AACA,EAAA,OAAO,OAAA;AACT;AC5CA,IAAM,sBAAA,GAAyB,eAAA;AAC/B,IAAM,qBAAA,GAAwB,cAAA;AAO9B,eAAsB,gBAAA,GAInB;AACD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,EAAQ;AAElC,EAAA,MAAM,UAAU,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,iBAAA,IAAqB,sBAAsB,CAAA,EAAG,KAAA;AACrF,EAAA,MAAM,SAAS,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,gBAAA,IAAoB,qBAAqB,CAAA,EAAG,KAAA;AAElF,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAU,MAAA,CAAO,aAAA;AAAA,IACzB,OAAA,EAAS,WAAW,MAAA,CAAO;AAAA;AAAA,GAE7B;AACF;;;AClBA,eAAsB,cACpB,OAAA,EAC8B;AAC9B,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,EAAU,CAAE,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAC5C;AAOA,eAAsB,UAAA,CACpB,GAAA,EACA,MAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,WAAU,CAAE,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,QAAQ,QAAQ,CAAA;AACxD","file":"countries.js","sourcesContent":["import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n","import { cookies } from 'next/headers';\nimport { getConfig } from './config';\n\nconst DEFAULT_COUNTRY_COOKIE = 'spree_country';\nconst DEFAULT_LOCALE_COOKIE = 'spree_locale';\n\n/**\n * Read locale/currency/country from cookies (set by middleware).\n * Falls back to config defaults.\n * @internal\n */\nexport async function getLocaleOptions(): Promise<{\n locale?: string;\n currency?: string;\n country?: string;\n}> {\n const config = getConfig();\n const cookieStore = await cookies();\n\n const country = cookieStore.get(config.countryCookieName ?? DEFAULT_COUNTRY_COOKIE)?.value;\n const locale = cookieStore.get(config.localeCookieName ?? DEFAULT_LOCALE_COOKIE)?.value;\n\n return {\n locale: locale || config.defaultLocale,\n country: country || config.defaultCountry,\n // No currency — backend resolves from country via X-Spree-Country header\n };\n}\n","import type { Country } from '@spree/sdk';\nimport { getClient } from '../config';\nimport { getLocaleOptions } from '../locale';\nimport type { SpreeNextOptions } from '../types';\n\n/**\n * List countries available in the store.\n * Use ?expand=market to expand market details (currency, locale, tax_inclusive).\n */\nexport async function listCountries(\n options?: SpreeNextOptions\n): Promise<{ data: Country[] }> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().countries.list(resolved);\n}\n\n/**\n * Get a country by ISO code.\n * @param iso - ISO 3166-1 alpha-2 code (e.g., \"US\", \"DE\")\n * @param params - Optional params (e.g., { expand: ['states'] } or { expand: ['market'] })\n */\nexport async function getCountry(\n iso: string,\n params?: { expand?: string[] },\n options?: SpreeNextOptions\n): Promise<Country> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().countries.get(iso, params, resolved);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Currency } from '@spree/sdk';
|
|
2
2
|
import { SpreeNextOptions } from '../types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,7 +6,7 @@ import { SpreeNextOptions } from '../types.js';
|
|
|
6
6
|
* Locale/country are auto-read from cookies when not provided.
|
|
7
7
|
*/
|
|
8
8
|
declare function listCurrencies(options?: SpreeNextOptions): Promise<{
|
|
9
|
-
data:
|
|
9
|
+
data: Currency[];
|
|
10
10
|
}>;
|
|
11
11
|
|
|
12
12
|
export { listCurrencies };
|
package/dist/data/currencies.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClient } from '@spree/sdk';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
|
|
4
4
|
// src/config.ts
|
|
@@ -6,7 +6,7 @@ var _client = null;
|
|
|
6
6
|
var _config = null;
|
|
7
7
|
function initSpreeNext(config) {
|
|
8
8
|
_config = config;
|
|
9
|
-
_client =
|
|
9
|
+
_client = createClient({
|
|
10
10
|
baseUrl: config.baseUrl,
|
|
11
11
|
publishableKey: config.publishableKey
|
|
12
12
|
});
|
|
@@ -48,7 +48,7 @@ async function getLocaleOptions() {
|
|
|
48
48
|
// src/data/currencies.ts
|
|
49
49
|
async function listCurrencies(options) {
|
|
50
50
|
const resolved = options ?? await getLocaleOptions();
|
|
51
|
-
return getClient().
|
|
51
|
+
return getClient().currencies.list(resolved);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
export { listCurrencies };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/currencies.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/currencies.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,GAAyB,IAAA;AAC7B,IAAI,OAAA,GAAkC,IAAA;AAO/B,SAAS,cAAc,MAAA,EAA+B;AAC3D,EAAA,OAAA,GAAU,MAAA;AACV,EAAA,OAAA,GAAU,YAAA,CAAa;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,gBAAgB,MAAA,CAAO;AAAA,GACxB,CAAA;AACH;AAMO,SAAS,SAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,aAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,qBAAA;AACnC,IAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,MAAA,aAAA,CAAc,EAAE,OAAA,EAAS,cAAA,EAAgB,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,SAAA,GAA6B;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,SAAA,EAAU;AAAA,EACZ;AACA,EAAA,OAAO,OAAA;AACT;AC5CA,IAAM,sBAAA,GAAyB,eAAA;AAC/B,IAAM,qBAAA,GAAwB,cAAA;AAO9B,eAAsB,gBAAA,GAInB;AACD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,EAAQ;AAElC,EAAA,MAAM,UAAU,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,iBAAA,IAAqB,sBAAsB,CAAA,EAAG,KAAA;AACrF,EAAA,MAAM,SAAS,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,gBAAA,IAAoB,qBAAqB,CAAA,EAAG,KAAA;AAElF,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAU,MAAA,CAAO,aAAA;AAAA,IACzB,OAAA,EAAS,WAAW,MAAA,CAAO;AAAA;AAAA,GAE7B;AACF;;;AClBA,eAAsB,eACpB,OAAA,EAC+B;AAC/B,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,EAAU,CAAE,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAC7C","file":"currencies.js","sourcesContent":["import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n","import { cookies } from 'next/headers';\nimport { getConfig } from './config';\n\nconst DEFAULT_COUNTRY_COOKIE = 'spree_country';\nconst DEFAULT_LOCALE_COOKIE = 'spree_locale';\n\n/**\n * Read locale/currency/country from cookies (set by middleware).\n * Falls back to config defaults.\n * @internal\n */\nexport async function getLocaleOptions(): Promise<{\n locale?: string;\n currency?: string;\n country?: string;\n}> {\n const config = getConfig();\n const cookieStore = await cookies();\n\n const country = cookieStore.get(config.countryCookieName ?? DEFAULT_COUNTRY_COOKIE)?.value;\n const locale = cookieStore.get(config.localeCookieName ?? DEFAULT_LOCALE_COOKIE)?.value;\n\n return {\n locale: locale || config.defaultLocale,\n country: country || config.defaultCountry,\n // No currency — backend resolves from country via X-Spree-Country header\n };\n}\n","import type { Currency } from '@spree/sdk';\nimport { getClient } from '../config';\nimport { getLocaleOptions } from '../locale';\nimport type { SpreeNextOptions } from '../types';\n\n/**\n * List currencies supported by the store (derived from markets).\n * Locale/country are auto-read from cookies when not provided.\n */\nexport async function listCurrencies(\n options?: SpreeNextOptions\n): Promise<{ data: Currency[] }> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().currencies.list(resolved);\n}\n"]}
|
package/dist/data/locales.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Locale } from '@spree/sdk';
|
|
2
2
|
import { SpreeNextOptions } from '../types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,7 +6,7 @@ import { SpreeNextOptions } from '../types.js';
|
|
|
6
6
|
* Locale/country are auto-read from cookies when not provided.
|
|
7
7
|
*/
|
|
8
8
|
declare function listLocales(options?: SpreeNextOptions): Promise<{
|
|
9
|
-
data:
|
|
9
|
+
data: Locale[];
|
|
10
10
|
}>;
|
|
11
11
|
|
|
12
12
|
export { listLocales };
|
package/dist/data/locales.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClient } from '@spree/sdk';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
|
|
4
4
|
// src/config.ts
|
|
@@ -6,7 +6,7 @@ var _client = null;
|
|
|
6
6
|
var _config = null;
|
|
7
7
|
function initSpreeNext(config) {
|
|
8
8
|
_config = config;
|
|
9
|
-
_client =
|
|
9
|
+
_client = createClient({
|
|
10
10
|
baseUrl: config.baseUrl,
|
|
11
11
|
publishableKey: config.publishableKey
|
|
12
12
|
});
|
|
@@ -48,7 +48,7 @@ async function getLocaleOptions() {
|
|
|
48
48
|
// src/data/locales.ts
|
|
49
49
|
async function listLocales(options) {
|
|
50
50
|
const resolved = options ?? await getLocaleOptions();
|
|
51
|
-
return getClient().
|
|
51
|
+
return getClient().locales.list(resolved);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
export { listLocales };
|
package/dist/data/locales.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/locales.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/locales.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,GAAyB,IAAA;AAC7B,IAAI,OAAA,GAAkC,IAAA;AAO/B,SAAS,cAAc,MAAA,EAA+B;AAC3D,EAAA,OAAA,GAAU,MAAA;AACV,EAAA,OAAA,GAAU,YAAA,CAAa;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,gBAAgB,MAAA,CAAO;AAAA,GACxB,CAAA;AACH;AAMO,SAAS,SAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,aAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,qBAAA;AACnC,IAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,MAAA,aAAA,CAAc,EAAE,OAAA,EAAS,cAAA,EAAgB,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,SAAA,GAA6B;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,SAAA,EAAU;AAAA,EACZ;AACA,EAAA,OAAO,OAAA;AACT;AC5CA,IAAM,sBAAA,GAAyB,eAAA;AAC/B,IAAM,qBAAA,GAAwB,cAAA;AAO9B,eAAsB,gBAAA,GAInB;AACD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,EAAQ;AAElC,EAAA,MAAM,UAAU,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,iBAAA,IAAqB,sBAAsB,CAAA,EAAG,KAAA;AACrF,EAAA,MAAM,SAAS,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,gBAAA,IAAoB,qBAAqB,CAAA,EAAG,KAAA;AAElF,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAU,MAAA,CAAO,aAAA;AAAA,IACzB,OAAA,EAAS,WAAW,MAAA,CAAO;AAAA;AAAA,GAE7B;AACF;;;AClBA,eAAsB,YACpB,OAAA,EAC6B;AAC7B,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,EAAU,CAAE,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAC1C","file":"locales.js","sourcesContent":["import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n","import { cookies } from 'next/headers';\nimport { getConfig } from './config';\n\nconst DEFAULT_COUNTRY_COOKIE = 'spree_country';\nconst DEFAULT_LOCALE_COOKIE = 'spree_locale';\n\n/**\n * Read locale/currency/country from cookies (set by middleware).\n * Falls back to config defaults.\n * @internal\n */\nexport async function getLocaleOptions(): Promise<{\n locale?: string;\n currency?: string;\n country?: string;\n}> {\n const config = getConfig();\n const cookieStore = await cookies();\n\n const country = cookieStore.get(config.countryCookieName ?? DEFAULT_COUNTRY_COOKIE)?.value;\n const locale = cookieStore.get(config.localeCookieName ?? DEFAULT_LOCALE_COOKIE)?.value;\n\n return {\n locale: locale || config.defaultLocale,\n country: country || config.defaultCountry,\n // No currency — backend resolves from country via X-Spree-Country header\n };\n}\n","import type { Locale } from '@spree/sdk';\nimport { getClient } from '../config';\nimport { getLocaleOptions } from '../locale';\nimport type { SpreeNextOptions } from '../types';\n\n/**\n * List locales supported by the store (derived from markets).\n * Locale/country are auto-read from cookies when not provided.\n */\nexport async function listLocales(\n options?: SpreeNextOptions\n): Promise<{ data: Locale[] }> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().locales.list(resolved);\n}\n"]}
|
package/dist/data/markets.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Market, Country } from '@spree/sdk';
|
|
2
2
|
import { SpreeNextOptions } from '../types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,24 +6,24 @@ import { SpreeNextOptions } from '../types.js';
|
|
|
6
6
|
* Each market contains currency, locales, tax_inclusive flag, and countries.
|
|
7
7
|
*/
|
|
8
8
|
declare function listMarkets(options?: SpreeNextOptions): Promise<{
|
|
9
|
-
data:
|
|
9
|
+
data: Market[];
|
|
10
10
|
}>;
|
|
11
11
|
/**
|
|
12
12
|
* Get a market by prefixed ID.
|
|
13
13
|
* @param id - Market prefixed ID (e.g., "mkt_k5nR8xLq")
|
|
14
14
|
*/
|
|
15
|
-
declare function getMarket(id: string, options?: SpreeNextOptions): Promise<
|
|
15
|
+
declare function getMarket(id: string, options?: SpreeNextOptions): Promise<Market>;
|
|
16
16
|
/**
|
|
17
17
|
* Resolve which market applies for a given country.
|
|
18
18
|
* @param country - ISO 3166-1 alpha-2 code (e.g., "DE", "US")
|
|
19
19
|
*/
|
|
20
|
-
declare function resolveMarket(country: string, options?: SpreeNextOptions): Promise<
|
|
20
|
+
declare function resolveMarket(country: string, options?: SpreeNextOptions): Promise<Market>;
|
|
21
21
|
/**
|
|
22
22
|
* List countries belonging to a market.
|
|
23
23
|
* @param marketId - Market prefixed ID
|
|
24
24
|
*/
|
|
25
25
|
declare function listMarketCountries(marketId: string, options?: SpreeNextOptions): Promise<{
|
|
26
|
-
data:
|
|
26
|
+
data: Country[];
|
|
27
27
|
}>;
|
|
28
28
|
/**
|
|
29
29
|
* Get a country by ISO code within a market.
|
|
@@ -32,6 +32,6 @@ declare function listMarketCountries(marketId: string, options?: SpreeNextOption
|
|
|
32
32
|
*/
|
|
33
33
|
declare function getMarketCountry(marketId: string, iso: string, params?: {
|
|
34
34
|
expand?: string[];
|
|
35
|
-
}, options?: SpreeNextOptions): Promise<
|
|
35
|
+
}, options?: SpreeNextOptions): Promise<Country>;
|
|
36
36
|
|
|
37
37
|
export { getMarket, getMarketCountry, listMarketCountries, listMarkets, resolveMarket };
|
package/dist/data/markets.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClient } from '@spree/sdk';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
|
|
4
4
|
// src/config.ts
|
|
@@ -6,7 +6,7 @@ var _client = null;
|
|
|
6
6
|
var _config = null;
|
|
7
7
|
function initSpreeNext(config) {
|
|
8
8
|
_config = config;
|
|
9
|
-
_client =
|
|
9
|
+
_client = createClient({
|
|
10
10
|
baseUrl: config.baseUrl,
|
|
11
11
|
publishableKey: config.publishableKey
|
|
12
12
|
});
|
|
@@ -48,23 +48,23 @@ async function getLocaleOptions() {
|
|
|
48
48
|
// src/data/markets.ts
|
|
49
49
|
async function listMarkets(options) {
|
|
50
50
|
const resolved = options ?? await getLocaleOptions();
|
|
51
|
-
return getClient().
|
|
51
|
+
return getClient().markets.list(resolved);
|
|
52
52
|
}
|
|
53
53
|
async function getMarket(id, options) {
|
|
54
54
|
const resolved = options ?? await getLocaleOptions();
|
|
55
|
-
return getClient().
|
|
55
|
+
return getClient().markets.get(id, resolved);
|
|
56
56
|
}
|
|
57
57
|
async function resolveMarket(country, options) {
|
|
58
58
|
const resolved = options ?? await getLocaleOptions();
|
|
59
|
-
return getClient().
|
|
59
|
+
return getClient().markets.resolve(country, resolved);
|
|
60
60
|
}
|
|
61
61
|
async function listMarketCountries(marketId, options) {
|
|
62
62
|
const resolved = options ?? await getLocaleOptions();
|
|
63
|
-
return getClient().
|
|
63
|
+
return getClient().markets.countries.list(marketId, resolved);
|
|
64
64
|
}
|
|
65
65
|
async function getMarketCountry(marketId, iso, params, options) {
|
|
66
66
|
const resolved = options ?? await getLocaleOptions();
|
|
67
|
-
return getClient().
|
|
67
|
+
return getClient().markets.countries.get(marketId, iso, params, resolved);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
export { getMarket, getMarketCountry, listMarketCountries, listMarkets, resolveMarket };
|
package/dist/data/markets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/markets.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/config.ts","../../src/locale.ts","../../src/data/markets.ts"],"names":[],"mappings":";;;;AAGA,IAAI,OAAA,GAAyB,IAAA;AAC7B,IAAI,OAAA,GAAkC,IAAA;AAO/B,SAAS,cAAc,MAAA,EAA+B;AAC3D,EAAA,OAAA,GAAU,MAAA;AACV,EAAA,OAAA,GAAU,YAAA,CAAa;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,gBAAgB,MAAA,CAAO;AAAA,GACxB,CAAA;AACH;AAMO,SAAS,SAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,aAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,qBAAA;AACnC,IAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,MAAA,aAAA,CAAc,EAAE,OAAA,EAAS,cAAA,EAAgB,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,SAAA,GAA6B;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,SAAA,EAAU;AAAA,EACZ;AACA,EAAA,OAAO,OAAA;AACT;AC5CA,IAAM,sBAAA,GAAyB,eAAA;AAC/B,IAAM,qBAAA,GAAwB,cAAA;AAO9B,eAAsB,gBAAA,GAInB;AACD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,EAAQ;AAElC,EAAA,MAAM,UAAU,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,iBAAA,IAAqB,sBAAsB,CAAA,EAAG,KAAA;AACrF,EAAA,MAAM,SAAS,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,gBAAA,IAAoB,qBAAqB,CAAA,EAAG,KAAA;AAElF,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAU,MAAA,CAAO,aAAA;AAAA,IACzB,OAAA,EAAS,WAAW,MAAA,CAAO;AAAA;AAAA,GAE7B;AACF;;;AClBA,eAAsB,YACpB,OAAA,EAC6B;AAC7B,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,EAAU,CAAE,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAC1C;AAMA,eAAsB,SAAA,CACpB,IACA,OAAA,EACiB;AACjB,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,EAAU,CAAE,OAAA,CAAQ,GAAA,CAAI,IAAI,QAAQ,CAAA;AAC7C;AAMA,eAAsB,aAAA,CACpB,SACA,OAAA,EACiB;AACjB,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,EAAU,CAAE,OAAA,CAAQ,OAAA,CAAQ,SAAS,QAAQ,CAAA;AACtD;AAMA,eAAsB,mBAAA,CACpB,UACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,WAAU,CAAE,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,UAAU,QAAQ,CAAA;AAC9D;AAOA,eAAsB,gBAAA,CACpB,QAAA,EACA,GAAA,EACA,MAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,QAAA,GAAW,OAAA,IAAW,MAAM,gBAAA,EAAiB;AACnD,EAAA,OAAO,SAAA,GAAY,OAAA,CAAQ,SAAA,CAAU,IAAI,QAAA,EAAU,GAAA,EAAK,QAAQ,QAAQ,CAAA;AAC1E","file":"markets.js","sourcesContent":["import { createClient, type Client } from '@spree/sdk';\nimport type { SpreeNextConfig } from './types';\n\nlet _client: Client | null = null;\nlet _config: SpreeNextConfig | null = null;\n\n/**\n * Initialize the Spree Next.js integration.\n * Call this once in your app (e.g., in `lib/storefront.ts`).\n * If not called, the client will auto-initialize from SPREE_API_URL and SPREE_PUBLISHABLE_KEY env vars.\n */\nexport function initSpreeNext(config: SpreeNextConfig): void {\n _config = config;\n _client = createClient({\n baseUrl: config.baseUrl,\n publishableKey: config.publishableKey,\n });\n}\n\n/**\n * Get the Client instance. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getClient(): Client {\n if (!_client) {\n const baseUrl = process.env.SPREE_API_URL;\n const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;\n if (baseUrl && publishableKey) {\n initSpreeNext({ baseUrl, publishableKey });\n } else {\n throw new Error(\n '@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables.'\n );\n }\n }\n return _client!;\n}\n\n/**\n * Get the current config. Auto-initializes from env vars if needed.\n * @internal\n */\nexport function getConfig(): SpreeNextConfig {\n if (!_config) {\n getClient(); // triggers auto-init\n }\n return _config!;\n}\n\n/**\n * Reset the client (useful for testing).\n * @internal\n */\nexport function resetClient(): void {\n _client = null;\n _config = null;\n}\n","import { cookies } from 'next/headers';\nimport { getConfig } from './config';\n\nconst DEFAULT_COUNTRY_COOKIE = 'spree_country';\nconst DEFAULT_LOCALE_COOKIE = 'spree_locale';\n\n/**\n * Read locale/currency/country from cookies (set by middleware).\n * Falls back to config defaults.\n * @internal\n */\nexport async function getLocaleOptions(): Promise<{\n locale?: string;\n currency?: string;\n country?: string;\n}> {\n const config = getConfig();\n const cookieStore = await cookies();\n\n const country = cookieStore.get(config.countryCookieName ?? DEFAULT_COUNTRY_COOKIE)?.value;\n const locale = cookieStore.get(config.localeCookieName ?? DEFAULT_LOCALE_COOKIE)?.value;\n\n return {\n locale: locale || config.defaultLocale,\n country: country || config.defaultCountry,\n // No currency — backend resolves from country via X-Spree-Country header\n };\n}\n","import type { Market, Country } from '@spree/sdk';\nimport { getClient } from '../config';\nimport { getLocaleOptions } from '../locale';\nimport type { SpreeNextOptions } from '../types';\n\n/**\n * List all markets for the current store.\n * Each market contains currency, locales, tax_inclusive flag, and countries.\n */\nexport async function listMarkets(\n options?: SpreeNextOptions\n): Promise<{ data: Market[] }> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().markets.list(resolved);\n}\n\n/**\n * Get a market by prefixed ID.\n * @param id - Market prefixed ID (e.g., \"mkt_k5nR8xLq\")\n */\nexport async function getMarket(\n id: string,\n options?: SpreeNextOptions\n): Promise<Market> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().markets.get(id, resolved);\n}\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 */\nexport async function resolveMarket(\n country: string,\n options?: SpreeNextOptions\n): Promise<Market> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().markets.resolve(country, resolved);\n}\n\n/**\n * List countries belonging to a market.\n * @param marketId - Market prefixed ID\n */\nexport async function listMarketCountries(\n marketId: string,\n options?: SpreeNextOptions\n): Promise<{ data: Country[] }> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().markets.countries.list(marketId, resolved);\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 */\nexport async function getMarketCountry(\n marketId: string,\n iso: string,\n params?: { expand?: string[] },\n options?: SpreeNextOptions\n): Promise<Country> {\n const resolved = options ?? await getLocaleOptions();\n return getClient().markets.countries.get(marketId, iso, params, resolved);\n}\n"]}
|
package/dist/data/products.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Product, ProductFiltersResponse, ProductListParams, PaginatedResponse } from '@spree/sdk';
|
|
2
2
|
import { SpreeNextOptions } from '../types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* List products with optional filtering, sorting, and pagination.
|
|
6
6
|
* Locale/country are auto-read from cookies when not provided.
|
|
7
7
|
*/
|
|
8
|
-
declare function listProducts(params?: ProductListParams, options?: SpreeNextOptions): Promise<PaginatedResponse<
|
|
8
|
+
declare function listProducts(params?: ProductListParams, options?: SpreeNextOptions): Promise<PaginatedResponse<Product>>;
|
|
9
9
|
/**
|
|
10
10
|
* Get a single product by slug or ID.
|
|
11
11
|
* Locale/country are auto-read from cookies when not provided.
|
|
12
12
|
*/
|
|
13
13
|
declare function getProduct(slugOrId: string, params?: {
|
|
14
14
|
expand?: string[];
|
|
15
|
-
}, options?: SpreeNextOptions): Promise<
|
|
15
|
+
}, options?: SpreeNextOptions): Promise<Product>;
|
|
16
16
|
/**
|
|
17
17
|
* Get available product filters (price ranges, option values, etc.).
|
|
18
18
|
* Locale/country are auto-read from cookies when not provided.
|
package/dist/data/products.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClient } from '@spree/sdk';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
|
|
4
4
|
// src/config.ts
|
|
@@ -6,7 +6,7 @@ var _client = null;
|
|
|
6
6
|
var _config = null;
|
|
7
7
|
function initSpreeNext(config) {
|
|
8
8
|
_config = config;
|
|
9
|
-
_client =
|
|
9
|
+
_client = createClient({
|
|
10
10
|
baseUrl: config.baseUrl,
|
|
11
11
|
publishableKey: config.publishableKey
|
|
12
12
|
});
|
|
@@ -48,15 +48,15 @@ async function getLocaleOptions() {
|
|
|
48
48
|
// src/data/products.ts
|
|
49
49
|
async function listProducts(params, options) {
|
|
50
50
|
const resolved = options ?? await getLocaleOptions();
|
|
51
|
-
return getClient().
|
|
51
|
+
return getClient().products.list(params, resolved);
|
|
52
52
|
}
|
|
53
53
|
async function getProduct(slugOrId, params, options) {
|
|
54
54
|
const resolved = options ?? await getLocaleOptions();
|
|
55
|
-
return getClient().
|
|
55
|
+
return getClient().products.get(slugOrId, params, resolved);
|
|
56
56
|
}
|
|
57
57
|
async function getProductFilters(params, options) {
|
|
58
58
|
const resolved = options ?? await getLocaleOptions();
|
|
59
|
-
return getClient().
|
|
59
|
+
return getClient().products.filters(params, resolved);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
export { getProduct, getProductFilters, listProducts };
|