@ledgerhq/hw-app-eth 6.30.5 → 6.31.0-next.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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @ledgerhq/hw-app-eth
2
2
 
3
+ ## 6.31.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2405](https://github.com/LedgerHQ/ledger-live/pull/2405) [`7eb8b1a39b`](https://github.com/LedgerHQ/ledger-live/commit/7eb8b1a39b36a5b336d95f89a92edf7ee22bcd26) Thanks [@lambertkevin](https://github.com/lambertkevin)! - Add resilience to malformed dynamic CAL
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`3ca4c9763d`](https://github.com/LedgerHQ/ledger-live/commit/3ca4c9763dd7c7ab7891efbd3cb6785cda2d038f), [`0e7ff249f7`](https://github.com/LedgerHQ/ledger-live/commit/0e7ff249f7e1160ff3888e52767ef91151efbedd), [`dcfeef0a2c`](https://github.com/LedgerHQ/ledger-live/commit/dcfeef0a2c0f8c3d344d2943b3d21654f15ae184), [`c2779b1cab`](https://github.com/LedgerHQ/ledger-live/commit/c2779b1cab18a1d5747ca955f5ceee86db920f57)]:
12
+ - @ledgerhq/cryptoassets@8.0.0-next.0
13
+ - @ledgerhq/hw-transport@6.28.0-next.0
14
+ - @ledgerhq/hw-transport-mocker@6.27.11-next.0
15
+
3
16
  ## 6.30.5
4
17
 
5
18
  ### Patch Changes
package/README.md CHANGED
@@ -452,7 +452,7 @@ Retrieve the token information by a given contract address if any
452
452
 
453
453
  * `contract` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
454
454
  * `chainId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
455
- * `erc20SignaturesBlob` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
455
+ * `erc20SignaturesBlob` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | null)?**
456
456
 
457
457
  Returns **(TokenInfo | null | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))**
458
458
 
@@ -1,10 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import { LoadConfig } from "../types";
3
- export declare const findERC20SignaturesInfo: (userLoadConfig: LoadConfig) => Promise<string | undefined>;
3
+ export declare const findERC20SignaturesInfo: (userLoadConfig: LoadConfig) => Promise<string | null>;
4
4
  /**
5
5
  * Retrieve the token information by a given contract address if any
6
6
  */
7
- export declare const byContractAddressAndChainId: (contract: string, chainId: number, erc20SignaturesBlob?: string | undefined) => TokenInfo | null | undefined;
7
+ export declare const byContractAddressAndChainId: (contract: string, chainId: number, erc20SignaturesBlob?: string | null | undefined) => TokenInfo | null | undefined;
8
8
  /**
9
9
  * list all the ERC20 tokens informations
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,eAAO,MAAM,uBAAuB,mBAClB,UAAU,KACzB,QAAQ,MAAM,GAAG,SAAS,CAU5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,aAC5B,MAAM,WACP,MAAM,+CAEd,SAAS,GAAG,IAAI,GAAG,SAUrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,gDAAmC,SAAS,EAO5D,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAY,GAAG,GAAG;IAChB,oBAAoB,EAAE,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,IAAI,EAAE,MAAM,SAAS,EAAE,CAAC;CACzB,CAAC"}
1
+ {"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,eAAO,MAAM,uBAAuB,mBAClB,UAAU,KACzB,QAAQ,MAAM,GAAG,IAAI,CAmBvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,aAC5B,MAAM,WACP,MAAM,sDAEd,SAAS,GAAG,IAAI,GAAG,SAcrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,gDAAmC,SAAS,EAW5D,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAY,GAAG,GAAG;IAChB,oBAAoB,EAAE,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,IAAI,EAAE,MAAM,SAAS,EAAE,CAAC;CACzB,CAAC"}
@@ -45,23 +45,29 @@ var logs_1 = require("@ledgerhq/logs");
45
45
  var axios_1 = __importDefault(require("axios"));
46
46
  var loadConfig_1 = require("./loadConfig");
47
47
  var findERC20SignaturesInfo = function (userLoadConfig) { return __awaiter(void 0, void 0, void 0, function () {
48
- var cryptoassetsBaseURL, url, response;
48
+ var cryptoassetsBaseURL, url, blob;
49
49
  return __generator(this, function (_a) {
50
50
  switch (_a.label) {
51
51
  case 0:
52
52
  cryptoassetsBaseURL = (0, loadConfig_1.getLoadConfig)(userLoadConfig).cryptoassetsBaseURL;
53
53
  if (!cryptoassetsBaseURL)
54
- return [2 /*return*/];
54
+ return [2 /*return*/, null];
55
55
  url = "".concat(cryptoassetsBaseURL, "/erc20-signatures.json");
56
- return [4 /*yield*/, axios_1["default"].get(url)["catch"](function (e) {
56
+ return [4 /*yield*/, axios_1["default"]
57
+ .get(url)
58
+ .then(function (_a) {
59
+ var data = _a.data;
60
+ if (!data || typeof data !== "string") {
61
+ throw new Error("ERC20 signatures file is malformed ".concat(url));
62
+ }
63
+ return data;
64
+ })["catch"](function (e) {
57
65
  (0, logs_1.log)("error", "could not fetch from " + url + ": " + String(e));
58
66
  return null;
59
67
  })];
60
68
  case 1:
61
- response = _a.sent();
62
- if (!response)
63
- return [2 /*return*/];
64
- return [2 /*return*/, response.data];
69
+ blob = _a.sent();
70
+ return [2 /*return*/, blob];
65
71
  }
66
72
  });
67
73
  }); };
@@ -72,7 +78,12 @@ exports.findERC20SignaturesInfo = findERC20SignaturesInfo;
72
78
  var byContractAddressAndChainId = function (contract, chainId, erc20SignaturesBlob) {
73
79
  // If we are able to fetch data from s3 bucket that contains dynamic CAL
74
80
  if (erc20SignaturesBlob) {
75
- return parse(erc20SignaturesBlob).byContractAndChainId(asContractAddress(contract), chainId);
81
+ try {
82
+ return parse(erc20SignaturesBlob).byContractAndChainId(asContractAddress(contract), chainId);
83
+ }
84
+ catch (e) {
85
+ return get().byContractAndChainId(asContractAddress(contract), chainId);
86
+ }
76
87
  }
77
88
  // the static fallback when dynamic cal is not provided
78
89
  return get().byContractAndChainId(asContractAddress(contract), chainId);
@@ -84,7 +95,12 @@ exports.byContractAddressAndChainId = byContractAddressAndChainId;
84
95
  var list = function (erc20SignaturesBlob) {
85
96
  // If we are able to fetch data from s3 bucket that contains dynamic CAL
86
97
  if (erc20SignaturesBlob) {
87
- return parse(erc20SignaturesBlob).list();
98
+ try {
99
+ return parse(erc20SignaturesBlob).list();
100
+ }
101
+ catch (e) {
102
+ return get().list();
103
+ }
88
104
  }
89
105
  // the static fallback when dynamic cal is not provided
90
106
  return get().list();
@@ -1 +1 @@
1
- {"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import { LoadConfig } from "../types";
3
- export declare const findERC20SignaturesInfo: (userLoadConfig: LoadConfig) => Promise<string | undefined>;
3
+ export declare const findERC20SignaturesInfo: (userLoadConfig: LoadConfig) => Promise<string | null>;
4
4
  /**
5
5
  * Retrieve the token information by a given contract address if any
6
6
  */
7
- export declare const byContractAddressAndChainId: (contract: string, chainId: number, erc20SignaturesBlob?: string | undefined) => TokenInfo | null | undefined;
7
+ export declare const byContractAddressAndChainId: (contract: string, chainId: number, erc20SignaturesBlob?: string | null | undefined) => TokenInfo | null | undefined;
8
8
  /**
9
9
  * list all the ERC20 tokens informations
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,eAAO,MAAM,uBAAuB,mBAClB,UAAU,KACzB,QAAQ,MAAM,GAAG,SAAS,CAU5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,aAC5B,MAAM,WACP,MAAM,+CAEd,SAAS,GAAG,IAAI,GAAG,SAUrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,gDAAmC,SAAS,EAO5D,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAY,GAAG,GAAG;IAChB,oBAAoB,EAAE,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,IAAI,EAAE,MAAM,SAAS,EAAE,CAAC;CACzB,CAAC"}
1
+ {"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,eAAO,MAAM,uBAAuB,mBAClB,UAAU,KACzB,QAAQ,MAAM,GAAG,IAAI,CAmBvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,aAC5B,MAAM,WACP,MAAM,sDAEd,SAAS,GAAG,IAAI,GAAG,SAcrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,gDAAmC,SAAS,EAW5D,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAY,GAAG,GAAG;IAChB,oBAAoB,EAAE,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACP,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,IAAI,EAAE,MAAM,SAAS,EAAE,CAAC;CACzB,CAAC"}
@@ -39,23 +39,29 @@ import { log } from "@ledgerhq/logs";
39
39
  import axios from "axios";
40
40
  import { getLoadConfig } from "./loadConfig";
41
41
  export var findERC20SignaturesInfo = function (userLoadConfig) { return __awaiter(void 0, void 0, void 0, function () {
42
- var cryptoassetsBaseURL, url, response;
42
+ var cryptoassetsBaseURL, url, blob;
43
43
  return __generator(this, function (_a) {
44
44
  switch (_a.label) {
45
45
  case 0:
46
46
  cryptoassetsBaseURL = getLoadConfig(userLoadConfig).cryptoassetsBaseURL;
47
47
  if (!cryptoassetsBaseURL)
48
- return [2 /*return*/];
48
+ return [2 /*return*/, null];
49
49
  url = "".concat(cryptoassetsBaseURL, "/erc20-signatures.json");
50
- return [4 /*yield*/, axios.get(url)["catch"](function (e) {
50
+ return [4 /*yield*/, axios
51
+ .get(url)
52
+ .then(function (_a) {
53
+ var data = _a.data;
54
+ if (!data || typeof data !== "string") {
55
+ throw new Error("ERC20 signatures file is malformed ".concat(url));
56
+ }
57
+ return data;
58
+ })["catch"](function (e) {
51
59
  log("error", "could not fetch from " + url + ": " + String(e));
52
60
  return null;
53
61
  })];
54
62
  case 1:
55
- response = _a.sent();
56
- if (!response)
57
- return [2 /*return*/];
58
- return [2 /*return*/, response.data];
63
+ blob = _a.sent();
64
+ return [2 /*return*/, blob];
59
65
  }
60
66
  });
61
67
  }); };
@@ -65,7 +71,12 @@ export var findERC20SignaturesInfo = function (userLoadConfig) { return __awaite
65
71
  export var byContractAddressAndChainId = function (contract, chainId, erc20SignaturesBlob) {
66
72
  // If we are able to fetch data from s3 bucket that contains dynamic CAL
67
73
  if (erc20SignaturesBlob) {
68
- return parse(erc20SignaturesBlob).byContractAndChainId(asContractAddress(contract), chainId);
74
+ try {
75
+ return parse(erc20SignaturesBlob).byContractAndChainId(asContractAddress(contract), chainId);
76
+ }
77
+ catch (e) {
78
+ return get().byContractAndChainId(asContractAddress(contract), chainId);
79
+ }
69
80
  }
70
81
  // the static fallback when dynamic cal is not provided
71
82
  return get().byContractAndChainId(asContractAddress(contract), chainId);
@@ -76,7 +87,12 @@ export var byContractAddressAndChainId = function (contract, chainId, erc20Signa
76
87
  export var list = function (erc20SignaturesBlob) {
77
88
  // If we are able to fetch data from s3 bucket that contains dynamic CAL
78
89
  if (erc20SignaturesBlob) {
79
- return parse(erc20SignaturesBlob).list();
90
+ try {
91
+ return parse(erc20SignaturesBlob).list();
92
+ }
93
+ catch (e) {
94
+ return get().list();
95
+ }
80
96
  }
81
97
  // the static fallback when dynamic cal is not provided
82
98
  return get().list();
@@ -1 +1 @@
1
- {"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,IAAI,MAAM,8CAA8C,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,IAAM,uBAAuB,GAAG,UACrC,cAA0B;;;;;gBAElB,mBAAmB,GAAK,aAAa,CAAC,cAAc,CAAC,oBAAlC,CAAmC;gBAC9D,IAAI,CAAC,mBAAmB;oBAAE,sBAAO;gBAC3B,GAAG,GAAG,UAAG,mBAAmB,2BAAwB,CAAC;gBAC1C,qBAAM,KAAK,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC,OAAK,CAAA,CAAC,UAAC,CAAC;wBACpD,GAAG,CAAC,OAAO,EAAE,uBAAuB,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/D,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,EAAA;;gBAHI,QAAQ,GAAG,SAGf;gBACF,IAAI,CAAC,QAAQ;oBAAE,sBAAO;gBACtB,sBAAO,QAAQ,CAAC,IAAI,EAAC;;;KACtB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,2BAA2B,GAAG,UACzC,QAAgB,EAChB,OAAe,EACf,mBAA4B;IAE5B,wEAAwE;IACxE,IAAI,mBAAmB,EAAE;QACvB,OAAO,KAAK,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CACpD,iBAAiB,CAAC,QAAQ,CAAC,EAC3B,OAAO,CACR,CAAC;KACH;IACD,uDAAuD;IACvD,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,IAAI,GAAG,UAAC,mBAA4B;IAC/C,wEAAwE;IACxE,IAAI,mBAAmB,EAAE;QACvB,OAAO,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC;KAC1C;IACD,uDAAuD;IACvD,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAkBF,IAAM,iBAAiB,GAAG,UAAC,IAAY;IACrC,IAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,IAAM,KAAK,GAAG,UAAC,mBAA2B;IACxC,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;QACrB,IAAM,QAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC,IAAI,CAAC,CAAC;QACP,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,QAAM,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,IAAI,CAAC,CAAC;QACP,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC,IAAI,YAAY,CAAC;QAClB,IAAM,eAAe,GAAG,iBAAiB,CACvC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtC,CAAC;QACF,CAAC,IAAI,EAAE,CAAC;QACR,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,IAAI,CAAC,CAAC;QACP,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,CAAC;QACP,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,IAAM,KAAK,GAAc;YACvB,MAAM,QAAA;YACN,eAAe,iBAAA;YACf,QAAQ,UAAA;YACR,OAAO,SAAA;YACP,SAAS,WAAA;YACT,IAAI,EAAE,IAAI;SACX,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,eAAe,CAAC,GAAG,KAAK,CAAC;QACrD,CAAC,IAAI,QAAM,CAAC;KACb;IAED,IAAM,GAAG,GAAG;QACV,IAAI,EAAE,cAAM,OAAA,OAAO,EAAP,CAAO;QACnB,oBAAoB,EAAE,UAAC,eAAe,EAAE,OAAO;YAC7C,OAAA,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,eAAe,CAAC;QAA5C,CAA4C;KAC/C,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,iFAAiF;AACjF,IAAM,GAAG,GAAc,CAAC;IACtB,IAAI,KAAsB,CAAC;IAC3B,OAAO;QACL,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,GAAG,GAAG,CAAC;QACZ,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../../src/services/ledger/erc20.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/hw-app-eth",
3
- "version": "6.30.5",
3
+ "version": "6.31.0-next.0",
4
4
  "description": "Ledger Hardware Wallet Ethereum Application API",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -32,10 +32,10 @@
32
32
  "axios": "^0.26.1",
33
33
  "bignumber.js": "^9.1.0",
34
34
  "crypto-js": "^4.1.1",
35
- "@ledgerhq/cryptoassets": "^7.3.0",
35
+ "@ledgerhq/cryptoassets": "^8.0.0-next.0",
36
36
  "@ledgerhq/errors": "^6.12.3",
37
- "@ledgerhq/hw-transport": "^6.27.10",
38
- "@ledgerhq/hw-transport-mocker": "^6.27.10",
37
+ "@ledgerhq/hw-transport": "^6.28.0-next.0",
38
+ "@ledgerhq/hw-transport-mocker": "^6.27.11-next.0",
39
39
  "@ledgerhq/logs": "^6.10.1"
40
40
  },
41
41
  "gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
@@ -6,16 +6,25 @@ import { getLoadConfig } from "./loadConfig";
6
6
 
7
7
  export const findERC20SignaturesInfo = async (
8
8
  userLoadConfig: LoadConfig
9
- ): Promise<string | undefined> => {
9
+ ): Promise<string | null> => {
10
10
  const { cryptoassetsBaseURL } = getLoadConfig(userLoadConfig);
11
- if (!cryptoassetsBaseURL) return;
11
+ if (!cryptoassetsBaseURL) return null;
12
+
12
13
  const url = `${cryptoassetsBaseURL}/erc20-signatures.json`;
13
- const response = await axios.get<string>(url).catch((e) => {
14
- log("error", "could not fetch from " + url + ": " + String(e));
15
- return null;
16
- });
17
- if (!response) return;
18
- return response.data;
14
+ const blob = await axios
15
+ .get<string>(url)
16
+ .then(({ data }) => {
17
+ if (!data || typeof data !== "string") {
18
+ throw new Error(`ERC20 signatures file is malformed ${url}`);
19
+ }
20
+ return data;
21
+ })
22
+ .catch((e) => {
23
+ log("error", "could not fetch from " + url + ": " + String(e));
24
+ return null;
25
+ });
26
+
27
+ return blob;
19
28
  };
20
29
 
21
30
  /**
@@ -24,14 +33,18 @@ export const findERC20SignaturesInfo = async (
24
33
  export const byContractAddressAndChainId = (
25
34
  contract: string,
26
35
  chainId: number,
27
- erc20SignaturesBlob?: string
36
+ erc20SignaturesBlob?: string | null
28
37
  ): TokenInfo | null | undefined => {
29
38
  // If we are able to fetch data from s3 bucket that contains dynamic CAL
30
39
  if (erc20SignaturesBlob) {
31
- return parse(erc20SignaturesBlob).byContractAndChainId(
32
- asContractAddress(contract),
33
- chainId
34
- );
40
+ try {
41
+ return parse(erc20SignaturesBlob).byContractAndChainId(
42
+ asContractAddress(contract),
43
+ chainId
44
+ );
45
+ } catch (e) {
46
+ return get().byContractAndChainId(asContractAddress(contract), chainId);
47
+ }
35
48
  }
36
49
  // the static fallback when dynamic cal is not provided
37
50
  return get().byContractAndChainId(asContractAddress(contract), chainId);
@@ -43,7 +56,11 @@ export const byContractAddressAndChainId = (
43
56
  export const list = (erc20SignaturesBlob?: string): TokenInfo[] => {
44
57
  // If we are able to fetch data from s3 bucket that contains dynamic CAL
45
58
  if (erc20SignaturesBlob) {
46
- return parse(erc20SignaturesBlob).list();
59
+ try {
60
+ return parse(erc20SignaturesBlob).list();
61
+ } catch (e) {
62
+ return get().list();
63
+ }
47
64
  }
48
65
  // the static fallback when dynamic cal is not provided
49
66
  return get().list();
@@ -1,3 +1,4 @@
1
+ import axios from "axios";
1
2
  import fs from "fs/promises";
2
3
  import path from "path";
3
4
  import {
@@ -15,7 +16,7 @@ jest.mock("@ledgerhq/cryptoassets/data/erc20-signatures", () => "");
15
16
 
16
17
  describe("ERC20 dynamic cal", () => {
17
18
  describe("ERC20 is not in local CAL", () => {
18
- test("should be successfully signin transaction from dynamic CAL", async () => {
19
+ it("should be successfully signin transaction from dynamic CAL", async () => {
19
20
  const apdusBuffer = await fs.readFile(
20
21
  path.resolve("./tests/fixtures/apdus/ERC20-OK.apdus"),
21
22
  "utf-8"
@@ -43,7 +44,7 @@ describe("ERC20 dynamic cal", () => {
43
44
  });
44
45
  });
45
46
 
46
- test("should ask for blind sign if not in dynamic & local CAL", async () => {
47
+ it("should ask for blind sign if not in dynamic & local CAL", async () => {
47
48
  const apdusBuffer = await fs.readFile(
48
49
  path.resolve("./tests/fixtures/apdus/ERC20-KO.apdus"),
49
50
  "utf-8"
@@ -70,5 +71,36 @@ describe("ERC20 dynamic cal", () => {
70
71
  );
71
72
  }
72
73
  });
74
+
75
+ it("shouldn't break if the dynamic CAL is malformed", async () => {
76
+ jest
77
+ .spyOn(axios, "get")
78
+ .mockImplementationOnce(async () => ({ data: { 123: "ok" } })); // malformed response. Should be a string but here returning an object imcompatible w/ buffer.from
79
+ const apdusBuffer = await fs.readFile(
80
+ path.resolve("./tests/fixtures/apdus/ERC20-KO.apdus"),
81
+ "utf-8"
82
+ );
83
+ const transport = await openTransportReplayer(
84
+ RecordStore.fromString(`${apdusBuffer}`)
85
+ );
86
+ const resolutionConfig = { erc20: true };
87
+ const resolution = await ledgerService.resolveTransaction(
88
+ txHex,
89
+ { cryptoassetsBaseURL: "working" },
90
+ resolutionConfig
91
+ );
92
+
93
+ const eth = new Eth(transport);
94
+
95
+ try {
96
+ await eth.signTransaction("44'/60'/0'/0/0", txHex, resolution);
97
+ } catch (e) {
98
+ expect(e).toStrictEqual(
99
+ new EthAppPleaseEnableContractData(
100
+ "Please enable Blind signing or Contract data in the Ethereum app Settings"
101
+ )
102
+ );
103
+ }
104
+ });
73
105
  });
74
106
  });
@@ -1,3 +1,4 @@
1
+ import axios from "axios";
1
2
  import fs from "fs/promises";
2
3
  import path from "path";
3
4
  import {
@@ -12,7 +13,7 @@ const txHex =
12
13
 
13
14
  describe("ERC20 dynamic cal", () => {
14
15
  describe("ERC20 is in local CAL", () => {
15
- test("should be successfully signin transaction from dynamic CAL", async () => {
16
+ it("should be successfully signin transaction from dynamic CAL", async () => {
16
17
  const apdusBuffer = await fs.readFile(
17
18
  path.resolve("./tests/fixtures/apdus/ERC20-OK.apdus"),
18
19
  "utf-8"
@@ -40,7 +41,7 @@ describe("ERC20 dynamic cal", () => {
40
41
  });
41
42
  });
42
43
 
43
- test("should be successfully signin transaction from local CAL", async () => {
44
+ it("should be successfully signin transaction from local CAL", async () => {
44
45
  const apdusBuffer = await fs.readFile(
45
46
  path.resolve("./tests/fixtures/apdus/ERC20-OK.apdus"),
46
47
  "utf-8"
@@ -68,5 +69,38 @@ describe("ERC20 dynamic cal", () => {
68
69
  s: "4f445c94cc869f01e194478a3b876052716ae7676247664acec371b6e6ad16e4",
69
70
  });
70
71
  });
72
+
73
+ it("shouldn't break if the dynamic CAL is malformed", async () => {
74
+ jest
75
+ .spyOn(axios, "get")
76
+ .mockImplementationOnce(async () => ({ data: { 123: "ok" } })); // malformed response. Should be a string but here returning an object imcompatible w/ buffer.from
77
+ const apdusBuffer = await fs.readFile(
78
+ path.resolve("./tests/fixtures/apdus/ERC20-OK.apdus"),
79
+ "utf-8"
80
+ );
81
+ const transport = await openTransportReplayer(
82
+ RecordStore.fromString(`${apdusBuffer}`)
83
+ );
84
+ const resolutionConfig = { erc20: true };
85
+ const resolution = await ledgerService.resolveTransaction(
86
+ txHex,
87
+ { cryptoassetsBaseURL: "working" },
88
+ resolutionConfig
89
+ );
90
+
91
+ const eth = new Eth(transport);
92
+
93
+ const result = await eth.signTransaction(
94
+ "44'/60'/0'/0/0",
95
+ txHex,
96
+ resolution
97
+ );
98
+
99
+ expect(result).toMatchObject({
100
+ v: "26",
101
+ r: "006c000371dc04c5752287a9901b1fac4b069eb1410173db39c407ae725e4a6e",
102
+ s: "4f445c94cc869f01e194478a3b876052716ae7676247664acec371b6e6ad16e4",
103
+ });
104
+ });
71
105
  });
72
106
  });
@@ -10,7 +10,11 @@ import paraswapJSON from "./paraswap.json";
10
10
 
11
11
  async function signTxWithResolution(eth, path, tx) {
12
12
  const resolution = await ledgerService
13
- .resolveTransaction(tx, {}, { externalPlugins: true, erc20: true })
13
+ .resolveTransaction(
14
+ tx,
15
+ {},
16
+ { externalPlugins: true, erc20: true, nft: true }
17
+ )
14
18
  .catch((e) => {
15
19
  console.warn(
16
20
  "an error occurred in resolveTransaction => fallback to blind signing: " +