@viu/emporix-sdk 3.0.0 → 3.1.1
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 +45 -0
- package/dist/index.cjs +254 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +267 -6
- package/dist/index.d.ts +267 -6
- package/dist/index.js +245 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# @viu/emporix-sdk
|
|
2
2
|
|
|
3
|
+
## 3.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#305](https://github.com/viuteam/emporix-sdk/pull/305) [`4dfeefc`](https://github.com/viuteam/emporix-sdk/commit/4dfeefcdab7fe9d6b41e31d9cee6f4763b8862f2) Thanks [@viu-release-bot](https://github.com/apps/viu-release-bot)! - chore(sdk): sync generated types with upstream Emporix API specs
|
|
8
|
+
|
|
9
|
+
Updated services: ai-service,import-service
|
|
10
|
+
|
|
11
|
+
## 3.1.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [#301](https://github.com/viuteam/emporix-sdk/pull/301) [`edf1e03`](https://github.com/viuteam/emporix-sdk/commit/edf1e03a3fc95c47023016de0ffeb1c12a9dd46e) Thanks [@amnael1](https://github.com/amnael1)! - feat(sdk): move the query-key builder, customer-session store and browser storage backends into the core SDK
|
|
16
|
+
|
|
17
|
+
`emporixKey`, `siteMeta`, `getCustomerSessionStore`, `createListenerSet` and the
|
|
18
|
+
browser storage backends (`createMemoryStorage`, `createLocalStorage`,
|
|
19
|
+
`createSessionStorage`, `createCookieStorage`, `fromWebStorage`) are now defined
|
|
20
|
+
in `@viu/emporix-sdk` and re-exported from `@viu/emporix-sdk-react`.
|
|
21
|
+
|
|
22
|
+
**No breaking change and no behaviour change.** Every existing import keeps
|
|
23
|
+
working, and each moved symbol is the same object through both paths — asserted
|
|
24
|
+
by identity, not deep equality, in `tests/agnostic-single-source.test.ts`,
|
|
25
|
+
because a duplicated implementation would pass a `toEqual` check and then drift.
|
|
26
|
+
The React suite passes unchanged: every file it touched became a re-export of
|
|
27
|
+
the same object.
|
|
28
|
+
|
|
29
|
+
This is the third instance of a move this repo has already made twice, for the
|
|
30
|
+
same reason: `STORAGE_KEYS` and `EmporixStorage` went down so
|
|
31
|
+
`@viu/emporix-sdk-next` could stop depending on the React bindings. These go
|
|
32
|
+
down so an Angular binding can do the same. A cache-key builder duplicated per
|
|
33
|
+
framework agrees on the day it is written and splits every cache entry in half
|
|
34
|
+
thereafter.
|
|
35
|
+
|
|
36
|
+
**The SDK stays DOM-free at the type level.** It compiles with `lib: ["ES2022"]`
|
|
37
|
+
and no `"DOM"`, which is what keeps it runnable on Node, edge runtimes and
|
|
38
|
+
workers. Rather than switch that guard off for all ~60 services to satisfy one
|
|
39
|
+
file, `core/browser-storage.ts` reaches `localStorage`, `sessionStorage`,
|
|
40
|
+
`document` and `location` through a narrowed `globalThis` — the pattern the
|
|
41
|
+
localStorage availability check already used before the move.
|
|
42
|
+
|
|
43
|
+
`scripts/check-treeshake.mjs` now also probes for `localStorage` and
|
|
44
|
+
`document.cookie`, so a Node or edge consumer that never imports a browser
|
|
45
|
+
backend provably does not pay for one. A `createEmporixClient`-only bundle is
|
|
46
|
+
29.1 KB, unchanged by this move.
|
|
47
|
+
|
|
3
48
|
## 3.0.0
|
|
4
49
|
|
|
5
50
|
### Major Changes
|
package/dist/index.cjs
CHANGED
|
@@ -679,6 +679,249 @@ function serverAuth(storage) {
|
|
|
679
679
|
return token !== null ? auth.customer(token) : auth.anonymous();
|
|
680
680
|
}
|
|
681
681
|
|
|
682
|
+
// src/core/browser-storage.ts
|
|
683
|
+
var browser = globalThis;
|
|
684
|
+
function createListenerSet() {
|
|
685
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
686
|
+
return {
|
|
687
|
+
add(l) {
|
|
688
|
+
listeners.add(l);
|
|
689
|
+
return () => listeners.delete(l);
|
|
690
|
+
},
|
|
691
|
+
notify(value) {
|
|
692
|
+
for (const l of listeners) {
|
|
693
|
+
try {
|
|
694
|
+
l(value);
|
|
695
|
+
} catch {
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
function createMemoryStorage(opts = {}) {
|
|
702
|
+
let token = opts.initial ?? null;
|
|
703
|
+
let cartId = null;
|
|
704
|
+
let anon = null;
|
|
705
|
+
let siteCode = null;
|
|
706
|
+
let language = null;
|
|
707
|
+
let activeLegalEntityId = null;
|
|
708
|
+
let refreshToken = null;
|
|
709
|
+
let saasToken = null;
|
|
710
|
+
const tokenListeners = /* @__PURE__ */ new Set();
|
|
711
|
+
const all = createListenerSet();
|
|
712
|
+
return {
|
|
713
|
+
getCustomerToken: () => token,
|
|
714
|
+
setCustomerToken: (t) => {
|
|
715
|
+
token = t;
|
|
716
|
+
for (const l of tokenListeners) l(token);
|
|
717
|
+
all.notify("customerToken");
|
|
718
|
+
},
|
|
719
|
+
subscribe: (l) => {
|
|
720
|
+
tokenListeners.add(l);
|
|
721
|
+
return () => tokenListeners.delete(l);
|
|
722
|
+
},
|
|
723
|
+
getCartId: () => cartId,
|
|
724
|
+
setCartId: (id) => {
|
|
725
|
+
cartId = id;
|
|
726
|
+
all.notify("cartId");
|
|
727
|
+
},
|
|
728
|
+
getAnonymousSession: () => anon,
|
|
729
|
+
setAnonymousSession: (s) => {
|
|
730
|
+
anon = s;
|
|
731
|
+
all.notify("anonymousSession");
|
|
732
|
+
},
|
|
733
|
+
getSiteCode: () => siteCode,
|
|
734
|
+
setSiteCode: (code) => {
|
|
735
|
+
siteCode = code;
|
|
736
|
+
all.notify("siteCode");
|
|
737
|
+
},
|
|
738
|
+
getLanguage: () => language,
|
|
739
|
+
setLanguage: (l) => {
|
|
740
|
+
language = l;
|
|
741
|
+
all.notify("language");
|
|
742
|
+
},
|
|
743
|
+
getActiveLegalEntityId: () => activeLegalEntityId,
|
|
744
|
+
setActiveLegalEntityId: (id) => {
|
|
745
|
+
activeLegalEntityId = id;
|
|
746
|
+
all.notify("activeLegalEntityId");
|
|
747
|
+
},
|
|
748
|
+
getRefreshToken: () => refreshToken,
|
|
749
|
+
setRefreshToken: (t) => {
|
|
750
|
+
refreshToken = t;
|
|
751
|
+
all.notify("refreshToken");
|
|
752
|
+
},
|
|
753
|
+
getSaasToken: () => saasToken,
|
|
754
|
+
setSaasToken: (t) => {
|
|
755
|
+
saasToken = t;
|
|
756
|
+
all.notify("saasToken");
|
|
757
|
+
},
|
|
758
|
+
subscribeAll: (l) => all.add(l)
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
function fromWebStorage(storage, opts = {}) {
|
|
762
|
+
const tokenKey = opts.key ?? STORAGE_KEYS.customerToken;
|
|
763
|
+
const tokenListeners = /* @__PURE__ */ new Set();
|
|
764
|
+
const all = createListenerSet();
|
|
765
|
+
return {
|
|
766
|
+
getCustomerToken: () => storage.getItem(tokenKey),
|
|
767
|
+
setCustomerToken: (t) => {
|
|
768
|
+
if (t === null) storage.removeItem(tokenKey);
|
|
769
|
+
else storage.setItem(tokenKey, t);
|
|
770
|
+
for (const l of tokenListeners) l(t);
|
|
771
|
+
all.notify("customerToken");
|
|
772
|
+
},
|
|
773
|
+
subscribe: (l) => {
|
|
774
|
+
tokenListeners.add(l);
|
|
775
|
+
return () => tokenListeners.delete(l);
|
|
776
|
+
},
|
|
777
|
+
getCartId: () => storage.getItem(STORAGE_KEYS.cartId),
|
|
778
|
+
setCartId: (id) => {
|
|
779
|
+
if (id === null) storage.removeItem(STORAGE_KEYS.cartId);
|
|
780
|
+
else storage.setItem(STORAGE_KEYS.cartId, id);
|
|
781
|
+
all.notify("cartId");
|
|
782
|
+
},
|
|
783
|
+
getAnonymousSession: () => parseAnonymousSession(storage.getItem(STORAGE_KEYS.anonymousSession)),
|
|
784
|
+
setAnonymousSession: (s) => {
|
|
785
|
+
if (s === null) storage.removeItem(STORAGE_KEYS.anonymousSession);
|
|
786
|
+
else
|
|
787
|
+
storage.setItem(
|
|
788
|
+
STORAGE_KEYS.anonymousSession,
|
|
789
|
+
JSON.stringify({ refreshToken: s.refreshToken, sessionId: s.sessionId })
|
|
790
|
+
);
|
|
791
|
+
all.notify("anonymousSession");
|
|
792
|
+
},
|
|
793
|
+
getSiteCode: () => storage.getItem(STORAGE_KEYS.siteCode),
|
|
794
|
+
setSiteCode: (code) => {
|
|
795
|
+
if (code === null) storage.removeItem(STORAGE_KEYS.siteCode);
|
|
796
|
+
else storage.setItem(STORAGE_KEYS.siteCode, code);
|
|
797
|
+
all.notify("siteCode");
|
|
798
|
+
},
|
|
799
|
+
getLanguage: () => storage.getItem(STORAGE_KEYS.language),
|
|
800
|
+
setLanguage: (l) => {
|
|
801
|
+
if (l === null) storage.removeItem(STORAGE_KEYS.language);
|
|
802
|
+
else storage.setItem(STORAGE_KEYS.language, l);
|
|
803
|
+
all.notify("language");
|
|
804
|
+
},
|
|
805
|
+
getActiveLegalEntityId: () => storage.getItem(STORAGE_KEYS.activeLegalEntityId),
|
|
806
|
+
setActiveLegalEntityId: (id) => {
|
|
807
|
+
if (id === null) storage.removeItem(STORAGE_KEYS.activeLegalEntityId);
|
|
808
|
+
else storage.setItem(STORAGE_KEYS.activeLegalEntityId, id);
|
|
809
|
+
all.notify("activeLegalEntityId");
|
|
810
|
+
},
|
|
811
|
+
getRefreshToken: () => storage.getItem(STORAGE_KEYS.refreshToken),
|
|
812
|
+
setRefreshToken: (t) => {
|
|
813
|
+
if (t === null) storage.removeItem(STORAGE_KEYS.refreshToken);
|
|
814
|
+
else storage.setItem(STORAGE_KEYS.refreshToken, t);
|
|
815
|
+
all.notify("refreshToken");
|
|
816
|
+
},
|
|
817
|
+
getSaasToken: () => storage.getItem(STORAGE_KEYS.saasToken),
|
|
818
|
+
setSaasToken: (t) => {
|
|
819
|
+
if (t === null) storage.removeItem(STORAGE_KEYS.saasToken);
|
|
820
|
+
else storage.setItem(STORAGE_KEYS.saasToken, t);
|
|
821
|
+
all.notify("saasToken");
|
|
822
|
+
},
|
|
823
|
+
subscribeAll: (l) => all.add(l)
|
|
824
|
+
};
|
|
825
|
+
}
|
|
826
|
+
function createLocalStorage(opts = {}) {
|
|
827
|
+
const store = browser.localStorage;
|
|
828
|
+
if (store === void 0) {
|
|
829
|
+
console.warn("[emporix] localStorage unavailable; falling back to in-memory storage");
|
|
830
|
+
return createMemoryStorage();
|
|
831
|
+
}
|
|
832
|
+
return fromWebStorage(store, opts);
|
|
833
|
+
}
|
|
834
|
+
var createLocalStorageStorage = createLocalStorage;
|
|
835
|
+
function createSessionStorage(opts = {}) {
|
|
836
|
+
const store = browser.sessionStorage;
|
|
837
|
+
if (store === void 0) {
|
|
838
|
+
console.warn("[emporix] sessionStorage unavailable; falling back to in-memory storage");
|
|
839
|
+
return createMemoryStorage();
|
|
840
|
+
}
|
|
841
|
+
return fromWebStorage(store, opts);
|
|
842
|
+
}
|
|
843
|
+
function createCookieStorage(opts = {}) {
|
|
844
|
+
const sameSite = opts.sameSite ?? "lax";
|
|
845
|
+
const secure = opts.secure ?? browser.location?.protocol === "https:";
|
|
846
|
+
const doc = browser.document;
|
|
847
|
+
if (doc === void 0) {
|
|
848
|
+
console.warn("[emporix] document unavailable; cookie storage falling back to in-memory");
|
|
849
|
+
return createMemoryStorage();
|
|
850
|
+
}
|
|
851
|
+
const attrs = `path=/; SameSite=${sameSite}${secure ? "; Secure" : ""}`;
|
|
852
|
+
const all = createListenerSet();
|
|
853
|
+
const storage = createCookieBackedStorage(
|
|
854
|
+
{
|
|
855
|
+
get: (name) => {
|
|
856
|
+
for (const part of doc.cookie.split("; ")) {
|
|
857
|
+
const [k, ...v] = part.split("=");
|
|
858
|
+
if (k === name) return decodeURIComponent(v.join("=")) || null;
|
|
859
|
+
}
|
|
860
|
+
return null;
|
|
861
|
+
},
|
|
862
|
+
set: (name, value) => {
|
|
863
|
+
doc.cookie = value === null ? `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; ${attrs}` : `${name}=${encodeURIComponent(value)}; ${attrs}`;
|
|
864
|
+
}
|
|
865
|
+
},
|
|
866
|
+
{
|
|
867
|
+
...opts.name !== void 0 ? { tokenName: opts.name } : {},
|
|
868
|
+
notify: (key) => all.notify(key)
|
|
869
|
+
}
|
|
870
|
+
);
|
|
871
|
+
return { ...storage, subscribeAll: (l) => all.add(l) };
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// src/core/query-keys.ts
|
|
875
|
+
function emporixKey(resource, args, context) {
|
|
876
|
+
const meta = {
|
|
877
|
+
tenant: context.tenant,
|
|
878
|
+
authKind: context.authKind
|
|
879
|
+
};
|
|
880
|
+
if (context.siteCode !== void 0) {
|
|
881
|
+
meta.siteCode = context.siteCode;
|
|
882
|
+
}
|
|
883
|
+
if (context.language !== void 0) {
|
|
884
|
+
meta.language = context.language;
|
|
885
|
+
}
|
|
886
|
+
return ["emporix", resource, ...args, meta];
|
|
887
|
+
}
|
|
888
|
+
function siteMeta(site, siteCode, language) {
|
|
889
|
+
return site === "full" ? { siteCode, language } : site === "language" ? { language } : {};
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
// src/core/customer-session-store.ts
|
|
893
|
+
var stores = /* @__PURE__ */ new WeakMap();
|
|
894
|
+
function getCustomerSessionStore(storage) {
|
|
895
|
+
const existing = stores.get(storage);
|
|
896
|
+
if (existing) return existing;
|
|
897
|
+
let state = {
|
|
898
|
+
token: storage.getCustomerToken(),
|
|
899
|
+
refreshToken: storage.getRefreshToken(),
|
|
900
|
+
saasToken: storage.getSaasToken?.() ?? null
|
|
901
|
+
};
|
|
902
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
903
|
+
const store = {
|
|
904
|
+
getSnapshot: () => state,
|
|
905
|
+
setState: (next) => {
|
|
906
|
+
const resolved = typeof next === "function" ? next(state) : next;
|
|
907
|
+
if (resolved === state) return;
|
|
908
|
+
state = resolved;
|
|
909
|
+
for (const listener of listeners) listener();
|
|
910
|
+
},
|
|
911
|
+
subscribe: (listener) => {
|
|
912
|
+
listeners.add(listener);
|
|
913
|
+
return () => {
|
|
914
|
+
listeners.delete(listener);
|
|
915
|
+
};
|
|
916
|
+
}
|
|
917
|
+
};
|
|
918
|
+
storage.subscribe?.((t) => {
|
|
919
|
+
store.setState((s) => s.token === t ? s : { ...s, token: t });
|
|
920
|
+
});
|
|
921
|
+
stores.set(storage, store);
|
|
922
|
+
return store;
|
|
923
|
+
}
|
|
924
|
+
|
|
682
925
|
// src/core/sse.ts
|
|
683
926
|
function parseFrame(frame) {
|
|
684
927
|
const ev = { data: "" };
|
|
@@ -999,7 +1242,7 @@ var HttpClient = class {
|
|
|
999
1242
|
};
|
|
1000
1243
|
|
|
1001
1244
|
// package.json
|
|
1002
|
-
var version = "3.
|
|
1245
|
+
var version = "3.1.1";
|
|
1003
1246
|
|
|
1004
1247
|
// src/version.ts
|
|
1005
1248
|
var SDK_VERSION = version;
|
|
@@ -8874,11 +9117,20 @@ exports.approvalStatusPatch = approvalStatusPatch;
|
|
|
8874
9117
|
exports.auth = auth;
|
|
8875
9118
|
exports.createConsoleLogger = createConsoleLogger;
|
|
8876
9119
|
exports.createCookieBackedStorage = createCookieBackedStorage;
|
|
9120
|
+
exports.createCookieStorage = createCookieStorage;
|
|
8877
9121
|
exports.createCore = createCore;
|
|
8878
9122
|
exports.createEmporixClient = createEmporixClient;
|
|
9123
|
+
exports.createListenerSet = createListenerSet;
|
|
9124
|
+
exports.createLocalStorage = createLocalStorage;
|
|
9125
|
+
exports.createLocalStorageStorage = createLocalStorageStorage;
|
|
9126
|
+
exports.createMemoryStorage = createMemoryStorage;
|
|
8879
9127
|
exports.createNoopLogger = createNoopLogger;
|
|
8880
9128
|
exports.createServerStorage = createServerStorage;
|
|
9129
|
+
exports.createSessionStorage = createSessionStorage;
|
|
9130
|
+
exports.emporixKey = emporixKey;
|
|
8881
9131
|
exports.errorFromResponse = errorFromResponse;
|
|
9132
|
+
exports.fromWebStorage = fromWebStorage;
|
|
9133
|
+
exports.getCustomerSessionStore = getCustomerSessionStore;
|
|
8882
9134
|
exports.iterateAll = iterateAll;
|
|
8883
9135
|
exports.parseAnonymousSession = parseAnonymousSession;
|
|
8884
9136
|
exports.pickFee = pickFee;
|
|
@@ -8889,6 +9141,7 @@ exports.resolveQuery = resolveQuery;
|
|
|
8889
9141
|
exports.resolveToken = resolveToken;
|
|
8890
9142
|
exports.resolveZone = resolveZone;
|
|
8891
9143
|
exports.serverAuth = serverAuth;
|
|
9144
|
+
exports.siteMeta = siteMeta;
|
|
8892
9145
|
exports.validateConfig = validateConfig;
|
|
8893
9146
|
//# sourceMappingURL=index.cjs.map
|
|
8894
9147
|
//# sourceMappingURL=index.cjs.map
|