@ledgerhq/coin-evm 0.7.0-next.1 → 0.7.0-next.2
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 +6 -0
- package/lib/__tests__/unit/preload.unit.test.js +13 -0
- package/lib/__tests__/unit/preload.unit.test.js.map +1 -1
- package/lib/preload.d.ts.map +1 -1
- package/lib/preload.js +6 -4
- package/lib/preload.js.map +1 -1
- package/lib-es/__tests__/unit/preload.unit.test.js +13 -0
- package/lib-es/__tests__/unit/preload.unit.test.js.map +1 -1
- package/lib-es/preload.d.ts.map +1 -1
- package/lib-es/preload.js +6 -3
- package/lib-es/preload.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/unit/preload.unit.test.ts +16 -0
- package/src/preload.ts +31 -24
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @ledgerhq/coin-evm
|
|
2
2
|
|
|
3
|
+
## 0.7.0-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#4804](https://github.com/LedgerHQ/ledger-live/pull/4804) [`4cb507a52b`](https://github.com/LedgerHQ/ledger-live/commit/4cb507a52bf336d395b08b4c1a429bd4956ab22d) Thanks [@lambertkevin](https://github.com/lambertkevin)! - Add cache to CDN requests during preload
|
|
8
|
+
|
|
3
9
|
## 0.7.0-next.1
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -35,6 +35,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
// do not move lower otherwise time based LRU tests won't work anymore
|
|
39
|
+
jest.useFakeTimers();
|
|
38
40
|
const network_1 = __importDefault(require("@ledgerhq/live-network/network"));
|
|
39
41
|
const index_1 = __importDefault(require("@ledgerhq/cryptoassets/data/evm/index"));
|
|
40
42
|
const CALTokensAPI = __importStar(require("@ledgerhq/cryptoassets/tokens"));
|
|
@@ -82,9 +84,20 @@ describe("EVM Family", () => {
|
|
|
82
84
|
});
|
|
83
85
|
afterEach(() => {
|
|
84
86
|
jest.restoreAllMocks();
|
|
87
|
+
// @ts-expect-error exposed reset method from `makeLRUCache`
|
|
88
|
+
preload_1.fetchERC20Tokens.reset();
|
|
85
89
|
});
|
|
86
90
|
describe("preload.ts", () => {
|
|
87
91
|
describe("fetchERC20Tokens", () => {
|
|
92
|
+
it("should respect the cache", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
93
|
+
jest.advanceTimersByTime(1); // necessary for LRU to not consider the TTL as infinity
|
|
94
|
+
yield (0, preload_1.fetchERC20Tokens)(currency1);
|
|
95
|
+
yield (0, preload_1.fetchERC20Tokens)(currency1);
|
|
96
|
+
expect(network_1.default).toHaveBeenCalledTimes(1);
|
|
97
|
+
jest.advanceTimersByTime(6 * 60 * 60 * 1000 + 1); // Wait 6 hours and 1 millisecond
|
|
98
|
+
yield (0, preload_1.fetchERC20Tokens)(currency1);
|
|
99
|
+
expect(network_1.default).toHaveBeenCalledTimes(2);
|
|
100
|
+
}));
|
|
88
101
|
it("should load dynamically the tokens", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
89
102
|
// @ts-expect-error not casted as jest mock
|
|
90
103
|
network_1.default.mockResolvedValue({ data: [usdtDefinition] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/preload.unit.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAAqD;AACrD,kFAAyD;AAEzD,4EAA8D;AAC9D,yDAA+D;AAC/D,2CAAmE;AAEnE,MAAM,cAAc,GAAe;IACjC,UAAU;IACV,WAAW;IACX,MAAM;IACN,CAAC;IACD,UAAU;IACV,gJAAgJ;IAChJ,4CAA4C;IAC5C,KAAK;IACL,KAAK;IACL,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,cAAc,GAAe;IACjC,UAAU;IACV,oBAAoB;IACpB,MAAM;IACN,CAAC;IACD,YAAY;IACZ,8IAA8I;IAC9I,4CAA4C;IAC5C,KAAK;IACL,KAAK;IACL,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,SAAS,GAAG,IAAA,oCAAqB,EAAC,UAAU,CAAC,CAAC,CAAC,aAAa;AAElE,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;AAC5C,IAAI,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,IAAI,MAAM;QAGR,OAAO;YACL,CAAC,EAAE,CAAC,cAAc,CAAC;SACpB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,2CAA2C;QAC3C,iBAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"preload.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/preload.unit.test.ts"],"names":[],"mappings":"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"}
|
package/lib/preload.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,eAAO,MAAM,gBAAgB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,UAAU,EAAE,CA8BhF,CAAC;AAEF,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAS7E;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAIpE"}
|
package/lib/preload.js
CHANGED
|
@@ -14,11 +14,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.hydrate = exports.preload = exports.fetchERC20Tokens = void 0;
|
|
16
16
|
const logs_1 = require("@ledgerhq/logs");
|
|
17
|
+
const live_env_1 = require("@ledgerhq/live-env");
|
|
18
|
+
const network_1 = __importDefault(require("@ledgerhq/live-network/network"));
|
|
19
|
+
const cache_1 = require("@ledgerhq/live-network/cache");
|
|
17
20
|
const tokens_1 = require("@ledgerhq/cryptoassets/tokens");
|
|
18
21
|
const index_1 = require("@ledgerhq/cryptoassets/data/evm/index");
|
|
19
|
-
|
|
20
|
-
const live_env_1 = require("@ledgerhq/live-env");
|
|
21
|
-
const fetchERC20Tokens = (currency) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
exports.fetchERC20Tokens = (0, cache_1.makeLRUCache)((currency) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
23
|
const { ethereumLikeInfo } = currency;
|
|
23
24
|
const url = `${(0, live_env_1.getEnv)("DYNAMIC_CAL_BASE_URL")}/evm/${(ethereumLikeInfo === null || ethereumLikeInfo === void 0 ? void 0 : ethereumLikeInfo.chainId) || 0}/erc20.json`;
|
|
24
25
|
const dynamicTokens = yield (0, network_1.default)({
|
|
@@ -37,8 +38,9 @@ const fetchERC20Tokens = (currency) => __awaiter(void 0, void 0, void 0, functio
|
|
|
37
38
|
return tokens;
|
|
38
39
|
(0, logs_1.log)("warning", `EVM Family: No tokens found in CAL for currency: ${currency.id}`, currency);
|
|
39
40
|
return [];
|
|
41
|
+
}), currency => `erc20-tokens-${currency.id}`, {
|
|
42
|
+
ttl: 6 * 60 * 60 * 1000, // 6 hours cache
|
|
40
43
|
});
|
|
41
|
-
exports.fetchERC20Tokens = fetchERC20Tokens;
|
|
42
44
|
function preload(currency) {
|
|
43
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
44
46
|
const erc20 = yield (0, exports.fetchERC20Tokens)(currency);
|
package/lib/preload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAqC;
|
|
1
|
+
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAqC;AACrC,iDAA4C;AAC5C,6EAAqD;AAErD,wDAA4D;AAE5D,0DAAwE;AACxE,iEAAkF;AAErE,QAAA,gBAAgB,GAAwD,IAAA,oBAAY,EAC/F,CAAM,QAAQ,EAAC,EAAE;IACf,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,GAAG,GAAG,GAAG,IAAA,iBAAM,EAAC,sBAAsB,CAAC,QAC3C,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,CAC/B,aAAa,CAAC;IACd,MAAM,aAAa,GAAwB,MAAM,IAAA,iBAAO,EAAC;QACvD,MAAM,EAAE,KAAK;QACb,GAAG;KACJ,CAAC;SACC,IAAI,CAAC,CAAC,EAAE,IAAI,EAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACvE,KAAK,CAAC,CAAC,CAAC,EAAE;QACT,IAAA,UAAG,EAAC,OAAO,EAAE,qDAAqD,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,MAAM,GAAG,cAAe,CAC5B,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAuC,CAC1C,CAAC;IAClB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAA,UAAG,EAAC,SAAS,EAAE,oDAAoD,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5F,OAAO,EAAE,CAAC;AACZ,CAAC,CAAA,EACD,QAAQ,CAAC,EAAE,CAAC,gBAAgB,QAAQ,CAAC,EAAE,EAAE,EACzC;IACE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,gBAAgB;CAC1C,CACF,CAAC;AAEF,SAAsB,OAAO,CAAC,QAAwB;;QACpD,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,EAAC,QAAQ,CAAC,CAAC;QAC/C,+DAA+D;QAC/D,uDAAuD;QACvD,kDAAkD;QAClD,4CAA4C;QAC5C,wCAAwC;QACxC,IAAA,kBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,IAAA,qBAAY,EAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;CAAA;AATD,0BASC;AAED,SAAgB,OAAO,CAAC,KAAsC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,IAAA,kBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC,CAAC;IACnC,IAAA,UAAG,EAAC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAC5D,CAAC;AAJD,0BAIC"}
|
|
@@ -7,6 +7,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
+
// do not move lower otherwise time based LRU tests won't work anymore
|
|
11
|
+
jest.useFakeTimers();
|
|
10
12
|
import network from "@ledgerhq/live-network/network";
|
|
11
13
|
import evms from "@ledgerhq/cryptoassets/data/evm/index";
|
|
12
14
|
import * as CALTokensAPI from "@ledgerhq/cryptoassets/tokens";
|
|
@@ -54,9 +56,20 @@ describe("EVM Family", () => {
|
|
|
54
56
|
});
|
|
55
57
|
afterEach(() => {
|
|
56
58
|
jest.restoreAllMocks();
|
|
59
|
+
// @ts-expect-error exposed reset method from `makeLRUCache`
|
|
60
|
+
fetchERC20Tokens.reset();
|
|
57
61
|
});
|
|
58
62
|
describe("preload.ts", () => {
|
|
59
63
|
describe("fetchERC20Tokens", () => {
|
|
64
|
+
it("should respect the cache", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
jest.advanceTimersByTime(1); // necessary for LRU to not consider the TTL as infinity
|
|
66
|
+
yield fetchERC20Tokens(currency1);
|
|
67
|
+
yield fetchERC20Tokens(currency1);
|
|
68
|
+
expect(network).toHaveBeenCalledTimes(1);
|
|
69
|
+
jest.advanceTimersByTime(6 * 60 * 60 * 1000 + 1); // Wait 6 hours and 1 millisecond
|
|
70
|
+
yield fetchERC20Tokens(currency1);
|
|
71
|
+
expect(network).toHaveBeenCalledTimes(2);
|
|
72
|
+
}));
|
|
60
73
|
it("should load dynamically the tokens", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
74
|
// @ts-expect-error not casted as jest mock
|
|
62
75
|
network.mockResolvedValue({ data: [usdtDefinition] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/preload.unit.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,gCAAgC,CAAC;AACrD,OAAO,IAAI,MAAM,uCAAuC,CAAC;AAEzD,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,cAAc,GAAe;IACjC,UAAU;IACV,WAAW;IACX,MAAM;IACN,CAAC;IACD,UAAU;IACV,gJAAgJ;IAChJ,4CAA4C;IAC5C,KAAK;IACL,KAAK;IACL,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,cAAc,GAAe;IACjC,UAAU;IACV,oBAAoB;IACpB,MAAM;IACN,CAAC;IACD,YAAY;IACZ,8IAA8I;IAC9I,4CAA4C;IAC5C,KAAK;IACL,KAAK;IACL,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;AAElE,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;AAC5C,IAAI,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,IAAI,MAAM;QAGR,OAAO;YACL,CAAC,EAAE,CAAC,cAAc,CAAC;SACpB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,2CAA2C;QAC3C,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"preload.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/preload.unit.test.ts"],"names":[],"mappings":"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"}
|
package/lib-es/preload.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,eAAO,MAAM,gBAAgB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,UAAU,EAAE,CA8BhF,CAAC;AAEF,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAS7E;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAIpE"}
|
package/lib-es/preload.js
CHANGED
|
@@ -8,11 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { log } from "@ledgerhq/logs";
|
|
11
|
+
import { getEnv } from "@ledgerhq/live-env";
|
|
12
|
+
import network from "@ledgerhq/live-network/network";
|
|
13
|
+
import { makeLRUCache } from "@ledgerhq/live-network/cache";
|
|
11
14
|
import { addTokens, convertERC20 } from "@ledgerhq/cryptoassets/tokens";
|
|
12
15
|
import { tokens as tokensByChainId } from "@ledgerhq/cryptoassets/data/evm/index";
|
|
13
|
-
|
|
14
|
-
import { getEnv } from "@ledgerhq/live-env";
|
|
15
|
-
export const fetchERC20Tokens = (currency) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
export const fetchERC20Tokens = makeLRUCache((currency) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
17
|
const { ethereumLikeInfo } = currency;
|
|
17
18
|
const url = `${getEnv("DYNAMIC_CAL_BASE_URL")}/evm/${(ethereumLikeInfo === null || ethereumLikeInfo === void 0 ? void 0 : ethereumLikeInfo.chainId) || 0}/erc20.json`;
|
|
18
19
|
const dynamicTokens = yield network({
|
|
@@ -31,6 +32,8 @@ export const fetchERC20Tokens = (currency) => __awaiter(void 0, void 0, void 0,
|
|
|
31
32
|
return tokens;
|
|
32
33
|
log("warning", `EVM Family: No tokens found in CAL for currency: ${currency.id}`, currency);
|
|
33
34
|
return [];
|
|
35
|
+
}), currency => `erc20-tokens-${currency.id}`, {
|
|
36
|
+
ttl: 6 * 60 * 60 * 1000, // 6 hours cache
|
|
34
37
|
});
|
|
35
38
|
export function preload(currency) {
|
|
36
39
|
return __awaiter(this, void 0, void 0, function* () {
|
package/lib-es/preload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,OAAO,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAElF,MAAM,CAAC,MAAM,gBAAgB,GAAwD,YAAY,CAC/F,CAAM,QAAQ,EAAC,EAAE;IACf,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,QAC3C,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,CAC/B,aAAa,CAAC;IACd,MAAM,aAAa,GAAwB,MAAM,OAAO,CAAC;QACvD,MAAM,EAAE,KAAK;QACb,GAAG;KACJ,CAAC;SACC,IAAI,CAAC,CAAC,EAAE,IAAI,EAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACvE,KAAK,CAAC,CAAC,CAAC,EAAE;QACT,GAAG,CAAC,OAAO,EAAE,qDAAqD,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,MAAM,GAAG,eAAe,CAC5B,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAuC,CAC1C,CAAC;IAClB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,GAAG,CAAC,SAAS,EAAE,oDAAoD,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5F,OAAO,EAAE,CAAC;AACZ,CAAC,CAAA,EACD,QAAQ,CAAC,EAAE,CAAC,gBAAgB,QAAQ,CAAC,EAAE,EAAE,EACzC;IACE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,gBAAgB;CAC1C,CACF,CAAC;AAEF,MAAM,UAAgB,OAAO,CAAC,QAAwB;;QACpD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,+DAA+D;QAC/D,uDAAuD;QACvD,kDAAkD;QAClD,4CAA4C;QAC5C,wCAAwC;QACxC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;CAAA;AAED,MAAM,UAAU,OAAO,CAAC,KAAsC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAC5D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// do not move lower otherwise time based LRU tests won't work anymore
|
|
2
|
+
jest.useFakeTimers();
|
|
3
|
+
|
|
1
4
|
import network from "@ledgerhq/live-network/network";
|
|
2
5
|
import evms from "@ledgerhq/cryptoassets/data/evm/index";
|
|
3
6
|
import { ERC20Token } from "@ledgerhq/cryptoassets/types";
|
|
@@ -52,10 +55,23 @@ describe("EVM Family", () => {
|
|
|
52
55
|
|
|
53
56
|
afterEach(() => {
|
|
54
57
|
jest.restoreAllMocks();
|
|
58
|
+
// @ts-expect-error exposed reset method from `makeLRUCache`
|
|
59
|
+
fetchERC20Tokens.reset();
|
|
55
60
|
});
|
|
56
61
|
|
|
57
62
|
describe("preload.ts", () => {
|
|
58
63
|
describe("fetchERC20Tokens", () => {
|
|
64
|
+
it("should respect the cache", async () => {
|
|
65
|
+
jest.advanceTimersByTime(1); // necessary for LRU to not consider the TTL as infinity
|
|
66
|
+
await fetchERC20Tokens(currency1);
|
|
67
|
+
await fetchERC20Tokens(currency1);
|
|
68
|
+
expect(network).toHaveBeenCalledTimes(1);
|
|
69
|
+
|
|
70
|
+
jest.advanceTimersByTime(6 * 60 * 60 * 1000 + 1); // Wait 6 hours and 1 millisecond
|
|
71
|
+
await fetchERC20Tokens(currency1);
|
|
72
|
+
expect(network).toHaveBeenCalledTimes(2);
|
|
73
|
+
});
|
|
74
|
+
|
|
59
75
|
it("should load dynamically the tokens", async () => {
|
|
60
76
|
// @ts-expect-error not casted as jest mock
|
|
61
77
|
network.mockResolvedValue({ data: [usdtDefinition] });
|
package/src/preload.ts
CHANGED
|
@@ -1,36 +1,43 @@
|
|
|
1
1
|
import { log } from "@ledgerhq/logs";
|
|
2
|
+
import { getEnv } from "@ledgerhq/live-env";
|
|
3
|
+
import network from "@ledgerhq/live-network/network";
|
|
2
4
|
import { ERC20Token } from "@ledgerhq/cryptoassets/types";
|
|
5
|
+
import { makeLRUCache } from "@ledgerhq/live-network/cache";
|
|
3
6
|
import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
|
|
4
7
|
import { addTokens, convertERC20 } from "@ledgerhq/cryptoassets/tokens";
|
|
5
8
|
import { tokens as tokensByChainId } from "@ledgerhq/cryptoassets/data/evm/index";
|
|
6
|
-
import network from "@ledgerhq/live-network/network";
|
|
7
|
-
import { getEnv } from "@ledgerhq/live-env";
|
|
8
9
|
|
|
9
|
-
export const fetchERC20Tokens: (
|
|
10
|
-
currency
|
|
11
|
-
|
|
12
|
-
const { ethereumLikeInfo } = currency;
|
|
10
|
+
export const fetchERC20Tokens: (currency: CryptoCurrency) => Promise<ERC20Token[]> = makeLRUCache(
|
|
11
|
+
async currency => {
|
|
12
|
+
const { ethereumLikeInfo } = currency;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
const url = `${getEnv("DYNAMIC_CAL_BASE_URL")}/evm/${
|
|
15
|
+
ethereumLikeInfo?.chainId || 0
|
|
16
|
+
}/erc20.json`;
|
|
17
|
+
const dynamicTokens: ERC20Token[] | null = await network({
|
|
18
|
+
method: "GET",
|
|
19
|
+
url,
|
|
20
|
+
})
|
|
21
|
+
.then(({ data }: { data: ERC20Token[] }) => (data.length ? data : null))
|
|
22
|
+
.catch(e => {
|
|
23
|
+
log("error", "EVM Family: Couldn't fetch dynamic CAL tokens from " + url, e);
|
|
24
|
+
return null;
|
|
25
|
+
});
|
|
26
|
+
if (dynamicTokens) return dynamicTokens;
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const tokens = tokensByChainId[
|
|
29
|
+
ethereumLikeInfo?.chainId as keyof typeof tokensByChainId
|
|
30
|
+
] as ERC20Token[];
|
|
31
|
+
if (tokens) return tokens;
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
33
|
+
log("warning", `EVM Family: No tokens found in CAL for currency: ${currency.id}`, currency);
|
|
34
|
+
return [];
|
|
35
|
+
},
|
|
36
|
+
currency => `erc20-tokens-${currency.id}`,
|
|
37
|
+
{
|
|
38
|
+
ttl: 6 * 60 * 60 * 1000, // 6 hours cache
|
|
39
|
+
},
|
|
40
|
+
);
|
|
34
41
|
|
|
35
42
|
export async function preload(currency: CryptoCurrency): Promise<ERC20Token[]> {
|
|
36
43
|
const erc20 = await fetchERC20Tokens(currency);
|