@doswiftly/storefront-sdk 4.7.2 → 7.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +791 -0
  2. package/README.md +10 -10
  3. package/dist/core/auth/auth-client.d.ts +14 -8
  4. package/dist/core/auth/auth-client.d.ts.map +1 -1
  5. package/dist/core/auth/auth-client.js +26 -20
  6. package/dist/core/auth/handlers.d.ts +31 -0
  7. package/dist/core/auth/handlers.d.ts.map +1 -1
  8. package/dist/core/auth/handlers.js +69 -0
  9. package/dist/core/auth/types.d.ts +5 -5
  10. package/dist/core/auth/types.d.ts.map +1 -1
  11. package/dist/core/cache.d.ts +1 -1
  12. package/dist/core/cache.js +1 -1
  13. package/dist/core/cart/cart-client.d.ts +1 -1
  14. package/dist/core/cart/cart-client.js +1 -1
  15. package/dist/core/cart/types.d.ts +65 -45
  16. package/dist/core/cart/types.d.ts.map +1 -1
  17. package/dist/core/client/compose.d.ts +1 -1
  18. package/dist/core/client/compose.js +1 -1
  19. package/dist/core/client/create-client.d.ts +2 -2
  20. package/dist/core/client/create-client.js +2 -2
  21. package/dist/core/client/execute.d.ts.map +1 -1
  22. package/dist/core/client/execute.js +6 -0
  23. package/dist/core/client/types.js +1 -1
  24. package/dist/core/index.d.ts +2 -2
  25. package/dist/core/index.d.ts.map +1 -1
  26. package/dist/core/index.js +1 -1
  27. package/dist/core/language/cookie-config.d.ts +7 -2
  28. package/dist/core/language/cookie-config.d.ts.map +1 -1
  29. package/dist/core/language/cookie-config.js +7 -2
  30. package/dist/core/operations/auth.d.ts +11 -5
  31. package/dist/core/operations/auth.d.ts.map +1 -1
  32. package/dist/core/operations/auth.js +22 -16
  33. package/dist/core/operations/cart.d.ts +8 -8
  34. package/dist/core/operations/cart.d.ts.map +1 -1
  35. package/dist/core/operations/cart.js +58 -42
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/react/hooks/use-auth.d.ts +4 -4
  39. package/dist/react/hooks/use-auth.d.ts.map +1 -1
  40. package/dist/react/hooks/use-auth.js +11 -18
  41. package/dist/react/hooks/use-cart-manager.d.ts +1 -1
  42. package/dist/react/hooks/use-cart-manager.js +1 -1
  43. package/dist/react/index.d.ts +1 -1
  44. package/dist/react/index.d.ts.map +1 -1
  45. package/dist/react/stores/auth.store.d.ts +0 -2
  46. package/dist/react/stores/auth.store.d.ts.map +1 -1
  47. package/dist/react/stores/auth.store.js +10 -7
  48. package/package.json +2 -3
