@doswiftly/storefront-sdk 21.0.0 → 22.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 (62) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +818 -527
  3. package/dist/core/auth/handlers.d.ts +10 -9
  4. package/dist/core/auth/handlers.d.ts.map +1 -1
  5. package/dist/core/auth/handlers.js +10 -9
  6. package/dist/core/auth/session-events.d.ts +2 -2
  7. package/dist/core/auth/session-events.js +2 -2
  8. package/dist/core/cart/cart-client.d.ts +23 -24
  9. package/dist/core/cart/cart-client.d.ts.map +1 -1
  10. package/dist/core/cart/cart-client.js +24 -25
  11. package/dist/core/generated/operation-types.d.ts +52 -52
  12. package/dist/core/generated/operation-types.d.ts.map +1 -1
  13. package/dist/core/index.d.ts +1 -0
  14. package/dist/core/index.d.ts.map +1 -1
  15. package/dist/core/index.js +2 -0
  16. package/dist/core/middleware/session-retry.d.ts +5 -6
  17. package/dist/core/middleware/session-retry.d.ts.map +1 -1
  18. package/dist/core/middleware/session-retry.js +7 -8
  19. package/dist/core/operations/auth.d.ts.map +1 -1
  20. package/dist/core/operations/auth.js +4 -0
  21. package/dist/core/operations/cart.d.ts +11 -10
  22. package/dist/core/operations/cart.d.ts.map +1 -1
  23. package/dist/core/operations/cart.js +14 -11
  24. package/dist/core/referral/cookie-config.d.ts +56 -0
  25. package/dist/core/referral/cookie-config.d.ts.map +1 -0
  26. package/dist/core/referral/cookie-config.js +83 -0
  27. package/dist/react/components/PaymentInstrumentSection.d.ts +24 -24
  28. package/dist/react/components/PaymentInstrumentSection.d.ts.map +1 -1
  29. package/dist/react/components/PaymentInstrumentSection.js +15 -15
  30. package/dist/react/components/PaymentInstrumentTile.d.ts +19 -20
  31. package/dist/react/components/PaymentInstrumentTile.d.ts.map +1 -1
  32. package/dist/react/components/PaymentInstrumentTile.js +15 -16
  33. package/dist/react/helpers/browser-data.d.ts +30 -33
  34. package/dist/react/helpers/browser-data.d.ts.map +1 -1
  35. package/dist/react/helpers/browser-data.js +26 -29
  36. package/dist/react/hooks/use-cart-manager.d.ts +1 -1
  37. package/dist/react/hooks/use-cart-manager.js +1 -1
  38. package/dist/react/hooks/use-cart.d.ts +2 -2
  39. package/dist/react/hooks/use-cart.js +3 -3
  40. package/dist/react/hooks/use-referral-capture.d.ts +9 -0
  41. package/dist/react/hooks/use-referral-capture.d.ts.map +1 -0
  42. package/dist/react/hooks/use-referral-capture.js +40 -0
  43. package/dist/react/hooks/use-session-expired.d.ts +6 -5
  44. package/dist/react/hooks/use-session-expired.d.ts.map +1 -1
  45. package/dist/react/hooks/use-session-expired.js +6 -5
  46. package/dist/react/index.d.ts +2 -0
  47. package/dist/react/index.d.ts.map +1 -1
  48. package/dist/react/index.js +5 -1
  49. package/dist/react/referral.d.ts +53 -0
  50. package/dist/react/referral.d.ts.map +1 -0
  51. package/dist/react/referral.js +51 -0
  52. package/dist/react/server/cookie-readers.d.ts +7 -0
  53. package/dist/react/server/cookie-readers.d.ts.map +1 -1
  54. package/dist/react/server/cookie-readers.js +10 -0
  55. package/dist/react/server/index.d.ts +1 -1
  56. package/dist/react/server/index.d.ts.map +1 -1
  57. package/dist/react/server/index.js +2 -2
  58. package/dist/react/stores/auth.store.d.ts.map +1 -1
  59. package/dist/react/stores/auth.store.js +13 -10
  60. package/dist/react/stores/cart.store.d.ts +1 -1
  61. package/dist/react/stores/cart.store.js +1 -1
  62. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  export { getStorefrontClient, type ServerClientOptions } from './get-storefront-client';
2
2
  export { createStorefrontAuthRoute, type StorefrontAuthRouteOptions, type StorefrontAuthRouteHandlers, } from './create-storefront-auth-route';
3
3
  export { getInitialAuth, type InitialAuth } from './get-initial-auth';
4
- export { readCartIdCookie, readCartCredentials, readCurrencyCookie } from './cookie-readers';
4
+ export { readCartIdCookie, readCartCredentials, readCurrencyCookie, readReferralCodeCookie } from './cookie-readers';
5
5
  export { serverCartSecretMiddleware } from '../../core/middleware/cart-secret';
6
6
  export { trustedForwardedHostValidator, originAllowlistValidator, type OriginValidator, type OriginValidatorContext, } from '../../core/auth/handlers';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGxF,OAAO,EACL,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAI7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGxF,OAAO,EACL,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAIrH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,0BAA0B,CAAC"}
@@ -3,8 +3,8 @@ export { getStorefrontClient } from './get-storefront-client';
3
3
  export { createStorefrontAuthRoute, } from './create-storefront-auth-route';
4
4
  // Server-only cold-start auth seed from the first-party cookies.
5
5
  export { getInitialAuth } from './get-initial-auth';
