@spree/next 0.9.0 → 0.10.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/README.md +1 -1
- package/dist/actions/addresses.js.map +1 -1
- package/dist/actions/auth.js +13 -4
- package/dist/actions/auth.js.map +1 -1
- package/dist/actions/cart.d.ts +28 -13
- package/dist/actions/cart.js +124 -23
- package/dist/actions/cart.js.map +1 -1
- package/dist/actions/credit-cards.js.map +1 -1
- package/dist/actions/gift-cards.js.map +1 -1
- package/dist/actions/orders.d.ts +1 -0
- package/dist/actions/orders.js +19 -3
- package/dist/actions/orders.js.map +1 -1
- package/dist/actions/payment-sessions.js +25 -9
- package/dist/actions/payment-sessions.js.map +1 -1
- package/dist/actions/payment-setup-sessions.js.map +1 -1
- package/dist/index.d.ts +7 -21
- package/dist/index.js +110 -59
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/actions/checkout.d.ts +0 -33
- package/dist/actions/checkout.js +0 -127
- package/dist/actions/checkout.js.map +0 -1
package/dist/actions/checkout.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
"use server";
|
|
2
|
-
|
|
3
|
-
// src/actions/checkout.ts
|
|
4
|
-
import { revalidateTag } from "next/cache";
|
|
5
|
-
|
|
6
|
-
// src/config.ts
|
|
7
|
-
import { createClient } from "@spree/sdk";
|
|
8
|
-
var _client = null;
|
|
9
|
-
var _config = null;
|
|
10
|
-
function initSpreeNext(config) {
|
|
11
|
-
_config = config;
|
|
12
|
-
_client = createClient({
|
|
13
|
-
baseUrl: config.baseUrl,
|
|
14
|
-
publishableKey: config.publishableKey
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
function getClient() {
|
|
18
|
-
if (!_client) {
|
|
19
|
-
const baseUrl = process.env.SPREE_API_URL;
|
|
20
|
-
const publishableKey = process.env.SPREE_PUBLISHABLE_KEY;
|
|
21
|
-
if (baseUrl && publishableKey) {
|
|
22
|
-
initSpreeNext({ baseUrl, publishableKey });
|
|
23
|
-
} else {
|
|
24
|
-
throw new Error(
|
|
25
|
-
"@spree/next is not configured. Either call initSpreeNext() or set SPREE_API_URL and SPREE_PUBLISHABLE_KEY environment variables."
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return _client;
|
|
30
|
-
}
|
|
31
|
-
function getConfig() {
|
|
32
|
-
if (!_config) {
|
|
33
|
-
getClient();
|
|
34
|
-
}
|
|
35
|
-
return _config;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// src/cookies.ts
|
|
39
|
-
import { cookies } from "next/headers";
|
|
40
|
-
var DEFAULT_CART_COOKIE = "_spree_cart_token";
|
|
41
|
-
var DEFAULT_ACCESS_TOKEN_COOKIE = "_spree_jwt";
|
|
42
|
-
var CART_TOKEN_MAX_AGE = 60 * 60 * 24 * 30;
|
|
43
|
-
var ACCESS_TOKEN_MAX_AGE = 60 * 60 * 24 * 7;
|
|
44
|
-
function getCartCookieName() {
|
|
45
|
-
try {
|
|
46
|
-
return getConfig().cartCookieName ?? DEFAULT_CART_COOKIE;
|
|
47
|
-
} catch {
|
|
48
|
-
return DEFAULT_CART_COOKIE;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
function getAccessTokenCookieName() {
|
|
52
|
-
try {
|
|
53
|
-
return getConfig().accessTokenCookieName ?? DEFAULT_ACCESS_TOKEN_COOKIE;
|
|
54
|
-
} catch {
|
|
55
|
-
return DEFAULT_ACCESS_TOKEN_COOKIE;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
async function getCartToken() {
|
|
59
|
-
const cookieStore = await cookies();
|
|
60
|
-
return cookieStore.get(getCartCookieName())?.value;
|
|
61
|
-
}
|
|
62
|
-
async function getAccessToken() {
|
|
63
|
-
const cookieStore = await cookies();
|
|
64
|
-
return cookieStore.get(getAccessTokenCookieName())?.value;
|
|
65
|
-
}
|
|
66
|
-
async function getCheckoutOptions() {
|
|
67
|
-
const spreeToken = await getCartToken();
|
|
68
|
-
const token = await getAccessToken();
|
|
69
|
-
return { spreeToken, token };
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// src/actions/checkout.ts
|
|
73
|
-
async function getCheckout() {
|
|
74
|
-
const options = await getCheckoutOptions();
|
|
75
|
-
return getClient().cart.get(options);
|
|
76
|
-
}
|
|
77
|
-
async function updateCheckout(params) {
|
|
78
|
-
const options = await getCheckoutOptions();
|
|
79
|
-
const result = await getClient().checkout.update(params, options);
|
|
80
|
-
revalidateTag("checkout");
|
|
81
|
-
return result;
|
|
82
|
-
}
|
|
83
|
-
async function getShipments() {
|
|
84
|
-
const options = await getCheckoutOptions();
|
|
85
|
-
return getClient().checkout.shipments.list(options);
|
|
86
|
-
}
|
|
87
|
-
async function selectShippingRate(shipmentId, shippingRateId) {
|
|
88
|
-
const options = await getCheckoutOptions();
|
|
89
|
-
const result = await getClient().checkout.shipments.update(
|
|
90
|
-
shipmentId,
|
|
91
|
-
{ selected_shipping_rate_id: shippingRateId },
|
|
92
|
-
options
|
|
93
|
-
);
|
|
94
|
-
revalidateTag("checkout");
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
async function applyCoupon(code) {
|
|
98
|
-
const options = await getCheckoutOptions();
|
|
99
|
-
const result = await getClient().cart.couponCodes.apply(code, options);
|
|
100
|
-
revalidateTag("checkout");
|
|
101
|
-
revalidateTag("cart");
|
|
102
|
-
return result;
|
|
103
|
-
}
|
|
104
|
-
async function removeCoupon(code) {
|
|
105
|
-
const options = await getCheckoutOptions();
|
|
106
|
-
const result = await getClient().cart.couponCodes.remove(code, options);
|
|
107
|
-
revalidateTag("checkout");
|
|
108
|
-
revalidateTag("cart");
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
async function complete() {
|
|
112
|
-
const options = await getCheckoutOptions();
|
|
113
|
-
const result = await getClient().checkout.complete(options);
|
|
114
|
-
revalidateTag("checkout");
|
|
115
|
-
revalidateTag("cart");
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
118
|
-
export {
|
|
119
|
-
applyCoupon,
|
|
120
|
-
complete,
|
|
121
|
-
getCheckout,
|
|
122
|
-
getShipments,
|
|
123
|
-
removeCoupon,
|
|
124
|
-
selectShippingRate,
|
|
125
|
-
updateCheckout
|
|
126
|
-
};
|
|
127
|
-
//# sourceMappingURL=checkout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/checkout.ts","../../src/config.ts","../../src/cookies.ts"],"sourcesContent":["'use server';\n\nimport { revalidateTag } from 'next/cache';\nimport type { Cart, Order, Shipment, UpdateCheckoutParams, ListResponse } from '@spree/sdk';\nimport { getClient } from '../config';\nimport { getCheckoutOptions } from '../cookies';\n\n/**\n * Get the current checkout state (cart with expanded associations).\n */\nexport async function getCheckout(): Promise<Cart> {\n const options = await getCheckoutOptions();\n return getClient().cart.get(options);\n}\n\n/**\n * Update checkout info (email, addresses, special instructions).\n */\nexport async function updateCheckout(\n params: UpdateCheckoutParams\n): Promise<Cart> {\n const options = await getCheckoutOptions();\n const result = await getClient().checkout.update(params, options);\n revalidateTag('checkout');\n return result;\n}\n\n/**\n * Get shipments with shipping rates for the current cart.\n */\nexport async function getShipments(): Promise<ListResponse<Shipment>> {\n const options = await getCheckoutOptions();\n return getClient().checkout.shipments.list(options);\n}\n\n/**\n * Select a shipping rate for a shipment.\n * Returns the updated cart with recalculated totals.\n */\nexport async function selectShippingRate(\n shipmentId: string,\n shippingRateId: string\n): Promise<Cart> {\n const options = await getCheckoutOptions();\n const result = await getClient().checkout.shipments.update(\n shipmentId,\n { selected_shipping_rate_id: shippingRateId },\n options\n );\n revalidateTag('checkout');\n return result;\n}\n\n/**\n * Apply a coupon code to the cart.\n */\nexport async function applyCoupon(\n code: string\n): Promise<Cart> {\n const options = await getCheckoutOptions();\n const result = await getClient().cart.couponCodes.apply(code, options);\n revalidateTag('checkout');\n revalidateTag('cart');\n return result;\n}\n\n/**\n * Remove a coupon code from the cart.\n */\nexport async function removeCoupon(\n code: string\n): Promise<Cart> {\n const options = await getCheckoutOptions();\n const result = await getClient().cart.couponCodes.remove(code, options);\n revalidateTag('checkout');\n revalidateTag('cart');\n return result;\n}\n\n/**\n * Complete the checkout and place the order.\n */\nexport async function complete(): Promise<Order> {\n const options = await getCheckoutOptions();\n const result = await getClient().checkout.complete(options);\n revalidateTag('checkout');\n revalidateTag('cart');\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\n// --- Checkout Options (combined cart + access tokens for checkout/payment actions) ---\n\nexport async function getCheckoutOptions(): Promise<{\n spreeToken: string | undefined;\n token: string | undefined;\n}> {\n const spreeToken = await getCartToken();\n const token = await getAccessToken();\n return { spreeToken, token };\n}\n"],"mappings":"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","names":[]}
|