@ledgerhq/cryptoassets 13.33.0-nightly.20251125074637 → 13.34.0-nightly.20251126023856
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +51 -14
- package/lib/cal-client/hooks/useTokensData.d.ts +2 -2
- package/lib/cal-client/persistence.d.ts +17 -10
- package/lib/cal-client/persistence.d.ts.map +1 -1
- package/lib/cal-client/persistence.js +84 -23
- package/lib/cal-client/persistence.js.map +1 -1
- package/lib/cal-client/state-manager/api.d.ts +157 -160
- package/lib/cal-client/state-manager/api.d.ts.map +1 -1
- package/lib/cal-client/state-manager/api.js +25 -8
- package/lib/cal-client/state-manager/api.js.map +1 -1
- package/lib-es/cal-client/hooks/useTokensData.d.ts +2 -2
- package/lib-es/cal-client/persistence.d.ts +17 -10
- package/lib-es/cal-client/persistence.d.ts.map +1 -1
- package/lib-es/cal-client/persistence.js +81 -22
- package/lib-es/cal-client/persistence.js.map +1 -1
- package/lib-es/cal-client/state-manager/api.d.ts +157 -160
- package/lib-es/cal-client/state-manager/api.d.ts.map +1 -1
- package/lib-es/cal-client/state-manager/api.js +26 -9
- package/lib-es/cal-client/state-manager/api.js.map +1 -1
- package/package.json +3 -3
- package/src/cal-client/persistence.test.ts +492 -34
- package/src/cal-client/persistence.ts +112 -32
- package/src/cal-client/state-manager/api.ts +28 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cal-client/state-manager/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,kBAAkB,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cal-client/state-manager/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,kBAAkB,EAAS,MAAM,8BAA8B,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEnG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAkC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,8BAA8B;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iBAAS,uBAAuB,CAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,IAAI,CAAC,EAAE,kBAAkB,GACxB,wBAAwB,CAY1B;AAED,iBAAS,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAe5F;AAED,iBAAS,uCAAuC,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAmB7F;AAgBD,eAAO,MAAM,eAAe;;;;;kKAgK1B,CAAC;AAEH,eAAO,MACL,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAC7B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACrB,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACpC,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACzB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACQ,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC;AAGrD,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,uCAAuC,GACxC,CAAC"}
|
|
@@ -7,6 +7,7 @@ const live_env_1 = require("@ledgerhq/live-env");
|
|
|
7
7
|
const types_1 = require("./types");
|
|
8
8
|
const fields_1 = require("./fields");
|
|
9
9
|
const api_token_converter_1 = require("../../api-token-converter");
|
|
10
|
+
const logs_1 = require("@ledgerhq/logs");
|
|
10
11
|
const zod_1 = require("zod");
|
|
11
12
|
/**
|
|
12
13
|
* Zod schema for API response (array of tokens)
|
|
@@ -62,16 +63,19 @@ function validateAndTransformSingleTokenResponse(response) {
|
|
|
62
63
|
return result;
|
|
63
64
|
}
|
|
64
65
|
exports.validateAndTransformSingleTokenResponse = validateAndTransformSingleTokenResponse;
|
|
66
|
+
const baseQueryWithRetry = (0, react_1.retry)((0, react_1.fetchBaseQuery)({
|
|
67
|
+
baseUrl: "",
|
|
68
|
+
prepareHeaders: headers => {
|
|
69
|
+
headers.set("Content-Type", "application/json");
|
|
70
|
+
headers.set("X-Ledger-Client-Version", (0, live_env_1.getEnv)("LEDGER_CLIENT_VERSION"));
|
|
71
|
+
return headers;
|
|
72
|
+
},
|
|
73
|
+
}), {
|
|
74
|
+
maxRetries: 3,
|
|
75
|
+
});
|
|
65
76
|
exports.cryptoAssetsApi = (0, react_1.createApi)({
|
|
66
77
|
reducerPath: "cryptoAssetsApi",
|
|
67
|
-
baseQuery:
|
|
68
|
-
baseUrl: "",
|
|
69
|
-
prepareHeaders: headers => {
|
|
70
|
-
headers.set("Content-Type", "application/json");
|
|
71
|
-
headers.set("X-Ledger-Client-Version", (0, live_env_1.getEnv)("LEDGER_CLIENT_VERSION"));
|
|
72
|
-
return headers;
|
|
73
|
-
},
|
|
74
|
-
}),
|
|
78
|
+
baseQuery: baseQueryWithRetry,
|
|
75
79
|
tagTypes: [types_1.TokensDataTags.Tokens],
|
|
76
80
|
endpoints: build => ({
|
|
77
81
|
findTokenById: build.query({
|
|
@@ -164,6 +168,19 @@ exports.cryptoAssetsApi = (0, react_1.createApi)({
|
|
|
164
168
|
};
|
|
165
169
|
}
|
|
166
170
|
},
|
|
171
|
+
async onQueryStarted(currencyId, { dispatch, queryFulfilled, getCacheEntry }) {
|
|
172
|
+
try {
|
|
173
|
+
const previousHash = getCacheEntry()?.data;
|
|
174
|
+
const { data: newHash } = await queryFulfilled;
|
|
175
|
+
if (previousHash && newHash && previousHash !== newHash) {
|
|
176
|
+
(0, logs_1.log)("cryptoassets", `Hash changed for currencyId ${currencyId}: ${previousHash} -> ${newHash}, evicting token cache`);
|
|
177
|
+
dispatch(exports.cryptoAssetsApi.util.invalidateTags([types_1.TokensDataTags.Tokens]));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Query failed, skip eviction
|
|
182
|
+
}
|
|
183
|
+
},
|
|
167
184
|
}),
|
|
168
185
|
getTokensData: build.infiniteQuery({
|
|
169
186
|
query: ({ pageParam, queryArg = {} }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cal-client/state-manager/api.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cal-client/state-manager/api.ts"],"names":[],"mappings":";;;AAAA,wDAAoG;AAEpG,0CAAqD;AACrD,iDAA4C;AAC5C,mCAAmG;AACnG,qCAA+C;AAE/C,mEAA6E;AAC7E,yCAAqC;AACrC,6BAAwB;AAExB;;;GAGG;AACU,QAAA,iBAAiB,GAAG,OAAC,CAAC,KAAK,CAAC,iCAAsB,CAAC,CAAC;AAcjE,SAAS,uBAAuB,CAC9B,QAA4B,EAC5B,IAAyB;IAEzB,MAAM,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC;IAE7E,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,MAAM,MAAM,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,CAAC,CAAC;QACF,UAAU,EAAE;YACV,UAAU;SACX;KACF,CAAC;AACJ,CAAC;AAoOC,0DAAuB;AAlOzB,SAAS,gCAAgC,CAAC,KAAuB;IAC/D,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAA,qCAAe,EAAC;QAC7B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,eAAe,EAAE,KAAK,CAAC,gBAAgB;QACvC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,eAAe,EAAE,KAAK,CAAC,gBAAgB;QACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,eAAe,EAAE,KAAK,CAAC,cAAc;KACtC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAoNC,4EAAgC;AAlNlC,SAAS,uCAAuC,CAAC,QAAiB;IAChE,MAAM,iBAAiB,GAAG,yBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,qCAAe,EAAC;QAC7B,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,eAAe,EAAE,QAAQ,CAAC,gBAAgB;QAC1C,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,eAAe,EAAE,QAAQ,CAAC,gBAAgB;QAC1C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,eAAe,EAAE,QAAQ,CAAC,cAAc;KACzC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAgMC,0FAAuC;AA9LzC,MAAM,kBAAkB,GAAG,IAAA,aAAK,EAC9B,IAAA,sBAAc,EAAC;IACb,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,OAAO,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAA,iBAAM,EAAC,uBAAuB,CAAC,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC,EACF;IACE,UAAU,EAAE,CAAC;CACd,CACF,CAAC;AAEW,QAAA,eAAe,GAAG,IAAA,iBAAS,EAAC;IACvC,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,kBAAkB;IAC7B,QAAQ,EAAE,CAAC,sBAAc,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,aAAa,EAAE,KAAK,CAAC,KAAK,CAA6C;YACrE,KAAK,EAAE,MAAM,CAAC,EAAE;gBACd,MAAM,OAAO,GAAG,IAAA,iBAAM,EAAC,iBAAiB,CAAC,CAAC;gBAC1C,oDAAoD;gBACpD,MAAM,KAAK,GAAG,IAAA,qCAAe,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO;oBACL,GAAG,EAAE,GAAG,OAAO,YAAY;oBAC3B,MAAM,EAAE;wBACN,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,GAAG;wBACV,MAAM,EAAE,4BAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;qBACtC;iBACF,CAAC;YACJ,CAAC;YACD,iBAAiB,EAAE,uCAAuC;YAC1D,YAAY,EAAE,CAAC,sBAAc,CAAC,MAAM,CAAC;SACtC,CAAC;QAEF,4BAA4B,EAAE,KAAK,CAAC,KAAK,CAGvC;YACA,KAAK,EAAE,MAAM,CAAC,EAAE;gBACd,MAAM,OAAO,GAAG,IAAA,iBAAM,EAAC,iBAAiB,CAAC,CAAC;gBAC1C,OAAO;oBACL,GAAG,EAAE,GAAG,OAAO,YAAY;oBAC3B,MAAM,EAAE;wBACN,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;wBACzC,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,KAAK,EAAE,GAAG;wBACV,MAAM,EAAE,4BAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;qBACtC;iBACF,CAAC;YACJ,CAAC;YACD,iBAAiB,EAAE,uCAAuC;YAC1D,YAAY,EAAE,CAAC,sBAAc,CAAC,MAAM,CAAC;SACtC,CAAC;QAEF,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAiB;YAC7C,OAAO,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;gBAC1B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAA,iBAAM,EAAC,iBAAiB,CAAC,CAAC;oBAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;oBAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACnC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;wBAC3C,OAAO,EAAE;4BACP,cAAc,EAAE,kBAAkB;4BAClC,yBAAyB,EAAE,IAAA,iBAAM,EAAC,uBAAuB,CAAC;yBAC3D;qBACF,CAAC,CAAC;oBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,OAAO;4BACL,KAAK,EAAE;gCACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gCACvB,IAAI,EAAE,6BAA6B,QAAQ,CAAC,UAAU,EAAE;gCACxD,cAAc,EAAE,QAAQ,CAAC,MAAM;6BAChC;yBACF,CAAC;oBACJ,CAAC;oBAED,2DAA2D;oBAC3D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7D,OAAO;4BACL,KAAK,EAAE;gCACL,MAAM,EAAE,GAAG;gCACX,IAAI,EAAE,uBAAuB,UAAU,EAAE;gCACzC,cAAc,EAAE,GAAG;6BACpB;yBACF,CAAC;oBACJ,CAAC;oBAED,mDAAmD;oBACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;oBAErD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO;4BACL,KAAK,EAAE;gCACL,MAAM,EAAE,eAAe;gCACvB,IAAI,EAAE,8CAA8C;gCACpD,KAAK,EAAE,8CAA8C;gCACrD,cAAc,EAAE,GAAG;6BACpB;yBACF,CAAC;oBACJ,CAAC;oBAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;wBACL,KAAK,EAAE;4BACL,MAAM,EAAE,aAAa;4BACrB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;yBAChE;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE;gBAC1E,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,aAAa,EAAE,EAAE,IAA0B,CAAC;oBACjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC;oBAE/C,IAAI,YAAY,IAAI,OAAO,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;wBACxD,IAAA,UAAG,EACD,cAAc,EACd,+BAA+B,UAAU,KAAK,YAAY,OAAO,OAAO,wBAAwB,CACjG,CAAC;wBACF,QAAQ,CAAC,uBAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,sBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;YACH,CAAC;SACF,CAAC;QAEF,aAAa,EAAE,KAAK,CAAC,aAAa,CAA2D;YAC3F,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,EAAE,EAAE;gBACtC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;gBAE3F,MAAM,MAAM,GAAG;oBACb,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,4BAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1D,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;oBACtD,GAAG,CAAC,aAAa,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;oBACvD,QAAQ;oBACR,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;oBACvB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;iBACpB,CAAC;gBAEF,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAA,iBAAM,EAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAM,EAAC,iBAAiB,CAAC,CAAC;gBAE1F,OAAO;oBACL,GAAG,EAAE,GAAG,OAAO,YAAY;oBAC3B,MAAM;iBACP,CAAC;YACJ,CAAC;YACD,YAAY,EAAE,CAAC,sBAAc,CAAC,MAAM,CAAC;YACrC,iBAAiB,EAAE,uBAAuB;YAC1C,oBAAoB,EAAE;gBACpB,gBAAgB,EAAE;oBAChB,MAAM,EAAE,EAAE;iBACX;gBACD,gBAAgB,EAAE,QAAQ,CAAC,EAAE;oBAC3B,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;wBACnC,OAAO;4BACL,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU;yBACvC,CAAC;oBACJ,CAAC;oBACD,OAAO,SAAS,CAAC;gBACnB,CAAC;aACF;SACF,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAGD,qCAA6B,GAK3B,uBAAe,gCAJjB,6BAAqB,GAInB,uBAAe,wBAHjB,4CAAoC,GAGlC,uBAAe,uCAFjB,iCAAyB,GAEvB,uBAAe,4BADjB,iBAAS,GACP,uBAAe,WAAC"}
|
|
@@ -3,9 +3,9 @@ export declare function useTokensData(params: GetTokensDataParams): {
|
|
|
3
3
|
data: TokensDataWithPagination | undefined;
|
|
4
4
|
isLoading: boolean;
|
|
5
5
|
error: import("@reduxjs/toolkit").SerializedError | undefined;
|
|
6
|
-
loadNext: (() => import("@reduxjs/toolkit/query").InfiniteQueryActionCreatorResult<import("@reduxjs/toolkit/query").InfiniteQueryDefinition<GetTokensDataParams, import("../state-manager/types").PageParam, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, import("../state-manager/types").TokensDataTags, TokensDataWithPagination, "cryptoAssetsApi", unknown>>) | undefined;
|
|
6
|
+
loadNext: (() => import("@reduxjs/toolkit/query").InfiniteQueryActionCreatorResult<import("@reduxjs/toolkit/query").InfiniteQueryDefinition<GetTokensDataParams, import("../state-manager/types").PageParam, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {} & import("@reduxjs/toolkit/query").RetryOptions, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, import("../state-manager/types").TokensDataTags, TokensDataWithPagination, "cryptoAssetsApi", unknown>>) | undefined;
|
|
7
7
|
isSuccess: boolean;
|
|
8
8
|
isError: boolean;
|
|
9
|
-
refetch: () => import("@reduxjs/toolkit/query").InfiniteQueryActionCreatorResult<import("@reduxjs/toolkit/query").InfiniteQueryDefinition<GetTokensDataParams, import("../state-manager/types").PageParam, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, import("../state-manager/types").TokensDataTags, TokensDataWithPagination, "cryptoAssetsApi", unknown>>;
|
|
9
|
+
refetch: () => import("@reduxjs/toolkit/query").InfiniteQueryActionCreatorResult<import("@reduxjs/toolkit/query").InfiniteQueryDefinition<GetTokensDataParams, import("../state-manager/types").PageParam, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {} & import("@reduxjs/toolkit/query").RetryOptions, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, import("../state-manager/types").TokensDataTags, TokensDataWithPagination, "cryptoAssetsApi", unknown>>;
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=useTokensData.d.ts.map
|
|
@@ -9,7 +9,7 @@ import type { ThunkDispatch } from "@reduxjs/toolkit";
|
|
|
9
9
|
* Current version of the persistence format
|
|
10
10
|
* Increment this when making breaking changes to the format
|
|
11
11
|
*/
|
|
12
|
-
export declare const PERSISTENCE_VERSION =
|
|
12
|
+
export declare const PERSISTENCE_VERSION = 2;
|
|
13
13
|
/**
|
|
14
14
|
* Serializable token format
|
|
15
15
|
* This is TokenCurrency without the parentCurrency object (replaced by parentCurrencyId)
|
|
@@ -42,11 +42,13 @@ export interface PersistedTokenEntry {
|
|
|
42
42
|
/**
|
|
43
43
|
* Root persistence format with versioning
|
|
44
44
|
*/
|
|
45
|
-
export interface
|
|
45
|
+
export interface PersistedCAL {
|
|
46
46
|
/** Format version for migration handling */
|
|
47
47
|
version: number;
|
|
48
48
|
/** Array of persisted tokens */
|
|
49
49
|
tokens: PersistedTokenEntry[];
|
|
50
|
+
/** Mapping of currencyId to X-Ledger-Commit hash */
|
|
51
|
+
hashes?: Record<string, string>;
|
|
50
52
|
}
|
|
51
53
|
/**
|
|
52
54
|
* Converts TokenCurrency to serializable Raw format
|
|
@@ -69,18 +71,23 @@ export interface StateWithCryptoAssets {
|
|
|
69
71
|
* Converts tokens to serializable format
|
|
70
72
|
*/
|
|
71
73
|
export declare function extractTokensFromState(state: StateWithCryptoAssets): PersistedTokenEntry[];
|
|
74
|
+
/**
|
|
75
|
+
* Extracts hashes from getTokensSyncHash queries in RTK Query state
|
|
76
|
+
* Returns a mapping of currencyId to hash
|
|
77
|
+
*/
|
|
78
|
+
export declare function extractHashesFromState(state: StateWithCryptoAssets): Record<string, string>;
|
|
79
|
+
/**
|
|
80
|
+
* Extracts all persisted data (tokens and hashes) from RTK Query state
|
|
81
|
+
* Returns a complete PersistedCAL object ready for serialization
|
|
82
|
+
*/
|
|
83
|
+
export declare function extractPersistedCALFromState(state: StateWithCryptoAssets): PersistedCAL;
|
|
72
84
|
/**
|
|
73
85
|
* Filters out expired tokens based on TTL
|
|
74
86
|
*/
|
|
75
87
|
export declare function filterExpiredTokens(tokens: PersistedTokenEntry[], ttl: number): PersistedTokenEntry[];
|
|
76
88
|
/**
|
|
77
|
-
* Restores tokens from persisted data to RTK Query cache
|
|
78
|
-
*
|
|
79
|
-
* Implements cross-caching: stores tokens by both ID and address
|
|
80
|
-
*
|
|
81
|
-
* @param dispatch - Redux dispatch function
|
|
82
|
-
* @param tokens - Array of persisted token entries
|
|
83
|
-
* @param ttl - Time-to-live in milliseconds (tokens older than this are skipped)
|
|
89
|
+
* Restores tokens from persisted data to RTK Query cache.
|
|
90
|
+
* Validates persisted hashes against current hashes and evicts cache if they differ.
|
|
84
91
|
*/
|
|
85
|
-
export declare function restoreTokensToCache(dispatch: ThunkDispatch<any, any, any>,
|
|
92
|
+
export declare function restoreTokensToCache(dispatch: ThunkDispatch<any, any, any>, persistedData: PersistedCAL, ttl: number): Promise<void>;
|
|
86
93
|
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/cal-client/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,IAAI,EAAE,gBAAgB,CAAC;IACvB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/cal-client/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,IAAI,EAAE,gBAAgB,CAAC;IACvB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAazE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAoBrF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;CAC3E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,mBAAmB,EAAE,CAoC1F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2B3F;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CASvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,GAAG,EAAE,MAAM,GACV,mBAAmB,EAAE,CAavB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAExC,QAAQ,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACtC,aAAa,EAAE,YAAY,EAC3B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAgGf"}
|
|
@@ -9,7 +9,7 @@ import { cryptoAssetsApi } from "./state-manager/api";
|
|
|
9
9
|
* Current version of the persistence format
|
|
10
10
|
* Increment this when making breaking changes to the format
|
|
11
11
|
*/
|
|
12
|
-
export const PERSISTENCE_VERSION =
|
|
12
|
+
export const PERSISTENCE_VERSION = 2;
|
|
13
13
|
/**
|
|
14
14
|
* Converts TokenCurrency to serializable Raw format
|
|
15
15
|
*/
|
|
@@ -65,9 +65,9 @@ export function extractTokensFromState(state) {
|
|
|
65
65
|
const tokens = [];
|
|
66
66
|
const seenIds = new Set();
|
|
67
67
|
// Extract tokens from fulfilled queries
|
|
68
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
68
|
for (const [_queryKey, query] of Object.entries(rtkState.queries)) {
|
|
70
|
-
if (query
|
|
69
|
+
if (query &&
|
|
70
|
+
query.status === "fulfilled" &&
|
|
71
71
|
query.data &&
|
|
72
72
|
(query.endpointName === "findTokenById" ||
|
|
73
73
|
query.endpointName === "findTokenByAddressInCurrency")) {
|
|
@@ -85,6 +85,45 @@ export function extractTokensFromState(state) {
|
|
|
85
85
|
log("persistence", `Extracted ${tokens.length} tokens from cache`);
|
|
86
86
|
return tokens;
|
|
87
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Extracts hashes from getTokensSyncHash queries in RTK Query state
|
|
90
|
+
* Returns a mapping of currencyId to hash
|
|
91
|
+
*/
|
|
92
|
+
export function extractHashesFromState(state) {
|
|
93
|
+
const rtkState = state[cryptoAssetsApi.reducerPath];
|
|
94
|
+
if (!rtkState || !rtkState.queries) {
|
|
95
|
+
return {};
|
|
96
|
+
}
|
|
97
|
+
const hashes = {};
|
|
98
|
+
// Extract hashes from fulfilled getTokensSyncHash queries
|
|
99
|
+
for (const [queryKey, query] of Object.entries(rtkState.queries)) {
|
|
100
|
+
if (query &&
|
|
101
|
+
query.status === "fulfilled" &&
|
|
102
|
+
query.endpointName === "getTokensSyncHash" &&
|
|
103
|
+
query.data &&
|
|
104
|
+
typeof query.data === "string") {
|
|
105
|
+
// Extract currencyId from query key (format: 'getTokensSyncHash("ethereum")')
|
|
106
|
+
const match = queryKey.match(/getTokensSyncHash\("([^"]+)"\)/);
|
|
107
|
+
if (match && match[1]) {
|
|
108
|
+
hashes[match[1]] = query.data;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return hashes;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Extracts all persisted data (tokens and hashes) from RTK Query state
|
|
116
|
+
* Returns a complete PersistedCAL object ready for serialization
|
|
117
|
+
*/
|
|
118
|
+
export function extractPersistedCALFromState(state) {
|
|
119
|
+
const tokens = extractTokensFromState(state);
|
|
120
|
+
const hashes = extractHashesFromState(state);
|
|
121
|
+
return {
|
|
122
|
+
version: PERSISTENCE_VERSION,
|
|
123
|
+
tokens,
|
|
124
|
+
...(Object.keys(hashes).length > 0 && { hashes }),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
88
127
|
/**
|
|
89
128
|
* Filters out expired tokens based on TTL
|
|
90
129
|
*/
|
|
@@ -101,41 +140,62 @@ export function filterExpiredTokens(tokens, ttl) {
|
|
|
101
140
|
return validTokens;
|
|
102
141
|
}
|
|
103
142
|
/**
|
|
104
|
-
* Restores tokens from persisted data to RTK Query cache
|
|
105
|
-
*
|
|
106
|
-
* Implements cross-caching: stores tokens by both ID and address
|
|
107
|
-
*
|
|
108
|
-
* @param dispatch - Redux dispatch function
|
|
109
|
-
* @param tokens - Array of persisted token entries
|
|
110
|
-
* @param ttl - Time-to-live in milliseconds (tokens older than this are skipped)
|
|
143
|
+
* Restores tokens from persisted data to RTK Query cache.
|
|
144
|
+
* Validates persisted hashes against current hashes and evicts cache if they differ.
|
|
111
145
|
*/
|
|
112
|
-
export function restoreTokensToCache(
|
|
146
|
+
export async function restoreTokensToCache(
|
|
113
147
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
114
|
-
dispatch,
|
|
115
|
-
const validTokens = filterExpiredTokens(tokens, ttl);
|
|
148
|
+
dispatch, persistedData, ttl) {
|
|
149
|
+
const validTokens = filterExpiredTokens(persistedData.tokens, ttl);
|
|
116
150
|
if (validTokens.length === 0) {
|
|
117
151
|
log("persistence", "No valid tokens to restore");
|
|
118
152
|
return;
|
|
119
153
|
}
|
|
120
|
-
|
|
121
|
-
|
|
154
|
+
const tokensByCurrency = new Map();
|
|
155
|
+
for (const entry of validTokens) {
|
|
156
|
+
const currencyId = entry.data.parentCurrencyId;
|
|
157
|
+
if (!tokensByCurrency.has(currencyId)) {
|
|
158
|
+
tokensByCurrency.set(currencyId, []);
|
|
159
|
+
}
|
|
160
|
+
tokensByCurrency.get(currencyId).push(entry);
|
|
161
|
+
}
|
|
162
|
+
const currencyIdsToEvict = new Set();
|
|
163
|
+
const hashes = persistedData.hashes || {};
|
|
164
|
+
for (const currencyId of tokensByCurrency.keys()) {
|
|
165
|
+
const storedHash = hashes[currencyId];
|
|
166
|
+
if (!storedHash)
|
|
167
|
+
continue;
|
|
168
|
+
try {
|
|
169
|
+
const currentHashResult = await dispatch(cryptoAssetsApi.endpoints.getTokensSyncHash.initiate(currencyId, { forceRefetch: false }));
|
|
170
|
+
const currentHash = currentHashResult.data;
|
|
171
|
+
if (currentHash && currentHash !== storedHash) {
|
|
172
|
+
log("persistence", `Hash changed for currencyId ${currencyId}: ${storedHash} -> ${currentHash}, skipping restore`);
|
|
173
|
+
currencyIdsToEvict.add(currencyId);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
log("persistence", `Failed to validate hash for currencyId ${currencyId}, skipping restore`, error);
|
|
178
|
+
currencyIdsToEvict.add(currencyId);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const tokensToRestore = validTokens.filter(entry => !currencyIdsToEvict.has(entry.data.parentCurrencyId));
|
|
182
|
+
if (tokensToRestore.length === 0) {
|
|
183
|
+
log("persistence", "No tokens to restore after hash validation");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
122
186
|
const entries = [];
|
|
123
187
|
let skipped = 0;
|
|
124
|
-
for (const entry of
|
|
125
|
-
// Convert Raw format back to TokenCurrency
|
|
188
|
+
for (const entry of tokensToRestore) {
|
|
126
189
|
const token = fromTokenCurrencyRaw(entry.data);
|
|
127
190
|
if (!token) {
|
|
128
|
-
// Conversion failed (e.g., parent currency not found), skip this token
|
|
129
191
|
skipped++;
|
|
130
192
|
continue;
|
|
131
193
|
}
|
|
132
|
-
// Cache by ID
|
|
133
194
|
entries.push({
|
|
134
195
|
endpointName: "findTokenById",
|
|
135
196
|
arg: { id: token.id },
|
|
136
197
|
value: token,
|
|
137
198
|
});
|
|
138
|
-
// Cross-cache by address (for findTokenByAddressInCurrency queries)
|
|
139
199
|
entries.push({
|
|
140
200
|
endpointName: "findTokenByAddressInCurrency",
|
|
141
201
|
arg: {
|
|
@@ -145,10 +205,9 @@ dispatch, tokens, ttl) {
|
|
|
145
205
|
value: token,
|
|
146
206
|
});
|
|
147
207
|
}
|
|
148
|
-
// Dispatch single upsertQueryEntries action with all entries
|
|
149
208
|
if (entries.length > 0) {
|
|
150
209
|
dispatch(cryptoAssetsApi.util.upsertQueryEntries(entries));
|
|
151
210
|
}
|
|
152
|
-
log("persistence", `Restored ${
|
|
211
|
+
log("persistence", `Restored ${tokensToRestore.length - skipped} tokens (${entries.length} entries, ${skipped} skipped, ${currencyIdsToEvict.size} currencies evicted)`);
|
|
153
212
|
}
|
|
154
213
|
//# sourceMappingURL=persistence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/cal-client/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/cal-client/persistence.ts"],"names":[],"mappings":"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"}
|