@doswiftly/storefront-sdk 4.7.2 → 5.0.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/CHANGELOG.md +639 -0
- package/dist/core/auth/auth-client.d.ts +15 -8
- package/dist/core/auth/auth-client.d.ts.map +1 -1
- package/dist/core/auth/auth-client.js +18 -11
- package/dist/core/auth/handlers.d.ts +31 -0
- package/dist/core/auth/handlers.d.ts.map +1 -1
- package/dist/core/auth/handlers.js +69 -0
- package/dist/core/auth/types.d.ts +5 -5
- package/dist/core/auth/types.d.ts.map +1 -1
- package/dist/core/cache.d.ts +1 -1
- package/dist/core/cache.js +1 -1
- package/dist/core/cart/types.d.ts +1 -1
- package/dist/core/cart/types.d.ts.map +1 -1
- package/dist/core/client/compose.d.ts +1 -1
- package/dist/core/client/compose.js +1 -1
- package/dist/core/client/create-client.d.ts +2 -2
- package/dist/core/client/create-client.js +2 -2
- package/dist/core/client/execute.d.ts.map +1 -1
- package/dist/core/client/execute.js +6 -0
- package/dist/core/client/types.js +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/language/cookie-config.d.ts +7 -2
- package/dist/core/language/cookie-config.d.ts.map +1 -1
- package/dist/core/language/cookie-config.js +7 -2
- package/dist/core/operations/auth.d.ts +4 -4
- package/dist/core/operations/auth.d.ts.map +1 -1
- package/dist/core/operations/auth.js +11 -11
- package/dist/core/operations/cart.d.ts +8 -8
- package/dist/core/operations/cart.d.ts.map +1 -1
- package/dist/core/operations/cart.js +9 -9
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/react/hooks/use-auth.d.ts.map +1 -1
- package/dist/react/hooks/use-auth.js +6 -13
- package/dist/react/stores/auth.store.d.ts +0 -2
- package/dist/react/stores/auth.store.d.ts.map +1 -1
- package/dist/react/stores/auth.store.js +10 -7
- package/package.json +2 -3
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
* const authClient = new AuthClient(storefrontClient);
|
|
10
10
|
*
|
|
11
11
|
* const result = await authClient.login('user@example.com', 'password');
|
|
12
|
-
* console.log(result.accessToken); // JWT
|
|
12
|
+
* console.log(result.accessToken); // JWT (also set as httpOnly cookie by API)
|
|
13
13
|
*
|
|
14
|
-
*
|
|
14
|
+
* // Auth context resolved server-side from cookie/Bearer — no token argument.
|
|
15
|
+
* const customer = await authClient.getCustomer();
|
|
15
16
|
* ```
|
|
16
17
|
*/
|
|
17
18
|
import { assertNoUserErrors } from '../helpers/assert-no-user-errors';
|
|
@@ -35,22 +36,26 @@ export class AuthClient {
|
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
|
-
* Logout —
|
|
39
|
+
* Logout — invalidates auth cookie on backend (server clears Set-Cookie via Apollo plugin).
|
|
40
|
+
* Token previously passed jako mutation arg → drop'd w Iteracja 2 (auth konsolidacja).
|
|
41
|
+
* Auth context czytany przez backend `StorefrontShopGuard` z httpOnly cookie lub
|
|
42
|
+
* `Authorization: Bearer` header (gdy ustawione przez SDK auth middleware).
|
|
39
43
|
* Does not throw on failure (token may already be expired).
|
|
40
44
|
*/
|
|
41
|
-
async logout(
|
|
45
|
+
async logout() {
|
|
42
46
|
try {
|
|
43
|
-
await this.client.mutate(CUSTOMER_LOGOUT
|
|
47
|
+
await this.client.mutate(CUSTOMER_LOGOUT);
|
|
44
48
|
}
|
|
45
49
|
catch {
|
|
46
50
|
// Silently ignore — token may already be expired
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
53
|
/**
|
|
50
|
-
* Renew access token — extends expiry.
|
|
54
|
+
* Renew access token — extends expiry. Auth context czytany przez backend
|
|
55
|
+
* z cookie / Authorization Bearer (jak inne authenticated mutations).
|
|
51
56
|
*/
|
|
52
|
-
async renewToken(
|
|
53
|
-
const data = await this.client.mutate(CUSTOMER_TOKEN_RENEW
|
|
57
|
+
async renewToken() {
|
|
58
|
+
const data = await this.client.mutate(CUSTOMER_TOKEN_RENEW);
|
|
54
59
|
assertNoUserErrors(data.customerAccessTokenRenew);
|
|
55
60
|
const renewed = data.customerAccessTokenRenew.customerAccessToken;
|
|
56
61
|
return {
|
|
@@ -73,10 +78,12 @@ export class AuthClient {
|
|
|
73
78
|
};
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
76
|
-
* Fetch customer data
|
|
81
|
+
* Fetch customer data — auth context z cookie / Authorization Bearer.
|
|
82
|
+
* Token nie jest argumentem (drop'd w Iteracja 2). Browser uses cookie auto-sent;
|
|
83
|
+
* non-browser klient passes Bearer header via SDK auth middleware (`setAuthToken`).
|
|
77
84
|
*/
|
|
78
|
-
async getCustomer(
|
|
79
|
-
const data = await this.client.query(CUSTOMER_QUERY
|
|
85
|
+
async getCustomer() {
|
|
86
|
+
const data = await this.client.query(CUSTOMER_QUERY);
|
|
80
87
|
return data.customer;
|
|
81
88
|
}
|
|
82
89
|
}
|
|
@@ -22,6 +22,37 @@ interface SetTokenHandlerOptions {
|
|
|
22
22
|
* httpOnly (XSS protection), Secure in production.
|
|
23
23
|
*/
|
|
24
24
|
export declare function createSetTokenHandler(overrides?: SetTokenHandlerOptions): (request: Request) => Promise<Response>;
|
|
25
|
+
interface WhoamiHandlerOptions {
|
|
26
|
+
/** Backend GraphQL endpoint (default: `${apiUrl}/storefront/graphql`). */
|
|
27
|
+
apiUrl?: string;
|
|
28
|
+
/** Shop slug header value (X-Shop-Slug). */
|
|
29
|
+
shopSlug?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a GET handler that hydrates customer state z httpOnly cookie.
|
|
33
|
+
*
|
|
34
|
+
* Browser-based storefront po hydration mountuje React app z czystym auth store
|
|
35
|
+
* (XSS fix — `accessToken` nie persistuje w localStorage). Aby pokazać "logged in"
|
|
36
|
+
* UI bez round-trip do login, klient wywołuje GET `/api/auth/whoami`:
|
|
37
|
+
*
|
|
38
|
+
* 1. Endpoint reads httpOnly cookie `customerAccessToken` (server-side, JS-inaccessible)
|
|
39
|
+
* 2. Forward jako `Authorization: Bearer` header do backend GraphQL `customer` query
|
|
40
|
+
* 3. Return `{ isAuthenticated, customer | null }` do klienta
|
|
41
|
+
* 4. Klient setAuth(customer, '') — token NIE w body (cookie kontynuuje per-request auth)
|
|
42
|
+
*
|
|
43
|
+
* Security: origin validation, fetch via Bearer (cookie nie crossuje API boundary).
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* // app/api/auth/whoami/route.ts
|
|
48
|
+
* import { createWhoamiHandler } from '@doswiftly/storefront-sdk';
|
|
49
|
+
* export const GET = createWhoamiHandler({
|
|
50
|
+
* apiUrl: process.env.NEXT_PUBLIC_API_URL!,
|
|
51
|
+
* shopSlug: process.env.NEXT_PUBLIC_SHOP_SLUG!,
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function createWhoamiHandler(options?: WhoamiHandlerOptions): (request: Request) => Promise<Response>;
|
|
25
56
|
/**
|
|
26
57
|
* Create a POST handler that clears the auth token cookie.
|
|
27
58
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/core/auth/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,CAAC,EAAE,sBAAsB,GACjC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAgEzC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAkCjF"}
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/core/auth/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmCD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,CAAC,EAAE,sBAAsB,GACjC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAgEzC;AAED,UAAU,oBAAoB;IAC5B,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA6DzC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAkCjF"}
|
|
@@ -91,6 +91,75 @@ export function createSetTokenHandler(overrides) {
|
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a GET handler that hydrates customer state z httpOnly cookie.
|
|
96
|
+
*
|
|
97
|
+
* Browser-based storefront po hydration mountuje React app z czystym auth store
|
|
98
|
+
* (XSS fix — `accessToken` nie persistuje w localStorage). Aby pokazać "logged in"
|
|
99
|
+
* UI bez round-trip do login, klient wywołuje GET `/api/auth/whoami`:
|
|
100
|
+
*
|
|
101
|
+
* 1. Endpoint reads httpOnly cookie `customerAccessToken` (server-side, JS-inaccessible)
|
|
102
|
+
* 2. Forward jako `Authorization: Bearer` header do backend GraphQL `customer` query
|
|
103
|
+
* 3. Return `{ isAuthenticated, customer | null }` do klienta
|
|
104
|
+
* 4. Klient setAuth(customer, '') — token NIE w body (cookie kontynuuje per-request auth)
|
|
105
|
+
*
|
|
106
|
+
* Security: origin validation, fetch via Bearer (cookie nie crossuje API boundary).
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* // app/api/auth/whoami/route.ts
|
|
111
|
+
* import { createWhoamiHandler } from '@doswiftly/storefront-sdk';
|
|
112
|
+
* export const GET = createWhoamiHandler({
|
|
113
|
+
* apiUrl: process.env.NEXT_PUBLIC_API_URL!,
|
|
114
|
+
* shopSlug: process.env.NEXT_PUBLIC_SHOP_SLUG!,
|
|
115
|
+
* });
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export function createWhoamiHandler(options = {}) {
|
|
119
|
+
return async (request) => {
|
|
120
|
+
try {
|
|
121
|
+
const originError = validateOrigin(request);
|
|
122
|
+
if (originError)
|
|
123
|
+
return originError;
|
|
124
|
+
const cookieHeader = request.headers.get('cookie') ?? '';
|
|
125
|
+
const tokenMatch = cookieHeader.match(new RegExp(`(?:^|; )${AUTH_COOKIE_NAME}=([^;]+)`));
|
|
126
|
+
const token = tokenMatch ? decodeURIComponent(tokenMatch[1]) : null;
|
|
127
|
+
if (!token) {
|
|
128
|
+
return new Response(JSON.stringify({ isAuthenticated: false, customer: null }), { status: 200, headers: { 'Content-Type': 'application/json' } });
|
|
129
|
+
}
|
|
130
|
+
const apiUrl = options.apiUrl ?? process.env.NEXT_PUBLIC_API_URL ?? '';
|
|
131
|
+
const shopSlug = options.shopSlug ?? process.env.NEXT_PUBLIC_SHOP_SLUG ?? '';
|
|
132
|
+
const endpoint = `${apiUrl.replace(/\/$/, '')}/storefront/graphql`;
|
|
133
|
+
const gqlResponse = await fetch(endpoint, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
Accept: 'application/json',
|
|
138
|
+
Authorization: `Bearer ${token}`,
|
|
139
|
+
...(shopSlug ? { 'X-Shop-Slug': shopSlug } : {}),
|
|
140
|
+
},
|
|
141
|
+
body: JSON.stringify({
|
|
142
|
+
query: `query Whoami {
|
|
143
|
+
customer {
|
|
144
|
+
id
|
|
145
|
+
email
|
|
146
|
+
firstName
|
|
147
|
+
lastName
|
|
148
|
+
phone
|
|
149
|
+
}
|
|
150
|
+
}`,
|
|
151
|
+
}),
|
|
152
|
+
});
|
|
153
|
+
const json = (await gqlResponse.json());
|
|
154
|
+
const customer = json.data?.customer ?? null;
|
|
155
|
+
return new Response(JSON.stringify({ isAuthenticated: !!customer, customer }), { status: 200, headers: { 'Content-Type': 'application/json' } });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error('Error in whoami handler:', error);
|
|
159
|
+
return new Response(JSON.stringify({ isAuthenticated: false, customer: null, error: 'Internal server error' }), { status: 500, headers: { 'Content-Type': 'application/json' } });
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|
|
94
163
|
/**
|
|
95
164
|
* Create a POST handler that clears the auth token cookie.
|
|
96
165
|
*
|
|
@@ -25,8 +25,8 @@ export interface Customer {
|
|
|
25
25
|
}
|
|
26
26
|
export interface MailingAddress {
|
|
27
27
|
id: string;
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
streetLine1: string | null;
|
|
29
|
+
streetLine2: string | null;
|
|
30
30
|
city: string | null;
|
|
31
31
|
company: string | null;
|
|
32
32
|
country: string | null;
|
|
@@ -34,9 +34,9 @@ export interface MailingAddress {
|
|
|
34
34
|
firstName: string | null;
|
|
35
35
|
lastName: string | null;
|
|
36
36
|
phone: string | null;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
state: string | null;
|
|
38
|
+
stateCode: string | null;
|
|
39
|
+
postalCode: string | null;
|
|
40
40
|
isDefault: boolean;
|
|
41
41
|
}
|
|
42
42
|
export interface AuthResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/core/cache.d.ts
CHANGED
package/dist/core/cache.js
CHANGED
|
@@ -128,7 +128,7 @@ export interface CartAttributeSelectionInput {
|
|
|
128
128
|
export interface CartLineInput {
|
|
129
129
|
merchandiseId: string;
|
|
130
130
|
quantity?: number;
|
|
131
|
-
/**
|
|
131
|
+
/** Raw Line Item Properties (gift messages, engraving notes, etc.). */
|
|
132
132
|
attributes?: Array<{
|
|
133
133
|
key: string;
|
|
134
134
|
value: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/cart/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/cart/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compose middleware chain using reduceRight (
|
|
2
|
+
* Compose middleware chain using reduceRight (industry-standard pattern).
|
|
3
3
|
*
|
|
4
4
|
* Middleware execute in order: first registered runs first.
|
|
5
5
|
* Each can modify request, modify response, retry, or short-circuit.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compose middleware chain using reduceRight (
|
|
2
|
+
* Compose middleware chain using reduceRight (industry-standard pattern).
|
|
3
3
|
*
|
|
4
4
|
* Middleware execute in order: first registered runs first.
|
|
5
5
|
* Each can modify request, modify response, retry, or short-circuit.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* createStorefrontClient — transport factory (
|
|
2
|
+
* createStorefrontClient — transport factory (agnostic-core pattern).
|
|
3
3
|
*
|
|
4
4
|
* Creates a framework-agnostic GraphQL client with:
|
|
5
5
|
* - Middleware pipeline (composable, lazy)
|
|
6
6
|
* - Request deduplication (same-tick queries)
|
|
7
|
-
* - TypedDocumentString support (
|
|
7
|
+
* - TypedDocumentString support (graphql client-preset)
|
|
8
8
|
* - Plain string queries (for custom operations)
|
|
9
9
|
* - Debug mode
|
|
10
10
|
*
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* createStorefrontClient — transport factory (
|
|
2
|
+
* createStorefrontClient — transport factory (agnostic-core pattern).
|
|
3
3
|
*
|
|
4
4
|
* Creates a framework-agnostic GraphQL client with:
|
|
5
5
|
* - Middleware pipeline (composable, lazy)
|
|
6
6
|
* - Request deduplication (same-tick queries)
|
|
7
|
-
* - TypedDocumentString support (
|
|
7
|
+
* - TypedDocumentString support (graphql client-preset)
|
|
8
8
|
* - Plain string queries (for custom operations)
|
|
9
9
|
* - Debug mode
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/core/client/execute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,IAGnB,SAAS,cAAc,KAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/core/client/execute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,IAGnB,SAAS,cAAc,KAAG,OAAO,CAAC,eAAe,CAAC,CAmDjF"}
|
|
@@ -30,6 +30,12 @@ export function createExecute(config) {
|
|
|
30
30
|
},
|
|
31
31
|
body: JSON.stringify(body),
|
|
32
32
|
signal,
|
|
33
|
+
// Include httpOnly cookies (e.g. customerAccessToken auth) on cross-origin
|
|
34
|
+
// requests. Required when the storefront runs on a domain different from the
|
|
35
|
+
// backend GraphQL endpoint — same-origin browsers send cookies regardless,
|
|
36
|
+
// but cross-origin needs `credentials: 'include'` paired with the backend's
|
|
37
|
+
// `Access-Control-Allow-Credentials: true` (already configured).
|
|
38
|
+
credentials: 'include',
|
|
33
39
|
});
|
|
34
40
|
const json = await response.json();
|
|
35
41
|
if (debug) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Framework-agnostic — no React, no Zustand, 0 runtime dependencies.
|
|
5
5
|
*/
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
|
-
// TypedDocumentString (
|
|
7
|
+
// TypedDocumentString (graphql-codegen client-preset pattern)
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
/**
|
|
10
10
|
* A branded string carrying result & variable types.
|
package/dist/core/index.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ export { LANGUAGE_COOKIE_NAME, LANGUAGE_COOKIE_MAX_AGE, LANGUAGE_HEADER_NAME } f
|
|
|
59
59
|
export { CURRENCY_COOKIE_NAME, CURRENCY_COOKIE_MAX_AGE, CURRENCY_HEADER_NAME } from './currency/cookie-config';
|
|
60
60
|
export { CART_COOKIE_NAME, CART_COOKIE_MAX_AGE } from './cart/cookie-config';
|
|
61
61
|
export { matchesRoute, type RouteProtectionConfig } from './auth/routes';
|
|
62
|
-
export { createSetTokenHandler, createClearTokenHandler } from './auth/handlers';
|
|
62
|
+
export { createSetTokenHandler, createClearTokenHandler, createWhoamiHandler } from './auth/handlers';
|
|
63
63
|
export { createAuthTokenClient, type AuthTokenClient } from './auth/token-client';
|
|
64
64
|
export { type ImageData, thumbHashToDataURL } from './image';
|
|
65
65
|
export { getOperationName } from './client/operation-name';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.js
CHANGED
|
@@ -71,7 +71,7 @@ export { CART_COOKIE_NAME, CART_COOKIE_MAX_AGE } from './cart/cookie-config';
|
|
|
71
71
|
// Auth route matching
|
|
72
72
|
export { matchesRoute } from './auth/routes';
|
|
73
73
|
// Auth cookie handlers (API route factories)
|
|
74
|
-
export { createSetTokenHandler, createClearTokenHandler } from './auth/handlers';
|
|
74
|
+
export { createSetTokenHandler, createClearTokenHandler, createWhoamiHandler } from './auth/handlers';
|
|
75
75
|
// Auth token client (client-side fetch helpers)
|
|
76
76
|
export { createAuthTokenClient } from './auth/token-client';
|
|
77
77
|
// Image types (loaders removed — GraphQL returns ready-to-use CDN URLs with transform params)
|
|
@@ -3,12 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Used by:
|
|
5
5
|
* - SDK language store (client-side cookie read/write)
|
|
6
|
-
* - SDK language middleware (X-
|
|
6
|
+
* - SDK language middleware (X-Language header)
|
|
7
7
|
* - next-intl middleware `localeCookie.name` (server-side locale detection)
|
|
8
8
|
*
|
|
9
9
|
* Single cookie replaces both next-intl's NEXT_LOCALE and SDK's preferred-language.
|
|
10
|
+
*
|
|
11
|
+
* Header name `X-Language` matches backend `StorefrontContextBuilder.resolveLanguage`
|
|
12
|
+
* reader (`x-language` lowercased per Express normalization). Earlier `X-Lang` value
|
|
13
|
+
* was a documented mismatch that resulted in the SDK header being silently ignored
|
|
14
|
+
* by the backend.
|
|
10
15
|
*/
|
|
11
16
|
export declare const LANGUAGE_COOKIE_NAME = "preferred-language";
|
|
12
17
|
export declare const LANGUAGE_COOKIE_MAX_AGE: number;
|
|
13
|
-
export declare const LANGUAGE_HEADER_NAME = "X-
|
|
18
|
+
export declare const LANGUAGE_HEADER_NAME = "X-Language";
|
|
14
19
|
//# sourceMappingURL=cookie-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-config.d.ts","sourceRoot":"","sources":["../../../src/core/language/cookie-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cookie-config.d.ts","sourceRoot":"","sources":["../../../src/core/language/cookie-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AACzD,eAAO,MAAM,uBAAuB,QAAqB,CAAC;AAC1D,eAAO,MAAM,oBAAoB,eAAe,CAAC"}
|
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Used by:
|
|
5
5
|
* - SDK language store (client-side cookie read/write)
|
|
6
|
-
* - SDK language middleware (X-
|
|
6
|
+
* - SDK language middleware (X-Language header)
|
|
7
7
|
* - next-intl middleware `localeCookie.name` (server-side locale detection)
|
|
8
8
|
*
|
|
9
9
|
* Single cookie replaces both next-intl's NEXT_LOCALE and SDK's preferred-language.
|
|
10
|
+
*
|
|
11
|
+
* Header name `X-Language` matches backend `StorefrontContextBuilder.resolveLanguage`
|
|
12
|
+
* reader (`x-language` lowercased per Express normalization). Earlier `X-Lang` value
|
|
13
|
+
* was a documented mismatch that resulted in the SDK header being silently ignored
|
|
14
|
+
* by the backend.
|
|
10
15
|
*/
|
|
11
16
|
export const LANGUAGE_COOKIE_NAME = 'preferred-language';
|
|
12
17
|
export const LANGUAGE_COOKIE_MAX_AGE = 365 * 24 * 60 * 60; // 1 year
|
|
13
|
-
export const LANGUAGE_HEADER_NAME = 'X-
|
|
18
|
+
export const LANGUAGE_HEADER_NAME = 'X-Language';
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* These match the backend storefront-graphql schema exactly.
|
|
5
5
|
*/
|
|
6
6
|
export declare const CUSTOMER_LOGIN = "\n mutation CustomerLogin($input: CustomerAccessTokenCreateInput!) {\n customerAccessTokenCreate(input: $input) {\n customerAccessToken { ...CustomerAccessTokenFields }\n userErrors { ...UserErrorFields }\n }\n }\n \n fragment CustomerAccessTokenFields on CustomerAccessToken {\n accessToken\n expiresAt\n }\n\n \n fragment UserErrorFields on UserError {\n message\n field\n code\n }\n\n";
|
|
7
|
-
export declare const CUSTOMER_LOGOUT = "\n mutation CustomerLogout
|
|
8
|
-
export declare const CUSTOMER_TOKEN_RENEW = "\n mutation CustomerTokenRenew
|
|
9
|
-
export declare const CUSTOMER_CREATE = "\n mutation CustomerCreate($input: CustomerCreateInput!) {\n customerCreate(input: $input) {\n customer { ...CustomerFields }\n customerAccessToken { ...CustomerAccessTokenFields }\n userErrors { ...UserErrorFields }\n }\n }\n \n fragment CustomerFields on Customer {\n id\n email\n firstName\n lastName\n displayName\n phone\n emailVerified\n emailMarketingState\n defaultAddress {\n id\n
|
|
10
|
-
export declare const CUSTOMER_QUERY = "\n query Customer
|
|
7
|
+
export declare const CUSTOMER_LOGOUT = "\n mutation CustomerLogout {\n customerAccessTokenDelete {\n deletedAccessToken\n deletedCustomerAccessTokenId\n userErrors { ...UserErrorFields }\n }\n }\n \n fragment UserErrorFields on UserError {\n message\n field\n code\n }\n\n";
|
|
8
|
+
export declare const CUSTOMER_TOKEN_RENEW = "\n mutation CustomerTokenRenew {\n customerAccessTokenRenew {\n customerAccessToken { ...CustomerAccessTokenFields }\n userErrors { ...UserErrorFields }\n }\n }\n \n fragment CustomerAccessTokenFields on CustomerAccessToken {\n accessToken\n expiresAt\n }\n\n \n fragment UserErrorFields on UserError {\n message\n field\n code\n }\n\n";
|
|
9
|
+
export declare const CUSTOMER_CREATE = "\n mutation CustomerCreate($input: CustomerCreateInput!) {\n customerCreate(input: $input) {\n customer { ...CustomerFields }\n customerAccessToken { ...CustomerAccessTokenFields }\n userErrors { ...UserErrorFields }\n }\n }\n \n fragment CustomerFields on Customer {\n id\n email\n firstName\n lastName\n displayName\n phone\n emailVerified\n emailMarketingState\n defaultAddress {\n id\n streetLine1\n streetLine2\n city\n company\n country\n countryCode\n firstName\n lastName\n phone\n state\n stateCode\n postalCode\n isDefault\n }\n ordersCount\n totalSpent {\n amount\n currencyCode\n }\n createdAt\n updatedAt\n }\n\n \n fragment CustomerAccessTokenFields on CustomerAccessToken {\n accessToken\n expiresAt\n }\n\n \n fragment UserErrorFields on UserError {\n message\n field\n code\n }\n\n";
|
|
10
|
+
export declare const CUSTOMER_QUERY = "\n query Customer {\n customer {\n ...CustomerFields\n }\n }\n \n fragment CustomerFields on Customer {\n id\n email\n firstName\n lastName\n displayName\n phone\n emailVerified\n emailMarketingState\n defaultAddress {\n id\n streetLine1\n streetLine2\n city\n company\n country\n countryCode\n firstName\n lastName\n phone\n state\n stateCode\n postalCode\n isDefault\n }\n ordersCount\n totalSpent {\n amount\n currencyCode\n }\n createdAt\n updatedAt\n }\n\n";
|
|
11
11
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/core/operations/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6DH,eAAO,MAAM,cAAc,+aAS1B,CAAC;AAEF,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/core/operations/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6DH,eAAO,MAAM,cAAc,+aAS1B,CAAC;AAEF,eAAO,MAAM,eAAe,gRAS3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,2XAShC,CAAC;AAEF,eAAO,MAAM,eAAe,+8BAW3B,CAAC;AAMF,eAAO,MAAM,cAAc,+lBAO1B,CAAC"}
|
|
@@ -31,8 +31,8 @@ const CUSTOMER_FRAGMENT = `
|
|
|
31
31
|
emailMarketingState
|
|
32
32
|
defaultAddress {
|
|
33
33
|
id
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
streetLine1
|
|
35
|
+
streetLine2
|
|
36
36
|
city
|
|
37
37
|
company
|
|
38
38
|
country
|
|
@@ -40,9 +40,9 @@ const CUSTOMER_FRAGMENT = `
|
|
|
40
40
|
firstName
|
|
41
41
|
lastName
|
|
42
42
|
phone
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
state
|
|
44
|
+
stateCode
|
|
45
|
+
postalCode
|
|
46
46
|
isDefault
|
|
47
47
|
}
|
|
48
48
|
ordersCount
|
|
@@ -68,8 +68,8 @@ export const CUSTOMER_LOGIN = `
|
|
|
68
68
|
${USER_ERROR_FRAGMENT}
|
|
69
69
|
`;
|
|
70
70
|
export const CUSTOMER_LOGOUT = `
|
|
71
|
-
mutation CustomerLogout
|
|
72
|
-
customerAccessTokenDelete
|
|
71
|
+
mutation CustomerLogout {
|
|
72
|
+
customerAccessTokenDelete {
|
|
73
73
|
deletedAccessToken
|
|
74
74
|
deletedCustomerAccessTokenId
|
|
75
75
|
userErrors { ...UserErrorFields }
|
|
@@ -78,8 +78,8 @@ export const CUSTOMER_LOGOUT = `
|
|
|
78
78
|
${USER_ERROR_FRAGMENT}
|
|
79
79
|
`;
|
|
80
80
|
export const CUSTOMER_TOKEN_RENEW = `
|
|
81
|
-
mutation CustomerTokenRenew
|
|
82
|
-
customerAccessTokenRenew
|
|
81
|
+
mutation CustomerTokenRenew {
|
|
82
|
+
customerAccessTokenRenew {
|
|
83
83
|
customerAccessToken { ...CustomerAccessTokenFields }
|
|
84
84
|
userErrors { ...UserErrorFields }
|
|
85
85
|
}
|
|
@@ -103,8 +103,8 @@ export const CUSTOMER_CREATE = `
|
|
|
103
103
|
// Queries
|
|
104
104
|
// ---------------------------------------------------------------------------
|
|
105
105
|
export const CUSTOMER_QUERY = `
|
|
106
|
-
query Customer
|
|
107
|
-
customer
|
|
106
|
+
query Customer {
|
|
107
|
+
customer {
|
|
108
108
|
...CustomerFields
|
|
109
109
|
}
|
|
110
110
|
}
|