6
- // Server-first readers for the readable first-party cookies (cart-id, currency).
7
- export { readCartIdCookie, readCartCredentials, readCurrencyCookie } from './cookie-readers';
6
+ // Server-first readers for the readable first-party cookies (cart-id, currency, referral).
7
+ export { readCartIdCookie, readCartCredentials, readCurrencyCookie, readReferralCodeCookie } from './cookie-readers';
8
8
  // Server cart-secret middleware — prepend to `getStorefrontClient({ middleware })`
9
9
  // with `await readCartCredentials()` so SSR / edge cart reads carry the secret.
10
10
  export { serverCartSecretMiddleware } from '../../core/middleware/cart-secret';
@@ -1 +1 @@
1
- {"version":3,"file":"auth.store.d.ts","sourceRoot":"","sources":["../../../src/react/stores/auth.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IAExB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IAGnB,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACjG,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,eAAe,GAAI,UAAU,sBAAsB;;;;;sBAyExC,YAAY,GAAG,IAAI;6BACZ,OAAO;;;;;;;;sBADd,YAAY,GAAG,IAAI;6BACZ,OAAO;;;CAUnC,CAAC"}
1
+ {"version":3,"file":"auth.store.d.ts","sourceRoot":"","sources":["../../../src/react/stores/auth.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IAExB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IAGnB,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACjG,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,eAAe,GAAI,UAAU,sBAAsB;;;;;sBA4ExC,YAAY,GAAG,IAAI;6BACZ,OAAO;;;;;;;;sBADd,YAAY,GAAG,IAAI;6BACZ,OAAO;;;CAUnC,CAAC"}
@@ -42,10 +42,11 @@ export const createAuthStore = (options) => createStore()(persist((set) => ({
42
42
  setLoading: (isLoading) => set({ isLoading }),
43
43
  }), {
44
44
  name: AUTH_STORAGE_KEY,
45
- version: 3, // v3 (Iteracja 2 — XSS fix): accessToken DROP'owany z localStorage
46
- // persistence. Token żyje tylko w-memory + httpOnly cookie (browser auto-sent).
47
- // Non-browser klienci (mobile native, server-to-server) ustawiają token explicit
48
- // przez setAuth() — nigdy nie persistowany w localStorage SDK.
45
+ version: 3, // v3 (XSS hardening): accessToken dropped from localStorage
46
+ // persistence. The token lives only in memory + the httpOnly cookie
47
+ // (browser auto-sent). Non-browser clients (mobile native, server-to-server)
48
+ // set the token explicitly via setAuth() — it is never persisted to the
49
+ // SDK's localStorage slice.
49
50
  partialize: (state) => ({
50
51
  customer: state.customer,
51
52
  isAuthenticated: state.isAuthenticated,
@@ -63,18 +64,20 @@ export const createAuthStore = (options) => createStore()(persist((set) => ({
63
64
  return {
64
65
  ...currentState,
65
66
  customer: persisted.customer ?? currentState.customer,
66
- // accessToken NIE persistowany w localStorage (Inv-5 XSS hardening) — spread
67
- // `...currentState` propaguje wartość z factory: `null` (default) lub seed
68
- // z `options.initialAccessToken` gdy konsumer podał token server-side.
67
+ // accessToken is never persisted to localStorage (XSS hardening) — the
68
+ // `...currentState` spread propagates the factory value: `null` (default)
69
+ // or the seed from `options.initialAccessToken` when the consumer provided
70
+ // a server-side token.
69
71
  // Server cookie is the authority — never let stale localStorage override it.
70
72
  isAuthenticated: currentState.isAuthenticated,
71
73
  };
72
74
  },
73
75
  migrate: (persistedState, version) => {
74
76
  if (version < 3) {
75
- // v1→v2: Turbopack duplication cleanup; v2→v3: XSS fix — accessToken usunięty
76
- // z localStorage. Po migracji store start fresh, użytkownik re-auth przez
77
- // cookie hydration (BFF /api/auth/whoami) lub login flow.
77
+ // v1→v2: Turbopack duplication cleanup; v2→v3: XSS hardening — accessToken
78
+ // removed from localStorage. After the migration the store starts fresh;
79
+ // the user re-authenticates via cookie hydration (BFF /api/auth/whoami)
80
+ // or the login flow.
78
81
  return { customer: null, isAuthenticated: false };
79
82
  }
80
83
  return persistedState;
@@ -37,7 +37,7 @@
37
37
  *
38
38
  * const store = createCartStore({
39
39
  * getActions: () => actions,
40
- * onExpired: (e) => toast.error('Koszyk wygasł, dodaj produkty ponownie'),
40
+ * onExpired: (e) => toast.error('Your cart expired please add the items again'),
41
41
  * });
42
42
  * ```
43
43
  */
@@ -37,7 +37,7 @@
37
37
  *
38
38
  * const store = createCartStore({
39
39
  * getActions: () => actions,
40
- * onExpired: (e) => toast.error('Koszyk wygasł, dodaj produkty ponownie'),
40
+ * onExpired: (e) => toast.error('Your cart expired please add the items again'),
41
41
  * });
42
42
  * ```
43
43
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doswiftly/storefront-sdk",
3
- "version": "21.0.0",
3
+ "version": "22.0.0",
4
4
  "description": "Storefront runtime SDK for DoSwiftly Commerce — layered transport, middleware pipeline, React providers, Zustand stores, cache strategies. 0 runtime dependencies in core.",
5
5
  "type": "module",
6
6
  "sideEffects": false,