@doswiftly/storefront-sdk 17.0.0 → 18.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 (83) hide show
  1. package/CHANGELOG.md +919 -0
  2. package/README.md +16 -4
  3. package/dist/core/auth/auth-client.d.ts +39 -3
  4. package/dist/core/auth/auth-client.d.ts.map +1 -1
  5. package/dist/core/auth/auth-client.js +51 -3
  6. package/dist/core/auth/cookie-config.d.ts +52 -3
  7. package/dist/core/auth/cookie-config.d.ts.map +1 -1
  8. package/dist/core/auth/cookie-config.js +60 -6
  9. package/dist/core/auth/handlers.d.ts +46 -0
  10. package/dist/core/auth/handlers.d.ts.map +1 -1
  11. package/dist/core/auth/handlers.js +9 -2
  12. package/dist/core/auth/session-events.d.ts +38 -0
  13. package/dist/core/auth/session-events.d.ts.map +1 -0
  14. package/dist/core/auth/session-events.js +35 -0
  15. package/dist/core/cart/cart-recovery.d.ts +23 -0
  16. package/dist/core/cart/cart-recovery.d.ts.map +1 -1
  17. package/dist/core/cart/cart-recovery.js +20 -3
  18. package/dist/core/cart/types.d.ts +2 -1
  19. package/dist/core/cart/types.d.ts.map +1 -1
  20. package/dist/core/cart/types.js +7 -1
  21. package/dist/core/client/create-client.d.ts.map +1 -1
  22. package/dist/core/client/create-client.js +7 -3
  23. package/dist/core/client/execute.d.ts +29 -3
  24. package/dist/core/client/execute.d.ts.map +1 -1
  25. package/dist/core/client/execute.js +174 -3
  26. package/dist/core/client/types.d.ts +50 -2
  27. package/dist/core/client/types.d.ts.map +1 -1
  28. package/dist/core/errors.d.ts +6 -0
  29. package/dist/core/errors.d.ts.map +1 -1
  30. package/dist/core/errors.js +6 -0
  31. package/dist/core/generated/operation-types.d.ts +838 -221
  32. package/dist/core/generated/operation-types.d.ts.map +1 -1
  33. package/dist/core/generated/operation-types.js +560 -1
  34. package/dist/core/index.d.ts +6 -3
  35. package/dist/core/index.d.ts.map +1 -1
  36. package/dist/core/index.js +12 -2
  37. package/dist/core/middleware/session-retry.d.ts +47 -0
  38. package/dist/core/middleware/session-retry.d.ts.map +1 -0
  39. package/dist/core/middleware/session-retry.js +71 -0
  40. package/dist/core/operations/auth.d.ts.map +1 -1
  41. package/dist/core/operations/auth.js +1 -0
  42. package/dist/core/operations/cart.d.ts.map +1 -1
  43. package/dist/core/operations/cart.js +15 -11
  44. package/dist/react/components/PaymentInstrumentSection.d.ts.map +1 -1
  45. package/dist/react/components/PaymentInstrumentSection.js +4 -4
  46. package/dist/react/components/PaymentInstrumentTile.d.ts +7 -7
  47. package/dist/react/components/PaymentInstrumentTile.d.ts.map +1 -1
  48. package/dist/react/components/PaymentInstrumentTile.js +4 -3
  49. package/dist/react/hooks/use-cart-manager.d.ts +104 -13
  50. package/dist/react/hooks/use-cart-manager.d.ts.map +1 -1
  51. package/dist/react/hooks/use-cart-manager.js +144 -12
  52. package/dist/react/hooks/use-login.d.ts.map +1 -1
  53. package/dist/react/hooks/use-login.js +3 -3
  54. package/dist/react/hooks/use-refresh-token.d.ts.map +1 -1
  55. package/dist/react/hooks/use-refresh-token.js +6 -4
  56. package/dist/react/hooks/use-session-expired.d.ts +16 -0
  57. package/dist/react/hooks/use-session-expired.d.ts.map +1 -0
  58. package/dist/react/hooks/use-session-expired.js +26 -0
  59. package/dist/react/hooks/use-session-refresh.d.ts +32 -0
  60. package/dist/react/hooks/use-session-refresh.d.ts.map +1 -0
  61. package/dist/react/hooks/use-session-refresh.js +147 -0
  62. package/dist/react/index.d.ts +3 -0
  63. package/dist/react/index.d.ts.map +1 -1
  64. package/dist/react/index.js +2 -0
  65. package/dist/react/providers/storefront-client-provider.d.ts +10 -1
  66. package/dist/react/providers/storefront-client-provider.d.ts.map +1 -1
  67. package/dist/react/providers/storefront-client-provider.js +38 -3
  68. package/dist/react/providers/storefront-provider.d.ts +51 -3
  69. package/dist/react/providers/storefront-provider.d.ts.map +1 -1
  70. package/dist/react/providers/storefront-provider.js +22 -5
  71. package/dist/react/server/create-storefront-auth-route.d.ts +63 -0
  72. package/dist/react/server/create-storefront-auth-route.d.ts.map +1 -0
  73. package/dist/react/server/create-storefront-auth-route.js +239 -0
  74. package/dist/react/server/get-initial-auth.d.ts +57 -0
  75. package/dist/react/server/get-initial-auth.d.ts.map +1 -0
  76. package/dist/react/server/get-initial-auth.js +55 -0
  77. package/dist/react/server/index.d.ts +3 -0
  78. package/dist/react/server/index.d.ts.map +1 -1
  79. package/dist/react/server/index.js +6 -0
  80. package/dist/react/stores/auth.store.d.ts +46 -2
  81. package/dist/react/stores/auth.store.d.ts.map +1 -1
  82. package/dist/react/stores/auth.store.js +19 -7
  83. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"auth.store.d.ts","sourceRoot":"","sources":["../../../src/react/stores/auth.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,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,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IAGnB,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,GAAI,gCAA8B;;;;;sBAkEtC,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;;;;;sBAyExC,YAAY,GAAG,IAAI;6BACZ,OAAO;;;;;;;;sBADd,YAAY,GAAG,IAAI;6BACZ,OAAO;;;CAUnC,CAAC"}