package/README.md CHANGED
@@ -147,7 +147,7 @@ const logMiddleware: Middleware = async (req, next) => {
147
147
  const cartClient = new CartClient(client);
148
148
 
149
149
  const cart = await cartClient.create();
150
- const updated = await cartClient.addItems(cartId, [{ merchandiseId: 'v-123', quantity: 1 }]);
150
+ const updated = await cartClient.addItems(cartId, [{ variantId: 'v-123', quantity: 1 }]);
151
151
  await cartClient.updateItems(cartId, [{ id: 'line-1', quantity: 3 }]);
152
152
  await cartClient.removeItems(cartId, ['line-1']);
153
153
  await cartClient.updateDiscountCodes(cartId, ['SAVE10']);
@@ -164,10 +164,10 @@ Auto-throws `StorefrontError` with code `USER_ERROR` on validation failures.
164
164
  const authClient = new AuthClient(client);
165
165
 
166
166
  const { accessToken, expiresAt } = await authClient.login('user@example.com', 'pass');
167
- await authClient.logout(accessToken);
168
- const renewed = await authClient.renewToken(accessToken);
169
- const { accessToken, customer } = await authClient.register({ email, password, firstName });
170
- const customer = await authClient.getCustomer(accessToken);
167
+ await authClient.logout();
168
+ const renewed = await authClient.refreshToken();
169
+ const { accessToken: regToken, customer } = await authClient.register({ email, password, firstName });
170
+ const me = await authClient.getCustomer();
171
171
  ```
172
172
 
173
173
  ### StorefrontError
@@ -312,10 +312,10 @@ cacheCustom({ maxAge: 300, swr: 600 }) // 5min + 10min swr
312
312
 
313
313
  ```typescript
314
314
  const {
315
- login, // (email, password) => Promise<LoginResult>
316
- logout, // () => Promise<LogoutResult>
317
- renewToken, // () => Promise<TokenRenewResult>
318
- isLoggingIn, isLoggingOut, isRenewingToken, isLoading,
315
+ login, // (email, password) => Promise<LoginResult>
316
+ logout, // () => Promise<LogoutResult>
317
+ refreshToken, // () => Promise<TokenRefreshResult>
318
+ isLoggingIn, isLoggingOut, isRefreshingToken, isLoading,
319
319
  error,
320
320
  } = useAuth({
321
321
  onSetToken: async (token) => { /* set httpOnly cookie via server route */ },
@@ -418,7 +418,7 @@ const authHydrated = useAuthHydrated(); // true after localStorage rehydration
418
418
  // Currency
419
419
  const { currency, baseCurrency, supportedCurrencies, setCurrency, isLoaded } = useCurrencyStore();
420
420
 
421
- // For .getState() in callbacks (e.g. logout, renewToken)
421
+ // For .getState() in callbacks (e.g. logout, refreshToken)
422
422
  import { useAuthStoreApi, useCurrencyStoreApi } from '@doswiftly/storefront-sdk/react';
423
423
  const authStore = useAuthStoreApi();
424
424
  const token = authStore.getState().accessToken;
@@ -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 token
12
+ * console.log(result.accessToken); // JWT (also set as httpOnly cookie by API)
13
13
  *
14
- * const customer = await authClient.getCustomer(result.accessToken);
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 type { StorefrontClient } from '../client/types';
@@ -25,22 +26,27 @@ export declare class AuthClient {
25
26
  */
26
27
  login(email: string, password: string): Promise<AuthResult>;
27
28
  /**
28
- * Logout — invalidate token on backend.
29
+ * Logout — invalidates auth cookie on backend (server clears Set-Cookie via Apollo plugin).
30
+ * Auth context czytany przez backend `StorefrontShopGuard` z httpOnly cookie lub
31
+ * `Authorization: Bearer` header (gdy ustawione przez SDK auth middleware).
29
32
  * Does not throw on failure (token may already be expired).
30
33
  */
31
- logout(token: string): Promise<void>;
34
+ logout(): Promise<void>;
32
35
  /**
33
- * Renew access token — extends expiry.
36
+ * Refresh access token — extends expiry. Auth context czytany przez backend
37
+ * z cookie / Authorization Bearer (jak inne authenticated mutations).
34
38
  */
35
- renewToken(token: string): Promise<AuthResult>;
39
+ refreshToken(): Promise<AuthResult>;
36
40
  /**
37
41
  * Register new customer account.
38
42
  * Returns access token + customer data.
39
43
  */
40
44
  register(input: CustomerCreateInput): Promise<AuthResult>;
41
45
  /**
42
- * Fetch customer data by access token.
46
+ * Fetch customer data auth context z cookie / Authorization Bearer.
47
+ * Browser uses cookie auto-sent; non-browser klient passes Bearer header
48
+ * via SDK auth middleware (`setAuthToken`).
43
49
  */
44
- getCustomer(accessToken: string): Promise<Customer | null>;
50
+ getCustomer(): Promise<Customer | null>;
45
51
  }
46
52
  //# sourceMappingURL=auth-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../../src/core/auth/auth-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAUzE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAErD;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBjE;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1C;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBpD;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAmB/D;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAOjE"}
1
+ {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../../src/core/auth/auth-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAUzE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAErD;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBjE;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC;IAiBzC;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAmB/D;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAO9C"}
@@ -9,13 +9,14 @@
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 token
12
+ * console.log(result.accessToken); // JWT (also set as httpOnly cookie by API)
13
13
  *
14
- * const customer = await authClient.getCustomer(result.accessToken);
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';
18
- import { CUSTOMER_LOGIN, CUSTOMER_LOGOUT, CUSTOMER_TOKEN_RENEW, CUSTOMER_CREATE, CUSTOMER_QUERY, } from '../operations/auth';
19
+ import { CUSTOMER_LOGIN, CUSTOMER_LOGOUT, CUSTOMER_REFRESH_TOKEN, CUSTOMER_SIGNUP, CUSTOMER_QUERY, } from '../operations/auth';
19
20
  export class AuthClient {
20
21
  client;
21
22
  constructor(client) {
@@ -27,32 +28,35 @@ export class AuthClient {
27
28
  */
28
29
  async login(email, password) {
29
30
  const data = await this.client.mutate(CUSTOMER_LOGIN, { input: { email, password } });
30
- assertNoUserErrors(data.customerAccessTokenCreate);
31
- const token = data.customerAccessTokenCreate.customerAccessToken;
31
+ assertNoUserErrors(data.customerLogin);
32
+ const token = data.customerLogin.customerAccessToken;
32
33
  return {
33
34
  accessToken: token.accessToken,
34
35
  expiresAt: token.expiresAt,
35
36
  };
36
37
  }
37
38
  /**
38
- * Logout — invalidate token on backend.
39
+ * Logout — invalidates auth cookie on backend (server clears Set-Cookie via Apollo plugin).
40
+ * Auth context czytany przez backend `StorefrontShopGuard` z httpOnly cookie lub
41
+ * `Authorization: Bearer` header (gdy ustawione przez SDK auth middleware).
39
42
  * Does not throw on failure (token may already be expired).
40
43
  */
41
- async logout(token) {
44
+ async logout() {
42
45
  try {
43
- await this.client.mutate(CUSTOMER_LOGOUT, { customerAccessToken: token });
46
+ await this.client.mutate(CUSTOMER_LOGOUT);
44
47
  }
45
48
  catch {
46
49
  // Silently ignore — token may already be expired
47
50
  }
48
51
  }
49
52
  /**
50
- * Renew access token — extends expiry.
53
+ * Refresh access token — extends expiry. Auth context czytany przez backend
54
+ * z cookie / Authorization Bearer (jak inne authenticated mutations).
51
55
  */
52
- async renewToken(token) {
53
- const data = await this.client.mutate(CUSTOMER_TOKEN_RENEW, { customerAccessToken: token });
54
- assertNoUserErrors(data.customerAccessTokenRenew);
55
- const renewed = data.customerAccessTokenRenew.customerAccessToken;
56
+ async refreshToken() {
57
+ const data = await this.client.mutate(CUSTOMER_REFRESH_TOKEN);
58
+ assertNoUserErrors(data.customerRefreshToken);
59
+ const renewed = data.customerRefreshToken.customerAccessToken;
56
60
  return {
57
61
  accessToken: renewed.accessToken,
58
62
  expiresAt: renewed.expiresAt,
@@ -63,20 +67,22 @@ export class AuthClient {
63
67
  * Returns access token + customer data.
64
68
  */
65
69
  async register(input) {
66
- const data = await this.client.mutate(CUSTOMER_CREATE, { input });
67
- assertNoUserErrors(data.customerCreate);
68
- const token = data.customerCreate.customerAccessToken;
70
+ const data = await this.client.mutate(CUSTOMER_SIGNUP, { input });
71
+ assertNoUserErrors(data.customerSignup);
72
+ const token = data.customerSignup.customerAccessToken;
69
73
  return {
70
74
  accessToken: token.accessToken,
71
75
  expiresAt: token.expiresAt,
72
- customer: data.customerCreate.customer ?? undefined,
76
+ customer: data.customerSignup.customer ?? undefined,
73
77
  };
74
78
  }
75
79
  /**
76
- * Fetch customer data by access token.
80
+ * Fetch customer data auth context z cookie / Authorization Bearer.
81
+ * Browser uses cookie auto-sent; non-browser klient passes Bearer header
82
+ * via SDK auth middleware (`setAuthToken`).
77
83
  */
78
- async getCustomer(accessToken) {
79
- const data = await this.client.query(CUSTOMER_QUERY, { customerAccessToken: accessToken });
84
+ async getCustomer() {
85
+ const data = await this.client.query(CUSTOMER_QUERY);
80
86
  return data.customer;
81
87
  }
82
88
  }
@@ -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
- address1: string | null;
29
- address2: string | null;
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
- province: string | null;
38
- provinceCode: string | null;
39
- zip: string | null;
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,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,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,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,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"}
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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Cache strategies — functions (not constants) with override support.
3
3
  *
4
- * Inspired by Shopify Hydrogen's caching strategies.
4
+ * Industry-standard storefront caching strategies (no-store / SWR / private).
5
5
  *
6
6
  * @example
7
7
  * ```typescript
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Cache strategies — functions (not constants) with override support.
3
3
  *
4
- * Inspired by Shopify Hydrogen's caching strategies.
4
+ * Industry-standard storefront caching strategies (no-store / SWR / private).
5
5
  *
6
6
  * @example
7
7
  * ```typescript
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * const cart = await cartClient.create();
12
12
  * const updated = await cartClient.addItem(cart.id, [
13
- * { merchandiseId: 'variant-123', quantity: 1 }
13
+ * { variantId: 'variant-123', quantity: 1 }
14
14
  * ]);
15
15
  * ```
16
16
  */
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * const cart = await cartClient.create();
12
12
  * const updated = await cartClient.addItem(cart.id, [
13
- * { merchandiseId: 'variant-123', quantity: 1 }
13
+ * { variantId: 'variant-123', quantity: 1 }
14
14
  * ]);
15
15
  * ```
16
16
  */
@@ -10,78 +10,98 @@ export interface Money {
10
10
  amount: string;
11
11
  currencyCode: string;
12
12
  }
13
- /**
14
- * Price with full currency-conversion transparency.
15
- *
16
- * Used for all cart/checkout prices where the customer may be viewing
17
- * prices converted from the shop's base currency.
18
- */
19
- export interface PriceMoney {
20
- amount: string;
21
- currencyCode: string;
22
- baseAmount: string;
23
- baseCurrencyCode: string;
24
- exchangeRate: number | null;
25
- marginApplied: number | null;
26
- rateTimestamp: string | null;
27
- isConverted: boolean;
13
+ export interface ImageThumbnail {
14
+ id: string | null;
15
+ url: string;
16
+ altText: string | null;
17
+ width: number | null;
18
+ height: number | null;
19
+ thumbhash: string | null;
20
+ }
21
+ export interface PageInfo {
22
+ hasNextPage: boolean;
23
+ hasPreviousPage: boolean;
24
+ startCursor: string | null;
25
+ endCursor: string | null;
28
26
  }
29
27
  export interface CartCost {
30
- totalAmount: PriceMoney;
31
- subtotalAmount: PriceMoney;
32
- totalTaxAmount: PriceMoney | null;
33
- totalDutyAmount: PriceMoney | null;
28
+ total: Money;
29
+ subtotal: Money;
30
+ totalTax: Money | null;
31
+ totalDuty: Money | null;
32
+ checkoutCharge: Money | null;
34
33
  }
35
34
  export interface CartLineCost {
36
- amountPerQuantity: PriceMoney;
37
- subtotalAmount: PriceMoney;
38
- totalAmount: PriceMoney;
39
- compareAtAmountPerQuantity: PriceMoney | null;
35
+ pricePerUnit: Money;
36
+ subtotal: Money;
37
+ total: Money;
38
+ compareAtPricePerUnit: Money | null;
40
39
  }
41
40
  export interface SelectedOption {
42
41
  name: string;
43
42
  value: string;
44
43
  }
45
- export interface CartLineMerchandise {
44
+ export interface ProductVariantWeight {
45
+ value: number;
46
+ unit: string;
47
+ }
48
+ export interface ProductVariant {
46
49
  id: string;
47
50
  title: string;
48
51
  sku: string | null;
49
- price: PriceMoney;
50
- originalPrice: Money | null;
51
- compareAtPrice: PriceMoney | null;
52
- originalCompareAtPrice: Money | null;
53
- available: boolean;
54
- quantityAvailable: number | null;
55
- image: {
56
- id: string | null;
57
- url: string;
58
- altText: string | null;
59
- width: number | null;
60
- height: number | null;
61
- thumbhash: string | null;
62
- } | null;
52
+ price: Money;
53
+ compareAtPrice: Money | null;
54
+ isAvailable: boolean;
55
+ availableStock: number | null;
56
+ image: ImageThumbnail | null;
63
57
  selectedOptions: SelectedOption[];
64
58
  barcode: string | null;
65
- weight: number | null;
66
- position: number | null;
59
+ weight: ProductVariantWeight | null;
60
+ sortOrder: number | null;
61
+ }
62
+ export interface AttributeSelection {
63
+ attributeDefinitionId: string;
64
+ attributeName: string;
65
+ type: string;
66
+ fillingMode: string;
67
+ billingMode: string | null;
68
+ optionId: string | null;
69
+ optionLabel: string | null;
70
+ optionIds: string[] | null;
71
+ textValue: string | null;
72
+ surchargeAmount: number;
73
+ surchargeType: string | null;
74
+ taxClassId: string | null;
75
+ linkedVariantId: string | null;
67
76
  }
68
77
  export interface CartLine {
69
78
  id: string;
70
79
  quantity: number;
71
- merchandise: CartLineMerchandise;
80
+ variant: ProductVariant;
72
81
  cost: CartLineCost;
73
82
  attributes: Array<{
74
83
  key: string;
75
84
  value: string | null;
76
85
  }>;
86
+ attributeSelections: AttributeSelection[];
77
87
  productId: string | null;
78
88
  productTitle: string | null;
79
89
  productHandle: string | null;
80
90
  productType: string | null;
81
91
  }
92
+ export interface CartLineEdge {
93
+ cursor: string;
94
+ node: CartLine;
95
+ }
96
+ export interface CartLineConnection {
97
+ edges: CartLineEdge[];
98
+ nodes: CartLine[];
99
+ pageInfo: PageInfo;
100
+ totalCount: number;
101
+ }
82
102
  export interface CartDiscountCode {
83
103
  code: string;
84
- applicable: boolean;
104
+ isApplicable: boolean;
85
105
  }
86
106
  export interface CartDiscountAllocation {
87
107
  discountCode: string;
@@ -100,7 +120,7 @@ export interface Cart {
100
120
  createdAt: string;
101
121
  updatedAt: string;
102
122
  cost: CartCost;
103
- lines: CartLine[];
123
+ lines: CartLineConnection;
104
124
  buyerIdentity: CartBuyerIdentity | null;
105
125
  discountCodes: CartDiscountCode[];
106
126
  discountAllocations: CartDiscountAllocation[];
@@ -126,9 +146,9 @@ export interface CartAttributeSelectionInput {
126
146
  textValue?: string | null;
127
147
  }
128
148
  export interface CartLineInput {
129
- merchandiseId: string;
149
+ variantId: string;
130
150
  quantity?: number;
131
- /** Shopify-style raw Line Item Properties (gift messages, engraving notes, etc.). */
151
+ /** Raw Line Item Properties (gift messages, engraving notes, etc.). */
132
152
  attributes?: Array<{
133
153
  key: string;
134
154
  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 (Hydrogen pattern).
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 (Hydrogen pattern).
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 (Hydrogen pattern).
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 (Saleor/client-preset)
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 (Hydrogen pattern).
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 (Saleor/client-preset)
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,CA6CjF"}
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) {