@ledgerhq/evm-tools 1.8.1 → 1.8.2-nightly.20251126160702
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 +7 -0
- package/lib/message/EIP712/index.d.ts +6 -2
- package/lib/message/EIP712/index.d.ts.map +1 -1
- package/lib/message/EIP712/index.js +16 -10
- package/lib/message/EIP712/index.js.map +1 -1
- package/lib-es/message/EIP712/index.d.ts +6 -2
- package/lib-es/message/EIP712/index.d.ts.map +1 -1
- package/lib-es/message/EIP712/index.js +16 -10
- package/lib-es/message/EIP712/index.js.map +1 -1
- package/package.json +3 -4
- package/src/__tests__/messages/EIP712/index.unit.test.ts +24 -10
- package/src/message/EIP712/index.ts +25 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @ledgerhq/evm-tools
|
|
2
2
|
|
|
3
|
+
## 1.8.2-nightly.20251126160702
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`a2ecb55`](https://github.com/LedgerHQ/ledger-live/commit/a2ecb55df9d383dc282f5fe489cb14386208215e), [`b113920`](https://github.com/LedgerHQ/ledger-live/commit/b11392056bc334fc1813c473569ad3ae7be08045)]:
|
|
8
|
+
- @ledgerhq/live-env@2.22.0-nightly.20251126160702
|
|
9
|
+
|
|
3
10
|
## 1.8.1
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -8,9 +8,13 @@ export declare const getSchemaHashForMessage: (message: EIP712Message) => string
|
|
|
8
8
|
* in the CAL
|
|
9
9
|
*
|
|
10
10
|
* @param {EIP712Message} message
|
|
11
|
+
* @param {boolean} shouldUseV1Filters
|
|
12
|
+
* @param {string | null} calServiceURL
|
|
13
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV1 - Static EIP712 signatures v1 fallback
|
|
14
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV2 - Static EIP712 signatures v2 fallback
|
|
11
15
|
* @returns {MessageFilters | undefined}
|
|
12
16
|
*/
|
|
13
|
-
export declare const getFiltersForMessage: (message: EIP712Message, shouldUseV1Filters?: boolean, calServiceURL?: string | null) => Promise<MessageFilters | undefined>;
|
|
17
|
+
export declare const getFiltersForMessage: (message: EIP712Message, shouldUseV1Filters?: boolean, calServiceURL?: string | null, staticEIP712SignaturesV1?: Record<string, any> | null, staticEIP712SignaturesV2?: Record<string, any> | null) => Promise<MessageFilters | undefined>;
|
|
14
18
|
/**
|
|
15
19
|
* Using a path as a string, returns the value(s) of a json key without worrying about depth or arrays
|
|
16
20
|
* (e.g: 'to.wallets.[]' => ["0x123", "0x456"])
|
|
@@ -19,7 +23,7 @@ export declare const getValueFromPath: (path: string, eip721Message: EIP712Messa
|
|
|
19
23
|
/**
|
|
20
24
|
* Gets the fields visible on the nano for a specific EIP712 message
|
|
21
25
|
*/
|
|
22
|
-
export declare const getEIP712FieldsDisplayedOnNano: (messageData: EIP712Message, calServiceURL?: string) => Promise<{
|
|
26
|
+
export declare const getEIP712FieldsDisplayedOnNano: (messageData: EIP712Message, calServiceURL?: string, staticEIP712SignaturesV1?: Record<string, any> | null, staticEIP712SignaturesV2?: Record<string, any> | null) => Promise<{
|
|
23
27
|
label: string;
|
|
24
28
|
value: string | string[];
|
|
25
29
|
}[] | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAA4B,cAAc,EAAE,MAAM,SAAS,CAAC;AAGnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,aAAa,CAS1E;AAED,eAAO,MAAM,wBAAwB,QAAS,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,MAAM,EAAE,OAAO,CAgB7F,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,aAAa,KAAG,MAKhE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,YACtB,aAAa,uBACD,OAAO,kBACZ,MAAM,GAAG,IAAI,6BACF,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,6BAC1B,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KACpD,QAAQ,cAAc,GAAG,SAAS,CA4CpC,CAAC;AA4BF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SAAU,MAAM,iBAAiB,aAAa,KAAG,MAAM,GAAG,MAAM,EAmB5F,CAAC;AA0BF;;GAEG;AACH,eAAO,MAAM,8BAA8B,gBAC5B,aAAa,kBACX,MAAM,6BACM,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,6BAC1B,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KACpD,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,IAAI,CAkG9D,CAAC"}
|
|
@@ -9,8 +9,6 @@ const sha224_1 = __importDefault(require("crypto-js/sha224"));
|
|
|
9
9
|
const live_env_1 = require("@ledgerhq/live-env");
|
|
10
10
|
const constants_1 = require("@ethersproject/constants");
|
|
11
11
|
const hash_1 = require("@ethersproject/hash");
|
|
12
|
-
const eip712_1 = __importDefault(require("@ledgerhq/cryptoassets-evm-signatures/data/eip712"));
|
|
13
|
-
const eip712_v2_1 = __importDefault(require("@ledgerhq/cryptoassets-evm-signatures/data/eip712_v2"));
|
|
14
12
|
// As defined in [spec](https://eips.ethereum.org/EIPS/eip-712), the properties below are all required.
|
|
15
13
|
function isEIP712Message(message) {
|
|
16
14
|
return (!!message &&
|
|
@@ -46,9 +44,13 @@ exports.getSchemaHashForMessage = getSchemaHashForMessage;
|
|
|
46
44
|
* in the CAL
|
|
47
45
|
*
|
|
48
46
|
* @param {EIP712Message} message
|
|
47
|
+
* @param {boolean} shouldUseV1Filters
|
|
48
|
+
* @param {string | null} calServiceURL
|
|
49
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV1 - Static EIP712 signatures v1 fallback
|
|
50
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV2 - Static EIP712 signatures v2 fallback
|
|
49
51
|
* @returns {MessageFilters | undefined}
|
|
50
52
|
*/
|
|
51
|
-
const getFiltersForMessage = async (message, shouldUseV1Filters, calServiceURL) => {
|
|
53
|
+
const getFiltersForMessage = async (message, shouldUseV1Filters, calServiceURL, staticEIP712SignaturesV1, staticEIP712SignaturesV2) => {
|
|
52
54
|
const schemaHash = (0, exports.getSchemaHashForMessage)(message);
|
|
53
55
|
const verifyingContract = message.domain?.verifyingContract?.toLowerCase() || constants_1.AddressZero;
|
|
54
56
|
try {
|
|
@@ -70,15 +72,19 @@ const getFiltersForMessage = async (message, shouldUseV1Filters, calServiceURL)
|
|
|
70
72
|
}
|
|
71
73
|
return filters;
|
|
72
74
|
}
|
|
73
|
-
//
|
|
74
|
-
throw new Error("
|
|
75
|
+
// Fall through to static fallback
|
|
76
|
+
throw new Error("No CAL service URL");
|
|
75
77
|
}
|
|
76
78
|
catch (e) {
|
|
79
|
+
// Static fallback from injected signatures (for external library users)
|
|
77
80
|
const messageId = `${message.domain?.chainId ?? 0}:${verifyingContract}:${schemaHash}`;
|
|
78
|
-
if (shouldUseV1Filters) {
|
|
79
|
-
return
|
|
81
|
+
if (shouldUseV1Filters && staticEIP712SignaturesV1) {
|
|
82
|
+
return staticEIP712SignaturesV1[messageId];
|
|
80
83
|
}
|
|
81
|
-
|
|
84
|
+
if (!shouldUseV1Filters && staticEIP712SignaturesV2) {
|
|
85
|
+
return staticEIP712SignaturesV2[messageId];
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
82
88
|
}
|
|
83
89
|
};
|
|
84
90
|
exports.getFiltersForMessage = getFiltersForMessage;
|
|
@@ -146,13 +152,13 @@ function formatDate(timestamp) {
|
|
|
146
152
|
/**
|
|
147
153
|
* Gets the fields visible on the nano for a specific EIP712 message
|
|
148
154
|
*/
|
|
149
|
-
const getEIP712FieldsDisplayedOnNano = async (messageData, calServiceURL = (0, live_env_1.getEnv)("CAL_SERVICE_URL")) => {
|
|
155
|
+
const getEIP712FieldsDisplayedOnNano = async (messageData, calServiceURL = (0, live_env_1.getEnv)("CAL_SERVICE_URL"), staticEIP712SignaturesV1, staticEIP712SignaturesV2) => {
|
|
150
156
|
if (!isEIP712Message(messageData)) {
|
|
151
157
|
return null;
|
|
152
158
|
}
|
|
153
159
|
const { EIP712Domain, ...otherTypes } = messageData.types;
|
|
154
160
|
const displayedInfos = [];
|
|
155
|
-
const filters = await (0, exports.getFiltersForMessage)(messageData, false, calServiceURL);
|
|
161
|
+
const filters = await (0, exports.getFiltersForMessage)(messageData, false, calServiceURL, staticEIP712SignaturesV1, staticEIP712SignaturesV2);
|
|
156
162
|
if (!filters) {
|
|
157
163
|
const { types } = messageData;
|
|
158
164
|
const domainFields = types["EIP712Domain"].map(({ name }) => name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,8DAAsC;AACtC,iDAA4C;AAE5C,wDAAuD;AACvD,8CAA4E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,13 @@ export declare const getSchemaHashForMessage: (message: EIP712Message) => string
|
|
|
8
8
|
* in the CAL
|
|
9
9
|
*
|
|
10
10
|
* @param {EIP712Message} message
|
|
11
|
+
* @param {boolean} shouldUseV1Filters
|
|
12
|
+
* @param {string | null} calServiceURL
|
|
13
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV1 - Static EIP712 signatures v1 fallback
|
|
14
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV2 - Static EIP712 signatures v2 fallback
|
|
11
15
|
* @returns {MessageFilters | undefined}
|
|
12
16
|
*/
|
|
13
|
-
export declare const getFiltersForMessage: (message: EIP712Message, shouldUseV1Filters?: boolean, calServiceURL?: string | null) => Promise<MessageFilters | undefined>;
|
|
17
|
+
export declare const getFiltersForMessage: (message: EIP712Message, shouldUseV1Filters?: boolean, calServiceURL?: string | null, staticEIP712SignaturesV1?: Record<string, any> | null, staticEIP712SignaturesV2?: Record<string, any> | null) => Promise<MessageFilters | undefined>;
|
|
14
18
|
/**
|
|
15
19
|
* Using a path as a string, returns the value(s) of a json key without worrying about depth or arrays
|
|
16
20
|
* (e.g: 'to.wallets.[]' => ["0x123", "0x456"])
|
|
@@ -19,7 +23,7 @@ export declare const getValueFromPath: (path: string, eip721Message: EIP712Messa
|
|
|
19
23
|
/**
|
|
20
24
|
* Gets the fields visible on the nano for a specific EIP712 message
|
|
21
25
|
*/
|
|
22
|
-
export declare const getEIP712FieldsDisplayedOnNano: (messageData: EIP712Message, calServiceURL?: string) => Promise<{
|
|
26
|
+
export declare const getEIP712FieldsDisplayedOnNano: (messageData: EIP712Message, calServiceURL?: string, staticEIP712SignaturesV1?: Record<string, any> | null, staticEIP712SignaturesV2?: Record<string, any> | null) => Promise<{
|
|
23
27
|
label: string;
|
|
24
28
|
value: string | string[];
|
|
25
29
|
}[] | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAA4B,cAAc,EAAE,MAAM,SAAS,CAAC;AAGnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,aAAa,CAS1E;AAED,eAAO,MAAM,wBAAwB,QAAS,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,MAAM,EAAE,OAAO,CAgB7F,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,aAAa,KAAG,MAKhE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,YACtB,aAAa,uBACD,OAAO,kBACZ,MAAM,GAAG,IAAI,6BACF,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,6BAC1B,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KACpD,QAAQ,cAAc,GAAG,SAAS,CA4CpC,CAAC;AA4BF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SAAU,MAAM,iBAAiB,aAAa,KAAG,MAAM,GAAG,MAAM,EAmB5F,CAAC;AA0BF;;GAEG;AACH,eAAO,MAAM,8BAA8B,gBAC5B,aAAa,kBACX,MAAM,6BACM,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,6BAC1B,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KACpD,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,IAAI,CAkG9D,CAAC"}
|
|
@@ -3,8 +3,6 @@ import SHA224 from "crypto-js/sha224";
|
|
|
3
3
|
import { getEnv } from "@ledgerhq/live-env";
|
|
4
4
|
import { AddressZero } from "@ethersproject/constants";
|
|
5
5
|
import { _TypedDataEncoder as TypedDataEncoder } from "@ethersproject/hash";
|
|
6
|
-
import EIP712CAL from "@ledgerhq/cryptoassets-evm-signatures/data/eip712";
|
|
7
|
-
import EIP712CALV2 from "@ledgerhq/cryptoassets-evm-signatures/data/eip712_v2";
|
|
8
6
|
// As defined in [spec](https://eips.ethereum.org/EIPS/eip-712), the properties below are all required.
|
|
9
7
|
export function isEIP712Message(message) {
|
|
10
8
|
return (!!message &&
|
|
@@ -37,9 +35,13 @@ export const getSchemaHashForMessage = (message) => {
|
|
|
37
35
|
* in the CAL
|
|
38
36
|
*
|
|
39
37
|
* @param {EIP712Message} message
|
|
38
|
+
* @param {boolean} shouldUseV1Filters
|
|
39
|
+
* @param {string | null} calServiceURL
|
|
40
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV1 - Static EIP712 signatures v1 fallback
|
|
41
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV2 - Static EIP712 signatures v2 fallback
|
|
40
42
|
* @returns {MessageFilters | undefined}
|
|
41
43
|
*/
|
|
42
|
-
export const getFiltersForMessage = async (message, shouldUseV1Filters, calServiceURL) => {
|
|
44
|
+
export const getFiltersForMessage = async (message, shouldUseV1Filters, calServiceURL, staticEIP712SignaturesV1, staticEIP712SignaturesV2) => {
|
|
43
45
|
const schemaHash = getSchemaHashForMessage(message);
|
|
44
46
|
const verifyingContract = message.domain?.verifyingContract?.toLowerCase() || AddressZero;
|
|
45
47
|
try {
|
|
@@ -61,15 +63,19 @@ export const getFiltersForMessage = async (message, shouldUseV1Filters, calServi
|
|
|
61
63
|
}
|
|
62
64
|
return filters;
|
|
63
65
|
}
|
|
64
|
-
//
|
|
65
|
-
throw new Error("
|
|
66
|
+
// Fall through to static fallback
|
|
67
|
+
throw new Error("No CAL service URL");
|
|
66
68
|
}
|
|
67
69
|
catch (e) {
|
|
70
|
+
// Static fallback from injected signatures (for external library users)
|
|
68
71
|
const messageId = `${message.domain?.chainId ?? 0}:${verifyingContract}:${schemaHash}`;
|
|
69
|
-
if (shouldUseV1Filters) {
|
|
70
|
-
return
|
|
72
|
+
if (shouldUseV1Filters && staticEIP712SignaturesV1) {
|
|
73
|
+
return staticEIP712SignaturesV1[messageId];
|
|
71
74
|
}
|
|
72
|
-
|
|
75
|
+
if (!shouldUseV1Filters && staticEIP712SignaturesV2) {
|
|
76
|
+
return staticEIP712SignaturesV2[messageId];
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
73
79
|
}
|
|
74
80
|
};
|
|
75
81
|
/**
|
|
@@ -135,13 +141,13 @@ function formatDate(timestamp) {
|
|
|
135
141
|
/**
|
|
136
142
|
* Gets the fields visible on the nano for a specific EIP712 message
|
|
137
143
|
*/
|
|
138
|
-
export const getEIP712FieldsDisplayedOnNano = async (messageData, calServiceURL = getEnv("CAL_SERVICE_URL")) => {
|
|
144
|
+
export const getEIP712FieldsDisplayedOnNano = async (messageData, calServiceURL = getEnv("CAL_SERVICE_URL"), staticEIP712SignaturesV1, staticEIP712SignaturesV2) => {
|
|
139
145
|
if (!isEIP712Message(messageData)) {
|
|
140
146
|
return null;
|
|
141
147
|
}
|
|
142
148
|
const { EIP712Domain, ...otherTypes } = messageData.types;
|
|
143
149
|
const displayedInfos = [];
|
|
144
|
-
const filters = await getFiltersForMessage(messageData, false, calServiceURL);
|
|
150
|
+
const filters = await getFiltersForMessage(messageData, false, calServiceURL, staticEIP712SignaturesV1, staticEIP712SignaturesV2);
|
|
145
151
|
if (!filters) {
|
|
146
152
|
const { types } = messageData;
|
|
147
153
|
const domainFields = types["EIP712Domain"].map(({ name }) => name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/message/EIP712/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/evm-tools",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2-nightly.20251126160702",
|
|
4
4
|
"description": "EVM tooling used for coin integrations & app bindings",
|
|
5
5
|
"main": "./index.ts",
|
|
6
6
|
"keywords": [
|
|
@@ -49,8 +49,7 @@
|
|
|
49
49
|
"@ethersproject/hash": "^5.7.0",
|
|
50
50
|
"axios": "1.12.2",
|
|
51
51
|
"crypto-js": "4.2.0",
|
|
52
|
-
"@ledgerhq/live-env": "^2.
|
|
53
|
-
"@ledgerhq/cryptoassets-evm-signatures": "^13.7.1"
|
|
52
|
+
"@ledgerhq/live-env": "^2.22.0-nightly.20251126160702"
|
|
54
53
|
},
|
|
55
54
|
"devDependencies": {
|
|
56
55
|
"@types/crypto-js": "^4.1.1",
|
|
@@ -58,7 +57,7 @@
|
|
|
58
57
|
"@types/node": "^22.10.10",
|
|
59
58
|
"jest": "^29.7.0",
|
|
60
59
|
"ts-jest": "^29.1.1",
|
|
61
|
-
"@ledgerhq/types-live": "^6.
|
|
60
|
+
"@ledgerhq/types-live": "^6.90.0-nightly.20251126160702"
|
|
62
61
|
},
|
|
63
62
|
"scripts": {
|
|
64
63
|
"clean": "rimraf lib lib-es",
|
|
@@ -12,10 +12,6 @@ import messageInCAL from "../../fixtures/messages/2.json";
|
|
|
12
12
|
const CAL = jest.requireActual("../../fixtures/CAL").default;
|
|
13
13
|
|
|
14
14
|
jest.mock("axios");
|
|
15
|
-
jest.mock("@ledgerhq/cryptoassets-evm-signatures/data/eip712", () => require("../../fixtures/CAL"));
|
|
16
|
-
jest.mock("@ledgerhq/cryptoassets-evm-signatures/data/eip712_v2", () =>
|
|
17
|
-
require("../../fixtures/CAL"),
|
|
18
|
-
);
|
|
19
15
|
|
|
20
16
|
describe("evm-tools", () => {
|
|
21
17
|
describe("message", () => {
|
|
@@ -114,7 +110,13 @@ describe("evm-tools", () => {
|
|
|
114
110
|
data: dynamicCALWithNoMatch,
|
|
115
111
|
});
|
|
116
112
|
|
|
117
|
-
const result = await getFiltersForMessage(
|
|
113
|
+
const result = await getFiltersForMessage(
|
|
114
|
+
messageInCAL,
|
|
115
|
+
false,
|
|
116
|
+
"http://CAL-ADDRESS",
|
|
117
|
+
null,
|
|
118
|
+
CAL,
|
|
119
|
+
);
|
|
118
120
|
const schemaHash = "d8e4f2bd77f7562e99ea5df4adb127291a2bfbc225ae55450038f27f";
|
|
119
121
|
expect(result).toEqual(CAL[`1:0x7f268357a8c2552623316e2562d90e642bb538e5:${schemaHash}`]);
|
|
120
122
|
});
|
|
@@ -195,14 +197,20 @@ describe("evm-tools", () => {
|
|
|
195
197
|
});
|
|
196
198
|
const schemaHash = "d8e4f2bd77f7562e99ea5df4adb127291a2bfbc225ae55450038f27f";
|
|
197
199
|
|
|
198
|
-
const result = await getFiltersForMessage(
|
|
200
|
+
const result = await getFiltersForMessage(
|
|
201
|
+
messageInCAL,
|
|
202
|
+
false,
|
|
203
|
+
"http://CAL-ADDRESS",
|
|
204
|
+
null,
|
|
205
|
+
CAL,
|
|
206
|
+
);
|
|
199
207
|
expect(result).toEqual(CAL[`1:0x7f268357a8c2552623316e2562d90e642bb538e5:${schemaHash}`]);
|
|
200
208
|
});
|
|
201
209
|
|
|
202
210
|
it("should find the filters for a message in static CAL if no dynamic CAL URI is provided", async () => {
|
|
203
211
|
const schemaHash = "d8e4f2bd77f7562e99ea5df4adb127291a2bfbc225ae55450038f27f";
|
|
204
212
|
|
|
205
|
-
const result = await getFiltersForMessage(messageInCAL);
|
|
213
|
+
const result = await getFiltersForMessage(messageInCAL, false, null, null, CAL);
|
|
206
214
|
expect(result).toEqual(CAL[`1:0x7f268357a8c2552623316e2562d90e642bb538e5:${schemaHash}`]);
|
|
207
215
|
});
|
|
208
216
|
|
|
@@ -210,7 +218,13 @@ describe("evm-tools", () => {
|
|
|
210
218
|
(axios.get as jest.Mock).mockRejectedValue(new Error());
|
|
211
219
|
const schemaHash = "d8e4f2bd77f7562e99ea5df4adb127291a2bfbc225ae55450038f27f";
|
|
212
220
|
|
|
213
|
-
const result = await getFiltersForMessage(
|
|
221
|
+
const result = await getFiltersForMessage(
|
|
222
|
+
messageInCAL,
|
|
223
|
+
false,
|
|
224
|
+
"http://CAL-ADDRESS",
|
|
225
|
+
null,
|
|
226
|
+
CAL,
|
|
227
|
+
);
|
|
214
228
|
expect(result).toEqual(CAL[`1:0x7f268357a8c2552623316e2562d90e642bb538e5:${schemaHash}`]);
|
|
215
229
|
});
|
|
216
230
|
});
|
|
@@ -230,7 +244,7 @@ describe("evm-tools", () => {
|
|
|
230
244
|
});
|
|
231
245
|
|
|
232
246
|
it("should return the correct fields for a message with filters", async () => {
|
|
233
|
-
const fields = await getEIP712FieldsDisplayedOnNano(messageInCAL);
|
|
247
|
+
const fields = await getEIP712FieldsDisplayedOnNano(messageInCAL, undefined, null, CAL);
|
|
234
248
|
|
|
235
249
|
expect(fields).toEqual([
|
|
236
250
|
{
|
|
@@ -288,7 +302,7 @@ describe("evm-tools", () => {
|
|
|
288
302
|
});
|
|
289
303
|
|
|
290
304
|
it("should return the correct fields for a message with multidimensional filters", async () => {
|
|
291
|
-
const fields = await getEIP712FieldsDisplayedOnNano(complexMessage);
|
|
305
|
+
const fields = await getEIP712FieldsDisplayedOnNano(complexMessage, undefined, null, CAL);
|
|
292
306
|
|
|
293
307
|
expect(fields).toEqual([
|
|
294
308
|
{
|
|
@@ -4,8 +4,6 @@ import { getEnv } from "@ledgerhq/live-env";
|
|
|
4
4
|
import { EIP712Message } from "@ledgerhq/types-live";
|
|
5
5
|
import { AddressZero } from "@ethersproject/constants";
|
|
6
6
|
import { _TypedDataEncoder as TypedDataEncoder } from "@ethersproject/hash";
|
|
7
|
-
import EIP712CAL from "@ledgerhq/cryptoassets-evm-signatures/data/eip712";
|
|
8
|
-
import EIP712CALV2 from "@ledgerhq/cryptoassets-evm-signatures/data/eip712_v2";
|
|
9
7
|
import { CALServiceEIP712Response, MessageFilters } from "./types";
|
|
10
8
|
|
|
11
9
|
// As defined in [spec](https://eips.ethereum.org/EIPS/eip-712), the properties below are all required.
|
|
@@ -50,12 +48,18 @@ export const getSchemaHashForMessage = (message: EIP712Message): string => {
|
|
|
50
48
|
* in the CAL
|
|
51
49
|
*
|
|
52
50
|
* @param {EIP712Message} message
|
|
51
|
+
* @param {boolean} shouldUseV1Filters
|
|
52
|
+
* @param {string | null} calServiceURL
|
|
53
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV1 - Static EIP712 signatures v1 fallback
|
|
54
|
+
* @param {Record<string, any> | null | undefined} staticEIP712SignaturesV2 - Static EIP712 signatures v2 fallback
|
|
53
55
|
* @returns {MessageFilters | undefined}
|
|
54
56
|
*/
|
|
55
57
|
export const getFiltersForMessage = async (
|
|
56
58
|
message: EIP712Message,
|
|
57
59
|
shouldUseV1Filters?: boolean,
|
|
58
60
|
calServiceURL?: string | null,
|
|
61
|
+
staticEIP712SignaturesV1?: Record<string, any> | null,
|
|
62
|
+
staticEIP712SignaturesV2?: Record<string, any> | null,
|
|
59
63
|
): Promise<MessageFilters | undefined> => {
|
|
60
64
|
const schemaHash = getSchemaHashForMessage(message);
|
|
61
65
|
|
|
@@ -85,15 +89,20 @@ export const getFiltersForMessage = async (
|
|
|
85
89
|
|
|
86
90
|
return filters;
|
|
87
91
|
}
|
|
88
|
-
//
|
|
89
|
-
throw new Error("
|
|
92
|
+
// Fall through to static fallback
|
|
93
|
+
throw new Error("No CAL service URL");
|
|
90
94
|
} catch (e) {
|
|
95
|
+
// Static fallback from injected signatures (for external library users)
|
|
91
96
|
const messageId = `${message.domain?.chainId ?? 0}:${verifyingContract}:${schemaHash}`;
|
|
92
97
|
|
|
93
|
-
if (shouldUseV1Filters) {
|
|
94
|
-
return
|
|
98
|
+
if (shouldUseV1Filters && staticEIP712SignaturesV1) {
|
|
99
|
+
return staticEIP712SignaturesV1[messageId] as MessageFilters | undefined;
|
|
95
100
|
}
|
|
96
|
-
|
|
101
|
+
if (!shouldUseV1Filters && staticEIP712SignaturesV2) {
|
|
102
|
+
return staticEIP712SignaturesV2[messageId] as MessageFilters | undefined;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return undefined;
|
|
97
106
|
}
|
|
98
107
|
};
|
|
99
108
|
|
|
@@ -178,13 +187,21 @@ function formatDate(timestamp: string) {
|
|
|
178
187
|
export const getEIP712FieldsDisplayedOnNano = async (
|
|
179
188
|
messageData: EIP712Message,
|
|
180
189
|
calServiceURL: string = getEnv("CAL_SERVICE_URL"),
|
|
190
|
+
staticEIP712SignaturesV1?: Record<string, any> | null,
|
|
191
|
+
staticEIP712SignaturesV2?: Record<string, any> | null,
|
|
181
192
|
): Promise<{ label: string; value: string | string[] }[] | null> => {
|
|
182
193
|
if (!isEIP712Message(messageData)) {
|
|
183
194
|
return null;
|
|
184
195
|
}
|
|
185
196
|
const { EIP712Domain, ...otherTypes } = messageData.types;
|
|
186
197
|
const displayedInfos: { label: string; value: string | string[] }[] = [];
|
|
187
|
-
const filters = await getFiltersForMessage(
|
|
198
|
+
const filters = await getFiltersForMessage(
|
|
199
|
+
messageData,
|
|
200
|
+
false,
|
|
201
|
+
calServiceURL,
|
|
202
|
+
staticEIP712SignaturesV1,
|
|
203
|
+
staticEIP712SignaturesV2,
|
|
204
|
+
);
|
|
188
205
|
|
|
189
206
|
if (!filters) {
|
|
190
207
|
const { types } = messageData;
|