@viu/emporix-sdk-react 2.11.0 → 2.12.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 +6 -0
- package/dist/{chunk-SMJ5IQZJ.js → chunk-4YDWCA7A.js} +51 -6
- package/dist/chunk-4YDWCA7A.js.map +1 -0
- package/dist/{chunk-KLLY4YD7.js → chunk-RVLQH55K.js} +68 -60
- package/dist/chunk-RVLQH55K.js.map +1 -0
- package/dist/{chunk-FBQY2N7S.js → chunk-VMDBYVWG.js} +21 -2
- package/dist/chunk-VMDBYVWG.js.map +1 -0
- package/dist/hooks.cjs +65 -57
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +2 -2
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +3 -3
- package/dist/index.cjs +132 -60
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/{provider--y2yz3Jj.d.ts → provider-Bcb-tOpS.d.ts} +17 -2
- package/dist/{provider-CfgMAu8B.d.cts → provider-Ddo7aSOI.d.cts} +17 -2
- package/dist/provider.cjs +54 -3
- package/dist/provider.cjs.map +1 -1
- package/dist/provider.d.cts +1 -1
- package/dist/provider.d.ts +1 -1
- package/dist/provider.js +2 -2
- package/dist/storage.cjs +19 -0
- package/dist/storage.cjs.map +1 -1
- package/dist/storage.d.cts +3 -1
- package/dist/storage.d.ts +3 -1
- package/dist/storage.js +1 -1
- package/dist/{use-returns-vxGoBH1I.d.ts → use-returns-DletRcs5.d.ts} +1 -1
- package/dist/{use-returns-DDH_HnPS.d.cts → use-returns-cFZZl21v.d.cts} +1 -1
- package/package.json +3 -3
- package/dist/chunk-FBQY2N7S.js.map +0 -1
- package/dist/chunk-KLLY4YD7.js.map +0 -1
- package/dist/chunk-SMJ5IQZJ.js.map +0 -1
package/dist/storage.cjs
CHANGED
|
@@ -6,6 +6,7 @@ function createMemoryStorage(opts = {}) {
|
|
|
6
6
|
let cartId = null;
|
|
7
7
|
let anon = null;
|
|
8
8
|
let siteCode = null;
|
|
9
|
+
let language = null;
|
|
9
10
|
let activeLegalEntityId = null;
|
|
10
11
|
let refreshToken = null;
|
|
11
12
|
const tokenListeners = /* @__PURE__ */ new Set();
|
|
@@ -36,6 +37,11 @@ function createMemoryStorage(opts = {}) {
|
|
|
36
37
|
siteCode = code;
|
|
37
38
|
all.notify("siteCode");
|
|
38
39
|
},
|
|
40
|
+
getLanguage: () => language,
|
|
41
|
+
setLanguage: (l) => {
|
|
42
|
+
language = l;
|
|
43
|
+
all.notify("language");
|
|
44
|
+
},
|
|
39
45
|
getActiveLegalEntityId: () => activeLegalEntityId,
|
|
40
46
|
setActiveLegalEntityId: (id) => {
|
|
41
47
|
activeLegalEntityId = id;
|
|
@@ -55,6 +61,7 @@ var DEFAULT_TOKEN_KEY = "emporix.customerToken";
|
|
|
55
61
|
var CART_KEY = "emporix.cartId";
|
|
56
62
|
var ANON_KEY = "emporix.anonymousSession";
|
|
57
63
|
var SITE_KEY = "emporix.siteCode";
|
|
64
|
+
var LANGUAGE_KEY = "emporix.language";
|
|
58
65
|
var ACTIVE_LE_KEY = "emporix.activeLegalEntityId";
|
|
59
66
|
var REFRESH_KEY = "emporix.refreshToken";
|
|
60
67
|
function createLocalStorageStorage(opts = {}) {
|
|
@@ -97,6 +104,12 @@ function createLocalStorageStorage(opts = {}) {
|
|
|
97
104
|
else ls.setItem(SITE_KEY, code);
|
|
98
105
|
all.notify("siteCode");
|
|
99
106
|
},
|
|
107
|
+
getLanguage: () => ls.getItem(LANGUAGE_KEY),
|
|
108
|
+
setLanguage: (l) => {
|
|
109
|
+
if (l === null) ls.removeItem(LANGUAGE_KEY);
|
|
110
|
+
else ls.setItem(LANGUAGE_KEY, l);
|
|
111
|
+
all.notify("language");
|
|
112
|
+
},
|
|
100
113
|
getActiveLegalEntityId: () => ls.getItem(ACTIVE_LE_KEY),
|
|
101
114
|
setActiveLegalEntityId: (id) => {
|
|
102
115
|
if (id === null) ls.removeItem(ACTIVE_LE_KEY);
|
|
@@ -118,6 +131,7 @@ var DEFAULT_TOKEN_NAME = "emporix.customerToken";
|
|
|
118
131
|
var CART_NAME = "emporix.cartId";
|
|
119
132
|
var ANON_NAME = "emporix.anonymousSession";
|
|
120
133
|
var SITE_NAME = "emporix.siteCode";
|
|
134
|
+
var LANGUAGE_NAME = "emporix.language";
|
|
121
135
|
var ACTIVE_LE_NAME = "emporix.activeLegalEntityId";
|
|
122
136
|
var REFRESH_NAME = "emporix.refreshToken";
|
|
123
137
|
function createCookieStorage(opts = {}) {
|
|
@@ -164,6 +178,11 @@ function createCookieStorage(opts = {}) {
|
|
|
164
178
|
writeCookie(SITE_NAME, code);
|
|
165
179
|
all.notify("siteCode");
|
|
166
180
|
},
|
|
181
|
+
getLanguage: () => readCookie(LANGUAGE_NAME),
|
|
182
|
+
setLanguage: (l) => {
|
|
183
|
+
writeCookie(LANGUAGE_NAME, l);
|
|
184
|
+
all.notify("language");
|
|
185
|
+
},
|
|
167
186
|
getActiveLegalEntityId: () => readCookie(ACTIVE_LE_NAME),
|
|
168
187
|
setActiveLegalEntityId: (id) => {
|
|
169
188
|
writeCookie(ACTIVE_LE_NAME, id);
|
package/dist/storage.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/memory.ts","../src/storage/local-storage.ts","../src/storage/cookie.ts","../src/storage/index.ts"],"names":[],"mappings":"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","file":"storage.cjs","sourcesContent":["import {\n createListenerSet,\n type EmporixStorage,\n type EmporixStorageKey,\n type PersistedAnonymousSession,\n} from \"./index\";\n\n/** In-memory token store. Default, SSR-safe, no persistence. */\nexport function createMemoryStorage(opts: { initial?: string } = {}): EmporixStorage {\n let token: string | null = opts.initial ?? null;\n let cartId: string | null = null;\n let anon: PersistedAnonymousSession | null = null;\n let siteCode: string | null = null;\n let activeLegalEntityId: string | null = null;\n let refreshToken: string | null = null;\n const tokenListeners = new Set<(t: string | null) => void>();\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => token,\n setCustomerToken: (t) => {\n token = t;\n for (const l of tokenListeners) l(token);\n all.notify(\"customerToken\");\n },\n subscribe: (l) => {\n tokenListeners.add(l);\n return () => tokenListeners.delete(l);\n },\n getCartId: () => cartId,\n setCartId: (id) => {\n cartId = id;\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => anon,\n setAnonymousSession: (s) => {\n anon = s;\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => siteCode,\n setSiteCode: (code) => {\n siteCode = code;\n all.notify(\"siteCode\");\n },\n getActiveLegalEntityId: () => activeLegalEntityId,\n setActiveLegalEntityId: (id) => {\n activeLegalEntityId = id;\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => refreshToken,\n setRefreshToken: (t) => {\n refreshToken = t;\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","import {\n createListenerSet,\n parseAnonymousSession,\n type EmporixStorage,\n type EmporixStorageKey,\n} from \"./index\";\nimport { createMemoryStorage } from \"./memory\";\n\nconst DEFAULT_TOKEN_KEY = \"emporix.customerToken\";\nconst CART_KEY = \"emporix.cartId\";\nconst ANON_KEY = \"emporix.anonymousSession\";\nconst SITE_KEY = \"emporix.siteCode\";\nconst ACTIVE_LE_KEY = \"emporix.activeLegalEntityId\";\nconst REFRESH_KEY = \"emporix.refreshToken\";\n\n/** Browser `localStorage`-backed store. Falls back to memory on the server. */\nexport function createLocalStorageStorage(opts: { key?: string } = {}): EmporixStorage {\n const tokenKey = opts.key ?? DEFAULT_TOKEN_KEY;\n const available =\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { localStorage?: Storage }).localStorage !== \"undefined\";\n if (!available) {\n // eslint-disable-next-line no-console\n console.warn(\"[emporix] localStorage unavailable; falling back to in-memory storage\");\n return createMemoryStorage();\n }\n const ls = (globalThis as unknown as { localStorage: Storage }).localStorage;\n const tokenListeners = new Set<(t: string | null) => void>();\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => ls.getItem(tokenKey),\n setCustomerToken: (t) => {\n if (t === null) ls.removeItem(tokenKey);\n else ls.setItem(tokenKey, t);\n for (const l of tokenListeners) l(t);\n all.notify(\"customerToken\");\n },\n subscribe: (l) => {\n tokenListeners.add(l);\n return () => tokenListeners.delete(l);\n },\n getCartId: () => ls.getItem(CART_KEY),\n setCartId: (id) => {\n if (id === null) ls.removeItem(CART_KEY);\n else ls.setItem(CART_KEY, id);\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => parseAnonymousSession(ls.getItem(ANON_KEY)),\n setAnonymousSession: (s) => {\n if (s === null) ls.removeItem(ANON_KEY);\n else ls.setItem(ANON_KEY, JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId }));\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => ls.getItem(SITE_KEY),\n setSiteCode: (code) => {\n if (code === null) ls.removeItem(SITE_KEY);\n else ls.setItem(SITE_KEY, code);\n all.notify(\"siteCode\");\n },\n getActiveLegalEntityId: () => ls.getItem(ACTIVE_LE_KEY),\n setActiveLegalEntityId: (id) => {\n if (id === null) ls.removeItem(ACTIVE_LE_KEY);\n else ls.setItem(ACTIVE_LE_KEY, id);\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => ls.getItem(REFRESH_KEY),\n setRefreshToken: (t) => {\n if (t === null) ls.removeItem(REFRESH_KEY);\n else ls.setItem(REFRESH_KEY, t);\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","import {\n createListenerSet,\n parseAnonymousSession,\n type EmporixStorage,\n type EmporixStorageKey,\n} from \"./index\";\nimport { createMemoryStorage } from \"./memory\";\n\nconst DEFAULT_TOKEN_NAME = \"emporix.customerToken\";\nconst CART_NAME = \"emporix.cartId\";\nconst ANON_NAME = \"emporix.anonymousSession\";\nconst SITE_NAME = \"emporix.siteCode\";\nconst ACTIVE_LE_NAME = \"emporix.activeLegalEntityId\";\nconst REFRESH_NAME = \"emporix.refreshToken\";\n\n/** Cookie-backed store. Consumer must set SameSite/Secure for CSRF safety. */\nexport function createCookieStorage(\n opts: { name?: string; secure?: boolean; sameSite?: \"lax\" | \"strict\" | \"none\" } = {},\n): EmporixStorage {\n const tokenName = opts.name ?? DEFAULT_TOKEN_NAME;\n const sameSite = opts.sameSite ?? \"lax\";\n const secure = opts.secure ?? false;\n if (typeof document === \"undefined\") {\n // eslint-disable-next-line no-console\n console.warn(\"[emporix] document unavailable; cookie storage falling back to in-memory\");\n return createMemoryStorage();\n }\n const attrs = `path=/; SameSite=${sameSite}${secure ? \"; Secure\" : \"\"}`;\n const readCookie = (name: string): string | null => {\n for (const part of document.cookie.split(\"; \")) {\n const [k, ...v] = part.split(\"=\");\n if (k === name) return decodeURIComponent(v.join(\"=\")) || null;\n }\n return null;\n };\n const writeCookie = (name: string, value: string | null): void => {\n document.cookie =\n value === null\n ? `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; ${attrs}`\n : `${name}=${encodeURIComponent(value)}; ${attrs}`;\n };\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => readCookie(tokenName),\n setCustomerToken: (t) => {\n writeCookie(tokenName, t);\n all.notify(\"customerToken\");\n },\n getCartId: () => readCookie(CART_NAME),\n setCartId: (id) => {\n writeCookie(CART_NAME, id);\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => parseAnonymousSession(readCookie(ANON_NAME)),\n setAnonymousSession: (s) => {\n writeCookie(\n ANON_NAME,\n s === null\n ? null\n : JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId }),\n );\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => readCookie(SITE_NAME),\n setSiteCode: (code) => {\n writeCookie(SITE_NAME, code);\n all.notify(\"siteCode\");\n },\n getActiveLegalEntityId: () => readCookie(ACTIVE_LE_NAME),\n setActiveLegalEntityId: (id) => {\n writeCookie(ACTIVE_LE_NAME, id);\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => readCookie(REFRESH_NAME),\n setRefreshToken: (t) => {\n writeCookie(REFRESH_NAME, t);\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","/** Pluggable persistence for SDK session state. SSR-safe by default (memory). */\nexport interface EmporixStorage {\n // Customer token (unchanged).\n getCustomerToken(): string | null;\n setCustomerToken(token: string | null): void;\n subscribe?(listener: (token: string | null) => void): () => void;\n\n // Active guest / customer cart id.\n getCartId(): string | null;\n setCartId(id: string | null): void;\n\n // Anonymous session — used by DefaultTokenProvider (via EmporixProvider\n // wiring) to preserve sessionId across page reloads.\n getAnonymousSession(): PersistedAnonymousSession | null;\n setAnonymousSession(session: PersistedAnonymousSession | null): void;\n\n // Active site code (MS-2). `null` = no site bound yet.\n getSiteCode(): string | null;\n setSiteCode(code: string | null): void;\n\n // Active legal entity id (B2B). `null` = B2C mode.\n getActiveLegalEntityId(): string | null;\n setActiveLegalEntityId(id: string | null): void;\n\n // Refresh token — optional persistence. When absent, B2B company-switch\n // falls back to a local-state-only update (no server-side token rescope).\n getRefreshToken(): string | null;\n setRefreshToken(token: string | null): void;\n\n /**\n * Subscribe to any storage write. The listener receives the key that\n * changed. Returns an unsubscribe function. Optional — backends may no-op.\n * Used by the telemetry layer to emit `storage.write` events.\n */\n subscribeAll?(\n listener: (key: EmporixStorageKey) => void,\n ): () => void;\n}\n\n/** Minimal subset of `AnonymousSession` that needs to outlive a page load. */\nexport interface PersistedAnonymousSession {\n refreshToken: string;\n sessionId: string;\n}\n\n/** Backward-compat alias. New code should prefer `EmporixStorage`. */\nexport type TokenStorage = EmporixStorage;\n\n/** Keys that participate in {@link EmporixStorage.subscribeAll}. */\nexport type EmporixStorageKey =\n | \"customerToken\"\n | \"cartId\"\n | \"siteCode\"\n | \"anonymousSession\"\n | \"activeLegalEntityId\"\n | \"refreshToken\";\n\n/**\n * Internal: create a swallow-on-throw listener set used by all three storage\n * backends for `subscribeAll`. Centralizes the try/catch wrapper so a buggy\n * telemetry handler never breaks a storage write.\n */\nexport function createListenerSet<T>(): {\n add(l: (value: T) => void): () => void;\n notify(value: T): void;\n} {\n const listeners = new Set<(v: T) => void>();\n return {\n add(l) {\n listeners.add(l);\n return () => listeners.delete(l);\n },\n notify(value) {\n for (const l of listeners) {\n try {\n l(value);\n } catch {\n // Swallow handler errors; telemetry must never break writes.\n }\n }\n },\n };\n}\n\n/**\n * Internal: parses a raw `anonymousSession` JSON payload (from localStorage\n * or a cookie) into a {@link PersistedAnonymousSession}. Returns `null` for\n * any malformed or missing input.\n */\nexport function parseAnonymousSession(raw: string | null): PersistedAnonymousSession | null {\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as Partial<PersistedAnonymousSession>;\n if (typeof parsed.refreshToken === \"string\" && typeof parsed.sessionId === \"string\") {\n return { refreshToken: parsed.refreshToken, sessionId: parsed.sessionId };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport { createMemoryStorage } from \"./memory\";\nexport { createLocalStorageStorage } from \"./local-storage\";\nexport { createCookieStorage } from \"./cookie\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage/memory.ts","../src/storage/local-storage.ts","../src/storage/cookie.ts","../src/storage/index.ts"],"names":[],"mappings":"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","file":"storage.cjs","sourcesContent":["import {\n createListenerSet,\n type EmporixStorage,\n type EmporixStorageKey,\n type PersistedAnonymousSession,\n} from \"./index\";\n\n/** In-memory token store. Default, SSR-safe, no persistence. */\nexport function createMemoryStorage(opts: { initial?: string } = {}): EmporixStorage {\n let token: string | null = opts.initial ?? null;\n let cartId: string | null = null;\n let anon: PersistedAnonymousSession | null = null;\n let siteCode: string | null = null;\n let language: string | null = null;\n let activeLegalEntityId: string | null = null;\n let refreshToken: string | null = null;\n const tokenListeners = new Set<(t: string | null) => void>();\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => token,\n setCustomerToken: (t) => {\n token = t;\n for (const l of tokenListeners) l(token);\n all.notify(\"customerToken\");\n },\n subscribe: (l) => {\n tokenListeners.add(l);\n return () => tokenListeners.delete(l);\n },\n getCartId: () => cartId,\n setCartId: (id) => {\n cartId = id;\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => anon,\n setAnonymousSession: (s) => {\n anon = s;\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => siteCode,\n setSiteCode: (code) => {\n siteCode = code;\n all.notify(\"siteCode\");\n },\n getLanguage: () => language,\n setLanguage: (l) => {\n language = l;\n all.notify(\"language\");\n },\n getActiveLegalEntityId: () => activeLegalEntityId,\n setActiveLegalEntityId: (id) => {\n activeLegalEntityId = id;\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => refreshToken,\n setRefreshToken: (t) => {\n refreshToken = t;\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","import {\n createListenerSet,\n parseAnonymousSession,\n type EmporixStorage,\n type EmporixStorageKey,\n} from \"./index\";\nimport { createMemoryStorage } from \"./memory\";\n\nconst DEFAULT_TOKEN_KEY = \"emporix.customerToken\";\nconst CART_KEY = \"emporix.cartId\";\nconst ANON_KEY = \"emporix.anonymousSession\";\nconst SITE_KEY = \"emporix.siteCode\";\nconst LANGUAGE_KEY = \"emporix.language\";\nconst ACTIVE_LE_KEY = \"emporix.activeLegalEntityId\";\nconst REFRESH_KEY = \"emporix.refreshToken\";\n\n/** Browser `localStorage`-backed store. Falls back to memory on the server. */\nexport function createLocalStorageStorage(opts: { key?: string } = {}): EmporixStorage {\n const tokenKey = opts.key ?? DEFAULT_TOKEN_KEY;\n const available =\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { localStorage?: Storage }).localStorage !== \"undefined\";\n if (!available) {\n // eslint-disable-next-line no-console\n console.warn(\"[emporix] localStorage unavailable; falling back to in-memory storage\");\n return createMemoryStorage();\n }\n const ls = (globalThis as unknown as { localStorage: Storage }).localStorage;\n const tokenListeners = new Set<(t: string | null) => void>();\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => ls.getItem(tokenKey),\n setCustomerToken: (t) => {\n if (t === null) ls.removeItem(tokenKey);\n else ls.setItem(tokenKey, t);\n for (const l of tokenListeners) l(t);\n all.notify(\"customerToken\");\n },\n subscribe: (l) => {\n tokenListeners.add(l);\n return () => tokenListeners.delete(l);\n },\n getCartId: () => ls.getItem(CART_KEY),\n setCartId: (id) => {\n if (id === null) ls.removeItem(CART_KEY);\n else ls.setItem(CART_KEY, id);\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => parseAnonymousSession(ls.getItem(ANON_KEY)),\n setAnonymousSession: (s) => {\n if (s === null) ls.removeItem(ANON_KEY);\n else ls.setItem(ANON_KEY, JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId }));\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => ls.getItem(SITE_KEY),\n setSiteCode: (code) => {\n if (code === null) ls.removeItem(SITE_KEY);\n else ls.setItem(SITE_KEY, code);\n all.notify(\"siteCode\");\n },\n getLanguage: () => ls.getItem(LANGUAGE_KEY),\n setLanguage: (l) => {\n if (l === null) ls.removeItem(LANGUAGE_KEY);\n else ls.setItem(LANGUAGE_KEY, l);\n all.notify(\"language\");\n },\n getActiveLegalEntityId: () => ls.getItem(ACTIVE_LE_KEY),\n setActiveLegalEntityId: (id) => {\n if (id === null) ls.removeItem(ACTIVE_LE_KEY);\n else ls.setItem(ACTIVE_LE_KEY, id);\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => ls.getItem(REFRESH_KEY),\n setRefreshToken: (t) => {\n if (t === null) ls.removeItem(REFRESH_KEY);\n else ls.setItem(REFRESH_KEY, t);\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","import {\n createListenerSet,\n parseAnonymousSession,\n type EmporixStorage,\n type EmporixStorageKey,\n} from \"./index\";\nimport { createMemoryStorage } from \"./memory\";\n\nconst DEFAULT_TOKEN_NAME = \"emporix.customerToken\";\nconst CART_NAME = \"emporix.cartId\";\nconst ANON_NAME = \"emporix.anonymousSession\";\nconst SITE_NAME = \"emporix.siteCode\";\nconst LANGUAGE_NAME = \"emporix.language\";\nconst ACTIVE_LE_NAME = \"emporix.activeLegalEntityId\";\nconst REFRESH_NAME = \"emporix.refreshToken\";\n\n/** Cookie-backed store. Consumer must set SameSite/Secure for CSRF safety. */\nexport function createCookieStorage(\n opts: { name?: string; secure?: boolean; sameSite?: \"lax\" | \"strict\" | \"none\" } = {},\n): EmporixStorage {\n const tokenName = opts.name ?? DEFAULT_TOKEN_NAME;\n const sameSite = opts.sameSite ?? \"lax\";\n const secure = opts.secure ?? false;\n if (typeof document === \"undefined\") {\n // eslint-disable-next-line no-console\n console.warn(\"[emporix] document unavailable; cookie storage falling back to in-memory\");\n return createMemoryStorage();\n }\n const attrs = `path=/; SameSite=${sameSite}${secure ? \"; Secure\" : \"\"}`;\n const readCookie = (name: string): string | null => {\n for (const part of document.cookie.split(\"; \")) {\n const [k, ...v] = part.split(\"=\");\n if (k === name) return decodeURIComponent(v.join(\"=\")) || null;\n }\n return null;\n };\n const writeCookie = (name: string, value: string | null): void => {\n document.cookie =\n value === null\n ? `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; ${attrs}`\n : `${name}=${encodeURIComponent(value)}; ${attrs}`;\n };\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => readCookie(tokenName),\n setCustomerToken: (t) => {\n writeCookie(tokenName, t);\n all.notify(\"customerToken\");\n },\n getCartId: () => readCookie(CART_NAME),\n setCartId: (id) => {\n writeCookie(CART_NAME, id);\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => parseAnonymousSession(readCookie(ANON_NAME)),\n setAnonymousSession: (s) => {\n writeCookie(\n ANON_NAME,\n s === null\n ? null\n : JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId }),\n );\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => readCookie(SITE_NAME),\n setSiteCode: (code) => {\n writeCookie(SITE_NAME, code);\n all.notify(\"siteCode\");\n },\n getLanguage: () => readCookie(LANGUAGE_NAME),\n setLanguage: (l) => {\n writeCookie(LANGUAGE_NAME, l);\n all.notify(\"language\");\n },\n getActiveLegalEntityId: () => readCookie(ACTIVE_LE_NAME),\n setActiveLegalEntityId: (id) => {\n writeCookie(ACTIVE_LE_NAME, id);\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => readCookie(REFRESH_NAME),\n setRefreshToken: (t) => {\n writeCookie(REFRESH_NAME, t);\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","/** Pluggable persistence for SDK session state. SSR-safe by default (memory). */\nexport interface EmporixStorage {\n // Customer token (unchanged).\n getCustomerToken(): string | null;\n setCustomerToken(token: string | null): void;\n subscribe?(listener: (token: string | null) => void): () => void;\n\n // Active guest / customer cart id.\n getCartId(): string | null;\n setCartId(id: string | null): void;\n\n // Anonymous session — used by DefaultTokenProvider (via EmporixProvider\n // wiring) to preserve sessionId across page reloads.\n getAnonymousSession(): PersistedAnonymousSession | null;\n setAnonymousSession(session: PersistedAnonymousSession | null): void;\n\n // Active site code (MS-2). `null` = no site bound yet.\n getSiteCode(): string | null;\n setSiteCode(code: string | null): void;\n\n // Active language (Accept-Language). `null` = use the site/tenant default.\n getLanguage(): string | null;\n setLanguage(language: string | null): void;\n\n // Active legal entity id (B2B). `null` = B2C mode.\n getActiveLegalEntityId(): string | null;\n setActiveLegalEntityId(id: string | null): void;\n\n // Refresh token — optional persistence. When absent, B2B company-switch\n // falls back to a local-state-only update (no server-side token rescope).\n getRefreshToken(): string | null;\n setRefreshToken(token: string | null): void;\n\n /**\n * Subscribe to any storage write. The listener receives the key that\n * changed. Returns an unsubscribe function. Optional — backends may no-op.\n * Used by the telemetry layer to emit `storage.write` events.\n */\n subscribeAll?(\n listener: (key: EmporixStorageKey) => void,\n ): () => void;\n}\n\n/** Minimal subset of `AnonymousSession` that needs to outlive a page load. */\nexport interface PersistedAnonymousSession {\n refreshToken: string;\n sessionId: string;\n}\n\n/** Backward-compat alias. New code should prefer `EmporixStorage`. */\nexport type TokenStorage = EmporixStorage;\n\n/** Keys that participate in {@link EmporixStorage.subscribeAll}. */\nexport type EmporixStorageKey =\n | \"customerToken\"\n | \"cartId\"\n | \"siteCode\"\n | \"language\"\n | \"anonymousSession\"\n | \"activeLegalEntityId\"\n | \"refreshToken\";\n\n/**\n * Internal: create a swallow-on-throw listener set used by all three storage\n * backends for `subscribeAll`. Centralizes the try/catch wrapper so a buggy\n * telemetry handler never breaks a storage write.\n */\nexport function createListenerSet<T>(): {\n add(l: (value: T) => void): () => void;\n notify(value: T): void;\n} {\n const listeners = new Set<(v: T) => void>();\n return {\n add(l) {\n listeners.add(l);\n return () => listeners.delete(l);\n },\n notify(value) {\n for (const l of listeners) {\n try {\n l(value);\n } catch {\n // Swallow handler errors; telemetry must never break writes.\n }\n }\n },\n };\n}\n\n/**\n * Internal: parses a raw `anonymousSession` JSON payload (from localStorage\n * or a cookie) into a {@link PersistedAnonymousSession}. Returns `null` for\n * any malformed or missing input.\n */\nexport function parseAnonymousSession(raw: string | null): PersistedAnonymousSession | null {\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as Partial<PersistedAnonymousSession>;\n if (typeof parsed.refreshToken === \"string\" && typeof parsed.sessionId === \"string\") {\n return { refreshToken: parsed.refreshToken, sessionId: parsed.sessionId };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport { createMemoryStorage } from \"./memory\";\nexport { createLocalStorageStorage } from \"./local-storage\";\nexport { createCookieStorage } from \"./cookie\";\n"]}
|
package/dist/storage.d.cts
CHANGED
|
@@ -26,6 +26,8 @@ interface EmporixStorage {
|
|
|
26
26
|
setAnonymousSession(session: PersistedAnonymousSession | null): void;
|
|
27
27
|
getSiteCode(): string | null;
|
|
28
28
|
setSiteCode(code: string | null): void;
|
|
29
|
+
getLanguage(): string | null;
|
|
30
|
+
setLanguage(language: string | null): void;
|
|
29
31
|
getActiveLegalEntityId(): string | null;
|
|
30
32
|
setActiveLegalEntityId(id: string | null): void;
|
|
31
33
|
getRefreshToken(): string | null;
|
|
@@ -45,7 +47,7 @@ interface PersistedAnonymousSession {
|
|
|
45
47
|
/** Backward-compat alias. New code should prefer `EmporixStorage`. */
|
|
46
48
|
type TokenStorage = EmporixStorage;
|
|
47
49
|
/** Keys that participate in {@link EmporixStorage.subscribeAll}. */
|
|
48
|
-
type EmporixStorageKey = "customerToken" | "cartId" | "siteCode" | "anonymousSession" | "activeLegalEntityId" | "refreshToken";
|
|
50
|
+
type EmporixStorageKey = "customerToken" | "cartId" | "siteCode" | "language" | "anonymousSession" | "activeLegalEntityId" | "refreshToken";
|
|
49
51
|
/**
|
|
50
52
|
* Internal: create a swallow-on-throw listener set used by all three storage
|
|
51
53
|
* backends for `subscribeAll`. Centralizes the try/catch wrapper so a buggy
|
package/dist/storage.d.ts
CHANGED
|
@@ -26,6 +26,8 @@ interface EmporixStorage {
|
|
|
26
26
|
setAnonymousSession(session: PersistedAnonymousSession | null): void;
|
|
27
27
|
getSiteCode(): string | null;
|
|
28
28
|
setSiteCode(code: string | null): void;
|
|
29
|
+
getLanguage(): string | null;
|
|
30
|
+
setLanguage(language: string | null): void;
|
|
29
31
|
getActiveLegalEntityId(): string | null;
|
|
30
32
|
setActiveLegalEntityId(id: string | null): void;
|
|
31
33
|
getRefreshToken(): string | null;
|
|
@@ -45,7 +47,7 @@ interface PersistedAnonymousSession {
|
|
|
45
47
|
/** Backward-compat alias. New code should prefer `EmporixStorage`. */
|
|
46
48
|
type TokenStorage = EmporixStorage;
|
|
47
49
|
/** Keys that participate in {@link EmporixStorage.subscribeAll}. */
|
|
48
|
-
type EmporixStorageKey = "customerToken" | "cartId" | "siteCode" | "anonymousSession" | "activeLegalEntityId" | "refreshToken";
|
|
50
|
+
type EmporixStorageKey = "customerToken" | "cartId" | "siteCode" | "language" | "anonymousSession" | "activeLegalEntityId" | "refreshToken";
|
|
49
51
|
/**
|
|
50
52
|
* Internal: create a swallow-on-throw listener set used by all three storage
|
|
51
53
|
* backends for `subscribeAll`. Centralizes the try/catch wrapper so a buggy
|
package/dist/storage.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createCookieStorage, createListenerSet, createLocalStorageStorage, createMemoryStorage, parseAnonymousSession } from './chunk-
|
|
1
|
+
export { createCookieStorage, createListenerSet, createLocalStorageStorage, createMemoryStorage, parseAnonymousSession } from './chunk-VMDBYVWG.js';
|
|
2
2
|
//# sourceMappingURL=storage.js.map
|
|
3
3
|
//# sourceMappingURL=storage.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Customer, AuthContext, Product, PaginatedItems, ShoppingListItem, ShoppingListDraft, ShoppingList, Category, Cart, CartItemInput, CartItemUpdate, CartAddress, CartCreated, CreateCartInput, CheckoutResult, CheckoutInput, QuoteCheckoutInput, PaymentMode, PriceMatchByContextInput, PriceMatch, Media, SegmentCategoryTree, SegmentItem, Segment, PasswordChangeInput, CustomerUpdateInput, Address, AddressCreateInput, AddressUpdateInput, PasswordResetRequestInput, PasswordResetConfirmInput, Site, LegalEntity, ContactAssignment, Location, IamGroup, IamGroupMemberAssignment, ContactAssignmentCreate, LegalEntityCreate, LocationCreate, LegalEntityUpdate, ContactAssignmentUpdate, LocationUpdate, InvokeCloudFunctionOptions, OrderStatus, Order, SalesOrderPatch, Availability, RedemptionInput, RedemptionCreated, PointsSummary, RedeemOptionList, RedeemCouponResult, RedeemMyPointsInput, ReturnCreated, ReturnInput, ReturnList, Return } from '@viu/emporix-sdk';
|
|
2
2
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
3
3
|
import { UseQueryResult, UseInfiniteQueryResult, UseMutationResult } from '@tanstack/react-query';
|
|
4
|
-
import { S as SiteContextValue } from './provider
|
|
4
|
+
import { S as SiteContextValue } from './provider-Bcb-tOpS.js';
|
|
5
5
|
|
|
6
6
|
/** Customer authentication state and actions. */
|
|
7
7
|
interface CustomerSessionApi {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Customer, AuthContext, Product, PaginatedItems, ShoppingListItem, ShoppingListDraft, ShoppingList, Category, Cart, CartItemInput, CartItemUpdate, CartAddress, CartCreated, CreateCartInput, CheckoutResult, CheckoutInput, QuoteCheckoutInput, PaymentMode, PriceMatchByContextInput, PriceMatch, Media, SegmentCategoryTree, SegmentItem, Segment, PasswordChangeInput, CustomerUpdateInput, Address, AddressCreateInput, AddressUpdateInput, PasswordResetRequestInput, PasswordResetConfirmInput, Site, LegalEntity, ContactAssignment, Location, IamGroup, IamGroupMemberAssignment, ContactAssignmentCreate, LegalEntityCreate, LocationCreate, LegalEntityUpdate, ContactAssignmentUpdate, LocationUpdate, InvokeCloudFunctionOptions, OrderStatus, Order, SalesOrderPatch, Availability, RedemptionInput, RedemptionCreated, PointsSummary, RedeemOptionList, RedeemCouponResult, RedeemMyPointsInput, ReturnCreated, ReturnInput, ReturnList, Return } from '@viu/emporix-sdk';
|
|
2
2
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
3
3
|
import { UseQueryResult, UseInfiniteQueryResult, UseMutationResult } from '@tanstack/react-query';
|
|
4
|
-
import { S as SiteContextValue } from './provider-
|
|
4
|
+
import { S as SiteContextValue } from './provider-Ddo7aSOI.cjs';
|
|
5
5
|
|
|
6
6
|
/** Customer authentication state and actions. */
|
|
7
7
|
interface CustomerSessionApi {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viu/emporix-sdk-react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "React bindings for the Emporix SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"peerDependencies": {
|
|
72
72
|
"@tanstack/react-query": "^5.51.0",
|
|
73
73
|
"react": "^18.0.0 || ^19.0.0",
|
|
74
|
-
"@viu/emporix-sdk": "^2.
|
|
74
|
+
"@viu/emporix-sdk": "^2.12.0"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@tanstack/react-query": "^5.51.0",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"typescript": "^5.6.0",
|
|
94
94
|
"undici": "^6.19.0",
|
|
95
95
|
"vitest": "^2.0.0",
|
|
96
|
-
"@viu/emporix-sdk": "2.
|
|
96
|
+
"@viu/emporix-sdk": "2.12.0"
|
|
97
97
|
},
|
|
98
98
|
"scripts": {
|
|
99
99
|
"build": "tsup",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/memory.ts","../src/storage/local-storage.ts","../src/storage/cookie.ts","../src/storage/index.ts"],"names":[],"mappings":"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","file":"chunk-FBQY2N7S.js","sourcesContent":["import {\n createListenerSet,\n type EmporixStorage,\n type EmporixStorageKey,\n type PersistedAnonymousSession,\n} from \"./index\";\n\n/** In-memory token store. Default, SSR-safe, no persistence. */\nexport function createMemoryStorage(opts: { initial?: string } = {}): EmporixStorage {\n let token: string | null = opts.initial ?? null;\n let cartId: string | null = null;\n let anon: PersistedAnonymousSession | null = null;\n let siteCode: string | null = null;\n let activeLegalEntityId: string | null = null;\n let refreshToken: string | null = null;\n const tokenListeners = new Set<(t: string | null) => void>();\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => token,\n setCustomerToken: (t) => {\n token = t;\n for (const l of tokenListeners) l(token);\n all.notify(\"customerToken\");\n },\n subscribe: (l) => {\n tokenListeners.add(l);\n return () => tokenListeners.delete(l);\n },\n getCartId: () => cartId,\n setCartId: (id) => {\n cartId = id;\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => anon,\n setAnonymousSession: (s) => {\n anon = s;\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => siteCode,\n setSiteCode: (code) => {\n siteCode = code;\n all.notify(\"siteCode\");\n },\n getActiveLegalEntityId: () => activeLegalEntityId,\n setActiveLegalEntityId: (id) => {\n activeLegalEntityId = id;\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => refreshToken,\n setRefreshToken: (t) => {\n refreshToken = t;\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","import {\n createListenerSet,\n parseAnonymousSession,\n type EmporixStorage,\n type EmporixStorageKey,\n} from \"./index\";\nimport { createMemoryStorage } from \"./memory\";\n\nconst DEFAULT_TOKEN_KEY = \"emporix.customerToken\";\nconst CART_KEY = \"emporix.cartId\";\nconst ANON_KEY = \"emporix.anonymousSession\";\nconst SITE_KEY = \"emporix.siteCode\";\nconst ACTIVE_LE_KEY = \"emporix.activeLegalEntityId\";\nconst REFRESH_KEY = \"emporix.refreshToken\";\n\n/** Browser `localStorage`-backed store. Falls back to memory on the server. */\nexport function createLocalStorageStorage(opts: { key?: string } = {}): EmporixStorage {\n const tokenKey = opts.key ?? DEFAULT_TOKEN_KEY;\n const available =\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { localStorage?: Storage }).localStorage !== \"undefined\";\n if (!available) {\n // eslint-disable-next-line no-console\n console.warn(\"[emporix] localStorage unavailable; falling back to in-memory storage\");\n return createMemoryStorage();\n }\n const ls = (globalThis as unknown as { localStorage: Storage }).localStorage;\n const tokenListeners = new Set<(t: string | null) => void>();\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => ls.getItem(tokenKey),\n setCustomerToken: (t) => {\n if (t === null) ls.removeItem(tokenKey);\n else ls.setItem(tokenKey, t);\n for (const l of tokenListeners) l(t);\n all.notify(\"customerToken\");\n },\n subscribe: (l) => {\n tokenListeners.add(l);\n return () => tokenListeners.delete(l);\n },\n getCartId: () => ls.getItem(CART_KEY),\n setCartId: (id) => {\n if (id === null) ls.removeItem(CART_KEY);\n else ls.setItem(CART_KEY, id);\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => parseAnonymousSession(ls.getItem(ANON_KEY)),\n setAnonymousSession: (s) => {\n if (s === null) ls.removeItem(ANON_KEY);\n else ls.setItem(ANON_KEY, JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId }));\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => ls.getItem(SITE_KEY),\n setSiteCode: (code) => {\n if (code === null) ls.removeItem(SITE_KEY);\n else ls.setItem(SITE_KEY, code);\n all.notify(\"siteCode\");\n },\n getActiveLegalEntityId: () => ls.getItem(ACTIVE_LE_KEY),\n setActiveLegalEntityId: (id) => {\n if (id === null) ls.removeItem(ACTIVE_LE_KEY);\n else ls.setItem(ACTIVE_LE_KEY, id);\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => ls.getItem(REFRESH_KEY),\n setRefreshToken: (t) => {\n if (t === null) ls.removeItem(REFRESH_KEY);\n else ls.setItem(REFRESH_KEY, t);\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","import {\n createListenerSet,\n parseAnonymousSession,\n type EmporixStorage,\n type EmporixStorageKey,\n} from \"./index\";\nimport { createMemoryStorage } from \"./memory\";\n\nconst DEFAULT_TOKEN_NAME = \"emporix.customerToken\";\nconst CART_NAME = \"emporix.cartId\";\nconst ANON_NAME = \"emporix.anonymousSession\";\nconst SITE_NAME = \"emporix.siteCode\";\nconst ACTIVE_LE_NAME = \"emporix.activeLegalEntityId\";\nconst REFRESH_NAME = \"emporix.refreshToken\";\n\n/** Cookie-backed store. Consumer must set SameSite/Secure for CSRF safety. */\nexport function createCookieStorage(\n opts: { name?: string; secure?: boolean; sameSite?: \"lax\" | \"strict\" | \"none\" } = {},\n): EmporixStorage {\n const tokenName = opts.name ?? DEFAULT_TOKEN_NAME;\n const sameSite = opts.sameSite ?? \"lax\";\n const secure = opts.secure ?? false;\n if (typeof document === \"undefined\") {\n // eslint-disable-next-line no-console\n console.warn(\"[emporix] document unavailable; cookie storage falling back to in-memory\");\n return createMemoryStorage();\n }\n const attrs = `path=/; SameSite=${sameSite}${secure ? \"; Secure\" : \"\"}`;\n const readCookie = (name: string): string | null => {\n for (const part of document.cookie.split(\"; \")) {\n const [k, ...v] = part.split(\"=\");\n if (k === name) return decodeURIComponent(v.join(\"=\")) || null;\n }\n return null;\n };\n const writeCookie = (name: string, value: string | null): void => {\n document.cookie =\n value === null\n ? `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; ${attrs}`\n : `${name}=${encodeURIComponent(value)}; ${attrs}`;\n };\n const all = createListenerSet<EmporixStorageKey>();\n return {\n getCustomerToken: () => readCookie(tokenName),\n setCustomerToken: (t) => {\n writeCookie(tokenName, t);\n all.notify(\"customerToken\");\n },\n getCartId: () => readCookie(CART_NAME),\n setCartId: (id) => {\n writeCookie(CART_NAME, id);\n all.notify(\"cartId\");\n },\n getAnonymousSession: () => parseAnonymousSession(readCookie(ANON_NAME)),\n setAnonymousSession: (s) => {\n writeCookie(\n ANON_NAME,\n s === null\n ? null\n : JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId }),\n );\n all.notify(\"anonymousSession\");\n },\n getSiteCode: () => readCookie(SITE_NAME),\n setSiteCode: (code) => {\n writeCookie(SITE_NAME, code);\n all.notify(\"siteCode\");\n },\n getActiveLegalEntityId: () => readCookie(ACTIVE_LE_NAME),\n setActiveLegalEntityId: (id) => {\n writeCookie(ACTIVE_LE_NAME, id);\n all.notify(\"activeLegalEntityId\");\n },\n getRefreshToken: () => readCookie(REFRESH_NAME),\n setRefreshToken: (t) => {\n writeCookie(REFRESH_NAME, t);\n all.notify(\"refreshToken\");\n },\n subscribeAll: (l) => all.add(l),\n };\n}\n","/** Pluggable persistence for SDK session state. SSR-safe by default (memory). */\nexport interface EmporixStorage {\n // Customer token (unchanged).\n getCustomerToken(): string | null;\n setCustomerToken(token: string | null): void;\n subscribe?(listener: (token: string | null) => void): () => void;\n\n // Active guest / customer cart id.\n getCartId(): string | null;\n setCartId(id: string | null): void;\n\n // Anonymous session — used by DefaultTokenProvider (via EmporixProvider\n // wiring) to preserve sessionId across page reloads.\n getAnonymousSession(): PersistedAnonymousSession | null;\n setAnonymousSession(session: PersistedAnonymousSession | null): void;\n\n // Active site code (MS-2). `null` = no site bound yet.\n getSiteCode(): string | null;\n setSiteCode(code: string | null): void;\n\n // Active legal entity id (B2B). `null` = B2C mode.\n getActiveLegalEntityId(): string | null;\n setActiveLegalEntityId(id: string | null): void;\n\n // Refresh token — optional persistence. When absent, B2B company-switch\n // falls back to a local-state-only update (no server-side token rescope).\n getRefreshToken(): string | null;\n setRefreshToken(token: string | null): void;\n\n /**\n * Subscribe to any storage write. The listener receives the key that\n * changed. Returns an unsubscribe function. Optional — backends may no-op.\n * Used by the telemetry layer to emit `storage.write` events.\n */\n subscribeAll?(\n listener: (key: EmporixStorageKey) => void,\n ): () => void;\n}\n\n/** Minimal subset of `AnonymousSession` that needs to outlive a page load. */\nexport interface PersistedAnonymousSession {\n refreshToken: string;\n sessionId: string;\n}\n\n/** Backward-compat alias. New code should prefer `EmporixStorage`. */\nexport type TokenStorage = EmporixStorage;\n\n/** Keys that participate in {@link EmporixStorage.subscribeAll}. */\nexport type EmporixStorageKey =\n | \"customerToken\"\n | \"cartId\"\n | \"siteCode\"\n | \"anonymousSession\"\n | \"activeLegalEntityId\"\n | \"refreshToken\";\n\n/**\n * Internal: create a swallow-on-throw listener set used by all three storage\n * backends for `subscribeAll`. Centralizes the try/catch wrapper so a buggy\n * telemetry handler never breaks a storage write.\n */\nexport function createListenerSet<T>(): {\n add(l: (value: T) => void): () => void;\n notify(value: T): void;\n} {\n const listeners = new Set<(v: T) => void>();\n return {\n add(l) {\n listeners.add(l);\n return () => listeners.delete(l);\n },\n notify(value) {\n for (const l of listeners) {\n try {\n l(value);\n } catch {\n // Swallow handler errors; telemetry must never break writes.\n }\n }\n },\n };\n}\n\n/**\n * Internal: parses a raw `anonymousSession` JSON payload (from localStorage\n * or a cookie) into a {@link PersistedAnonymousSession}. Returns `null` for\n * any malformed or missing input.\n */\nexport function parseAnonymousSession(raw: string | null): PersistedAnonymousSession | null {\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as Partial<PersistedAnonymousSession>;\n if (typeof parsed.refreshToken === \"string\" && typeof parsed.sessionId === \"string\") {\n return { refreshToken: parsed.refreshToken, sessionId: parsed.sessionId };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport { createMemoryStorage } from \"./memory\";\nexport { createLocalStorageStorage } from \"./local-storage\";\nexport { createCookieStorage } from \"./cookie\";\n"]}
|