@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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @ledgerhq/coin-evm@0.7.0-next.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-evm
2
+ > @ledgerhq/coin-evm@0.7.0-next.1 build /home/runner/work/ledger-live/ledger-live/libs/coin-evm
3
3
  > tsc && tsc -m ES6 --outDir lib-es
4
4
 
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":"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"}
1
+ {"version":3,"file":"preload.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/preload.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,eAAO,MAAM,gBAAgB,EAAE,CAC7B,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,UAAU,EAAE,CAsBxB,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"}
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
- const network_1 = __importDefault(require("@ledgerhq/live-network/network"));
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);
@@ -1 +1 @@
1
- {"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAqC;AAGrC,0DAAwE;AACxE,iEAAkF;AAClF,6EAAqD;AACrD,iDAA4C;AAErC,MAAM,gBAAgB,GAEA,CAAM,QAAQ,EAAC,EAAE;IAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,GAAG,GAAG,GAAG,IAAA,iBAAM,EAAC,sBAAsB,CAAC,QAAQ,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,CAAC,aAAa,CAAC;IACjG,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,CAAC;AAxBW,QAAA,gBAAgB,oBAwB3B;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"}
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":"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"}
1
+ {"version":3,"file":"preload.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/preload.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,eAAO,MAAM,gBAAgB,EAAE,CAC7B,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,UAAU,EAAE,CAsBxB,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"}
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
- import network from "@ledgerhq/live-network/network";
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* () {
@@ -1 +1 @@
1
- {"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,OAAO,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAEA,CAAM,QAAQ,EAAC,EAAE;IAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,CAAC,aAAa,CAAC;IACjG,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,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"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-evm",
3
- "version": "0.7.0-next.1",
3
+ "version": "0.7.0-next.2",
4
4
  "description": "Ledger EVM Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -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: CryptoCurrency,
11
- ) => Promise<ERC20Token[]> = async currency => {
12
- const { ethereumLikeInfo } = currency;
10
+ export const fetchERC20Tokens: (currency: CryptoCurrency) => Promise<ERC20Token[]> = makeLRUCache(
11
+ async currency => {
12
+ const { ethereumLikeInfo } = currency;
13
13
 
14
- const url = `${getEnv("DYNAMIC_CAL_BASE_URL")}/evm/${ethereumLikeInfo?.chainId || 0}/erc20.json`;
15
- const dynamicTokens: ERC20Token[] | null = await network({
16
- method: "GET",
17
- url,
18
- })
19
- .then(({ data }: { data: ERC20Token[] }) => (data.length ? data : null))
20
- .catch(e => {
21
- log("error", "EVM Family: Couldn't fetch dynamic CAL tokens from " + url, e);
22
- return null;
23
- });
24
- if (dynamicTokens) return dynamicTokens;
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
- const tokens = tokensByChainId[
27
- ethereumLikeInfo?.chainId as keyof typeof tokensByChainId
28
- ] as ERC20Token[];
29
- if (tokens) return tokens;
28
+ const tokens = tokensByChainId[
29
+ ethereumLikeInfo?.chainId as keyof typeof tokensByChainId
30
+ ] as ERC20Token[];
31
+ if (tokens) return tokens;
30
32
 
31
- log("warning", `EVM Family: No tokens found in CAL for currency: ${currency.id}`, currency);
32
- return [];
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);