@@ -9,21 +9,31 @@
9
9
  */
10
10
  import { createStore } from 'zustand/vanilla';
11
11
  import { persist } from 'zustand/middleware';
12
- export const createAuthStore = (initialIsAuthenticated = false) => createStore()(persist((set) => ({
12
+ /**
13
+ * localStorage key for the persisted auth slice (customer + isAuthenticated only —
14
+ * accessToken is excluded by `partialize`, XSS hardening). Exported so tests and
15
+ * future migrations can reference a single source of truth.
16
+ */
17
+ export const AUTH_STORAGE_KEY = 'auth-storage';
18
+ export const createAuthStore = (options) => createStore()(persist((set) => ({
13
19
  customer: null,
14
- accessToken: null,
15
- isAuthenticated: initialIsAuthenticated,
20
+ accessToken: options?.initialAccessToken ?? null,
21
+ expiresAt: options?.initialExpiresAt ?? null,
22
+ isAuthenticated: options?.initialIsAuthenticated ?? !!options?.initialAccessToken,
16
23
  isLoading: false,
17
- setAuth: (customer, accessToken) => set({
24
+ setAuth: (customer, accessToken, expiresAt) => set({
18
25
  customer,
19
26
  accessToken,
27
+ expiresAt: expiresAt ?? null,
20
28
  isAuthenticated: true,
21
29
  }),
22
30
  clearAuth: () => set({
23
31
  customer: null,
24
32
  accessToken: null,
33
+ expiresAt: null,
25
34
  isAuthenticated: false,
26
35
  }),
36
+ setExpiresAt: (expiresAt) => set({ expiresAt }),
27
37
  updateCustomer: (updates) => set((state) => ({
28
38
  customer: state.customer
29
39
  ? { ...state.customer, ...updates }
@@ -31,7 +41,7 @@ export const createAuthStore = (initialIsAuthenticated = false) => createStore()
31
41
  })),
32
42
  setLoading: (isLoading) => set({ isLoading }),
33
43
  }), {
34
- name: 'auth-storage',
44
+ name: AUTH_STORAGE_KEY,
35
45
  version: 3, // v3 (Iteracja 2 — XSS fix): accessToken DROP'owany z localStorage
36
46
  // persistence. Token żyje tylko w-memory + httpOnly cookie (browser auto-sent).
37
47
  // Non-browser klienci (mobile native, server-to-server) ustawiają token explicit
@@ -53,8 +63,10 @@ export const createAuthStore = (initialIsAuthenticated = false) => createStore()
53
63
  return {
54
64
  ...currentState,
55
65
  customer: persisted.customer ?? currentState.customer,
56
- // accessToken NIE persistowany initialize zawsze na null (in-memory only)
57
- // Server cookie is the authority never let stale localStorage override it
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.
69
+ // Server cookie is the authority — never let stale localStorage override it.
58
70
  isAuthenticated: currentState.isAuthenticated,
59
71
  };
60
72
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doswiftly/storefront-sdk",
3
- "version": "17.0.0",
3
+ "version": "18.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,
@@ -84,6 +84,8 @@
84
84
  "test:contract": "vitest run src/__tests__/contract/",
85
85
  "test:coverage": "vitest run --coverage",
86
86
  "doctor": "node scripts/doctor.cjs",
87
- "validate:cart": "node scripts/validate-cart-operations.cjs --strict"
87
+ "validate:cart": "node scripts/validate-cart-operations.cjs --strict",
88
+ "yalc:push": "pnpm build && yalc publish --push",
89
+ "yalc:watch": "node scripts/yalc-watcher.cjs"
88
90
  }
89
91
  }